Skip to content

Commit

Permalink
Merge pull request #765 from Lamnxzp/ble_name
Browse files Browse the repository at this point in the history
Add BLE Name & WiFi AP Credentials Settings
  • Loading branch information
pr3y authored Feb 2, 2025
2 parents 23a3115 + 349a98e commit d7c6efa
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 3 deletions.
10 changes: 10 additions & 0 deletions src/core/config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ JsonDocument BruceConfig::toJson() const {
_wifiAp["ssid"] = wifiAp.ssid;
_wifiAp["pwd"] = wifiAp.pwd;

setting["bleName"] = bleName;

JsonObject _wifi = setting.createNestedObject("wifi");
for (const auto& pair : wifi) {
_wifi[pair.first] = pair.second;
Expand Down Expand Up @@ -126,6 +128,8 @@ void BruceConfig::fromFile() {
wifi[kv.key().c_str()] = kv.value().as<String>();
} else { count++; log_e("Fail"); }

if(!setting["bleName"].isNull()) { bleName = setting["bleName"].as<String>(); } else { count++; log_e("Fail"); }

if(!setting["irTx"].isNull()) { irTx = setting["irTx"].as<int>(); } else { count++; log_e("Fail"); }
if(!setting["irRx"].isNull()) { irRx = setting["irRx"].as<int>(); } else { count++; log_e("Fail"); }

Expand Down Expand Up @@ -359,6 +363,12 @@ String BruceConfig::getWifiPassword(const String& ssid) const {
}


void BruceConfig::setBleName(String value) {
bleName = value;
saveFile();
}


void BruceConfig::setIrTxPin(int value) {
irTx = value;
saveFile();
Expand Down
6 changes: 6 additions & 0 deletions src/core/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ class BruceConfig {
Credential webUI = {"admin", "bruce"};
WiFiCredential wifiAp = {"BruceNet", "brucenet"};
std::map<String, String> wifi = {};

// BLE
String bleName = String("Keyboard_" + String((uint8_t)(ESP.getEfuseMac() >> 32), HEX));

// IR
int irTx = LED;
Expand Down Expand Up @@ -140,6 +143,9 @@ class BruceConfig {
void removeQrCodeEntry(const String& menuName);
String getWifiPassword(const String& ssid) const;

// BLE
void setBleName(const String name);

// IR
void setIrTxPin(int value);
void setIrRxPin(int value);
Expand Down
1 change: 1 addition & 0 deletions src/core/menu_items/ConfigMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ void ConfigMenu::optionsMenu() {
{"Sound On/Off", [=]() { setSoundConfig(); }},
{"Startup WiFi", [=]() { setWifiStartupConfig(); }},
{"Startup App", [=]() { setStartupApp(); }},
{"Network Creds", [=]() { setNetworkCredsMenu(); }},
{"Clock", [=]() { setClock(); }},
{"Sleep", [=]() { setSleepMode(); }},
{"Restart", [=]() { ESP.restart(); }},
Expand Down
1 change: 1 addition & 0 deletions src/core/serialcmds.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -800,6 +800,7 @@ bool processSerialCommand(String cmd_str) {
setting_value.substring(setting_value.indexOf(",")+1)
);
}
if(setting_name=="bleName") bruceConfig.setBleName(setting_value);
if(setting_name=="irTx") bruceConfig.setIrTxPin(setting_value.toInt());
if(setting_name=="irRx") bruceConfig.setIrRxPin(setting_value.toInt());
if(setting_name=="rfTx") bruceConfig.setRfTxPin(setting_value.toInt());
Expand Down
90 changes: 90 additions & 0 deletions src/core/settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -631,3 +631,93 @@ void setGpsBaudrateMenu() {
loopOptions(options, bruceConfig.gpsBaudrate);

}

/*********************************************************************
** Function: setBleNameMenu
** Handles Menu to set BLE Gap Name
**********************************************************************/
void setBleNameMenu() {
const String defaultBleName = "Keyboard_" + String((uint8_t)(ESP.getEfuseMac() >> 32), HEX);

const bool isDefault = bruceConfig.bleName == defaultBleName;

options = {
{"Default", [=]() { bruceConfig.setBleName(defaultBleName); }, isDefault},
{"Custom", [=]() {
String newBleName = keyboard(bruceConfig.bleName, 30, "BLE Device Name:");
if (!newBleName.isEmpty()) bruceConfig.setBleName(newBleName);
else displayError("BLE Name cannot be empty", true);
}, !isDefault},
{"Main Menu", [=]() { backToMenu(); }},
};

loopOptions(options, isDefault ? 0 : 1);
}

/*********************************************************************
** Function: setWifiApSsidMenu
** Handles Menu to set the WiFi AP SSID
**********************************************************************/
void setWifiApSsidMenu() {
const bool isDefault = bruceConfig.wifiAp.ssid == "BruceNet";

options = {
{"Default (BruceNet)", [=]() { bruceConfig.setWifiApCreds("BruceNet", bruceConfig.wifiAp.pwd); }, isDefault},
{"Custom", [=]() {
String newSsid = keyboard(bruceConfig.wifiAp.ssid, 32, "WiFi AP SSID:");
if (!newSsid.isEmpty()) bruceConfig.setWifiApCreds(newSsid, bruceConfig.wifiAp.pwd);
else displayError("SSID cannot be empty", true);
}, !isDefault},
{"Main Menu", [=]() { backToMenu(); }},
};

loopOptions(options, isDefault ? 0 : 1);
}

/*********************************************************************
** Function: setWifiApPasswordMenu
** Handles Menu to set the WiFi AP Password
**********************************************************************/
void setWifiApPasswordMenu() {
const bool isDefault = bruceConfig.wifiAp.pwd == "brucenet";

options = {
{"Default (brucenet)", [=]() { bruceConfig.setWifiApCreds(bruceConfig.wifiAp.ssid, "brucenet"); }, isDefault},
{"Custom", [=]() {
String newPassword = keyboard(bruceConfig.wifiAp.pwd, 32, "WiFi AP Password:");
if (!newPassword.isEmpty()) bruceConfig.setWifiApCreds(bruceConfig.wifiAp.ssid, newPassword);
else displayError("Password cannot be empty", true);
}, !isDefault},
{"Main Menu", [=]() { backToMenu(); }},
};

loopOptions(options, isDefault ? 0 : 1);
}

/*********************************************************************
** Function: setWifiApCredsMenu
** Handles Menu to configure WiFi AP Credentials
**********************************************************************/
void setWifiApCredsMenu() {
options = {
{"SSID", [=]() { setWifiApSsidMenu(); }},
{"Password", [=]() { setWifiApPasswordMenu(); }},
{"Main Menu", [=]() { backToMenu(); }},
};

loopOptions(options);
}

/*********************************************************************
** Function: setNetworkCredsMenu
** Main Menu for setting Network credentials (BLE & WiFi)
**********************************************************************/
void setNetworkCredsMenu() {
options = {
{"WiFi AP Creds", [=]() { setWifiApCredsMenu(); }},
{"BLE Name", [=]() { setBleNameMenu(); }},
{"Main Menu", [=]() { backToMenu(); }},
};

loopOptions(options);
}
2 changes: 2 additions & 0 deletions src/core/settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,6 @@ void setStartupApp();

void setGpsBaudrateMenu();

void setNetworkCredsMenu();

#endif
13 changes: 10 additions & 3 deletions src/modules/ble/bad_ble.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
#include "bad_ble.h"

#define DEF_DELAY 100
BleKeyboard Kble(String("Keyboard_" + String((uint8_t)(ESP.getEfuseMac() >> 32), HEX)).c_str(), "BruceNet", 98);

BleKeyboard Kble = BleKeyboard("BruceNet", "BruceNet", 98); // deviceName will be changed using setName()

uint8_t Ask_for_restart=0;
/* Example of payload file
Expand Down Expand Up @@ -235,6 +237,9 @@ bool ask_restart() {

void ble_setup() {
if(ask_restart()) return;

Kble.setName(bruceConfig.bleName.c_str());

FS *fs;
Serial.println("BadBLE begin");
bool first_time=true;
Expand Down Expand Up @@ -300,7 +305,6 @@ void ble_setup() {
else displayWarning("Canceled", true);
}
End:

returnToMenu=true;
}

Expand All @@ -309,6 +313,8 @@ void ble_setup() {
void ble_MediaCommands() {
if(ask_restart()) return;
Ask_for_restart=1; // arm the flag

Kble.setName(bruceConfig.bleName.c_str());

if(!Kble.isConnected()) Kble.begin();

Expand Down Expand Up @@ -338,7 +344,6 @@ void ble_MediaCommands() {
if(!returnToMenu) goto reMenu;
}
returnToMenu=true;

}

#if defined(HAS_KEYBOARD)
Expand All @@ -347,6 +352,8 @@ void ble_MediaCommands() {
void ble_keyboard() {
if(ask_restart()) return;

Kble.setName(bruceConfig.bleName.c_str());

drawMainBorder();
options = {
{"US Inter", [=]() { chooseKb_ble(KeyboardLayout_en_US); }},
Expand Down

0 comments on commit d7c6efa

Please sign in to comment.