m2mb API docs  25.30.003
m2mb API sets documentation
m2mb_os_mtx.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_MTX_H
27 #define M2MB_OS_MTX_H
28 
29 
30 /* GLOBAL DECLARATIONS ----------------------------------------------------------- */
31 #define M2MB_OS_MTX_INVALID 0
32 #define M2MB_OS_MTX_INVALID_ATTR 0
33 
34 /* Global declarations ==========================================================================*/
35 
36 /*-----------------------------------------------------------------------------------------------
37 
38  can be called directly without specify CMDS_ARGS
39  osRes = m2mb_os_mtx_setAttrItem_( &mtxAttrHandle,
40  M2MB_OS_MTX_SEL_CMD_CREATE_ATTR, NULL,
41  M2MB_OS_MTX_SEL_CMD_NAME, "myMtx1",
42  M2MB_OS_MTX_SEL_CMD_USRNAME, "myUserMtx1",
43  M2MB_OS_MTX_SEL_CMD_INHERIT, inheritVal
44  );
45  -----------------------------------------------------------------------------------------------*/
46 
47 #ifdef _WIN32
48 #define m2mb_os_mtx_setAttrItem_( h, ... ) m2mb_os_mtx_setAttrItem( h, CMDS_ARGS( __VA_ARGS__ ) )
49 #else
50 #define m2mb_os_mtx_setAttrItem_( h, args... ) m2mb_os_mtx_setAttrItem( h, CMDS_ARGS( args ) )
51 #endif
52 
53 
54 /* Global typedefs --------------------------------------------------------------- */
55 
56 typedef enum
57 {
58  M2MB_OS_MTX_SEL_CMD_CREATE_ATTR,
59  M2MB_OS_MTX_SEL_CMD_DEL_ATTR,
60  /* use as Os name during creation */
61  M2MB_OS_MTX_SEL_CMD_NAME,
62  /* if set, usr name could be different from Os during creation */
63  M2MB_OS_MTX_SEL_CMD_USRNAME,
64  /* select if priority inheritance will be active for it. To avoid priority inversion, priority of the task
65  owning the mutex will be temporarily raised to the task of the highest priority waiting for the mutex */
66  M2MB_OS_MTX_SEL_CMD_INHERIT,
67  /* high priority task first option cmd not supported: here only for backward compatibility
68  see function tx_hptf_com(...) for the desired functionality */
69  M2MB_OS_MTX_SEL_CMD_HPTF_NO_SUPPORT,
70  M2MB_OS_MTX_SEL_CMD_COUNT,
71  /* number of task suspended on this resource */
72  M2MB_OS_MTX_SEL_CMD_SUSPENDED_COUNT,
73  /* first task (M2MB_OS_TASK_HANDLE) to be served when resource will be available */
74  M2MB_OS_MTX_SEL_CMD_1ST_SUSP,
75  /* owner (M2MB_OS_TASK_HANDLE) of the resource mtxHandle */
76  M2MB_OS_MTX_SEL_CMD_OWNER,
77 
78  /* ---- */
79  M2MB_OS_MTX_SEL_CMD_END,
80  ENUM_TO_INT( M2MB_OS_MTX_SEL_CMD_E )
81 } M2MB_OS_MTX_SEL_CMD_E;
82 
83 typedef struct M2MB_OS_MTX_HANDLE_TAG *M2MB_OS_MTX_HANDLE;
84 typedef struct M2MB_OS_MTX_ATTR_HANDLE_TAG *M2MB_OS_MTX_ATTR_HANDLE;
85 
86 
87 
88 /* Global functions =============================================================================*/
89 
90 /*-----------------------------------------------------------------------------------------------*/
147 /*-----------------------------------------------------------------------------------------------*/
148 M2MB_OS_RESULT_E m2mb_os_mtx_init(
149  M2MB_OS_MTX_HANDLE *pMtxHandle,
150  M2MB_OS_MTX_ATTR_HANDLE *pMtxAttr
151 );
152 
153 /*-----------------------------------------------------------------------------------------------*/
192 /*-----------------------------------------------------------------------------------------------*/
193 M2MB_OS_RESULT_E m2mb_os_mtx_deinit( M2MB_OS_MTX_HANDLE mtxHandle );
194 
195 /*-----------------------------------------------------------------------------------------------*/
249 /*-----------------------------------------------------------------------------------------------*/
250 M2MB_OS_RESULT_E m2mb_os_mtx_get( M2MB_OS_MTX_HANDLE mtxHandle, UINT32 timeoutTicks );
251 
252 /*-----------------------------------------------------------------------------------------------*/
293 /*-----------------------------------------------------------------------------------------------*/
294 M2MB_OS_RESULT_E m2mb_os_mtx_put( M2MB_OS_MTX_HANDLE mtxHandle );
295 
296 /*-----------------------------------------------------------------------------------------------*/
340 /*-----------------------------------------------------------------------------------------------*/
341 M2MB_OS_RESULT_E m2mb_os_mtx_hptf( M2MB_OS_MTX_HANDLE mtxHandle );
342 
343 /*-----------------------------------------------------------------------------------------------*/
406 /*-----------------------------------------------------------------------------------------------*/
407 M2MB_OS_RESULT_E m2mb_os_mtx_setAttrItem(
408  M2MB_OS_MTX_ATTR_HANDLE *pMtxAttrHandle,
409  UINT8 nCmds,
410  ...
411 );
412 
413 /*-----------------------------------------------------------------------------------------------*/
481 /*-----------------------------------------------------------------------------------------------*/
482 M2MB_OS_RESULT_E m2mb_os_mtx_getItem(
483  M2MB_OS_MTX_HANDLE mtxHandle,
484  M2MB_OS_MTX_SEL_CMD_E selCmd,
485  MEM_W *pOut,
486  void *pIn
487 );
488 
489 /*-----------------------------------------------------------------------------------------------*/
529 /*-----------------------------------------------------------------------------------------------*/
530 M2MB_OS_RESULT_E m2mb_os_mtx_setItem( M2MB_OS_MTX_HANDLE mtxHandle,
531  M2MB_OS_MTX_SEL_CMD_E selCmd,
532  void *pIn
533  );
534 
535 
536 
537 #endif /* M2MB_OS_MTX_H */
m2mb_os_mtx_setAttrItem
M2MB_OS_RESULT_E m2mb_os_mtx_setAttrItem(M2MB_OS_MTX_ATTR_HANDLE *pMtxAttrHandle, UINT8 nCmds,...)
Set specific attribute for mutex creation.
m2mb_os_mtx_put
M2MB_OS_RESULT_E m2mb_os_mtx_put(M2MB_OS_MTX_HANDLE mtxHandle)
Release ownership of the mutex (if counter = 0: exit critical section)
m2mb_os_mtx_deinit
M2MB_OS_RESULT_E m2mb_os_mtx_deinit(M2MB_OS_MTX_HANDLE mtxHandle)
Mutex deinit or deletion.
m2mb_os_mtx_setItem
M2MB_OS_RESULT_E m2mb_os_mtx_setItem(M2MB_OS_MTX_HANDLE mtxHandle, M2MB_OS_MTX_SEL_CMD_E selCmd, void *pIn)
Set specific properties of the mutex.
m2mb_os_mtx_hptf
M2MB_OS_RESULT_E m2mb_os_mtx_hptf(M2MB_OS_MTX_HANDLE mtxHandle)
Prioritize mutex suspension list HPTF: Highest Priority Task First.
m2mb_os_mtx_get
M2MB_OS_RESULT_E m2mb_os_mtx_get(M2MB_OS_MTX_HANDLE mtxHandle, UINT32 timeoutTicks)
Get the ownership of the mutex (critical session enter)
m2mb_os_mtx_init
M2MB_OS_RESULT_E m2mb_os_mtx_init(M2MB_OS_MTX_HANDLE *pMtxHandle, M2MB_OS_MTX_ATTR_HANDLE *pMtxAttr)
Mutex Creation.
m2mb_os_mtx_getItem
M2MB_OS_RESULT_E m2mb_os_mtx_getItem(M2MB_OS_MTX_HANDLE mtxHandle, M2MB_OS_MTX_SEL_CMD_E selCmd, MEM_W *pOut, void *pIn)
Get specific properties of the mutex.