17static const char*
TAG =
"BLE_SERIAL";
22 {
"mod_ble_serial.title",
"BLE Serial"},
23 {
"mod_ble_serial.enabled",
"Enabled"},
24 {
"mod_ble_serial.disabled",
"Disabled"},
27void BleSerialModule::registerStrings() {
41 if (uart.isConnected() && uart.isInitialized()) {
42 uart.send(
reinterpret_cast<const uint8_t*
>(data), len);
52 return uart.isConnected() && uart.available() > 0;
61 return uart.getchar();
67void BleSerialModule::registerConsoleHooks() {
70 LOG_I(
TAG,
"Console hooks registered");
76void BleSerialModule::unregisterConsoleHooks() {
79 LOG_I(
TAG,
"Console hooks unregistered");
85void BleSerialModule::registerPairingCallback() {
93void BleSerialModule::loadSettings() {
95 if (nvs_open(NVS_NAMESPACE, NVS_READONLY, &nvs) == ESP_OK) {
97 if (nvs_get_u8(nvs,
"enabled", &val) == ESP_OK) {
98 enabled_ = (val != 0);
107void BleSerialModule::saveSettings() {
109 if (nvs_open(NVS_NAMESPACE, NVS_READWRITE, &nvs) == ESP_OK) {
110 nvs_set_u8(nvs,
"enabled", enabled_ ? 1 : 0);
123 static BleSerialModule inst;
132 LOG_I(
TAG,
"Initializing BLE Serial module");
154 if (ble && ble->isEnabled()) {
157 registerConsoleHooks();
158 registerPairingCallback();
159 LOG_I(
TAG,
"BLE Serial service started");
173 unregisterConsoleHooks();
189 if (!ble->isEnabled()) {
194 enabled_ = !enabled_;
200 registerConsoleHooks();
201 registerPairingCallback();
209 unregisterConsoleHooks();
222 if (!items || maxItems == 0)
return 0;
225 snprintf(labelBuf_, LABEL_BUF_SIZE,
"%s: %s",
226 ui::tr(
"mod_ble_serial.title"),
227 enabled_ ?
ui::tr(
"mod_ble_serial.enabled") :
ui::tr(
"mod_ble_serial.disabled"));
229 items[0].
label = labelBuf_;
257 auto&
module = cdc::mod_ble_serial::BleSerialModule::instance();
259 moduleReg.registerModule(&module);
261 if (!module.init()) {
262 moduleReg.reportModuleError(module.getName(),
"Init failed");
void mod_ble_serial_register()
Registers BLE serial module initializer.
Internationalization with English fallbacks in code and overlay translations loaded at runtime from a...
CDC Log: logging over TinyUSB CDC and UART.
void console_register_input_hook(console_input_available_hook_t avail_hook, console_input_getchar_hook_t getchar_hook)
Registers the console input hooks (only one set supported at a time).
#define LOG_I(tag, fmt,...)
void console_register_output_hook(console_output_hook_t hook)
Registers the console output hook (only one supported at a time).
static ModuleRegistry & instance()
Returns the singleton module registry instance.
void registerInitializer(ModuleInitFunc initFunc)
Registers a deferred module initializer callback.
static BleSerialModule & instance()
BLE serial module lifecycle implementation.
uint8_t getMenuItems(core::ModuleMenuItem *items, uint8_t maxItems) override
Provides Bluetooth-menu item for BLE serial toggle.
bool start() override
Starts BLE serial module and optionally auto-enables service.
void onTick(uint32_t nowMs) override
Periodic module tick hook.
void stop() override
Stops BLE serial module and deinitializes UART service when enabled.
bool init() override
Initializes BLE serial module resources and settings.
void toggle()
Toggles BLE serial service state and updates persisted setting.
const char * getName() const override
void deinit()
Deinitializes BLE UART service runtime state.
static BleUartService & instance()
Returns singleton BLE UART service instance.
static I18n & instance()
Singleton accessor.
void registerEnglishTable(const I18nEntry *entries, std::size_t count)
Append English entries to the lookup table.
IBluetoothController * getBluetoothControllerInstance()
Returns singleton Bluetooth stub when NimBLE is unavailable.
static bool bleInputAvailableHook()
Console input-available hook using BLE UART RX queue.
constexpr ui::I18nEntry kStrings[]
static int bleInputGetcharHook()
Console getchar hook reading one byte from BLE UART.
static void bleOutputHook(const char *data, size_t len)
Console hook bridge between shell I/O and BLE UART transport.
const char * tr(const char *key)
Look up a translation by string key.
void showToastSuccess(const char *message, uint16_t durationMs=1500)
Shows a success toast message.
void showToastInfo(const char *message, uint16_t durationMs=1500)
Shows an informational toast message.
void showToastError(const char *message, uint16_t durationMs=1500)
Shows an error toast message.
Single English translation entry.