mirror of
https://github.com/sudomesh/disaster-radio.git
synced 2026-02-20 02:01:18 +01:00
adds ability to set txPower from console, related to #78
This commit is contained in:
@@ -334,6 +334,7 @@ void setupWebSocket()
|
||||
|
||||
void setupLoRa()
|
||||
{
|
||||
char cfgStr[DATAGRAM_MESSAGE];
|
||||
#ifdef LORA_CS
|
||||
Serial.println("* Initializing LoRa...");
|
||||
#ifdef LOPY4
|
||||
@@ -341,8 +342,9 @@ void setupLoRa()
|
||||
#endif
|
||||
#ifdef ARDUINO_LORA
|
||||
Layer1Class *Layer1_1 = new Layer1Class();
|
||||
Layer1->setPins(LORA_CS, LORA_RST, LORA_IRQ);
|
||||
Layer1->setLoRaFrequency(LORA_FREQ);
|
||||
Layer1_1->setPins(LORA_CS, LORA_RST, LORA_IRQ);
|
||||
Layer1_1->setLoRaFrequency(LORA_FREQ);
|
||||
Layer1_1->setTxPower(txPower);
|
||||
#endif
|
||||
#ifdef RL_SX1276
|
||||
pinMode(LORA_CS, OUTPUT);
|
||||
@@ -374,7 +376,8 @@ void setupLoRa()
|
||||
if (lora_client->init())
|
||||
{
|
||||
Serial.printf(" --> LL2 init succeeded\r\n");
|
||||
Serial.printf(" --> LL2 node address: %s\n", nodeAddress);
|
||||
LL2->getCurrentConfig(cfgStr);
|
||||
Serial.printf("%s", cfgStr);
|
||||
radio->connect(lora_client);
|
||||
loraInitialized = true;
|
||||
return;
|
||||
|
||||
@@ -34,7 +34,7 @@ lib_deps =
|
||||
ESP Async WebServer@1.2.3
|
||||
LoRa@0.7.2
|
||||
https://github.com/jgromes/RadioLib#3682c6c9215891e3afb7672f1235fde1c3bd75fd
|
||||
https://github.com/sudomesh/LoRaLayer2#326a5705754dc6dc80996fb9c9fe58a55b16c2e1
|
||||
https://github.com/sudomesh/LoRaLayer2#4b1a55c3b66e290c534ac62e77838480a6e3425e
|
||||
https://github.com/paidforby/AsyncSDServer#13375c6be978cb34180378ecf4042a3a4a1f5eab
|
||||
ESP8266 and ESP32 OLED driver for SSD1306 displays
|
||||
TinyGPSPlus@1.0.2
|
||||
|
||||
@@ -20,6 +20,9 @@ void LoRaClient::loop()
|
||||
void LoRaClient::receive(struct Datagram datagram, size_t len)
|
||||
{
|
||||
struct Datagram response = {0};
|
||||
int value;
|
||||
int ret;
|
||||
size_t msgLen;
|
||||
|
||||
// forward all messages to LL2, except those of type 'i'(info)
|
||||
if(datagram.type == 'i'){
|
||||
@@ -28,7 +31,7 @@ void LoRaClient::receive(struct Datagram datagram, size_t len)
|
||||
LL2->getLocalAddress(localAddr);
|
||||
memcpy(response.destination, BROADCAST, ADDR_LENGTH);
|
||||
response.type = 'i';
|
||||
size_t msgLen = sprintf((char *)response.message, "%s", localAddr);
|
||||
msgLen = sprintf((char *)response.message, "%s", localAddr);
|
||||
server->transmit(this, response, msgLen + DATAGRAM_HEADER);
|
||||
}
|
||||
else if(memcmp(&datagram.message[0], "lora", 4) == 0){
|
||||
@@ -36,15 +39,28 @@ void LoRaClient::receive(struct Datagram datagram, size_t len)
|
||||
LL2->getRoutingTable(r_table);
|
||||
memcpy(response.destination, BROADCAST, ADDR_LENGTH);
|
||||
response.type = 'i';
|
||||
size_t msgLen = sprintf((char *)response.message, "%s", r_table);
|
||||
msgLen = sprintf((char *)response.message, "%s", r_table);
|
||||
server->transmit(this, response, msgLen + DATAGRAM_HEADER);
|
||||
}
|
||||
if(memcmp(&datagram.message[0], "config", 4) == 0){
|
||||
else if(memcmp(&datagram.message[0], "config", 4) == 0){
|
||||
char config[256] = {'\0'};
|
||||
LL2->getCurrentConfig(config);
|
||||
memcpy(response.destination, BROADCAST, ADDR_LENGTH);
|
||||
response.type = 'i';
|
||||
size_t msgLen = sprintf((char *)response.message, "%s", config);
|
||||
msgLen = sprintf((char *)response.message, "%s", config);
|
||||
server->transmit(this, response, msgLen + DATAGRAM_HEADER);
|
||||
}
|
||||
else if(memcmp(&datagram.message[0], "txpower", 4) == 0){
|
||||
sscanf((char *)&datagram.message[8], "%d", &value);
|
||||
ret = LL2->setTxPower(value, 1);
|
||||
memcpy(response.destination, BROADCAST, ADDR_LENGTH);
|
||||
response.type = 'i';
|
||||
if(ret > 0){
|
||||
msgLen = sprintf((char *)response.message, "TxPower on LoRa%d set to %ddB\r\n", ret, value);
|
||||
}
|
||||
else{
|
||||
msgLen = sprintf((char *)response.message, "TxPower setting failed\r\n");
|
||||
}
|
||||
server->transmit(this, response, msgLen + DATAGRAM_HEADER);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ void Console::processLine(char *message, size_t len)
|
||||
struct Datagram response;
|
||||
memset(&response, 0, DATAGRAM_MESSAGE);
|
||||
int msgLen;
|
||||
int value;
|
||||
|
||||
// message might not be NULL ended
|
||||
char msgBuff[len + 2] = {0};
|
||||
@@ -72,7 +73,7 @@ void Console::processLine(char *message, size_t len)
|
||||
|
||||
if (strncmp(&args[0][1], "help", 4) == 0)
|
||||
{
|
||||
printf("Commands: /help /join /nick /raw /lora /set /restart\r\n");
|
||||
printf("Commands: /help /join /nick /raw /lora /get /set /restart\r\n");
|
||||
}
|
||||
else if (strncmp(&args[0][1], "raw", 3) == 0)
|
||||
{
|
||||
@@ -90,6 +91,11 @@ void Console::processLine(char *message, size_t len)
|
||||
server->transmit(this, response, msgLen + DATAGRAM_HEADER);
|
||||
}
|
||||
}
|
||||
else if ((strncmp(&args[0][1], "get", 3) == 0) && (args.size() == 1)){
|
||||
printf("No option provided, type '/get OPTION'\r\n");
|
||||
printf("OPTIONs include,\r\n");
|
||||
printf("'config' - print the current configuration of Layer1 interface and LL2 options\r\n");
|
||||
}
|
||||
|
||||
else if ((strncmp(&args[0][1], "set", 3) == 0) && (args.size() > 1))
|
||||
{
|
||||
@@ -98,11 +104,46 @@ void Console::processLine(char *message, size_t len)
|
||||
delay(500);
|
||||
ESP.restart();
|
||||
}
|
||||
else if ((strncmp(&args[1][0], "txpower", 7) == 0) && (args.size() > 2)){
|
||||
|
||||
sscanf(&args[2][0], "%d", &value);
|
||||
|
||||
if((value < 2) || (value > 20)){
|
||||
printf("Invalid value provided, type '/set txpower VAL'\r\n");
|
||||
printf("'txpower VAL' - sets the transmit power of LoRa transceiver,\r\n");
|
||||
printf(" where VAL is desired power in dB between 2 and 20\r\n");
|
||||
}
|
||||
else{
|
||||
// save txPower to preferences, so it is maintained on next boot
|
||||
saveTxPower(value);
|
||||
|
||||
// transmit setting change to LoRaClient
|
||||
memcpy(response.destination, BROADCAST, ADDR_LENGTH);
|
||||
response.type = 'i';
|
||||
msgLen = sprintf((char *)response.message, "txpower %d", value);
|
||||
server->transmit(this, response, msgLen + DATAGRAM_HEADER);
|
||||
}
|
||||
}
|
||||
else if ((strncmp(&args[1][0], "txpower", 7) == 0) && (args.size() == 2)){
|
||||
printf("No value provided, type '/set txpower VAL'\r\n");
|
||||
printf("'txpower VAL' - sets the transmit power of LoRa transceiver,\r\n");
|
||||
printf(" where VAL is desired power in dB between 2 and 20\r\n");
|
||||
|
||||
}
|
||||
else{
|
||||
printf("Setting provided does not exist, type '/set SETTING'\r\n");
|
||||
printf("SETTINGs include,\r\n");
|
||||
printf("'ui' - toggles between WiFi and BLE user interface\r\n");
|
||||
printf("'txpower VAL' - sets the transmit power of LoRa transceiver,\r\n");
|
||||
printf(" where VAL is desired power in dB between 2 and 20\r\n");
|
||||
}
|
||||
}
|
||||
else if ((strncmp(&args[0][1], "set", 3) == 0) && (args.size() == 1)){
|
||||
printf("No setting provided, type '/set SETTING'\r\n");
|
||||
printf("SETTINGs include,\r\n");
|
||||
printf("'ui' - toggles between WiFi and BLE user interface\r\n");
|
||||
printf("'txpower VAL' - sets the transmit power of LoRa transceiver,\r\n");
|
||||
printf(" where VAL is desired power in dB between 2 and 20\r\n");
|
||||
}
|
||||
|
||||
else if (((strncmp(&args[0][1], "join", 4) == 0) || (strncmp(&args[0][1], "nick", 4) == 0)) && (args.size() > 1))
|
||||
|
||||
@@ -4,6 +4,7 @@ Preferences preferences;
|
||||
|
||||
String username = "";
|
||||
bool useBLE = true;
|
||||
int txPower = 17;
|
||||
|
||||
void getSettings(void)
|
||||
{
|
||||
@@ -25,8 +26,10 @@ void getSettings(void)
|
||||
|
||||
// Try to get UI settings, defaults to WiFi!
|
||||
useBLE = preferences.getBool("ble", false);
|
||||
|
||||
Serial.printf("Got IF setting %s\n", useBLE ? "BLE" : "WiFi");
|
||||
txPower = preferences.getInt("txPwr", false);
|
||||
Serial.printf("Got txPwr setting %d\n", txPower);
|
||||
|
||||
|
||||
preferences.end();
|
||||
return;
|
||||
@@ -64,6 +67,18 @@ void saveUI(bool useBLE)
|
||||
preferences.end();
|
||||
}
|
||||
|
||||
void saveTxPower(int txPower)
|
||||
{
|
||||
if (!preferences.begin("dr", false))
|
||||
{
|
||||
Serial.println("Error opening preferences");
|
||||
return;
|
||||
}
|
||||
|
||||
preferences.putInt("txPwr", txPower);
|
||||
preferences.end();
|
||||
}
|
||||
|
||||
/*
|
||||
void saveLRFQ(int lrfq)
|
||||
{
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
void getSettings(void);
|
||||
void saveUsername(String newUserName);
|
||||
void saveUI(bool useBLE);
|
||||
void saveTxPower(int txPower);
|
||||
|
||||
extern String username;
|
||||
extern bool useBLE;
|
||||
extern bool useBLE;
|
||||
extern int txPower;
|
||||
|
||||
Reference in New Issue
Block a user