Skip to content

Commit

Permalink
Switch to using runtime log levels
Browse files Browse the repository at this point in the history
  • Loading branch information
shermp committed Aug 29, 2024
1 parent 3a49d73 commit 41c364d
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 98 deletions.
20 changes: 1 addition & 19 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ FetchContent_MakeAvailable(etl)

add_executable(pico-asha
src/main.cpp
src/runtime_settings.cpp
src/asha_audio.cpp
src/asha_bt.cpp
src/hearing_aid.cpp
Expand All @@ -41,34 +42,15 @@ add_executable(pico-asha

target_include_directories(pico-asha PUBLIC src/ lib/)

option(ENABLE_BLE_LOG_ERROR "Enable error logging." OFF)
option(ENABLE_BLE_LOG_INFO "Enable info logging (default)." ON)
option(ENABLE_BLE_LOG_SCAN "Enable scan logging." OFF)
option(ENABLE_BLE_LOG_AUDIO "Enable audio logging" OFF)
option(ENABLE_BLE_AD_DUMP "Enable dumping of advertisement packet data" OFF)
option(ENABLE_HCI_DUMP "Enable HCI dump." OFF)
option(ENABLE_UAC2_LOG "Enable USB logging" OFF)
option(ENABLE_PAIR_DEL "Delete all HA pairings" OFF)
option(ENABLE_USB_SERIAL "Enable USB serial support" ON)

if(ENABLE_BLE_LOG_AUDIO)
list(APPEND pico_asha_defines "ASHA_LOG_AUDIO")
elseif(ENABLE_BLE_LOG_SCAN)
list(APPEND pico_asha_defines "ASHA_LOG_SCAN")
elseif(ENABLE_BLE_LOG_INFO)
list(APPEND pico_asha_defines "ASHA_LOG_INFO")
elseif(ENABLE_BLE_LOG_ERROR)
list(APPEND pico_asha_defines "ASHA_LOG_ERROR")
endif()

if(ENABLE_BLE_AD_DUMP)
list(APPEND pico_asha_defines "ASHA_AD_DUMP")
endif()

if(ENABLE_HCI_DUMP)
list(APPEND pico_asha_defines "ASHA_HCI_DUMP")
endif()

if (ENABLE_UAC2_LOG)
list(APPEND pico_asha_defines "CFG_TUSB_DEBUG=1")
endif()
Expand Down
7 changes: 3 additions & 4 deletions src/asha_bt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -162,17 +162,16 @@ extern "C" void bt_main()
}
sleep_ms(250);
#endif

LOG_INFO("BT ASHA starting.");
if (cyw43_arch_init()) {
LOG_ERROR("failed to initialise cyw43_arch");
return;
}

/* Start init BTStack systems */
#ifdef ASHA_HCI_DUMP
hci_dump_init(hci_dump_embedded_stdout_get_instance());
#endif
if (runtime_settings.hci_dump_enabled) {
hci_dump_init(hci_dump_embedded_stdout_get_instance());
}
/* L2CAP init required for basic btstack functionality */
LOG_INFO("L2CAP Init.");
l2cap_init();
Expand Down
105 changes: 38 additions & 67 deletions src/asha_logging.h
Original file line number Diff line number Diff line change
@@ -1,74 +1,45 @@
#pragma once

#if defined (ASHA_LOG_ERROR) || defined (ASHA_LOG_INFO) || defined (ASHA_LOG_AUDIO)
#include <stdio.h>
#include "pico/time.h"
#ifdef ASHA_HCI_DUMP
#include "hci_dump_embedded_stdout.h"
#include "btstack_debug.h"
#endif
#endif
#include "hci_dump_embedded_stdout.h"
#include "btstack_debug.h"
#include "runtime_settings.hpp"

#ifdef __cplusplus
extern "C" {
#endif
namespace asha
{

#ifdef ASHA_HCI_DUMP
#if defined (ASHA_LOG_ERROR)
#define LOG_ERROR(fmt, ...) log_error(fmt, ##__VA_ARGS__)
#define LOG_INFO(fmt, ...)
#define LOG_SCAN(fmt, ...)
#define LOG_AUDIO(fmt, ...)
#elif defined (ASHA_LOG_INFO)
#define LOG_ERROR(fmt, ...) log_info(fmt, ##__VA_ARGS__)
#define LOG_INFO(fmt, ...) log_info(fmt, ##__VA_ARGS__)
#define LOG_SCAN(fmt, ...)
#define LOG_AUDIO(fmt, ...)
#elif defined (ASHA_LOG_SCAN)
#define LOG_ERROR(fmt, ...) log_info(fmt, ##__VA_ARGS__)
#define LOG_INFO(fmt, ...) log_info(fmt, ##__VA_ARGS__)
#define LOG_SCAN(fmt, ...) log_info(fmt, ##__VA_ARGS__)
#define LOG_AUDIO(fmt, ...)
#elif defined (ASHA_LOG_AUDIO)
#define LOG_ERROR(fmt, ...) log_info(fmt, ##__VA_ARGS__)
#define LOG_INFO(fmt, ...) log_info(fmt, ##__VA_ARGS__)
#define LOG_SCAN(fmt, ...) log_info(fmt, ##__VA_ARGS__)
#define LOG_AUDIO(fmt, ...) log_info(fmt, ##__VA_ARGS__)
#else
#define LOG_ERROR(fmt, ...)
#define LOG_INFO(fmt, ...)
#define LOG_SCAN(fmt, ...)
#define LOG_AUDIO(fmt, ...)
#endif
#else
#if defined (ASHA_LOG_ERROR)
#define LOG_ERROR(fmt, ...) printf("[ASHA ERROR : %u ms] " fmt "\n", to_ms_since_boot(get_absolute_time()), ##__VA_ARGS__)
#define LOG_INFO(fmt, ...)
#define LOG_SCAN(fmt, ...)
#define LOG_AUDIO(fmt, ...)
#elif defined (ASHA_LOG_INFO)
#define LOG_ERROR(fmt, ...) printf("[ASHA ERROR : %u ms] " fmt "\n", to_ms_since_boot(get_absolute_time()), ##__VA_ARGS__)
#define LOG_INFO(fmt, ...) printf("[ASHA INFO : %u ms] " fmt "\n", to_ms_since_boot(get_absolute_time()), ##__VA_ARGS__)
#define LOG_SCAN(fmt, ...)
#define LOG_AUDIO(fmt, ...)
#elif defined (ASHA_LOG_SCAN)
#define LOG_ERROR(fmt, ...) printf("[ASHA ERROR : %u ms] " fmt "\n", to_ms_since_boot(get_absolute_time()), ##__VA_ARGS__)
#define LOG_INFO(fmt, ...) printf("[ASHA INFO : %u ms] " fmt "\n", to_ms_since_boot(get_absolute_time()), ##__VA_ARGS__)
#define LOG_SCAN(fmt, ...) printf("[ASHA SCAN : %u ms] " fmt "\n", to_ms_since_boot(get_absolute_time()), ##__VA_ARGS__)
#define LOG_AUDIO(fmt, ...)
#elif defined (ASHA_LOG_AUDIO)
#define LOG_ERROR(fmt, ...) printf("[ASHA ERROR : %u ms] " fmt "\n", to_ms_since_boot(get_absolute_time()), ##__VA_ARGS__)
#define LOG_INFO(fmt, ...) printf("[ASHA INFO : %u ms] " fmt "\n", to_ms_since_boot(get_absolute_time()), ##__VA_ARGS__)
#define LOG_SCAN(fmt, ...) printf("[ASHA SCAN : %u ms] " fmt "\n", to_ms_since_boot(get_absolute_time()), ##__VA_ARGS__)
#define LOG_AUDIO(fmt, ...) printf("[ASHA AUDIO : %u ms] " fmt "\n", to_ms_since_boot(get_absolute_time()), ##__VA_ARGS__)
#else
#define LOG_ERROR(fmt, ...)
#define LOG_INFO(fmt, ...)
#define LOG_SCAN(fmt, ...)
#define LOG_AUDIO(fmt, ...)
#endif
#endif

#ifdef __cplusplus
#define asha_log(level, fmt, ...) if (runtime_settings.hci_dump_enabled) { \
switch ((level)) { \
case LogLevel::Error: \
log_error(fmt, ##__VA_ARGS__); \
break; \
case LogLevel::Info: \
case LogLevel::Scan: \
case LogLevel::Audio: \
log_info(fmt, ##__VA_ARGS__); \
break; \
} \
} else { \
switch ((level)) { \
case LogLevel::Error: \
printf("[ASHA ERROR : %u ms] " fmt "\n", to_ms_since_boot(get_absolute_time()), ##__VA_ARGS__); \
break; \
case LogLevel::Info: \
printf("[ASHA INFO : %u ms] " fmt "\n", to_ms_since_boot(get_absolute_time()), ##__VA_ARGS__); \
break; \
case LogLevel::Scan: \
printf("[ASHA SCAN : %u ms] " fmt "\n", to_ms_since_boot(get_absolute_time()), ##__VA_ARGS__); \
break; \
case LogLevel::Audio: \
printf("[ASHA AUDIO : %u ms] " fmt "\n", to_ms_since_boot(get_absolute_time()), ##__VA_ARGS__); \
break; \
} \
}
#endif

#define LOG_ERROR(fmt, ...) if (runtime_settings.log_level >= LogLevel::Error) asha_log(LogLevel::Error, fmt, ##__VA_ARGS__)
#define LOG_INFO(fmt, ...) if (runtime_settings.log_level >= LogLevel::Info) asha_log(LogLevel::Info, fmt, ##__VA_ARGS__)
#define LOG_SCAN(fmt, ...) if (runtime_settings.log_level >= LogLevel::Scan) asha_log(LogLevel::Scan, fmt, ##__VA_ARGS__)
#define LOG_AUDIO(fmt, ...) if (runtime_settings.log_level >= LogLevel::Audio) asha_log(LogLevel::Audio, fmt, ##__VA_ARGS__)

} // namespace asha
19 changes: 11 additions & 8 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

#include "asha_unique_id.hpp"
#include "asha_audio.hpp"
#include "runtime_settings.hpp"

namespace asha
{
Expand All @@ -18,16 +19,25 @@ async_when_pending_worker_t bt_audio_pending_worker = {};

char pico_uid[pico_uid_size];

RuntimeSettings runtime_settings = {};

// extern "C" required by multicore_launch_core1
extern "C" void bt_main();

void usb_main();

extern "C" int main()
{
// Apparently there be dragons when using flash and
// multicore. And guess where BTStack saves pairing
// info? Calling this function on the current core
// (core 0) should make it work.
flash_safe_execute_core_init();
// Init global shared variables
patom::PseudoAtomicInit();
audio_buff.init();
runtime_settings.init();
runtime_settings.get_settings();
// Get serial
pico_get_unique_board_id_string(pico_uid, sizeof pico_uid);
#ifdef ASHA_USB_SERIAL
Expand All @@ -41,14 +51,7 @@ extern "C" int main()

stdio_init_all();
sleep_ms(2000);
// Apparently there be dragons when using flash and
// multicore. And guess where BTStack saves pairing
// info? Calling this function on the current core
// (core 0) should make it work.
if (!flash_safe_execute_core_init()) {
printf("flash_safe_execute_core_init failed."
"Pairing data will not be saved.\n");
}

multicore_launch_core1(bt_main);

sleep_ms(1000);
Expand Down

0 comments on commit 41c364d

Please sign in to comment.