@@ -52,6 +52,7 @@ typedef struct
5252 void * callback_func ;
5353
5454 uint8_t arg_count ;
55+ bool from_isr ;
5556// uint8_t callback_type;
5657// uint8_t _reserved[2];
5758
@@ -86,12 +87,13 @@ typedef void (*adacb_5arg_t) (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t);
8687 * Macro function is called by other module with all intended parameters.
8788 * The first parameter is malloced Pointer (NULL if not), so that callback could know to free memory
8889 */
89- #define ada_callback ( _malloced , _func , ... ) \
90+ #define _cb_setup ( _from_isr , _malloced , _func , ... ) \
9091 do { \
9192 uint8_t const _count = VA_ARGS_NUM(__VA_ARGS__);\
9293 ada_callback_t* cb_data = (ada_callback_t*) rtos_malloc( sizeof(ada_callback_t) + (_count ? (_count-1)*4 : 0) ); \
9394 cb_data->malloced_data = _malloced;\
9495 cb_data->callback_func = (void*)_func;\
96+ cb_data->from_isr = _from_isr;\
9597 cb_data->arg_count = _count;\
9698 if ( _count ) {\
9799 uint32_t arguments[] = { _ADA_CB_ARGS(__VA_ARGS__) };\
@@ -100,6 +102,9 @@ typedef void (*adacb_5arg_t) (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t);
100102 ada_callback_queue(cb_data);\
101103 } while(0)
102104
105+ #define ada_callback (... ) _cb_setup(false, __VA_ARGS__)
106+ #define ada_callback_fromISR (... ) _cb_setup(true , __VA_ARGS__)
107+
103108void ada_callback_init (void );
104109void ada_callback_queue (ada_callback_t * cb_data );
105110
0 commit comments