m2mb API docs  25.30.006.0
m2mb API sets documentation
m2mb_os_sem.h
Go to the documentation of this file.
1 /* $version: 252304 */
2 /*===============================================================================================*/
3 /* >>> Copyright (C) Telit Communications S.p.A. Italy All Rights Reserved. <<< */
27 #ifndef M2MB_OS_SEM_H
28 #define M2MB_OS_SEM_H
29 
30 
31 /* Global declarations ==========================================================================*/
32 #define M2MB_OS_SEM_INVALID 0
33 #define M2MB_OS_SEM_INVALID_ATTR 0
34 
35 /*-----------------------------------------------------------------------------------------------
36 
37  can be called directly without specify CMDS_ARGS
38  osRes = m2mb_os_sem_setAttrItem_( &semAttrHandle,
39  M2MB_OS_SEM_SEL_CMD_CREATE_ATTR, NULL,
40  M2MB_OS_SEM_SEL_CMD_COUNT, initVal,
41  M2MB_OS_SEM_SEL_CMD_TYPE, M2MB_OS_SEM_GEN,
42  M2MB_OS_SEM_SEL_CMD_NAME, "MySem"
43  );
44  -----------------------------------------------------------------------------------------------*/
45 #ifdef _WIN32
46 #define m2mb_os_sem_setAttrItem_( h, ... ) m2mb_os_sem_setAttrItem( h, CMDS_ARGS( __VA_ARGS__ ) )
47 #else
48 #define m2mb_os_sem_setAttrItem_( h, args... ) m2mb_os_sem_setAttrItem( h, CMDS_ARGS( args ) )
49 #endif
50 
51 /* Global typedefs --------------------------------------------------------------- */
52 typedef enum
53 {
54  /* not limited counter value: could overflow and restart with 0 */
55  M2MB_OS_SEM_GEN,
56  /* counter limited to 1 */
57  M2MB_OS_SEM_BINARY,
58  /* counter limited to defined value */
59  M2MB_OS_SEM_COUNTING,
60 
61  M2MB_OS_SEM_MAX,
62  ENUM_TO_INT( M2MB_OS_SEM_TYPE_E )
63 } M2MB_OS_SEM_TYPE_E;
64 
65 typedef enum
66 {
67  M2MB_OS_SEM_SEL_CMD_CREATE_ATTR,
68  M2MB_OS_SEM_SEL_CMD_DEL_ATTR,
69  /* use as Os name, available during creation */
70  M2MB_OS_SEM_SEL_CMD_NAME,
71  /* if set, usr name could be different from Os during creation */
72  M2MB_OS_SEM_SEL_CMD_USRNAME,
73  /* type of semaphore: see M2MB_OS_SEM_TYPE_E */
74  M2MB_OS_SEM_SEL_CMD_TYPE,
75  /* max counter value has effect for M2MB_OS_SEM_COUNTING type only */
76  M2MB_OS_SEM_SEL_CMD_MAX_COUNT,
77  /* High Priority Task First: every put will move highest priority task on top of FIFO */
78  M2MB_OS_SEM_SEL_CMD_HPTF,
79  /* curren semaphore counting value */
80  M2MB_OS_SEM_SEL_CMD_COUNT,
81  /* number of task suspended on this resource */
82  M2MB_OS_SEM_SEL_CMD_SUSPENDED_COUNT,
83  /* first task (M2MB_OS_TASK_HANDLE) to be served when resource will be available */
84  M2MB_OS_SEM_SEL_CMD_1ST_SUSP,
85 
86  /* ---- */
87  M2MB_OS_SEM_SEL_CMD_END,
88  ENUM_TO_INT( M2MB_OS_SEM_SEL_CMD_E )
89 } M2MB_OS_SEM_SEL_CMD_E;
90 
91 typedef struct M2MB_OS_SEM_HANDLE_TAG *M2MB_OS_SEM_HANDLE;
92 typedef struct M2MB_OS_SEM_ATTR_HANDLE_TAG *M2MB_OS_SEM_ATTR_HANDLE;
93 
94 
95 /* Global functions =============================================================================*/
96 
97 
98 /*-----------------------------------------------------------------------------------------------*/
179 /*-----------------------------------------------------------------------------------------------*/
180 M2MB_OS_RESULT_E m2mb_os_sem_init(
181  M2MB_OS_SEM_HANDLE *pSemHandle,
182  M2MB_OS_SEM_ATTR_HANDLE *pSemAttr
183 );
184 
185 /*-----------------------------------------------------------------------------------------------*/
225 /*-----------------------------------------------------------------------------------------------*/
226 M2MB_OS_RESULT_E m2mb_os_sem_deinit( M2MB_OS_SEM_HANDLE semHandle );
227 
228 /*-----------------------------------------------------------------------------------------------*/
279 /*-----------------------------------------------------------------------------------------------*/
280 M2MB_OS_RESULT_E m2mb_os_sem_get( M2MB_OS_SEM_HANDLE semHandle, UINT32 timeoutTicks );
281 
282 /*-----------------------------------------------------------------------------------------------*/
324 /*-----------------------------------------------------------------------------------------------*/
325 M2MB_OS_RESULT_E m2mb_os_sem_put( M2MB_OS_SEM_HANDLE semHandle );
326 
327 /*-----------------------------------------------------------------------------------------------*/
374 /*-----------------------------------------------------------------------------------------------*/
375 M2MB_OS_RESULT_E m2mb_os_sem_hptf( M2MB_OS_SEM_HANDLE semHandle );
376 
377 /*-----------------------------------------------------------------------------------------------*/
474 /*-----------------------------------------------------------------------------------------------*/
475 M2MB_OS_RESULT_E m2mb_os_sem_setAttrItem( M2MB_OS_SEM_ATTR_HANDLE *pSemAttrHandle,
476  UINT8 nCmds,
477  ...
478  );
479 
480 /*-----------------------------------------------------------------------------------------------*/
557 /*-----------------------------------------------------------------------------------------------*/
558 M2MB_OS_RESULT_E m2mb_os_sem_getItem( M2MB_OS_SEM_HANDLE semHandle,
559  M2MB_OS_SEM_SEL_CMD_E selCmd,
560  MEM_W *pOut,
561  void *pIn
562  );
563 
564 /*-----------------------------------------------------------------------------------------------*/
613 /*-----------------------------------------------------------------------------------------------*/
614 M2MB_OS_RESULT_E m2mb_os_sem_setItem( M2MB_OS_SEM_HANDLE semHandle,
615  M2MB_OS_SEM_SEL_CMD_E selCmd,
616  void *pIn
617  );
618 
619 #endif /* M2MB_OS_SEM_H */
m2mb_os_sem_get
M2MB_OS_RESULT_E m2mb_os_sem_get(M2MB_OS_SEM_HANDLE semHandle, UINT32 timeoutTicks)
Get an instance of semaphore.
m2mb_os_sem_hptf
M2MB_OS_RESULT_E m2mb_os_sem_hptf(M2MB_OS_SEM_HANDLE semHandle)
Prioritize semaphore suspension list HPTF: Highest Priority Task First.
m2mb_os_sem_init
M2MB_OS_RESULT_E m2mb_os_sem_init(M2MB_OS_SEM_HANDLE *pSemHandle, M2MB_OS_SEM_ATTR_HANDLE *pSemAttr)
Semaphore creation.
m2mb_os_sem_put
M2MB_OS_RESULT_E m2mb_os_sem_put(M2MB_OS_SEM_HANDLE semHandle)
Place (put) an instance in semaphore.
m2mb_os_sem_deinit
M2MB_OS_RESULT_E m2mb_os_sem_deinit(M2MB_OS_SEM_HANDLE semHandle)
Semaphore deinit or deletion.
m2mb_os_sem_getItem
M2MB_OS_RESULT_E m2mb_os_sem_getItem(M2MB_OS_SEM_HANDLE semHandle, M2MB_OS_SEM_SEL_CMD_E selCmd, MEM_W *pOut, void *pIn)
Get specific semaphore properties.
m2mb_os_sem_setAttrItem
M2MB_OS_RESULT_E m2mb_os_sem_setAttrItem(M2MB_OS_SEM_ATTR_HANDLE *pSemAttrHandle, UINT8 nCmds,...)
Set semaphore attribute for creation.
m2mb_os_sem_setItem
M2MB_OS_RESULT_E m2mb_os_sem_setItem(M2MB_OS_SEM_HANDLE semHandle, M2MB_OS_SEM_SEL_CMD_E selCmd, void *pIn)
Set specific semaphore properties.