Skip to content

Commit 8b2c176

Browse files
author
Zhou Xiao
committed
change(ble): implemented log module template
1 parent 56e42be commit 8b2c176

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

components/bt/common/ble_log/ble_log_spi_out.c

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,90 @@ static int spi_out_le_audio_log_init(void);
232232
static void spi_out_le_audio_log_deinit(void);
233233
#endif // SPI_OUT_LE_AUDIO_ENABLED
234234

235+
// Private templates
236+
#define IF_1(...) __VA_ARGS__
237+
#define IF_0(...)
238+
239+
#define LOG_MODULE_INIT_FLAG(ID) (ID##_log_inited)
240+
#define LOG_MODULE_CB(ID) (ID##_log_cb)
241+
#define LOG_MODULE_MUTEX(ID) (ID##_log_mutex)
242+
#define LOG_MODULE_STR_BUF(ID) (ID##_log_str_buf)
243+
#define LOG_MODULE_INIT(ID) (spi_out_##ID##_log_init)
244+
#define LOG_MODULE_DEINIT(ID) (spi_out_##ID##_log_deinit)
245+
#define LOG_MODULE_FLUSH(ID) (spi_out_##ID##_log_flush)
246+
247+
#define DECLARE_LOG_MODULE(ID, TYPE, BUF_SIZE, USE_MUTEX, USE_STR) \
248+
static bool LOG_MODULE_INIT_FLAG(ID) = false; \
249+
static spi_out_log_cb_t *LOG_MODULE_CB(ID) = NULL; \
250+
IF_##USE_MUTEX(static SemaphoreHandle_t LOG_MODULE_MUTEX(ID) = NULL;) \
251+
IF_##USE_STR(static uint8_t *LOG_MODULE_STR_BUF(ID) = NULL;) \
252+
\
253+
static int LOG_MODULE_INIT(ID)(void); \
254+
static void LOG_MODULE_DEINIT(ID)(void); \
255+
static void LOG_MODULE_FLUSH(ID)(void); \
256+
\
257+
static int LOG_MODULE_INIT(ID)(void) { \
258+
if (LOG_MODULE_INIT_FLAG(ID)) { \
259+
return 0; \
260+
} \
261+
IF_##USE_MUTEX( \
262+
LOG_MODULE_MUTEX(ID) = xSemaphoreCreateMutex(); \
263+
if (!LOG_MODULE_MUTEX(ID)) { \
264+
goto failed; \
265+
} \
266+
) \
267+
IF_##USE_STR( \
268+
LOG_MODULE_STR_BUF(ID) = (uint8_t *)SPI_OUT_MALLOC(SPI_OUT_LOG_STR_BUF_SIZE); \
269+
if (!LOG_MODULE_STR_BUF(ID)) { \
270+
goto failed; \
271+
} \
272+
) \
273+
if (spi_out_log_cb_init(&LOG_MODULE_CB(ID), BUF_SIZE, TYPE) != 0) { \
274+
goto failed; \
275+
} \
276+
LOG_MODULE_INIT_FLAG(ID) = true; \
277+
return 0; \
278+
failed: \
279+
LOG_MODULE_DEINIT(ID)(); \
280+
return -1; \
281+
} \
282+
static void LOG_MODULE_DEINIT(ID)(void) { \
283+
LOG_MODULE_INIT_FLAG(ID) = false; \
284+
IF_##USE_MUTEX( \
285+
if (!LOG_MODULE_MUTEX(ID)) { \
286+
return; \
287+
} \
288+
xSemaphoreTake(LOG_MODULE_MUTEX(ID), portMAX_DELAY); \
289+
) \
290+
IF_##USE_STR( \
291+
if (LOG_MODULE_STR_BUF(ID)) { \
292+
free(LOG_MODULE_STR_BUF(ID)); \
293+
LOG_MODULE_STR_BUF(ID) = NULL; \
294+
} \
295+
) \
296+
spi_out_log_cb_deinit(&LOG_MODULE_CB(ID)); \
297+
\
298+
IF_##USE_MUTEX( \
299+
xSemaphoreGive(LOG_MODULE_MUTEX(ID)); \
300+
vSemaphoreDelete(LOG_MODULE_MUTEX(ID)); \
301+
LOG_MODULE_MUTEX(ID) = NULL; \
302+
) \
303+
} \
304+
static void LOG_MODULE_FLUSH(ID)(void) { \
305+
if (!LOG_MODULE_INIT_FLAG(ID)) { \
306+
return; \
307+
} \
308+
IF_##USE_MUTEX( \
309+
xSemaphoreTake(LOG_MODULE_MUTEX(ID), portMAX_DELAY); \
310+
) \
311+
spi_out_log_cb_write_loss(LOG_MODULE_CB(ID)); \
312+
spi_out_log_cb_flush_trans(LOG_MODULE_CB(ID)); \
313+
spi_out_log_cb_append_trans(LOG_MODULE_CB(ID)); \
314+
IF_##USE_MUTEX( \
315+
xSemaphoreGive(LOG_MODULE_MUTEX(ID)); \
316+
) \
317+
} \
318+
235319
// Private functions
236320
static int spi_out_init_trans(spi_out_trans_cb_t **trans_cb, uint16_t buf_size)
237321
{

0 commit comments

Comments
 (0)