Skip to content

Commit 28bd585

Browse files
authored
Merge pull request #1082 from UltimateHackingKeyboard/add_delete_all_data_command
Delete all settings
2 parents a099b0b + eda4ffe commit 28bd585

7 files changed

+102
-8
lines changed

device/src/settings.c

+64-8
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
11
#include <zephyr/bluetooth/addr.h>
22
#include <zephyr/settings/settings.h>
3+
#include <zephyr/storage/flash_map.h>
4+
#include <zephyr/device.h>
5+
#include <string.h>
6+
#include <stdio.h>
37
#include "bt_conn.h"
48
#include "dongle_leds.h"
59
#include "stubs.h"
610

711
bool RightAddressIsSet = false;
812

9-
static void setRightAddressIsSet(bool isSet)
10-
{
13+
static void setRightAddressIsSet(bool isSet) {
1114
if (RightAddressIsSet != isSet) {
1215
RightAddressIsSet = isSet;
1316
DongleLeds_Update();
1417
}
1518
}
1619

1720
// (This isn't getting called at all when there is no "uhk/addr" settings present.)
18-
static int peerAddressSet(const char *name, size_t len, settings_read_cb read_cb, void *cb_arg)
19-
{
21+
static int peerAddressSet(const char *name, size_t len, settings_read_cb read_cb, void *cb_arg) {
2022
static char foo_val[BT_ADDR_SIZE];
2123
read_cb(cb_arg, &foo_val, len);
2224

@@ -45,16 +47,70 @@ struct settings_handler settingsHandler = {
4547
.h_set = peerAddressSet,
4648
};
4749

48-
void InitSettings(void)
49-
{
50+
void InitSettings(void) {
5051
DongleLeds_Update();
5152
settings_subsys_init();
5253
settings_register(&settingsHandler);
5354
settings_load();
5455
}
5556

56-
void Settings_Reload(void)
57-
{
57+
void Settings_Reload(void) {
5858
setRightAddressIsSet(false);
5959
settings_load();
6060
}
61+
62+
static bool shouldDeleteKey(const char *key) {
63+
const char *protectedKey = NULL;
64+
const bt_addr_le_t *protectedAddr = NULL;
65+
#if DEVICE_IS_UHK80_LEFT
66+
protectedKey = "uhk/addr/right";
67+
protectedAddr = &Peers[PeerIdRight].addr;
68+
#elif DEVICE_IS_UHK80_RIGHT
69+
protectedKey = "uhk/addr/left";
70+
protectedAddr = &Peers[PeerIdLeft].addr;
71+
#endif
72+
73+
if (protectedAddr == NULL || protectedKey == NULL) {
74+
return true;
75+
}
76+
77+
if (strcmp(key, protectedKey) == 0) {
78+
return false;
79+
}
80+
81+
// 2*6 bytes + type flag + null terminator
82+
const uint8_t addrStrLen = 14;
83+
char addrString[addrStrLen];
84+
85+
// print addr to string without colons in hex using sprintf
86+
for (uint8_t i = 0; i < BLE_ADDR_LEN; i++) {
87+
sprintf(&addrString[i*2], "%02x", protectedAddr->a.val[BLE_ADDR_LEN-1-i]);
88+
}
89+
addrString[addrStrLen-2] = protectedAddr->type ? '1' : '0';
90+
addrString[addrStrLen-1] = '\0';
91+
92+
const char* keyAddr = key + strlen(key) + 1 - addrStrLen;
93+
94+
bool keyIsProtected = strncmp(keyAddr, addrString, addrStrLen) == 0;
95+
96+
printk("Matched key: %s, addrString: %s ? %d\n", keyAddr, addrString, keyIsProtected);
97+
98+
return !keyIsProtected;
99+
}
100+
101+
static int delete_handler(const char *key, size_t len, settings_read_cb read_cb, void *cb_arg, void *param) {
102+
if (shouldDeleteKey(key)) {
103+
settings_delete(key);
104+
}
105+
return 0;
106+
}
107+
108+
void Settings_Erase(void) {
109+
settings_load();
110+
settings_load_subtree_direct(NULL, delete_handler, NULL);
111+
settings_save();
112+
113+
printk("Settings: Erased all settings\n");
114+
115+
Settings_Reload();
116+
}

device/src/settings.h

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
void InitSettings(void);
1212
void Settings_Reload(void);
13+
void Settings_Erase(void);
1314

1415
// Variables:
1516

right/src/usb_commands/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
target_sources(${PROJECT_NAME} PRIVATE
22
usb_command_apply_config.c
33
usb_command_draw_oled.c
4+
usb_command_erase_ble_settings.c
45
usb_command_exec_macro_command.c
56
#usb_command_get_adc_value.c
67
usb_command_get_debug_buffer.c
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#ifdef __ZEPHYR__
2+
3+
#include "settings.h"
4+
#include "usb_command_erase_ble_settings.h"
5+
6+
void UsbCommand_EraseAllSettings(void) {
7+
Settings_Erase();
8+
}
9+
10+
#endif
11+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#ifndef __USB_COMMAND_ERASE_BLE_SETTINGS_H__
2+
#define __USB_COMMAND_ERASE_BLE_SETTINGS_H__
3+
4+
// Includes:
5+
6+
// Includes:
7+
8+
// Typedefs:
9+
10+
// Functions:
11+
12+
void UsbCommand_EraseAllSettings(void);
13+
14+
#endif

right/src/usb_protocol_handler.c

+10
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#ifdef __ZEPHYR__
1919
#include "usb_commands/usb_command_draw_oled.h"
2020
#include "usb_commands/usb_command_pairing.h"
21+
#include "usb_commands/usb_command_erase_ble_settings.h"
2122
#include "bt_conn.h"
2223
#else
2324
#include "usb_commands/usb_command_set_test_led.h"
@@ -106,6 +107,9 @@ void UsbProtocolHandler(const uint8_t *GenericHidOutBuffer, uint8_t *GenericHidI
106107
case UsbCommandId_EnterPairingMode:
107108
UsbCommand_EnterPairingMode(GenericHidOutBuffer, GenericHidInBuffer);
108109
break;
110+
case UsbCommandId_EraseBleSettings:
111+
UsbCommand_EraseAllSettings();
112+
break;
109113
#else
110114
case UsbCommandId_JumpToModuleBootloader:
111115
UsbCommand_JumpToModuleBootloader(GenericHidOutBuffer, GenericHidInBuffer);
@@ -153,4 +157,10 @@ void SetBufferBleAddress(uint8_t *GenericHidInBuffer, uint32_t offset, const bt_
153157
GenericHidInBuffer[offset + i] = addr->a.val[i];
154158
}
155159
}
160+
161+
162+
// void UsbCommand_EraseBleSettings(void) {
163+
// Settings_Erase();
164+
// }
165+
156166
#endif

right/src/usb_protocol_handler.h

+1
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
UsbCommandId_UnpairAll = 0x1a,
6767
UsbCommandId_IsPaired = 0x1b,
6868
UsbCommandId_EnterPairingMode = 0x1c,
69+
UsbCommandId_EraseBleSettings = 0x1d,
6970
} usb_command_id_t;
7071

7172
typedef enum {

0 commit comments

Comments
 (0)