Skip to content

Commit 0101bcc

Browse files
committed
complete refactor AdaCallback to generic arguments
1 parent 725cea1 commit 0101bcc

File tree

7 files changed

+23
-64
lines changed

7 files changed

+23
-64
lines changed

libraries/Bluefruit52Lib/src/BLEAdvertising.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ void BLEAdvertising::_eventHandler(ble_evt_t* evt)
393393
Bluefruit._stopConnLed(); // stop blinking
394394

395395
// invoke stop callback
396-
if (_stop_cb) ada_callback_defer(NULL, _stop_cb);
396+
if (_stop_cb) ada_callback(NULL, _stop_cb);
397397
}
398398
}
399399
}

libraries/Bluefruit52Lib/src/BLECentral.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,15 +151,15 @@ void BLECentral::_event_handler(ble_evt_t* evt)
151151
if ( Bluefruit.Gap.getRole(evt_conn_hdl) == BLE_GAP_ROLE_CENTRAL)
152152
{
153153
// Invoke callback
154-
if ( _connect_cb) ada_callback_defer(NULL, _connect_cb, evt_conn_hdl);
154+
if ( _connect_cb) ada_callback(NULL, _connect_cb, evt_conn_hdl);
155155
}
156156
break;
157157

158158
case BLE_GAP_EVT_DISCONNECTED:
159159
if ( Bluefruit.Gap.getRole(evt_conn_hdl) == BLE_GAP_ROLE_CENTRAL)
160160
{
161161
// Invoke callback
162-
if ( _disconnect_cb) ada_callback_defer(NULL, _disconnect_cb, evt_conn_hdl, evt->evt.gap_evt.params.disconnected.reason);
162+
if ( _disconnect_cb) ada_callback(NULL, _disconnect_cb, evt_conn_hdl, evt->evt.gap_evt.params.disconnected.reason);
163163
}
164164
break;
165165

libraries/Bluefruit52Lib/src/BLECharacteristic.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ void BLECharacteristic::_eventHandler(ble_evt_t* event)
346346
extern void _adafruit_save_bond_cccd_dfr(uint32_t conn_handle);
347347
if ( Bluefruit.connPaired() )
348348
{
349-
ada_callback_defer(NULL, _adafruit_save_bond_cccd_dfr, event->evt.common_evt.conn_handle);
349+
ada_callback(NULL, _adafruit_save_bond_cccd_dfr, event->evt.common_evt.conn_handle);
350350
}
351351
}
352352
}

libraries/Bluefruit52Lib/src/BLEScanner.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ void BLEScanner::_eventHandler(ble_evt_t* evt)
325325

326326
ble_gap_evt_adv_report_t* adv_report = (ble_gap_evt_adv_report_t*) rtos_malloc( sizeof(ble_gap_evt_adv_report_t) );
327327
(*adv_report) = (*evt_report);
328-
if (_rx_cb) ada_callback_defer(adv_report, _rx_cb, adv_report);
328+
if (_rx_cb) ada_callback(adv_report, _rx_cb, adv_report);
329329
}
330330
break;
331331

@@ -365,7 +365,7 @@ void BLEScanner::_eventHandler(ble_evt_t* evt)
365365
case BLE_GAP_EVT_TIMEOUT:
366366
if (evt->evt.gap_evt.params.timeout.src == BLE_GAP_TIMEOUT_SRC_SCAN)
367367
{
368-
if (_stop_cb) ada_callback_defer(NULL, _stop_cb);
368+
if (_stop_cb) ada_callback(NULL, _stop_cb);
369369
}
370370
break;
371371

libraries/Bluefruit52Lib/src/bluefruit.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,7 @@ void AdafruitBluefruit::_ble_handler(ble_evt_t* evt)
590590
VERIFY_STATUS( sd_ble_gap_conn_param_update(_conn_hdl, NULL), );
591591
}
592592

593-
if (_connect_cb) ada_callback_defer(NULL, _connect_cb, _conn_hdl);
593+
if (_connect_cb) ada_callback(NULL, _connect_cb, _conn_hdl);
594594
}
595595
}
596596
break;
@@ -610,7 +610,7 @@ void AdafruitBluefruit::_ble_handler(ble_evt_t* evt)
610610
// Save all configured cccd
611611
if (_bonded) _saveBondCCCD();
612612

613-
if (_disconnect_cb) ada_callback_defer(NULL, _disconnect_cb, _conn_hdl, evt->evt.gap_evt.params.disconnected.reason);
613+
if (_disconnect_cb) ada_callback(NULL, _disconnect_cb, _conn_hdl, evt->evt.gap_evt.params.disconnected.reason);
614614

615615
_conn_hdl = BLE_CONN_HANDLE_INVALID;
616616
_bonded = false;
@@ -709,7 +709,7 @@ void AdafruitBluefruit::_ble_handler(ble_evt_t* evt)
709709
if (BLE_GAP_SEC_STATUS_SUCCESS == status->auth_status)
710710
{
711711
_bonded = true;
712-
ada_callback_defer(NULL, _adafruit_save_bond_key_dfr, _conn_hdl);
712+
ada_callback(NULL, _adafruit_save_bond_key_dfr, _conn_hdl);
713713
}else
714714
{
715715
PRINT_HEX(status->auth_status);

libraries/Bluefruit52Lib/src/utility/AdaCallback.cpp

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -54,26 +54,14 @@ void adafruit_callback_task(void* arg)
5454
void* func = cb_data->callback_func;
5555
uint32_t* args = cb_data->arguments;
5656

57-
switch(cb_data->callback_type)
57+
switch (cb_data->arg_count)
5858
{
59-
/*------------- Client Service & Chars -------------*/
60-
case BLEClientCharacteristic_notify_cb_t:
61-
((BLEClientCharacteristic::notify_cb_t) func) ( *((BLEClientCharacteristic*) args[0]), (uint8_t*) args[1], (uint16_t) args[2] );
62-
break;
63-
64-
case ADA_CB_DEFERRED_FUNC:
65-
switch (cb_data->arg_count)
66-
{
67-
case 0: ((adacb_0arg_t) func)(); break;
68-
case 1: ((adacb_1arg_t) func)(args[0]); break;
69-
case 2: ((adacb_2arg_t) func)(args[0], args[1]); break;
70-
case 3: ((adacb_3arg_t) func)(args[0], args[1], args[2]); break;
71-
case 4: ((adacb_4arg_t) func)(args[0], args[1], args[2], args[3]); break;
72-
case 5: ((adacb_5arg_t) func)(args[0], args[1], args[2], args[3], args[4]); break;
73-
74-
default: VERIFY_MESS(NRF_ERROR_INVALID_PARAM); break;
75-
}
76-
break;
59+
case 0: ((adacb_0arg_t) func)(); break;
60+
case 1: ((adacb_1arg_t) func)(args[0]); break;
61+
case 2: ((adacb_2arg_t) func)(args[0], args[1]); break;
62+
case 3: ((adacb_3arg_t) func)(args[0], args[1], args[2]); break;
63+
case 4: ((adacb_4arg_t) func)(args[0], args[1], args[2], args[3]); break;
64+
case 5: ((adacb_5arg_t) func)(args[0], args[1], args[2], args[3], args[4]); break;
7765

7866
default: VERIFY_MESS(NRF_ERROR_INVALID_PARAM); break;
7967
}

libraries/Bluefruit52Lib/src/utility/AdaCallback.h

Lines changed: 7 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -47,48 +47,23 @@ typedef struct
4747
void* malloced_data;
4848
void* callback_func;
4949

50-
uint8_t callback_type;
5150
uint8_t arg_count;
51+
// uint8_t callback_type;
5252
// uint8_t _reserved[2];
5353

5454
uint32_t arguments[1]; // flexible array holder
5555
}ada_callback_t;
5656

5757
static_assert(sizeof(ada_callback_t) == 16, "Incorrect Size");
5858

59-
/*------------- Defer -------------*/
59+
/*------------- Defer callback type, determined by number of arguments -------------*/
6060
typedef void (*adacb_0arg_t) (void);
6161
typedef void (*adacb_1arg_t) (uint32_t);
6262
typedef void (*adacb_2arg_t) (uint32_t, uint32_t);
6363
typedef void (*adacb_3arg_t) (uint32_t, uint32_t, uint32_t);
6464
typedef void (*adacb_4arg_t) (uint32_t, uint32_t, uint32_t, uint32_t);
6565
typedef void (*adacb_5arg_t) (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t);
6666

67-
/*------------------------------------------------------------------*/
68-
/* X Macros expansion for callback function
69-
* If callbacks from separated classes share the same prototype, only
70-
* one instance is enough (mandatory)
71-
*------------------------------------------------------------------*/
72-
#define ADA_CB_LOOKUP(XPAND) \
73-
XPAND(BLEClientCharacteristic , notify_cb_t ) \
74-
/*XPAND(BLEClientCharacteristic , indicate_cb_t)*/ \
75-
76-
#define ADA_CB_ENUM_XPAND(_class, _cbname) \
77-
_class##_##_cbname,
78-
79-
80-
#define ADA_CB_FUNC_XPAND(_class, _cbname) \
81-
static inline uint8_t ada_callback_type(_class::_cbname _func) { (void) _func; return _class##_##_cbname; }
82-
83-
enum
84-
{
85-
ADA_CB_LOOKUP(ADA_CB_ENUM_XPAND)
86-
87-
ADA_CB_DEFERRED_FUNC,
88-
};
89-
90-
ADA_CB_LOOKUP(ADA_CB_FUNC_XPAND)
91-
9267
/*------------------------------------------------------------------*/
9368
/* Macros to force uint32_t casting to all arguments (up to 5)
9469
*------------------------------------------------------------------*/
@@ -103,13 +78,16 @@ ADA_CB_LOOKUP(ADA_CB_FUNC_XPAND)
10378

10479
#define _ADA_CB_ARGS(...) _GET_6TH_ARG(_0, ##__VA_ARGS__, _ADA_CB_ARGS_5, _ADA_CB_ARGS_4, _ADA_CB_ARGS_3, _ADA_CB_ARGS_2, _ADA_CB_ARGS_1, _ADA_CB_ARGS_0)(__VA_ARGS__)
10580

106-
#define _ada_cb_setup(_malloced, _func, _func_type, ... ) \
81+
/**
82+
* Macro function is called by other module with all intended parameters.
83+
* The first parameter is malloced Pointer (NULL if not), so that callback could know to free memory
84+
*/
85+
#define ada_callback(_malloced, _func, ... ) \
10786
do { \
10887
uint8_t const _count = VA_ARGS_NUM(__VA_ARGS__);\
10988
ada_callback_t* cb_data = (ada_callback_t*) rtos_malloc( sizeof(ada_callback_t) + (_count ? (_count-1)*4 : 0) ); \
11089
cb_data->malloced_data = _malloced;\
11190
cb_data->callback_func = (void*)_func;\
112-
cb_data->callback_type = _func_type;\
11391
cb_data->arg_count = _count;\
11492
if ( _count ) {\
11593
uint32_t arguments[] = { _ADA_CB_ARGS(__VA_ARGS__) };\
@@ -118,13 +96,6 @@ ADA_CB_LOOKUP(ADA_CB_FUNC_XPAND)
11896
ada_callback_queue(cb_data);\
11997
} while(0)
12098

121-
/**
122-
* Macro function is called by other module with all intended parameters.
123-
* The first parameter is malloced Pointer (NULL if not), so that callback could know to free memory
124-
*/
125-
#define ada_callback(_malloced, _func , ... ) _ada_cb_setup(_malloced, _func, ada_callback_type(_func), __VA_ARGS__)
126-
#define ada_callback_defer(_malloced, _func, ...) _ada_cb_setup(_malloced, _func, ADA_CB_DEFERRED_FUNC , __VA_ARGS__)
127-
12899
void ada_callback_init(void);
129100
void ada_callback_queue(ada_callback_t* cb_data);
130101

0 commit comments

Comments
 (0)