Add command LoRaCommand

This commit is contained in:
Theo Arends 2024-03-03 16:55:02 +01:00
parent 27ccf0490b
commit 9c4dfd28ef
2 changed files with 36 additions and 5 deletions

View File

@ -15,6 +15,7 @@
//#define USE_LORA_DEBUG
#define LORA_MAX_PACKET_LENGTH 252 // Max packet length allowed (keeping room for control bytes)
#define TAS_LORA_REMOTE_COMMAND 0x17 // Header defining remote LoRaCommand
#ifndef TAS_LORA_FREQUENCY
#define TAS_LORA_FREQUENCY 868.0 // Allowed values range from 150.0 to 960.0 MHz

View File

@ -23,6 +23,20 @@ void LoraInput(void) {
int packet_size = Lora.Receive(data);
if (!packet_size) { return; }
if (TAS_LORA_REMOTE_COMMAND == data[0]) {
char *payload = data +1; // Skip TAS_LORA_REMOTE_COMMAND
char *command_part;
char *topic_part = strtok_r(payload, " ", &command_part);
if (topic_part && command_part) {
if (!strcasecmp(topic_part, SettingsText(SET_MQTT_TOPIC))) { // Is it mine
ExecuteCommand(command_part, SRC_REMOTE);
return;
} else {
*--command_part = ' '; // Restore strtok_r '/0'
}
}
}
bool raw = Lora.raw;
// Set raw mode if zeroes within data
for (uint32_t i = 0; i < packet_size; i++) {
@ -115,12 +129,28 @@ void LoraInit(void) {
#define D_CMND_LORASEND "Send"
#define D_CMND_LORACONFIG "Config"
#define D_CMND_LORACOMMAND "Command"
const char kLoraCommands[] PROGMEM = "LoRa|" // Prefix
D_CMND_LORASEND "|" D_CMND_LORACONFIG;
D_CMND_LORASEND "|" D_CMND_LORACONFIG "|" D_CMND_LORACOMMAND ;
void (* const LoraCommand[])(void) PROGMEM = {
&CmndLoraSend, &CmndLoraConfig };
&CmndLoraSend, &CmndLoraConfig, &CmndLoraCommand };
void CmndLoraCommand(void) {
// LoRaCommand <topic_of_lora_receiver> <command>
// LoRaCommand lorareceiver power 2
// LoRaCommand lorareceiver publish cmnd/anytopic/power 2
if (XdrvMailbox.data_len > 0) {
char data[LORA_MAX_PACKET_LENGTH] = { 0 };
XdrvMailbox.data_len++; // Add Signal CmndLoraCommand to lora receiver
uint32_t len = (XdrvMailbox.data_len < LORA_MAX_PACKET_LENGTH -1) ? XdrvMailbox.data_len : LORA_MAX_PACKET_LENGTH -2;
data[0] = TAS_LORA_REMOTE_COMMAND;
strlcpy(data +1, XdrvMailbox.data, len);
Lora.Send((uint8_t*)data, len);
ResponseCmndDone();
}
}
void CmndLoraSend(void) {
// LoRaSend "Hello Tiger" - Send "Hello Tiger\n"
@ -139,7 +169,7 @@ void CmndLoraSend(void) {
char data[LORA_MAX_PACKET_LENGTH] = { 0 };
uint32_t len = (XdrvMailbox.data_len < LORA_MAX_PACKET_LENGTH -1) ? XdrvMailbox.data_len : LORA_MAX_PACKET_LENGTH -2;
#ifdef USE_LORA_DEBUG
AddLog(LOG_LEVEL_DEBUG, PSTR("DBG: Len %d, Send %*_H"), len, len + 2, XdrvMailbox.data);
// AddLog(LOG_LEVEL_DEBUG, PSTR("DBG: Len %d, Send %*_H"), len, len + 2, XdrvMailbox.data);
#endif
if (1 == XdrvMailbox.index) { // "Hello Tiger\n"
memcpy(data, XdrvMailbox.data, len);