aboutsummaryrefslogtreecommitdiffstats
path: root/ucs2-lib/inc/ucs_xrmpool.h
blob: 2cea2f62fdd316a164b64151718eeac5d4e89962 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/*------------------------------------------------------------------------------------------------*/
/* UNICENS V2.1.0-3491                                                                            */
/* Copyright (c) 2017 Microchip Technology Germany II GmbH & Co. KG.                              */
/*                                                                                                */
/* This program is free software: you can redistribute it and/or modify                           */
/* it under the terms of the GNU General Public License as published by                           */
/* the Free Software Foundation, either version 2 of the License, or                              */
/* (at your option) any later version.                                                            */
/*                                                                                                */
/* This program is distributed in the hope that it will be useful,                                */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of                                 */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                  */
/* GNU General Public License for more details.                                                   */
/*                                                                                                */
/* You should have received a copy of the GNU General Public License                              */
/* along with this program.  If not, see <http://www.gnu.org/licenses/>.                          */
/*                                                                                                */
/* You may also obtain this software under a propriety license from Microchip.                    */
/* Please contact Microchip for further information.                                              */
/*------------------------------------------------------------------------------------------------*/

/*!
 * \file
 * \brief Internal header file of the Connection Storage Pool.
 *
 * \cond UCS_INTERNAL_DOC
 * \addtogroup G_UCS_XRM_INT
 * @{
 */


#ifndef UCS_XRMPOOL_H
#define UCS_XRMPOOL_H

/*------------------------------------------------------------------------------------------------*/
/* Includes                                                                                       */
/*------------------------------------------------------------------------------------------------*/
#include "ucs_xrm_pb.h"
#include "ucs_dl.h"

#ifdef __cplusplus
extern "C"
{
#endif

/*------------------------------------------------------------------------------------------------*/
/* Type definitions                                                                               */
/*------------------------------------------------------------------------------------------------*/
/*! \brief Callback signature used by foreach-function for the resources list
 *  \param rc_ptr    Reference to a resource object in the list
 *  \param ud_ptr1   Reference to the user data 1
 *  \param ud_ptr2   Reference to the user data 2
 *  \param ud_ptr3   Reference to the user data 3
 *  \return true: Stop the for-each-loop
 *  \return false: Continue the for-each-loop
 */
typedef bool (*Xrmp_ForeachFunc_t)(void *rc_ptr, void *ud_ptr1, void *ud_ptr2, void *ud_ptr3);

/*! \brief Callback signature used by _GetResourceHandle-function to check whether found resources belongs to provided jobs list
 *  \param xrm_inst  Reference to the XRM instance to be looked for
 *  \param job_ptr   Reference to the job list to be checked
 *  \return true:    Stop the for-each-loop since given job matches, otherwise
 *  \return false:   Continue the for-each-loop in order to catch new jobs.
 */
typedef bool (*Xrmp_CheckJobListFunc_t)(void * xrm_inst, void * job_ptr);

/*! \brief  Function signature used for the results and reports of the Extended Resource Manager.
 *  \param  node_address        The node address from which the results come 
 *  \param  connection_label    Returned MOST network connection label
 *  \param  result              Result of the job
 *  \param  user_arg            Reference to the user argument
 *  \ingroup G_UCS_IRM
 */
typedef void (*Ucs_Xrm_ReportCb_t)(uint16_t node_address, uint16_t connection_label, Ucs_Xrm_Result_t result, void * user_arg);

/*------------------------------------------------------------------------------------------------*/
/* Structures                                                                                     */
/*------------------------------------------------------------------------------------------------*/
/*! \brief  Structure that defines a job of the Extended Resource Manager. */
typedef struct Xrm_Job_
{
    /*! \brief Reference to resource object list */
    UCS_XRM_CONST Ucs_Xrm_ResObject_t **resource_object_list_ptr;
    /*! \brief Report callback of the job */
    Ucs_Xrm_ReportCb_t report_fptr;
    /*! \brief User defined MOST connection label */
    uint16_t most_network_connection_label;
    /*! \brief MOST connection label, returned during MOST socket creation */
    uint16_t connection_label;
    /*!< \brief Node required for jobs pool */
    CDlNode node;
    /*! \brief address of the device in which the job is built */
    bool sync_lost;
    /*! \brief State of the job (valid/invalid) */
    bool valid;
    /*! \brief Notification flag */
    bool notify;
    /*!< \brief user argument */
    void * user_arg;

} Xrm_Job_t;

/*! \brief  Structure that defines an item of the resource handle list. */
typedef struct Xrm_ResourceHandleListItem_
{
    /*! \brief Reference to the job */
    Xrm_Job_t *job_ptr;
    /*! \brief Reference to the resource object */
    UCS_XRM_CONST Ucs_Xrm_ResObject_t *resource_object_ptr;
    /*! \brief INIC Resource handle */
    uint16_t resource_handle;

} Xrm_ResourceHandleListItem_t;

/*! \brief  Class structure of the Storage Pool of XRM Jobs and Resources. */
typedef struct CXrmPool_
{
    /*! \brief Job list */
    Xrm_Job_t job_list[XRM_NUM_JOBS];
    /*! \brief List of resource handles */
    Xrm_ResourceHandleListItem_t resource_handle_list[XRM_NUM_RESOURCE_HANDLES];
    /*!< \brief Reference to the resource identification table */
    Ucs_Xrm_ResIdentity_t * res_id_ptr;
    /*! \brief Size of the resources Id table.
     */
    uint16_t res_id_size;

} CXrmPool;

/*------------------------------------------------------------------------------------------------*/
/* Prototypes of class CXrmPool                                                                   */
/*------------------------------------------------------------------------------------------------*/
extern void Xrmp_Ctor(CXrmPool * self);
extern bool Xrmp_StoreResourceHandle(CXrmPool * self_ptr, uint16_t resource_handle, Xrm_Job_t * job_ptr, UCS_XRM_CONST Ucs_Xrm_ResObject_t * resource_object_ptr);
extern uint16_t Xrmp_GetResourceHandle(CXrmPool * self, Xrm_Job_t * job_ptr, UCS_XRM_CONST Ucs_Xrm_ResObject_t * resource_object_ptr, Xrmp_CheckJobListFunc_t func_ptr, void * usr_ptr);
extern uint8_t Xrmp_GetResourceHandleIdx(CXrmPool *self, Xrm_Job_t *job_ptr, UCS_XRM_CONST Ucs_Xrm_ResObject_t **obj_pptr);
extern Xrm_Job_t * Xrmp_GetJob(CXrmPool * self, UCS_XRM_CONST Ucs_Xrm_ResObject_t * resource_object_list[]);
extern void Xrmp_Foreach(CXrmPool *self, Xrmp_ForeachFunc_t func_ptr, void *user_data_ptr1, void *user_data_ptr2, void *user_data_ptr3);

#ifdef __cplusplus
}   /* extern "C" */
#endif

#endif /* #ifndef UCS_XRMPOOL_H */

/*!
 * @}
 * \endcond
 */

/*------------------------------------------------------------------------------------------------*/
/* End of file                                                                                    */
/*------------------------------------------------------------------------------------------------*/