m2mb API docs  25.21.002
m2mb API sets documentation
m2mb_os_sem.h
Go to the documentation of this file.
1 /*===============================================================================================*/
2 /* >>> Copyright (C) Telit Communications S.p.A. Italy All Rights Reserved. <<< */
26 #ifndef M2MB_OS_SEM_H
27 #define M2MB_OS_SEM_H
28 
29 
30 /* Global declarations ==========================================================================*/
31 #define M2MB_OS_SEM_INVALID 0
32 #define M2MB_OS_SEM_INVALID_ATTR 0
33 
34 /*-----------------------------------------------------------------------------------------------
35 
36  can be called directly without specify CMDS_ARGS
37  osRes = m2mb_os_sem_setAttrItem_( &semAttrHandle,
38  M2MB_OS_SEM_SEL_CMD_CREATE_ATTR, NULL,
39  M2MB_OS_SEM_SEL_CMD_COUNT, initVal,
40  M2MB_OS_SEM_SEL_CMD_TYPE, M2MB_OS_SEM_GEN,
41  M2MB_OS_SEM_SEL_CMD_NAME, "MySem"
42  );
43  -----------------------------------------------------------------------------------------------*/
44 #ifdef _WIN32
45 #define m2mb_os_sem_setAttrItem_( h, ... ) m2mb_os_sem_setAttrItem( h, CMDS_ARGS( __VA_ARGS__ ) )
46 #else
47 #define m2mb_os_sem_setAttrItem_( h, args... ) m2mb_os_sem_setAttrItem( h, CMDS_ARGS( args ) )
48 #endif
49 
50 /* Global typedefs --------------------------------------------------------------- */
51 typedef enum
52 {
53  /* not limited counter value: could overflow and restart with 0 */
54  M2MB_OS_SEM_GEN,
55  /* counter limited to 1 */
56  M2MB_OS_SEM_BINARY,
57  /* counter limited to defined value */
58  M2MB_OS_SEM_COUNTING,
59 
60  M2MB_OS_SEM_MAX,
61  ENUM_TO_INT( M2MB_OS_SEM_TYPE_E )
62 } M2MB_OS_SEM_TYPE_E;
63 
64 typedef enum
65 {
66  M2MB_OS_SEM_SEL_CMD_CREATE_ATTR,
67  M2MB_OS_SEM_SEL_CMD_DEL_ATTR,
68  /* use as Os name, available during creation */
69  M2MB_OS_SEM_SEL_CMD_NAME,
70  /* if set, usr name could be different from Os during creation */
71  M2MB_OS_SEM_SEL_CMD_USRNAME,
72  /* type of semaphore: see M2MB_OS_SEM_TYPE_E */
73  M2MB_OS_SEM_SEL_CMD_TYPE,
74  /* max counter value has effect for M2MB_OS_SEM_COUNTING type only */
75  M2MB_OS_SEM_SEL_CMD_MAX_COUNT,
76  /* High Priority Task First: every put will move highest priority task on top of FIFO */
77  M2MB_OS_SEM_SEL_CMD_HPTF,
78  /* curren semaphore counting value */
79  M2MB_OS_SEM_SEL_CMD_COUNT,
80  /* number of task suspended on this resource. No support */
81  M2MB_OS_SEM_SEL_CMD_SUSPENDED_COUNT,
82  /* first task (M2MB_OS_TASK_HANDLE) to be served when resource will be available. No support */
83  M2MB_OS_SEM_SEL_CMD_1ST_SUSP,
84 
85  /* ---- */
86  M2MB_OS_SEM_SEL_CMD_END,
87  ENUM_TO_INT( M2MB_OS_SEM_SEL_CMD_E )
88 } M2MB_OS_SEM_SEL_CMD_E;
89 
90 typedef struct M2MB_OS_SEM_HANDLE_TAG *M2MB_OS_SEM_HANDLE;
91 typedef struct M2MB_OS_SEM_ATTR_HANDLE_TAG *M2MB_OS_SEM_ATTR_HANDLE;
92 
93 
94 /* Global functions =============================================================================*/
95 
96 
97 /*-----------------------------------------------------------------------------------------------*/
178 /*-----------------------------------------------------------------------------------------------*/
179 M2MB_OS_RESULT_E m2mb_os_sem_init(
180  M2MB_OS_SEM_HANDLE *pSemHandle,
181  M2MB_OS_SEM_ATTR_HANDLE *pSemAttr
182 );
183 
184 /*-----------------------------------------------------------------------------------------------*/
224 /*-----------------------------------------------------------------------------------------------*/
225 M2MB_OS_RESULT_E m2mb_os_sem_deinit( M2MB_OS_SEM_HANDLE semHandle );
226 
227 /*-----------------------------------------------------------------------------------------------*/
278 /*-----------------------------------------------------------------------------------------------*/
279 M2MB_OS_RESULT_E m2mb_os_sem_get( M2MB_OS_SEM_HANDLE semHandle, UINT32 timeoutTicks );
280 
281 /*-----------------------------------------------------------------------------------------------*/
323 /*-----------------------------------------------------------------------------------------------*/
324 M2MB_OS_RESULT_E m2mb_os_sem_put( M2MB_OS_SEM_HANDLE semHandle );
325 
326 /*-----------------------------------------------------------------------------------------------*/
369 /*-----------------------------------------------------------------------------------------------*/
370 M2MB_OS_RESULT_E m2mb_os_sem_hptf( M2MB_OS_SEM_HANDLE semHandle );
371 
372 /*-----------------------------------------------------------------------------------------------*/
467 /*-----------------------------------------------------------------------------------------------*/
468 M2MB_OS_RESULT_E m2mb_os_sem_setAttrItem(
469  M2MB_OS_SEM_ATTR_HANDLE *pSemAttrHandle,
470  UINT8 nCmds,
471  ...
472 );
473 
474 /*-----------------------------------------------------------------------------------------------*/
551 /*-----------------------------------------------------------------------------------------------*/
552 M2MB_OS_RESULT_E m2mb_os_sem_getItem( M2MB_OS_SEM_HANDLE semHandle,
553  M2MB_OS_SEM_SEL_CMD_E selCmd,
554  MEM_W *pOut,
555  void *pIn
556  );
557 
558 /*-----------------------------------------------------------------------------------------------*/
607 /*-----------------------------------------------------------------------------------------------*/
608 M2MB_OS_RESULT_E m2mb_os_sem_setItem(
609  M2MB_OS_SEM_HANDLE semHandle,
610  M2MB_OS_SEM_SEL_CMD_E selCmd,
611  void *pIn
612 );
613 
614 #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.