m2mb API docs  37.00.005.1
m2mb API sets documentation
m2mb_os_sem.h
Go to the documentation of this file.
1 /* $version: 372239T2_R1 */
2 /*===============================================================================================*/
3 /* >>> Copyright (C) Telit Communications S.p.A. Italy All Rights Reserved. <<< */
29 #ifndef M2MB_OS_SEM_H
30 #define M2MB_OS_SEM_H
31 
32 
33 /* Global declarations ==========================================================================*/
34 #define M2MB_OS_SEM_INVALID 0
35 #define M2MB_OS_SEM_INVALID_ATTR 0
36 
37 /*-----------------------------------------------------------------------------------------------
38  can be called directly without specify CMDS_ARGS
39  osRes = m2mb_os_sem_setAttrItem_( &semAttrHandle,
40  M2MB_OS_SEM_SEL_CMD_CREATE_ATTR, NULL,
41  M2MB_OS_SEM_SEL_CMD_COUNT, initVal,
42  M2MB_OS_SEM_SEL_CMD_TYPE, M2MB_OS_SEM_GEN,
43  M2MB_OS_SEM_SEL_CMD_NAME, "MySem"
44  );
45  -----------------------------------------------------------------------------------------------*/
46 #ifdef _WIN32
47 #define m2mb_os_sem_setAttrItem_( h, ... ) m2mb_os_sem_setAttrItem( h, CMDS_ARGS( __VA_ARGS__ ) )
48 #else
49 #define m2mb_os_sem_setAttrItem_( h, args... ) m2mb_os_sem_setAttrItem( h, CMDS_ARGS( args ) )
50 #endif
51 /* Global typedefs --------------------------------------------------------------- */
52 
53 
54 typedef enum
55 {
56  /* not limited counter value: could overflow and restart with 0 */
57  M2MB_OS_SEM_GEN,
58  /* counter limited to 1 */
59  M2MB_OS_SEM_BINARY,
60  /* counter limited to defined value */
61  M2MB_OS_SEM_COUNTING,
62 
63  M2MB_OS_SEM_MAX,
64  ENUM_TO_INT( M2MB_OS_SEM_TYPE_E )
65 } M2MB_OS_SEM_TYPE_E;
66 
67 typedef enum
68 {
69  M2MB_OS_SEM_SEL_CMD_CREATE_ATTR,
70  M2MB_OS_SEM_SEL_CMD_DEL_ATTR,
71  /* use as Os name, available during creation */
72  M2MB_OS_SEM_SEL_CMD_NAME,
73  /* if set, usr name could be different from Os during creation */
74  M2MB_OS_SEM_SEL_CMD_USRNAME,
75  /* type of semaphore: see M2MB_OS_SEM_TYPE_E */
76  M2MB_OS_SEM_SEL_CMD_TYPE,
77  /* max counter value has effect for M2MB_OS_SEM_COUNTING type only */
78  M2MB_OS_SEM_SEL_CMD_MAX_COUNT,
79  /* High Priority Task First: every put will move highest priority task on top of FIFO */
80  M2MB_OS_SEM_SEL_CMD_HPTF,
81  /* curren semaphore counting value */
82  M2MB_OS_SEM_SEL_CMD_COUNT,
83  /* number of task suspended on this resource */
84  M2MB_OS_SEM_SEL_CMD_SUSPENDED_COUNT,
85  /* first task (M2MB_OS_TASK_HANDLE) to be served when resource will be available */
86  M2MB_OS_SEM_SEL_CMD_1ST_SUSP,
87 
88  /* ---- */
89  M2MB_OS_SEM_SEL_CMD_END,
90  ENUM_TO_INT( M2MB_OS_SEM_SEL_CMD_E )
91 } M2MB_OS_SEM_SEL_CMD_E;
92 
93 typedef struct M2MB_OS_SEM_HANDLE_TAG *M2MB_OS_SEM_HANDLE;
94 typedef struct M2MB_OS_SEM_ATTR_HANDLE_TAG *M2MB_OS_SEM_ATTR_HANDLE;
95 /* Global functions =============================================================================*/
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 /*-----------------------------------------------------------------------------------------------*/
373 /*-----------------------------------------------------------------------------------------------*/
374 M2MB_OS_RESULT_E m2mb_os_sem_hptf( M2MB_OS_SEM_HANDLE semHandle );
375 
376 /*-----------------------------------------------------------------------------------------------*/
473 /*-----------------------------------------------------------------------------------------------*/
474 M2MB_OS_RESULT_E m2mb_os_sem_setAttrItem( M2MB_OS_SEM_ATTR_HANDLE *pSemAttrHandle,
475  UINT8 nCmds,
476  ...
477  );
478 
479 /*-----------------------------------------------------------------------------------------------*/
556 /*-----------------------------------------------------------------------------------------------*/
557 M2MB_OS_RESULT_E m2mb_os_sem_getItem( M2MB_OS_SEM_HANDLE semHandle,
558  M2MB_OS_SEM_SEL_CMD_E selCmd,
559  MEM_W *pOut,
560  void *pIn
561  );
562 
563 /*-----------------------------------------------------------------------------------------------*/
612 /*-----------------------------------------------------------------------------------------------*/
613 M2MB_OS_RESULT_E m2mb_os_sem_setItem( M2MB_OS_SEM_HANDLE semHandle,
614  M2MB_OS_SEM_SEL_CMD_E selCmd,
615  void *pIn
616  );
617 
618 #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.