mirror of
https://github.com/esphome/esphome.git
synced 2024-11-25 00:18:11 +01:00
loads more changes
This commit is contained in:
parent
b70d44e6c2
commit
7b55449229
4 changed files with 1246 additions and 1361 deletions
|
@ -4,15 +4,18 @@
|
|||
#include <HardwareSerial.h>
|
||||
#include "esphome/core/helpers.h"
|
||||
#include "lora_e220.h"
|
||||
#include "esphome/components/uart/uart.h"
|
||||
|
||||
namespace esphome {
|
||||
namespace ebyte_lora_e220 {
|
||||
|
||||
static const char *const TAG = "ebyte_lora_e220";
|
||||
|
||||
// there are 3 UART ports, we are going to be using 0, which is D6 and D7
|
||||
HardwareSerial LoraSerial(0);
|
||||
LoRa_E220 e220ttl(&LoraSerial, D2, D0, D1); // SERIAL AUX M0 M1
|
||||
|
||||
class LoRaSensors : public text_sensor::TextSensor, public PollingComponent {
|
||||
class LoRaSensors : public text_sensor::TextSensor, public PollingComponent, public uart::UARTDevice {
|
||||
public:
|
||||
LoRaSensors() : PollingComponent(4000) {}
|
||||
|
||||
|
|
|
@ -1,42 +1,5 @@
|
|||
#include "lora_e220.h"
|
||||
|
||||
#ifdef ACTIVATE_SOFTWARE_SERIAL
|
||||
LoRa_E220::LoRa_E220(byte txE220pin, byte rxE220pin, UART_BPS_RATE bpsRate){
|
||||
this->txE220pin = txE220pin;
|
||||
this->rxE220pin = rxE220pin;
|
||||
SoftwareSerial* mySerial = new SoftwareSerial((uint8_t)this->txE220pin, (uint8_t)this->rxE220pin); // "RX TX" // @suppress("Abstract class cannot be instantiated")
|
||||
this->ss = mySerial;
|
||||
this->hs = NULL;
|
||||
|
||||
this->bpsRate = bpsRate;
|
||||
}
|
||||
LoRa_E220::LoRa_E220(byte txE220pin, byte rxE220pin, byte auxPin, UART_BPS_RATE bpsRate){
|
||||
this->txE220pin = txE220pin;
|
||||
this->rxE220pin = rxE220pin;
|
||||
this->auxPin = auxPin;
|
||||
SoftwareSerial* mySerial = new SoftwareSerial((uint8_t)this->txE220pin, (uint8_t)this->rxE220pin); // "RX TX" // @suppress("Abstract class cannot be instantiated")
|
||||
this->ss = mySerial;
|
||||
this->hs = NULL;
|
||||
|
||||
this->bpsRate = bpsRate;
|
||||
}
|
||||
LoRa_E220::LoRa_E220(byte txE220pin, byte rxE220pin, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate){
|
||||
this->txE220pin = txE220pin;
|
||||
this->rxE220pin = rxE220pin;
|
||||
|
||||
this->auxPin = auxPin;
|
||||
|
||||
this->m0Pin = m0Pin;
|
||||
this->m1Pin = m1Pin;
|
||||
|
||||
SoftwareSerial* mySerial = new SoftwareSerial((uint8_t)this->txE220pin, (uint8_t)this->rxE220pin); // "RX TX" // @suppress("Abstract class cannot be instantiated")
|
||||
this->ss = mySerial;
|
||||
this->hs = NULL;
|
||||
|
||||
this->bpsRate = bpsRate;
|
||||
}
|
||||
#endif
|
||||
|
||||
LoRa_E220::LoRa_E220(HardwareSerial *serial, UART_BPS_RATE bpsRate) { //, uint32_t serialConfig
|
||||
this->txE220pin = txE220pin;
|
||||
this->rxE220pin = rxE220pin;
|
||||
|
@ -66,7 +29,8 @@ LoRa_E220::LoRa_E220(HardwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate)
|
|||
|
||||
this->bpsRate = bpsRate;
|
||||
}
|
||||
LoRa_E220::LoRa_E220(HardwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate){ //, uint32_t serialConfig
|
||||
LoRa_E220::LoRa_E220(HardwareSerial *serial, byte auxPin, byte m0Pin, byte m1Pin,
|
||||
UART_BPS_RATE bpsRate) { //, uint32_t serialConfig
|
||||
this->txE220pin = txE220pin;
|
||||
this->rxE220pin = rxE220pin;
|
||||
|
||||
|
@ -86,7 +50,8 @@ LoRa_E220::LoRa_E220(HardwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin
|
|||
}
|
||||
|
||||
#ifdef HARDWARE_SERIAL_SELECTABLE_PIN
|
||||
LoRa_E220::LoRa_E220(byte txE220pin, byte rxE220pin, HardwareSerial* serial, UART_BPS_RATE bpsRate, uint32_t serialConfig){
|
||||
LoRa_E220::LoRa_E220(byte txE220pin, byte rxE220pin, HardwareSerial *serial, UART_BPS_RATE bpsRate,
|
||||
uint32_t serialConfig) {
|
||||
this->txE220pin = txE220pin;
|
||||
this->rxE220pin = rxE220pin;
|
||||
|
||||
|
@ -100,7 +65,8 @@ LoRa_E220::LoRa_E220(byte txE220pin, byte rxE220pin, HardwareSerial* serial, UAR
|
|||
|
||||
this->bpsRate = bpsRate;
|
||||
}
|
||||
LoRa_E220::LoRa_E220(byte txE220pin, byte rxE220pin, HardwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate, uint32_t serialConfig){
|
||||
LoRa_E220::LoRa_E220(byte txE220pin, byte rxE220pin, HardwareSerial *serial, byte auxPin, UART_BPS_RATE bpsRate,
|
||||
uint32_t serialConfig) {
|
||||
this->txE220pin = txE220pin;
|
||||
this->rxE220pin = rxE220pin;
|
||||
this->auxPin = auxPin;
|
||||
|
@ -115,7 +81,8 @@ LoRa_E220::LoRa_E220(byte txE220pin, byte rxE220pin, HardwareSerial* serial, byt
|
|||
|
||||
this->bpsRate = bpsRate;
|
||||
}
|
||||
LoRa_E220::LoRa_E220(byte txE220pin, byte rxE220pin, HardwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate, uint32_t serialConfig){
|
||||
LoRa_E220::LoRa_E220(byte txE220pin, byte rxE220pin, HardwareSerial *serial, byte auxPin, byte m0Pin, byte m1Pin,
|
||||
UART_BPS_RATE bpsRate, uint32_t serialConfig) {
|
||||
this->txE220pin = txE220pin;
|
||||
this->rxE220pin = rxE220pin;
|
||||
|
||||
|
@ -174,41 +141,39 @@ LoRa_E220::LoRa_E220(SoftwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin
|
|||
#endif
|
||||
|
||||
bool LoRa_E220::begin() {
|
||||
DEBUG_PRINT("RX MIC ---> ");
|
||||
DEBUG_PRINTLN(this->txE220pin);
|
||||
DEBUG_PRINT("TX MIC ---> ");
|
||||
DEBUG_PRINTLN(this->rxE220pin);
|
||||
DEBUG_PRINT("AUX ---> ");
|
||||
DEBUG_PRINTLN(this->auxPin);
|
||||
DEBUG_PRINT("M0 ---> ");
|
||||
DEBUG_PRINTLN(this->m0Pin);
|
||||
DEBUG_PRINT("M1 ---> ");
|
||||
DEBUG_PRINTLN(this->m1Pin);
|
||||
ESP_LOGD(TAG, "RX MIC ---> ");
|
||||
ESP_LOGD(TAG, this->txE220pin);
|
||||
ESP_LOGD(TAG, "TX MIC ---> ");
|
||||
ESP_LOGD(TAG, this->rxE220pin);
|
||||
ESP_LOGD(TAG, "AUX ---> ");
|
||||
ESP_LOGD(TAG, this->auxPin);
|
||||
ESP_LOGD(TAG, "M0 ---> ");
|
||||
ESP_LOGD(TAG, this->m0Pin);
|
||||
ESP_LOGD(TAG, "M1 ---> ");
|
||||
ESP_LOGD(TAG, this->m1Pin);
|
||||
|
||||
if (this->auxPin != -1) {
|
||||
pinMode(this->auxPin, INPUT);
|
||||
DEBUG_PRINTLN("Init AUX pin!");
|
||||
ESP_LOGD(TAG, "Init AUX pin!");
|
||||
}
|
||||
if (this->m0Pin != -1) {
|
||||
pinMode(this->m0Pin, OUTPUT);
|
||||
DEBUG_PRINTLN("Init M0 pin!");
|
||||
ESP_LOGD(TAG, "Init M0 pin!");
|
||||
digitalWrite(this->m0Pin, HIGH);
|
||||
|
||||
}
|
||||
if (this->m1Pin != -1) {
|
||||
pinMode(this->m1Pin, OUTPUT);
|
||||
DEBUG_PRINTLN("Init M1 pin!");
|
||||
ESP_LOGD(TAG, "Init M1 pin!");
|
||||
digitalWrite(this->m1Pin, HIGH);
|
||||
|
||||
}
|
||||
|
||||
DEBUG_PRINTLN("Begin ex");
|
||||
ESP_LOGD(TAG, "Begin ex");
|
||||
if (this->hs) {
|
||||
DEBUG_PRINTLN("Begin Hardware Serial");
|
||||
ESP_LOGD(TAG, "Begin Hardware Serial");
|
||||
|
||||
#ifdef HARDWARE_SERIAL_SELECTABLE_PIN
|
||||
if (this->txE220pin != -1 && this->rxE220pin != -1) {
|
||||
DEBUG_PRINTLN("PIN SELECTED!!");
|
||||
ESP_LOGD(TAG, "PIN SELECTED!!");
|
||||
this->serialDef.begin(*this->hs, this->bpsRate, this->serialConfig, this->txE220pin, this->rxE220pin);
|
||||
} else {
|
||||
this->serialDef.begin(*this->hs, this->bpsRate, this->serialConfig);
|
||||
|
@ -223,19 +188,20 @@ bool LoRa_E220::begin(){
|
|||
|
||||
#ifdef ACTIVATE_SOFTWARE_SERIAL
|
||||
} else if (this->ss) {
|
||||
DEBUG_PRINTLN("Begin Software Serial");
|
||||
ESP_LOGD(TAG, "Begin Software Serial");
|
||||
|
||||
this->serialDef.begin(*this->ss, this->bpsRate);
|
||||
} else {
|
||||
DEBUG_PRINTLN("Begin Software Serial Pin");
|
||||
SoftwareSerial* mySerial = new SoftwareSerial((int)this->txE220pin, (int)this->rxE220pin); // "RX TX" // @suppress("Abstract class cannot be instantiated")
|
||||
ESP_LOGD(TAG, "Begin Software Serial Pin");
|
||||
SoftwareSerial *mySerial = new SoftwareSerial(
|
||||
(int) this->txE220pin, (int) this->rxE220pin); // "RX TX" // @suppress("Abstract class cannot be instantiated")
|
||||
this->ss = mySerial;
|
||||
|
||||
// SoftwareSerial mySerial(this->txE220pin, this->rxE220pin);
|
||||
DEBUG_PRINT("RX Pin: ");
|
||||
DEBUG_PRINT((int)this->txE220pin);
|
||||
DEBUG_PRINT("TX Pin: ");
|
||||
DEBUG_PRINTLN((int)this->rxE220pin);
|
||||
ESP_LOGD(TAG, "RX Pin: ");
|
||||
ESP_LOGD(TAG, (int) this->txE220pin);
|
||||
ESP_LOGD(TAG, "TX Pin: ");
|
||||
ESP_LOGD(TAG, (int) this->rxE220pin);
|
||||
|
||||
this->serialDef.begin(*this->ss, this->bpsRate);
|
||||
#endif
|
||||
|
@ -254,7 +220,6 @@ a timeout is provided to avoid an infinite loop
|
|||
*/
|
||||
|
||||
Status LoRa_E220::waitCompleteResponse(unsigned long timeout, unsigned int waitNoAux) {
|
||||
|
||||
Status result = E220_SUCCESS;
|
||||
|
||||
unsigned long t = millis();
|
||||
|
@ -270,23 +235,21 @@ Status LoRa_E220::waitCompleteResponse(unsigned long timeout, unsigned int waitN
|
|||
while (digitalRead(this->auxPin) == LOW) {
|
||||
if ((millis() - t) > timeout) {
|
||||
result = ERR_E220_TIMEOUT;
|
||||
DEBUG_PRINTLN("Timeout error!");
|
||||
ESP_LOGD(TAG, "Timeout error!");
|
||||
return result;
|
||||
}
|
||||
}
|
||||
DEBUG_PRINTLN("AUX HIGH!");
|
||||
}
|
||||
else {
|
||||
ESP_LOGD(TAG, "AUX HIGH!");
|
||||
} else {
|
||||
// if you can't use aux pin, use 4K7 pullup with Arduino
|
||||
// you may need to adjust this value if transmissions fail
|
||||
this->managedDelay(waitNoAux);
|
||||
DEBUG_PRINTLN(F("Wait no AUX pin!"));
|
||||
ESP_LOGD(TAG, F("Wait no AUX pin!"));
|
||||
}
|
||||
|
||||
|
||||
// per data sheet control after aux goes high is 2ms so delay for at least that long)
|
||||
this->managedDelay(20);
|
||||
DEBUG_PRINTLN(F("Complete!"));
|
||||
ESP_LOGD(TAG, F("Complete!"));
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -297,9 +260,7 @@ just poll internal time until timeout is reached
|
|||
|
||||
*/
|
||||
|
||||
|
||||
void LoRa_E220::managedDelay(unsigned long timeout) {
|
||||
|
||||
unsigned long t = millis();
|
||||
|
||||
// make darn sure millis() is not about to reach max data type limit and start over
|
||||
|
@ -307,8 +268,8 @@ void LoRa_E220::managedDelay(unsigned long timeout) {
|
|||
t = 0;
|
||||
}
|
||||
|
||||
while ((millis() - t) < timeout) { }
|
||||
|
||||
while ((millis() - t) < timeout) {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -332,11 +293,11 @@ int LoRa_E220::available() {
|
|||
// }else{
|
||||
// while (digitalRead(this->auxPin) == LOW) {
|
||||
// if ((millis() - t) > timeout){
|
||||
// DEBUG_PRINTLN("Timeout error!");
|
||||
// ESP_LOGD(TAG, "Timeout error!");
|
||||
// return 0;
|
||||
// }
|
||||
// }
|
||||
// DEBUG_PRINTLN("AUX HIGH!");
|
||||
// ESP_LOGD(TAG, "AUX HIGH!");
|
||||
// return 2;
|
||||
// }
|
||||
// }else{
|
||||
|
@ -350,24 +311,18 @@ Method to indicate availability
|
|||
|
||||
*/
|
||||
|
||||
void LoRa_E220::flush() {
|
||||
this->serialDef.stream->flush();
|
||||
}
|
||||
void LoRa_E220::flush() { this->serialDef.stream->flush(); }
|
||||
|
||||
|
||||
void LoRa_E220::cleanUARTBuffer()
|
||||
{
|
||||
void LoRa_E220::cleanUARTBuffer() {
|
||||
// bool IsNull = true;
|
||||
|
||||
while (this->available())
|
||||
{
|
||||
while (this->available()) {
|
||||
// IsNull = false;
|
||||
|
||||
this->serialDef.stream->read();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Method to send a chunk of data provided data is in a struct--my personal favorite as you
|
||||
|
@ -390,29 +345,30 @@ Status LoRa_E220::sendStruct(void *structureManaged, uint16_t size_) {
|
|||
|
||||
uint8_t len = this->serialDef.stream->write((uint8_t *) structureManaged, size_);
|
||||
if (len != size_) {
|
||||
DEBUG_PRINT(F("Send... len:"))
|
||||
DEBUG_PRINT(len);
|
||||
DEBUG_PRINT(F(" size:"))
|
||||
DEBUG_PRINT(size_);
|
||||
ESP_LOGD(TAG, F("Send... len:"))
|
||||
ESP_LOGD(TAG, len);
|
||||
ESP_LOGD(TAG, F(" size:"))
|
||||
ESP_LOGD(TAG, size_);
|
||||
if (len == 0) {
|
||||
result = ERR_E220_NO_RESPONSE_FROM_DEVICE;
|
||||
} else {
|
||||
result = ERR_E220_DATA_SIZE_NOT_MATCH;
|
||||
}
|
||||
}
|
||||
if (result != E220_SUCCESS) return result;
|
||||
if (result != E220_SUCCESS)
|
||||
return result;
|
||||
|
||||
result = this->waitCompleteResponse(5000, 5000);
|
||||
if (result != E220_SUCCESS) return result;
|
||||
DEBUG_PRINT(F("Clear buffer..."))
|
||||
if (result != E220_SUCCESS)
|
||||
return result;
|
||||
ESP_LOGD(TAG, F("Clear buffer..."))
|
||||
this->cleanUARTBuffer();
|
||||
|
||||
DEBUG_PRINTLN(F("ok!"))
|
||||
ESP_LOGD(TAG, F("ok!"))
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Method to get a chunk of data provided data is in a struct--my personal favorite as you
|
||||
|
@ -426,16 +382,15 @@ types each handle ints floats differently
|
|||
|
||||
*/
|
||||
|
||||
|
||||
Status LoRa_E220::receiveStruct(void *structureManaged, uint16_t size_) {
|
||||
Status result = E220_SUCCESS;
|
||||
|
||||
uint8_t len = this->serialDef.stream->readBytes((uint8_t *) structureManaged, size_);
|
||||
|
||||
DEBUG_PRINT("Available buffer: ");
|
||||
DEBUG_PRINT(len);
|
||||
DEBUG_PRINT(" structure size: ");
|
||||
DEBUG_PRINTLN(size_);
|
||||
ESP_LOGD(TAG, "Available buffer: ");
|
||||
ESP_LOGD(TAG, len);
|
||||
ESP_LOGD(TAG, " structure size: ");
|
||||
ESP_LOGD(TAG, size_);
|
||||
|
||||
if (len != size_) {
|
||||
if (len == 0) {
|
||||
|
@ -444,10 +399,12 @@ Status LoRa_E220::receiveStruct(void *structureManaged, uint16_t size_) {
|
|||
result = ERR_E220_DATA_SIZE_NOT_MATCH;
|
||||
}
|
||||
}
|
||||
if (result != E220_SUCCESS) return result;
|
||||
if (result != E220_SUCCESS)
|
||||
return result;
|
||||
|
||||
result = this->waitCompleteResponse(1000);
|
||||
if (result != E220_SUCCESS) return result;
|
||||
if (result != E220_SUCCESS)
|
||||
return result;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -459,39 +416,37 @@ method to set the mode (program, normal, etc.)
|
|||
*/
|
||||
|
||||
Status LoRa_E220::setMode(MODE_TYPE mode) {
|
||||
|
||||
// data sheet claims module needs some extra time after mode setting (2ms)
|
||||
// most of my projects uses 10 ms, but 40ms is safer
|
||||
|
||||
this->managedDelay(40);
|
||||
|
||||
if (this->m0Pin == -1 && this->m1Pin == -1) {
|
||||
DEBUG_PRINTLN(F("The M0 and M1 pins is not set, this mean that you are connect directly the pins as you need!"))
|
||||
ESP_LOGD(TAG, F("The M0 and M1 pins is not set, this mean that you are connect directly the pins as you need!"))
|
||||
} else {
|
||||
switch (mode)
|
||||
{
|
||||
switch (mode) {
|
||||
case MODE_0_NORMAL:
|
||||
// Mode 0 | normal operation
|
||||
digitalWrite(this->m0Pin, LOW);
|
||||
digitalWrite(this->m1Pin, LOW);
|
||||
DEBUG_PRINTLN("MODE NORMAL!");
|
||||
ESP_LOGD(TAG, "MODE NORMAL!");
|
||||
break;
|
||||
case MODE_1_WOR_TRANSMITTER:
|
||||
digitalWrite(this->m0Pin, HIGH);
|
||||
digitalWrite(this->m1Pin, LOW);
|
||||
DEBUG_PRINTLN("MODE WOR!");
|
||||
ESP_LOGD(TAG, "MODE WOR!");
|
||||
break;
|
||||
case MODE_2_WOR_RECEIVER:
|
||||
// case MODE_2_PROGRAM:
|
||||
digitalWrite(this->m0Pin, LOW);
|
||||
digitalWrite(this->m1Pin, HIGH);
|
||||
DEBUG_PRINTLN("MODE RECEIVING!");
|
||||
ESP_LOGD(TAG, "MODE RECEIVING!");
|
||||
break;
|
||||
case MODE_3_CONFIGURATION:
|
||||
// Mode 3 | Setting operation
|
||||
digitalWrite(this->m0Pin, HIGH);
|
||||
digitalWrite(this->m1Pin, HIGH);
|
||||
DEBUG_PRINTLN("MODE SLEEP CONFIG!");
|
||||
ESP_LOGD(TAG, "MODE SLEEP CONFIG!");
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -512,15 +467,13 @@ Status LoRa_E220::setMode(MODE_TYPE mode) {
|
|||
return res;
|
||||
}
|
||||
|
||||
MODE_TYPE LoRa_E220::getMode(){
|
||||
return this->mode;
|
||||
}
|
||||
MODE_TYPE LoRa_E220::getMode() { return this->mode; }
|
||||
|
||||
bool LoRa_E220::writeProgramCommand(PROGRAM_COMMAND cmd, REGISTER_ADDRESS addr, PACKET_LENGHT pl) {
|
||||
uint8_t CMD[3] = {cmd, addr, pl};
|
||||
uint8_t size = this->serialDef.stream->write(CMD, 3);
|
||||
|
||||
DEBUG_PRINTLN(size);
|
||||
ESP_LOGD(TAG, size);
|
||||
|
||||
this->managedDelay(50); // need ti check
|
||||
|
||||
|
@ -531,12 +484,14 @@ ResponseStructContainer LoRa_E220::getConfiguration(){
|
|||
ResponseStructContainer rc;
|
||||
|
||||
rc.status.code = checkUARTConfiguration(MODE_3_PROGRAM);
|
||||
if (rc.status.code!=E220_SUCCESS) return rc;
|
||||
if (rc.status.code != E220_SUCCESS)
|
||||
return rc;
|
||||
|
||||
MODE_TYPE prevMode = this->mode;
|
||||
|
||||
rc.status.code = this->setMode(MODE_3_PROGRAM);
|
||||
if (rc.status.code!=E220_SUCCESS) return rc;
|
||||
if (rc.status.code != E220_SUCCESS)
|
||||
return rc;
|
||||
|
||||
this->writeProgramCommand(READ_CONFIGURATION, REG_ADDRESS_CFG, PL_CONFIGURATION);
|
||||
|
||||
|
@ -553,12 +508,15 @@ ResponseStructContainer LoRa_E220::getConfiguration(){
|
|||
}
|
||||
|
||||
rc.status.code = this->setMode(prevMode);
|
||||
if (rc.status.code!=E220_SUCCESS) return rc;
|
||||
if (rc.status.code != E220_SUCCESS)
|
||||
return rc;
|
||||
|
||||
if (WRONG_FORMAT == ((Configuration *) rc.data)->COMMAND) {
|
||||
rc.status.code = ERR_E220_WRONG_FORMAT;
|
||||
}
|
||||
if (RETURNED_COMMAND != ((Configuration *)rc.data)->COMMAND || REG_ADDRESS_CFG!= ((Configuration *)rc.data)->STARTING_ADDRESS || PL_CONFIGURATION!= ((Configuration *)rc.data)->LENGHT){
|
||||
if (RETURNED_COMMAND != ((Configuration *) rc.data)->COMMAND ||
|
||||
REG_ADDRESS_CFG != ((Configuration *) rc.data)->STARTING_ADDRESS ||
|
||||
PL_CONFIGURATION != ((Configuration *) rc.data)->LENGHT) {
|
||||
rc.status.code = ERR_E220_HEAD_NOT_RECOGNIZED;
|
||||
}
|
||||
|
||||
|
@ -576,12 +534,14 @@ ResponseStatus LoRa_E220::setConfiguration(Configuration configuration, PROGRAM_
|
|||
ResponseStatus rc;
|
||||
|
||||
rc.code = checkUARTConfiguration(MODE_3_PROGRAM);
|
||||
if (rc.code!=E220_SUCCESS) return rc;
|
||||
if (rc.code != E220_SUCCESS)
|
||||
return rc;
|
||||
|
||||
MODE_TYPE prevMode = this->mode;
|
||||
|
||||
rc.code = this->setMode(MODE_3_PROGRAM);
|
||||
if (rc.code!=E220_SUCCESS) return rc;
|
||||
if (rc.code != E220_SUCCESS)
|
||||
return rc;
|
||||
|
||||
// this->writeProgramCommand(saveType, REG_ADDRESS_CFG);
|
||||
|
||||
|
@ -602,14 +562,16 @@ ResponseStatus LoRa_E220::setConfiguration(Configuration configuration, PROGRAM_
|
|||
this->printParameters((Configuration *) &configuration);
|
||||
#endif
|
||||
|
||||
|
||||
rc.code = this->setMode(prevMode);
|
||||
if (rc.code!=E220_SUCCESS) return rc;
|
||||
if (rc.code != E220_SUCCESS)
|
||||
return rc;
|
||||
|
||||
if (WRONG_FORMAT == ((Configuration *) &configuration)->COMMAND) {
|
||||
rc.code = ERR_E220_WRONG_FORMAT;
|
||||
}
|
||||
if (RETURNED_COMMAND != ((Configuration *)&configuration)->COMMAND || REG_ADDRESS_CFG!= ((Configuration *)&configuration)->STARTING_ADDRESS || PL_CONFIGURATION!= ((Configuration *)&configuration)->LENGHT){
|
||||
if (RETURNED_COMMAND != ((Configuration *) &configuration)->COMMAND ||
|
||||
REG_ADDRESS_CFG != ((Configuration *) &configuration)->STARTING_ADDRESS ||
|
||||
PL_CONFIGURATION != ((Configuration *) &configuration)->LENGHT) {
|
||||
rc.code = ERR_E220_HEAD_NOT_RECOGNIZED;
|
||||
}
|
||||
|
||||
|
@ -620,12 +582,14 @@ ResponseStructContainer LoRa_E220::getModuleInformation(){
|
|||
ResponseStructContainer rc;
|
||||
|
||||
rc.status.code = checkUARTConfiguration(MODE_3_PROGRAM);
|
||||
if (rc.status.code!=E220_SUCCESS) return rc;
|
||||
if (rc.status.code != E220_SUCCESS)
|
||||
return rc;
|
||||
|
||||
MODE_TYPE prevMode = this->mode;
|
||||
|
||||
rc.status.code = this->setMode(MODE_3_PROGRAM);
|
||||
if (rc.status.code!=E220_SUCCESS) return rc;
|
||||
if (rc.status.code != E220_SUCCESS)
|
||||
return rc;
|
||||
|
||||
this->writeProgramCommand(READ_CONFIGURATION, REG_ADDRESS_PID, PL_PID);
|
||||
|
||||
|
@ -639,25 +603,37 @@ ResponseStructContainer LoRa_E220::getModuleInformation(){
|
|||
}
|
||||
|
||||
rc.status.code = this->setMode(prevMode);
|
||||
if (rc.status.code!=E220_SUCCESS) return rc;
|
||||
if (rc.status.code != E220_SUCCESS)
|
||||
return rc;
|
||||
|
||||
// this->printParameters(*configuration);
|
||||
|
||||
if (WRONG_FORMAT == ((ModuleInformation *) rc.data)->COMMAND) {
|
||||
rc.status.code = ERR_E220_WRONG_FORMAT;
|
||||
}
|
||||
if (RETURNED_COMMAND != ((ModuleInformation *)rc.data)->COMMAND || REG_ADDRESS_PID!= ((ModuleInformation *)rc.data)->STARTING_ADDRESS || PL_PID!= ((ModuleInformation *)rc.data)->LENGHT){
|
||||
if (RETURNED_COMMAND != ((ModuleInformation *) rc.data)->COMMAND ||
|
||||
REG_ADDRESS_PID != ((ModuleInformation *) rc.data)->STARTING_ADDRESS ||
|
||||
PL_PID != ((ModuleInformation *) rc.data)->LENGHT) {
|
||||
rc.status.code = ERR_E220_HEAD_NOT_RECOGNIZED;
|
||||
}
|
||||
|
||||
DEBUG_PRINTLN("----------------------------------------");
|
||||
DEBUG_PRINT(F("HEAD: ")); DEBUG_PRINT(((ModuleInformation *)rc.data)->COMMAND, BIN);DEBUG_PRINT(" ");DEBUG_PRINT(((ModuleInformation *)rc.data)->STARTING_ADDRESS, DEC);DEBUG_PRINT(" ");DEBUG_PRINTLN(((ModuleInformation *)rc.data)->LENGHT, HEX);
|
||||
ESP_LOGD(TAG, "----------------------------------------");
|
||||
ESP_LOGD(TAG, F("HEAD: "));
|
||||
ESP_LOGD(TAG, ((ModuleInformation *) rc.data)->COMMAND, BIN);
|
||||
ESP_LOGD(TAG, " ");
|
||||
ESP_LOGD(TAG, ((ModuleInformation *) rc.data)->STARTING_ADDRESS, DEC);
|
||||
ESP_LOGD(TAG, " ");
|
||||
ESP_LOGD(TAG, ((ModuleInformation *) rc.data)->LENGHT, HEX);
|
||||
|
||||
DEBUG_PRINT(F("Model no.: ")); DEBUG_PRINTLN(((ModuleInformation *)rc.data)->model, HEX);
|
||||
DEBUG_PRINT(F("Version : ")); DEBUG_PRINTLN(((ModuleInformation *)rc.data)->version, HEX);
|
||||
DEBUG_PRINT(F("Features : ")); DEBUG_PRINTLN(((ModuleInformation *)rc.data)->features, HEX);
|
||||
DEBUG_PRINT(F("Status : ")); DEBUG_PRINTLN(rc.status.getResponseDescription());
|
||||
DEBUG_PRINTLN("----------------------------------------");
|
||||
ESP_LOGD(TAG, F("Model no.: "));
|
||||
ESP_LOGD(TAG, ((ModuleInformation *) rc.data)->model, HEX);
|
||||
ESP_LOGD(TAG, F("Version : "));
|
||||
ESP_LOGD(TAG, ((ModuleInformation *) rc.data)->version, HEX);
|
||||
ESP_LOGD(TAG, F("Features : "));
|
||||
ESP_LOGD(TAG, (ModuleInformation *) rc.data)->features, HEX);
|
||||
ESP_LOGD(TAG, F("Status : "));
|
||||
ESP_LOGD(TAG, rc.status.getResponseDescription());
|
||||
ESP_LOGD(TAG, "----------------------------------------");
|
||||
|
||||
// if (rc.status.code!=E220_SUCCESS) return rc;
|
||||
|
||||
|
@ -666,7 +642,6 @@ ResponseStructContainer LoRa_E220::getModuleInformation(){
|
|||
return rc;
|
||||
}
|
||||
|
||||
|
||||
ResponseStatus LoRa_E220::resetModule() {
|
||||
// ResponseStatus status;
|
||||
//
|
||||
|
@ -691,25 +666,21 @@ ResponseStatus LoRa_E220::resetModule(){
|
|||
// if (status.code!=E220_SUCCESS) return status;
|
||||
//
|
||||
// return status;
|
||||
DEBUG_PRINT(F("No information to reset module!"));
|
||||
ESP_LOGD(TAG, F("No information to reset module!"));
|
||||
ResponseStatus status;
|
||||
status.code = ERR_E220_NOT_IMPLEMENT;
|
||||
return status;
|
||||
}
|
||||
|
||||
ResponseContainer LoRa_E220::receiveMessage(){
|
||||
return LoRa_E220::receiveMessageComplete(false);
|
||||
}
|
||||
ResponseContainer LoRa_E220::receiveMessageRSSI(){
|
||||
return LoRa_E220::receiveMessageComplete(true);
|
||||
}
|
||||
ResponseContainer LoRa_E220::receiveMessage() { return LoRa_E220::receiveMessageComplete(false); }
|
||||
ResponseContainer LoRa_E220::receiveMessageRSSI() { return LoRa_E220::receiveMessageComplete(true); }
|
||||
|
||||
ResponseContainer LoRa_E220::receiveMessageComplete(bool rssiEnabled) {
|
||||
ResponseContainer rc;
|
||||
rc.status.code = E220_SUCCESS;
|
||||
std::string tmpData = this->serialDef.stream->readstd::string();
|
||||
|
||||
DEBUG_PRINTLN(tmpData);
|
||||
ESP_LOGD(TAG, tmpData);
|
||||
|
||||
if (rssiEnabled) {
|
||||
rc.rssi = tmpData.charAt(tmpData.length() - 1);
|
||||
|
@ -759,7 +730,6 @@ ResponseContainer LoRa_E220::receiveInitialMessage(uint8_t size){
|
|||
return rc;
|
||||
}
|
||||
|
||||
|
||||
ResponseStructContainer LoRa_E220::receiveMessage(const uint8_t size) {
|
||||
return LoRa_E220::receiveMessageComplete(size, false);
|
||||
}
|
||||
|
@ -777,7 +747,6 @@ ResponseStructContainer LoRa_E220::receiveMessageComplete(const uint8_t size, bo
|
|||
}
|
||||
|
||||
if (rssiEnabled) {
|
||||
|
||||
char rssi[1];
|
||||
this->serialDef.stream->readBytes(rssi, 1);
|
||||
rc.rssi = rssi[0];
|
||||
|
@ -790,34 +759,36 @@ ResponseStructContainer LoRa_E220::receiveMessageComplete(const uint8_t size, bo
|
|||
ResponseStatus LoRa_E220::sendMessage(const void *message, const uint8_t size) {
|
||||
ResponseStatus status;
|
||||
status.code = this->sendStruct((uint8_t *) message, size);
|
||||
if (status.code!=E220_SUCCESS) return status;
|
||||
if (status.code != E220_SUCCESS)
|
||||
return status;
|
||||
|
||||
return status;
|
||||
}
|
||||
ResponseStatus LoRa_E220::sendMessage(const std::string message) {
|
||||
DEBUG_PRINT(F("Send message: "));
|
||||
DEBUG_PRINT(message);
|
||||
ESP_LOGD(TAG, F("Send message: "));
|
||||
ESP_LOGD(TAG, message);
|
||||
byte size = message.length(); // sizeof(message.c_str())+1;
|
||||
DEBUG_PRINT(F(" size: "));
|
||||
DEBUG_PRINTLN(size);
|
||||
ESP_LOGD(TAG, F(" size: "));
|
||||
ESP_LOGD(TAG, size);
|
||||
char messageFixed[size];
|
||||
memcpy(messageFixed, message.c_str(), size);
|
||||
DEBUG_PRINTLN(F(" memcpy "));
|
||||
ESP_LOGD(TAG, F(" memcpy "));
|
||||
|
||||
ResponseStatus status;
|
||||
status.code = this->sendStruct((uint8_t *) &messageFixed, size);
|
||||
if (status.code!=E220_SUCCESS) return status;
|
||||
if (status.code != E220_SUCCESS)
|
||||
return status;
|
||||
|
||||
// free(messageFixed);
|
||||
return status;
|
||||
}
|
||||
|
||||
ResponseStatus LoRa_E220::sendFixedMessage(byte ADDH, byte ADDL, byte CHAN, const std::string message) {
|
||||
// DEBUG_PRINT("std::string/size: ");
|
||||
// DEBUG_PRINT(message);
|
||||
// DEBUG_PRINT("/");
|
||||
// ESP_LOGD(TAG,"std::string/size: ");
|
||||
// ESP_LOGD(TAG,message);
|
||||
// ESP_LOGD(TAG,"/");
|
||||
byte size = message.length(); // sizeof(message.c_str())+1;
|
||||
// DEBUG_PRINTLN(size);
|
||||
// ESP_LOGD(TAG, size);
|
||||
//
|
||||
// #pragma pack(push, 1)
|
||||
// struct FixedStransmissionstd::string {
|
||||
|
@ -835,8 +806,8 @@ ResponseStatus LoRa_E220::sendFixedMessage(byte ADDH, byte ADDL, byte CHAN, cons
|
|||
// memcpy(fixedStransmission.message, (char*)msg, size);
|
||||
//// fixedStransmission.message = message;
|
||||
//
|
||||
// DEBUG_PRINT("Message: ");
|
||||
// DEBUG_PRINTLN(fixedStransmission.message);
|
||||
// ESP_LOGD(TAG,"Message: ");
|
||||
// ESP_LOGD(TAG, fixedStransmission.message);
|
||||
//
|
||||
// ResponseStatus status;
|
||||
// status.code = this->sendStruct((uint8_t *)&fixedStransmission, sizeof(fixedStransmission));
|
||||
|
@ -851,8 +822,7 @@ ResponseStatus LoRa_E220::sendBroadcastFixedMessage(byte CHAN, const std::string
|
|||
return this->sendFixedMessage(BROADCAST_ADDRESS, BROADCAST_ADDRESS, CHAN, message);
|
||||
}
|
||||
|
||||
typedef struct fixedStransmission
|
||||
{
|
||||
typedef struct fixedStransmission {
|
||||
byte ADDH = 0;
|
||||
byte ADDL = 0;
|
||||
byte CHAN = 0;
|
||||
|
@ -874,9 +844,7 @@ ResponseStatus LoRa_E220::sendFixedMessage( byte ADDH,byte ADDL, byte CHAN, cons
|
|||
// } fixedStransmission;
|
||||
// #pragma pack(pop)
|
||||
|
||||
|
||||
DEBUG_PRINT(ADDH);
|
||||
|
||||
ESP_LOGD(TAG, ADDH);
|
||||
|
||||
FixedStransmission *fixedStransmission = init_stack(size);
|
||||
|
||||
|
@ -901,18 +869,19 @@ ResponseStatus LoRa_E220::sendFixedMessage( byte ADDH,byte ADDL, byte CHAN, cons
|
|||
|
||||
free(fixedStransmission);
|
||||
|
||||
if (status.code!=E220_SUCCESS) return status;
|
||||
if (status.code != E220_SUCCESS)
|
||||
return status;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
ConfigurationMessage *init_stack_conf(int m) {
|
||||
ConfigurationMessage *st = (ConfigurationMessage *) malloc(sizeof(ConfigurationMessage) + m * sizeof(int));
|
||||
return st;
|
||||
}
|
||||
|
||||
ResponseStatus LoRa_E220::sendConfigurationMessage( byte ADDH,byte ADDL, byte CHAN, Configuration *configuration, PROGRAM_COMMAND programCommand){
|
||||
ResponseStatus LoRa_E220::sendConfigurationMessage(byte ADDH, byte ADDL, byte CHAN, Configuration *configuration,
|
||||
PROGRAM_COMMAND programCommand) {
|
||||
ResponseStatus rc;
|
||||
|
||||
// rc.code = this->setMode(MODE_2_PROGRAM);
|
||||
|
@ -926,13 +895,12 @@ ResponseStatus LoRa_E220::sendConfigurationMessage( byte ADDH,byte ADDL, byte CH
|
|||
|
||||
// fixedStransmission.message = &message;
|
||||
|
||||
|
||||
memcpy(fixedStransmission->message, (unsigned char *) configuration, sizeof(Configuration));
|
||||
|
||||
fixedStransmission->specialCommand1 = SPECIAL_WIFI_CONF_COMMAND;
|
||||
fixedStransmission->specialCommand2 = SPECIAL_WIFI_CONF_COMMAND;
|
||||
|
||||
DEBUG_PRINTLN(sizeof(Configuration)+2);
|
||||
ESP_LOGD(TAG, sizeof(Configuration) + 2);
|
||||
|
||||
rc = sendFixedMessage(ADDH, ADDL, CHAN, fixedStransmission, sizeof(Configuration) + 2);
|
||||
//
|
||||
|
@ -951,15 +919,13 @@ ResponseStatus LoRa_E220::sendBroadcastFixedMessage(byte CHAN, const void *messa
|
|||
|
||||
#define KeeLoq_NLF 0x3A5C742E
|
||||
|
||||
unsigned long LoRa_E220::encrypt(unsigned long data)
|
||||
{
|
||||
unsigned long LoRa_E220::encrypt(unsigned long data) {
|
||||
unsigned long x = data;
|
||||
unsigned long r;
|
||||
int keyBitNo, index;
|
||||
unsigned long keyBitVal, bitVal;
|
||||
|
||||
for (r = 0; r < 528; r++)
|
||||
{
|
||||
for (r = 0; r < 528; r++) {
|
||||
keyBitNo = r & 63;
|
||||
if (keyBitNo < 32)
|
||||
keyBitVal = bitRead(this->halfKeyloqKey, keyBitNo); // key low
|
||||
|
@ -972,15 +938,13 @@ unsigned long LoRa_E220::encrypt(unsigned long data)
|
|||
return x;
|
||||
}
|
||||
|
||||
unsigned long LoRa_E220::decrypt(unsigned long data)
|
||||
{
|
||||
unsigned long LoRa_E220::decrypt(unsigned long data) {
|
||||
unsigned long x = data;
|
||||
unsigned long r;
|
||||
int keyBitNo, index;
|
||||
unsigned long keyBitVal, bitVal;
|
||||
|
||||
for (r = 0; r < 528; r++)
|
||||
{
|
||||
for (r = 0; r < 528; r++) {
|
||||
keyBitNo = (15 - r) & 63;
|
||||
if (keyBitNo < 32)
|
||||
keyBitVal = bitRead(this->halfKeyloqKey, keyBitNo); // key low
|
||||
|
@ -994,29 +958,68 @@ unsigned long LoRa_E220::decrypt(unsigned long data)
|
|||
}
|
||||
#ifdef LoRa_E220_DEBUG
|
||||
void LoRa_E220::printParameters(struct Configuration *configuration) {
|
||||
DEBUG_PRINTLN("----------------------------------------");
|
||||
ESP_LOGD(TAG, "----------------------------------------");
|
||||
|
||||
DEBUG_PRINT(F("HEAD : ")); DEBUG_PRINT(configuration->COMMAND, HEX);DEBUG_PRINT(" ");DEBUG_PRINT(configuration->STARTING_ADDRESS, HEX);DEBUG_PRINT(" ");DEBUG_PRINTLN(configuration->LENGHT, HEX);
|
||||
DEBUG_PRINTLN(F(" "));
|
||||
DEBUG_PRINT(F("AddH : ")); DEBUG_PRINTLN(configuration->ADDH, HEX);
|
||||
DEBUG_PRINT(F("AddL : ")); DEBUG_PRINTLN(configuration->ADDL, HEX);
|
||||
DEBUG_PRINTLN(F(" "));
|
||||
DEBUG_PRINT(F("Chan : ")); DEBUG_PRINT(configuration->CHAN, DEC); DEBUG_PRINT(" -> "); DEBUG_PRINTLN(configuration->getChannelDescription());
|
||||
DEBUG_PRINTLN(F(" "));
|
||||
DEBUG_PRINT(F("SpeedParityBit : ")); DEBUG_PRINT(configuration->SPED.uartParity, BIN);DEBUG_PRINT(" -> "); DEBUG_PRINTLN(configuration->SPED.getUARTParityDescription());
|
||||
DEBUG_PRINT(F("SpeedUARTDatte : ")); DEBUG_PRINT(configuration->SPED.uartBaudRate, BIN);DEBUG_PRINT(" -> "); DEBUG_PRINTLN(configuration->SPED.getUARTBaudRateDescription());
|
||||
DEBUG_PRINT(F("SpeedAirDataRate : ")); DEBUG_PRINT(configuration->SPED.airDataRate, BIN);DEBUG_PRINT(" -> "); DEBUG_PRINTLN(configuration->SPED.getAirDataRateDescription());
|
||||
DEBUG_PRINTLN(F(" "));
|
||||
DEBUG_PRINT(F("OptionSubPacketSett: ")); DEBUG_PRINT(configuration->OPTION.subPacketSetting, BIN);DEBUG_PRINT(" -> "); DEBUG_PRINTLN(configuration->OPTION.getSubPacketSetting());
|
||||
DEBUG_PRINT(F("OptionTranPower : ")); DEBUG_PRINT(configuration->OPTION.transmissionPower, BIN);DEBUG_PRINT(" -> "); DEBUG_PRINTLN(configuration->OPTION.getTransmissionPowerDescription());
|
||||
DEBUG_PRINT(F("OptionRSSIAmbientNo: ")); DEBUG_PRINT(configuration->OPTION.RSSIAmbientNoise, BIN);DEBUG_PRINT(" -> "); DEBUG_PRINTLN(configuration->OPTION.getRSSIAmbientNoiseEnable());
|
||||
DEBUG_PRINTLN(F(" "));
|
||||
DEBUG_PRINT(F("TransModeWORPeriod : ")); DEBUG_PRINT(configuration->TRANSMISSION_MODE.WORPeriod, BIN);DEBUG_PRINT(" -> "); DEBUG_PRINTLN(configuration->TRANSMISSION_MODE.getWORPeriodByParamsDescription());
|
||||
DEBUG_PRINT(F("TransModeEnableLBT : ")); DEBUG_PRINT(configuration->TRANSMISSION_MODE.enableLBT, BIN);DEBUG_PRINT(" -> "); DEBUG_PRINTLN(configuration->TRANSMISSION_MODE.getLBTEnableByteDescription());
|
||||
DEBUG_PRINT(F("TransModeEnableRSSI: ")); DEBUG_PRINT(configuration->TRANSMISSION_MODE.enableRSSI, BIN);DEBUG_PRINT(" -> "); DEBUG_PRINTLN(configuration->TRANSMISSION_MODE.getRSSIEnableByteDescription());
|
||||
DEBUG_PRINT(F("TransModeFixedTrans: ")); DEBUG_PRINT(configuration->TRANSMISSION_MODE.fixedTransmission, BIN);DEBUG_PRINT(" -> "); DEBUG_PRINTLN(configuration->TRANSMISSION_MODE.getFixedTransmissionDescription());
|
||||
ESP_LOGD(TAG, F("HEAD : "));
|
||||
ESP_LOGD(TAG, configuration->COMMAND, HEX);
|
||||
ESP_LOGD(TAG, " ");
|
||||
ESP_LOGD(TAG, configuration->STARTING_ADDRESS, HEX);
|
||||
ESP_LOGD(TAG, " ");
|
||||
ESP_LOGD(TAG, configuration->LENGHT, HEX);
|
||||
ESP_LOGD(TAG, F(" "));
|
||||
ESP_LOGD(TAG, F("AddH : "));
|
||||
ESP_LOGD(TAG, configuration->ADDH, HEX);
|
||||
ESP_LOGD(TAG, F("AddL : "));
|
||||
ESP_LOGD(TAG, configuration->ADDL, HEX);
|
||||
ESP_LOGD(TAG, F(" "));
|
||||
ESP_LOGD(TAG, F("Chan : "));
|
||||
ESP_LOGD(TAG, configuration->CHAN, DEC);
|
||||
ESP_LOGD(TAG, " -> ");
|
||||
ESP_LOGD(TAG, configuration->getChannelDescription());
|
||||
ESP_LOGD(TAG, F(" "));
|
||||
ESP_LOGD(TAG, F("SpeedParityBit : "));
|
||||
ESP_LOGD(TAG, configuration->SPED.uartParity, BIN);
|
||||
ESP_LOGD(TAG, " -> ");
|
||||
ESP_LOGD(TAG, configuration->SPED.getUARTParityDescription());
|
||||
ESP_LOGD(TAG, F("SpeedUARTDatte : "));
|
||||
ESP_LOGD(TAG, configuration->SPED.uartBaudRate, BIN);
|
||||
ESP_LOGD(TAG, " -> ");
|
||||
ESP_LOGD(TAG, configuration->SPED.getUARTBaudRateDescription());
|
||||
ESP_LOGD(TAG, F("SpeedAirDataRate : "));
|
||||
ESP_LOGD(TAG, configuration->SPED.airDataRate, BIN);
|
||||
ESP_LOGD(TAG, " -> ");
|
||||
ESP_LOGD(TAG, configuration->SPED.getAirDataRateDescription());
|
||||
ESP_LOGD(TAG, F(" "));
|
||||
ESP_LOGD(TAG, F("OptionSubPacketSett: "));
|
||||
ESP_LOGD(TAG, configuration->OPTION.subPacketSetting, BIN);
|
||||
ESP_LOGD(TAG, " -> ");
|
||||
ESP_LOGD(TAG, configuration->OPTION.getSubPacketSetting());
|
||||
ESP_LOGD(TAG, F("OptionTranPower : "));
|
||||
ESP_LOGD(TAG, configuration->OPTION.transmissionPower, BIN);
|
||||
ESP_LOGD(TAG, " -> ");
|
||||
ESP_LOGD(TAG, configuration->OPTION.getTransmissionPowerDescription());
|
||||
ESP_LOGD(TAG, F("OptionRSSIAmbientNo: "));
|
||||
ESP_LOGD(TAG, configuration->OPTION.RSSIAmbientNoise, BIN);
|
||||
ESP_LOGD(TAG, " -> ");
|
||||
ESP_LOGD(TAG, configuration->OPTION.getRSSIAmbientNoiseEnable());
|
||||
ESP_LOGD(TAG, F(" "));
|
||||
ESP_LOGD(TAG, F("TransModeWORPeriod : "));
|
||||
ESP_LOGD(TAG, configuration->TRANSMISSION_MODE.WORPeriod, BIN);
|
||||
ESP_LOGD(TAG, " -> ");
|
||||
ESP_LOGD(TAG, configuration->TRANSMISSION_MODE.getWORPeriodByParamsDescription());
|
||||
ESP_LOGD(TAG, F("TransModeEnableLBT : "));
|
||||
ESP_LOGD(TAG, configuration->TRANSMISSION_MODE.enableLBT, BIN);
|
||||
ESP_LOGD(TAG, " -> ");
|
||||
ESP_LOGD(TAG, configuration->TRANSMISSION_MODE.getLBTEnableByteDescription());
|
||||
ESP_LOGD(TAG, F("TransModeEnableRSSI: "));
|
||||
ESP_LOGD(TAG, configuration->TRANSMISSION_MODE.enableRSSI, BIN);
|
||||
ESP_LOGD(TAG, " -> ");
|
||||
ESP_LOGD(TAG, configuration->TRANSMISSION_MODE.getRSSIEnableByteDescription());
|
||||
ESP_LOGD(TAG, F("TransModeFixedTrans: "));
|
||||
ESP_LOGD(TAG, configuration->TRANSMISSION_MODE.fixedTransmission, BIN);
|
||||
ESP_LOGD(TAG, " -> ");
|
||||
ESP_LOGD(TAG, configuration->TRANSMISSION_MODE.getFixedTransmissionDescription());
|
||||
|
||||
|
||||
DEBUG_PRINTLN("----------------------------------------");
|
||||
ESP_LOGD(TAG, "----------------------------------------");
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,22 +1,14 @@
|
|||
#ifndef LoRa_E220_h
|
||||
#define LoRa_E220_h
|
||||
|
||||
#if !USE_ESP32 && !defined(__STM32F1__) && !defined(__STM32F4__)
|
||||
#define ACTIVATE_SOFTWARE_SERIAL
|
||||
#endif
|
||||
#ifdef USE_ESP32
|
||||
#define HARDWARE_SERIAL_SELECTABLE_PIN
|
||||
#endif
|
||||
|
||||
#ifdef ACTIVATE_SOFTWARE_SERIAL
|
||||
#include <SoftwareSerial.h>
|
||||
#endif
|
||||
|
||||
#include "state_naming.h"
|
||||
|
||||
#include "Arduino.h"
|
||||
|
||||
|
||||
#define MAX_SIZE_TX_PACKET 200
|
||||
|
||||
// Uncomment to enable printing out nice debug messages.
|
||||
|
@ -25,15 +17,7 @@
|
|||
// Define where debug output will be printed.
|
||||
#define DEBUG_PRINTER Serial
|
||||
|
||||
// Setup debug printing macros.
|
||||
#ifdef LoRa_E220_DEBUG
|
||||
#define DEBUG_PRINT(...) { DEBUG_PRINTER.print(__VA_ARGS__); }
|
||||
#define DEBUG_PRINTLN(...) { DEBUG_PRINTER.println(__VA_ARGS__); }
|
||||
#else
|
||||
#define DEBUG_PRINT(...) {}
|
||||
#define DEBUG_PRINTLN(...) {}
|
||||
#endif
|
||||
|
||||
static const char *const TAG = "ebyte_lora_e220";
|
||||
enum MODE_TYPE {
|
||||
MODE_0_NORMAL = 0,
|
||||
MODE_0_TRANSMISSION = 0,
|
||||
|
@ -80,32 +64,21 @@ enum PACKET_LENGHT {
|
|||
#pragma pack(push, 1)
|
||||
struct Speed {
|
||||
uint8_t airDataRate : 3; // bit 0-2
|
||||
std::string getAirDataRateDescription() {
|
||||
return getAirDataRateDescriptionByParams(this->airDataRate);
|
||||
}
|
||||
std::string getAirDataRateDescription() { return getAirDataRateDescriptionByParams(this->airDataRate); }
|
||||
|
||||
uint8_t uartParity : 2; // bit 3-4
|
||||
std::string getUARTParityDescription() {
|
||||
return getUARTParityDescriptionByParams(this->uartParity);
|
||||
}
|
||||
std::string getUARTParityDescription() { return getUARTParityDescriptionByParams(this->uartParity); }
|
||||
|
||||
uint8_t uartBaudRate : 3; // bit 5-7
|
||||
std::string getUARTBaudRateDescription() {
|
||||
return getUARTBaudRateDescriptionByParams(this->uartBaudRate);
|
||||
}
|
||||
|
||||
std::string getUARTBaudRateDescription() { return getUARTBaudRateDescriptionByParams(this->uartBaudRate); }
|
||||
};
|
||||
|
||||
struct TransmissionMode {
|
||||
byte WORPeriod : 3; // bit 2,1,0
|
||||
std::string getWORPeriodByParamsDescription() {
|
||||
return getWORPeriodByParams(this->WORPeriod);
|
||||
}
|
||||
std::string getWORPeriodByParamsDescription() { return getWORPeriodByParams(this->WORPeriod); }
|
||||
byte reserved2 : 1; // bit 3
|
||||
byte enableLBT : 1; // bit 4
|
||||
std::string getLBTEnableByteDescription() {
|
||||
return getLBTEnableByteByParams(this->enableLBT);
|
||||
}
|
||||
std::string getLBTEnableByteDescription() { return getLBTEnableByteByParams(this->enableLBT); }
|
||||
byte reserved : 1; // bit 5
|
||||
|
||||
byte fixedTransmission : 1; // bit 6
|
||||
|
@ -114,9 +87,7 @@ struct TransmissionMode {
|
|||
}
|
||||
|
||||
byte enableRSSI : 1; // bit 7
|
||||
std::string getRSSIEnableByteDescription() {
|
||||
return getRSSIEnableByteByParams(this->enableRSSI);
|
||||
}
|
||||
std::string getRSSIEnableByteDescription() { return getRSSIEnableByteByParams(this->enableRSSI); }
|
||||
};
|
||||
|
||||
struct Option {
|
||||
|
@ -127,15 +98,10 @@ struct Option {
|
|||
uint8_t reserved : 3; // bit 2-4
|
||||
|
||||
uint8_t RSSIAmbientNoise : 1; // bit 5
|
||||
std::string getRSSIAmbientNoiseEnable() {
|
||||
return getRSSIAmbientNoiseEnableByParams(this->RSSIAmbientNoise);
|
||||
}
|
||||
std::string getRSSIAmbientNoiseEnable() { return getRSSIAmbientNoiseEnableByParams(this->RSSIAmbientNoise); }
|
||||
|
||||
uint8_t subPacketSetting : 2; // bit 6-7
|
||||
std::string getSubPacketSetting() {
|
||||
return getSubPacketSettingByParams(this->subPacketSetting);
|
||||
}
|
||||
|
||||
std::string getSubPacketSetting() { return getSubPacketSettingByParams(this->subPacketSetting); }
|
||||
};
|
||||
|
||||
struct Crypt {
|
||||
|
@ -155,9 +121,7 @@ struct Configuration {
|
|||
struct Option OPTION;
|
||||
|
||||
byte CHAN = 0;
|
||||
std::string getChannelDescription() {
|
||||
return std::string(this->CHAN + OPERATING_FREQUENCY) + F("MHz");
|
||||
}
|
||||
std::string getChannelDescription() { return std::string(this->CHAN + OPERATING_FREQUENCY) + F("MHz"); }
|
||||
|
||||
struct TransmissionMode TRANSMISSION_MODE;
|
||||
|
||||
|
@ -176,18 +140,14 @@ struct ModuleInformation {
|
|||
|
||||
struct ResponseStatus {
|
||||
std::std::string code;
|
||||
std::std::string getResponseDescription() {
|
||||
return getResponseDescriptionByParams(this->code);
|
||||
}
|
||||
std::std::string getResponseDescription() { return getResponseDescriptionByParams(this->code); }
|
||||
};
|
||||
|
||||
struct ResponseStructContainer {
|
||||
void *data;
|
||||
byte rssi;
|
||||
ResponseStatus status;
|
||||
void close() {
|
||||
free(this->data);
|
||||
}
|
||||
void close() { free(this->data); }
|
||||
};
|
||||
struct ResponseContainer {
|
||||
std::string data;
|
||||
|
@ -195,8 +155,7 @@ struct ResponseContainer {
|
|||
ResponseStatus status;
|
||||
};
|
||||
|
||||
struct ConfigurationMessage
|
||||
{
|
||||
struct ConfigurationMessage {
|
||||
byte specialCommand1 = 0xCF;
|
||||
byte specialCommand2 = 0xCF;
|
||||
|
||||
|
@ -213,32 +172,17 @@ struct ConfigurationMessage
|
|||
|
||||
class LoRa_E220 {
|
||||
public:
|
||||
#ifdef ACTIVATE_SOFTWARE_SERIAL
|
||||
LoRa_E220(byte txE220pin, byte rxE220pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
|
||||
LoRa_E220(byte txE220pin, byte rxE220pin, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
|
||||
LoRa_E220(byte txE220pin, byte rxE220pin, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
|
||||
#endif
|
||||
|
||||
LoRa_E220(HardwareSerial *serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
|
||||
LoRa_E220(HardwareSerial *serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
|
||||
LoRa_E220(HardwareSerial *serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
|
||||
|
||||
#ifdef HARDWARE_SERIAL_SELECTABLE_PIN
|
||||
LoRa_E220(byte txE220pin, byte rxE220pin, HardwareSerial* serial, UART_BPS_RATE bpsRate, uint32_t serialConfig = SERIAL_8N1);
|
||||
LoRa_E220(byte txE220pin, byte rxE220pin, HardwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate, uint32_t serialConfig = SERIAL_8N1);
|
||||
LoRa_E220(byte txE220pin, byte rxE220pin, HardwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate, uint32_t serialConfig = SERIAL_8N1);
|
||||
LoRa_E220(byte txE220pin, byte rxE220pin, HardwareSerial *serial, UART_BPS_RATE bpsRate,
|
||||
uint32_t serialConfig = SERIAL_8N1);
|
||||
LoRa_E220(byte txE220pin, byte rxE220pin, HardwareSerial *serial, byte auxPin, UART_BPS_RATE bpsRate,
|
||||
uint32_t serialConfig = SERIAL_8N1);
|
||||
LoRa_E220(byte txE220pin, byte rxE220pin, HardwareSerial *serial, byte auxPin, byte m0Pin, byte m1Pin,
|
||||
UART_BPS_RATE bpsRate, uint32_t serialConfig = SERIAL_8N1);
|
||||
#endif
|
||||
|
||||
#ifdef ACTIVATE_SOFTWARE_SERIAL
|
||||
LoRa_E220(SoftwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
|
||||
LoRa_E220(SoftwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
|
||||
LoRa_E220(SoftwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
|
||||
#endif
|
||||
|
||||
// LoRa_E220(byte txE220pin, byte rxE220pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600, MODE_TYPE mode = MODE_0_NORMAL);
|
||||
// LoRa_E220(HardwareSerial* serial = &Serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600, MODE_TYPE mode = MODE_0_NORMAL);
|
||||
// LoRa_E220(SoftwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600, MODE_TYPE mode = MODE_0_NORMAL);
|
||||
|
||||
bool begin();
|
||||
Status setMode(MODE_TYPE mode);
|
||||
MODE_TYPE getMode();
|
||||
|
@ -270,16 +214,13 @@ class LoRa_E220 {
|
|||
|
||||
ResponseContainer receiveInitialMessage(const uint8_t size);
|
||||
|
||||
ResponseStatus sendConfigurationMessage( byte ADDH,byte ADDL, byte CHAN, Configuration *configuration, PROGRAM_COMMAND programCommand = WRITE_CFG_PWR_DWN_SAVE);
|
||||
ResponseStatus sendConfigurationMessage(byte ADDH, byte ADDL, byte CHAN, Configuration *configuration,
|
||||
PROGRAM_COMMAND programCommand = WRITE_CFG_PWR_DWN_SAVE);
|
||||
|
||||
int available();
|
||||
|
||||
private:
|
||||
HardwareSerial *hs;
|
||||
|
||||
#ifdef ACTIVATE_SOFTWARE_SERIAL
|
||||
SoftwareSerial* ss;
|
||||
#endif
|
||||
|
||||
bool isSoftwareSerial = true;
|
||||
|
||||
int8_t txE220pin = -1;
|
||||
|
@ -300,34 +241,23 @@ class LoRa_E220 {
|
|||
UART_BPS_RATE bpsRate = UART_BPS_RATE_9600;
|
||||
|
||||
struct NeedsStream {
|
||||
template<typename T>
|
||||
void begin(T &t, uint32_t baud) {
|
||||
DEBUG_PRINTLN("Begin ");
|
||||
template<typename T> void begin(T &t, uint32_t baud) {
|
||||
ESP_LOGD(TAG, "Begin ");
|
||||
t.setTimeout(500);
|
||||
t.begin(baud);
|
||||
stream = &t;
|
||||
}
|
||||
|
||||
#ifdef HARDWARE_SERIAL_SELECTABLE_PIN
|
||||
// template< typename T >
|
||||
// void begin( T &t, uint32_t baud, SerialConfig config ){
|
||||
// DEBUG_PRINTLN("Begin ");
|
||||
// t.setTimeout(500);
|
||||
// t.begin(baud, config);
|
||||
// stream = &t;
|
||||
// }
|
||||
//
|
||||
template< typename T >
|
||||
void begin( T &t, uint32_t baud, uint32_t config ) {
|
||||
DEBUG_PRINTLN("Begin ");
|
||||
template<typename T> void begin(T &t, uint32_t baud, uint32_t config) {
|
||||
ESP_LOGD(TAG, "Begin ");
|
||||
t.setTimeout(500);
|
||||
t.begin(baud, config);
|
||||
stream = &t;
|
||||
}
|
||||
|
||||
template< typename T >
|
||||
void begin( T &t, uint32_t baud, uint32_t config, int8_t txE220pin, int8_t rxE220pin ) {
|
||||
DEBUG_PRINTLN("Begin ");
|
||||
template<typename T> void begin(T &t, uint32_t baud, uint32_t config, int8_t txE220pin, int8_t rxE220pin) {
|
||||
ESP_LOGD(TAG, "Begin ");
|
||||
t.setTimeout(500);
|
||||
t.begin(baud, config, txE220pin, rxE220pin);
|
||||
stream = &t;
|
||||
|
|
|
@ -39,86 +39,77 @@ typedef enum RESPONSE_STATUS {
|
|||
ERR_E220_PACKET_TOO_BIG
|
||||
} Status;
|
||||
|
||||
static String getResponseDescriptionByParams(byte status){
|
||||
switch (status)
|
||||
{
|
||||
static std::string getResponseDescriptionByParams(byte status) {
|
||||
switch (status) {
|
||||
case E220_SUCCESS:
|
||||
return F("Success");
|
||||
return "Success";
|
||||
break;
|
||||
case ERR_E220_UNKNOWN:
|
||||
return F("Unknown");
|
||||
return "Unknown";
|
||||
break;
|
||||
case ERR_E220_NOT_SUPPORT:
|
||||
return F("Not support!");
|
||||
return "Not support!";
|
||||
break;
|
||||
case ERR_E220_NOT_IMPLEMENT:
|
||||
return F("Not implement");
|
||||
return "Not implement";
|
||||
break;
|
||||
case ERR_E220_NOT_INITIAL:
|
||||
return F("Not initial!");
|
||||
return "Not initial!";
|
||||
break;
|
||||
case ERR_E220_INVALID_PARAM:
|
||||
return F("Invalid param!");
|
||||
return "Invalid param!";
|
||||
break;
|
||||
case ERR_E220_DATA_SIZE_NOT_MATCH:
|
||||
return F("Data size not match!");
|
||||
return "Data size not match!";
|
||||
break;
|
||||
case ERR_E220_BUF_TOO_SMALL:
|
||||
return F("Buff too small!");
|
||||
return "Buff too small!";
|
||||
break;
|
||||
case ERR_E220_TIMEOUT:
|
||||
return F("Timeout!!");
|
||||
return "Timeout!!";
|
||||
break;
|
||||
case ERR_E220_HARDWARE:
|
||||
return F("Hardware error!");
|
||||
return "Hardware error!";
|
||||
break;
|
||||
case ERR_E220_HEAD_NOT_RECOGNIZED:
|
||||
return F("Save mode returned not recognized!");
|
||||
return "Save mode returned not recognized!";
|
||||
break;
|
||||
case ERR_E220_NO_RESPONSE_FROM_DEVICE:
|
||||
return F("No response from device! (Check wiring)");
|
||||
return "No response from device! (Check wiring)";
|
||||
break;
|
||||
case ERR_E220_WRONG_UART_CONFIG:
|
||||
return F("Wrong UART configuration! (BPS must be 9600 for configuration)");
|
||||
return "Wrong UART configuration! (BPS must be 9600 for configuration)";
|
||||
break;
|
||||
case ERR_E220_PACKET_TOO_BIG:
|
||||
return F("The device support only 200byte of data transmission!");
|
||||
return "The device support only 200byte of data transmission!";
|
||||
break;
|
||||
default:
|
||||
return F("Invalid status!");
|
||||
return "Invalid status!";
|
||||
}
|
||||
}
|
||||
|
||||
enum E220_UART_PARITY
|
||||
{
|
||||
MODE_00_8N1 = 0b00,
|
||||
MODE_01_8O1 = 0b01,
|
||||
MODE_10_8E1 = 0b10,
|
||||
MODE_11_8N1 = 0b11
|
||||
};
|
||||
enum E220_UART_PARITY { MODE_00_8N1 = 0b00, MODE_01_8O1 = 0b01, MODE_10_8E1 = 0b10, MODE_11_8N1 = 0b11 };
|
||||
|
||||
static String getUARTParityDescriptionByParams(byte uartParity){
|
||||
switch (uartParity)
|
||||
{
|
||||
static std::string getUARTParityDescriptionByParams(byte uartParity) {
|
||||
switch (uartParity) {
|
||||
case MODE_00_8N1:
|
||||
return F("8N1 (Default)");
|
||||
return "8N1 (Default)";
|
||||
break;
|
||||
case MODE_01_8O1:
|
||||
return F("8O1");
|
||||
return "8O1";
|
||||
break;
|
||||
case MODE_10_8E1:
|
||||
return F("8E1");
|
||||
return "8E1";
|
||||
break;
|
||||
case MODE_11_8N1:
|
||||
return F("8N1 (equal to 00");
|
||||
return "8N1 (equal to 00";
|
||||
break;
|
||||
default:
|
||||
return F("Invalid UART Parity!");
|
||||
return "Invalid UART Parity!";
|
||||
}
|
||||
}
|
||||
|
||||
enum UART_BPS_TYPE
|
||||
{
|
||||
enum UART_BPS_TYPE {
|
||||
UART_BPS_1200 = 0b000,
|
||||
UART_BPS_2400 = 0b001,
|
||||
UART_BPS_4800 = 0b010,
|
||||
|
@ -129,8 +120,7 @@ enum UART_BPS_TYPE
|
|||
UART_BPS_115200 = 0b111
|
||||
};
|
||||
|
||||
enum UART_BPS_RATE
|
||||
{
|
||||
enum UART_BPS_RATE {
|
||||
UART_BPS_RATE_1200 = 1200,
|
||||
UART_BPS_RATE_2400 = 2400,
|
||||
UART_BPS_RATE_4800 = 4800,
|
||||
|
@ -141,41 +131,38 @@ enum UART_BPS_RATE
|
|||
UART_BPS_RATE_115200 = 115200
|
||||
};
|
||||
|
||||
static String getUARTBaudRateDescriptionByParams(byte uartBaudRate)
|
||||
{
|
||||
switch (uartBaudRate)
|
||||
{
|
||||
static std::string getUARTBaudRateDescriptionByParams(byte uartBaudRate) {
|
||||
switch (uartBaudRate) {
|
||||
case UART_BPS_1200:
|
||||
return F("1200bps");
|
||||
return "1200bps";
|
||||
break;
|
||||
case UART_BPS_2400:
|
||||
return F("2400bps");
|
||||
return "2400bps";
|
||||
break;
|
||||
case UART_BPS_4800:
|
||||
return F("4800bps");
|
||||
return "4800bps";
|
||||
break;
|
||||
case UART_BPS_9600:
|
||||
return F("9600bps (default)");
|
||||
return "9600bps (default)";
|
||||
break;
|
||||
case UART_BPS_19200:
|
||||
return F("19200bps");
|
||||
return "19200bps";
|
||||
break;
|
||||
case UART_BPS_38400:
|
||||
return F("38400bps");
|
||||
return "38400bps";
|
||||
break;
|
||||
case UART_BPS_57600:
|
||||
return F("57600bps");
|
||||
return "57600bps";
|
||||
break;
|
||||
case UART_BPS_115200:
|
||||
return F("115200bps");
|
||||
return "115200bps";
|
||||
break;
|
||||
default:
|
||||
return F("Invalid UART Baud Rate!");
|
||||
return "Invalid UART Baud Rate!";
|
||||
}
|
||||
}
|
||||
|
||||
enum AIR_DATA_RATE
|
||||
{
|
||||
enum AIR_DATA_RATE {
|
||||
AIR_DATA_RATE_000_24 = 0b000,
|
||||
AIR_DATA_RATE_001_24 = 0b001,
|
||||
AIR_DATA_RATE_010_24 = 0b010,
|
||||
|
@ -186,37 +173,34 @@ enum AIR_DATA_RATE
|
|||
AIR_DATA_RATE_111_625 = 0b111
|
||||
};
|
||||
|
||||
|
||||
static String getAirDataRateDescriptionByParams(byte airDataRate)
|
||||
{
|
||||
switch (airDataRate)
|
||||
{
|
||||
static std::string getAirDataRateDescriptionByParams(byte airDataRate) {
|
||||
switch (airDataRate) {
|
||||
case AIR_DATA_RATE_000_24:
|
||||
return F("2.4kbps");
|
||||
return "2.4kbps";
|
||||
break;
|
||||
case AIR_DATA_RATE_001_24:
|
||||
return F("2.4kbps");
|
||||
return "2.4kbps";
|
||||
break;
|
||||
case AIR_DATA_RATE_010_24:
|
||||
return F("2.4kbps (default)");
|
||||
return "2.4kbps (default)";
|
||||
break;
|
||||
case AIR_DATA_RATE_011_48:
|
||||
return F("4.8kbps");
|
||||
return "4.8kbps";
|
||||
break;
|
||||
case AIR_DATA_RATE_100_96:
|
||||
return F("9.6kbps");
|
||||
return "9.6kbps";
|
||||
break;
|
||||
case AIR_DATA_RATE_101_192:
|
||||
return F("19.2kbps");
|
||||
return "19.2kbps";
|
||||
break;
|
||||
case AIR_DATA_RATE_110_384:
|
||||
return F("38.4kbps");
|
||||
return "38.4kbps";
|
||||
break;
|
||||
case AIR_DATA_RATE_111_625:
|
||||
return F("62.5kbps");
|
||||
return "62.5kbps";
|
||||
break;
|
||||
default:
|
||||
return F("Invalid Air Data Rate!");
|
||||
return "Invalid Air Data Rate!";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -227,43 +211,36 @@ enum SUB_PACKET_SETTING {
|
|||
SPS_032_11 = 0b11
|
||||
|
||||
};
|
||||
static String getSubPacketSettingByParams(byte subPacketSetting)
|
||||
{
|
||||
switch (subPacketSetting)
|
||||
{
|
||||
static std::string getSubPacketSettingByParams(byte subPacketSetting) {
|
||||
switch (subPacketSetting) {
|
||||
case SPS_200_00:
|
||||
return F("200bytes (default)");
|
||||
return "200bytes (default)";
|
||||
break;
|
||||
case SPS_128_01:
|
||||
return F("128bytes");
|
||||
return "128bytes";
|
||||
break;
|
||||
case SPS_064_10:
|
||||
return F("64bytes");
|
||||
return "64bytes";
|
||||
break;
|
||||
case SPS_032_11:
|
||||
return F("32bytes");
|
||||
return "32bytes";
|
||||
break;
|
||||
default:
|
||||
return F("Invalid Sub Packet Setting!");
|
||||
return "Invalid Sub Packet Setting!";
|
||||
}
|
||||
}
|
||||
|
||||
enum RSSI_AMBIENT_NOISE_ENABLE {
|
||||
RSSI_AMBIENT_NOISE_ENABLED = 0b1,
|
||||
RSSI_AMBIENT_NOISE_DISABLED = 0b0
|
||||
};
|
||||
static String getRSSIAmbientNoiseEnableByParams(byte rssiAmbientNoiseEnabled)
|
||||
{
|
||||
switch (rssiAmbientNoiseEnabled)
|
||||
{
|
||||
enum RSSI_AMBIENT_NOISE_ENABLE { RSSI_AMBIENT_NOISE_ENABLED = 0b1, RSSI_AMBIENT_NOISE_DISABLED = 0b0 };
|
||||
static std::string getRSSIAmbientNoiseEnableByParams(byte rssiAmbientNoiseEnabled) {
|
||||
switch (rssiAmbientNoiseEnabled) {
|
||||
case RSSI_AMBIENT_NOISE_ENABLED:
|
||||
return F("Enabled");
|
||||
return "Enabled";
|
||||
break;
|
||||
case RSSI_AMBIENT_NOISE_DISABLED:
|
||||
return F("Disabled (default)");
|
||||
return "Disabled (default)";
|
||||
break;
|
||||
default:
|
||||
return F("Invalid RSSI Ambient Noise enabled!");
|
||||
return "Invalid RSSI Ambient Noise enabled!";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -278,101 +255,81 @@ enum WOR_PERIOD {
|
|||
WOR_4000_111 = 0b111
|
||||
|
||||
};
|
||||
static String getWORPeriodByParams(byte WORPeriod)
|
||||
{
|
||||
switch (WORPeriod)
|
||||
{
|
||||
static std::string getWORPeriodByParams(byte WORPeriod) {
|
||||
switch (WORPeriod) {
|
||||
case WOR_500_000:
|
||||
return F("500ms");
|
||||
return "500ms";
|
||||
break;
|
||||
case WOR_1000_001:
|
||||
return F("1000ms");
|
||||
return "1000ms";
|
||||
break;
|
||||
case WOR_1500_010:
|
||||
return F("1500ms");
|
||||
return "1500ms";
|
||||
break;
|
||||
case WOR_2000_011:
|
||||
return F("2000ms (default)");
|
||||
return "2000ms (default)";
|
||||
break;
|
||||
case WOR_2500_100:
|
||||
return F("2500ms");
|
||||
return "2500ms";
|
||||
break;
|
||||
case WOR_3000_101:
|
||||
return F("3000ms");
|
||||
return "3000ms";
|
||||
break;
|
||||
case WOR_3500_110:
|
||||
return F("3500ms");
|
||||
return "3500ms";
|
||||
break;
|
||||
case WOR_4000_111:
|
||||
return F("4000ms");
|
||||
return "4000ms";
|
||||
break;
|
||||
default:
|
||||
return F("Invalid WOR period!");
|
||||
return "Invalid WOR period!";
|
||||
}
|
||||
}
|
||||
enum LBT_ENABLE_BYTE {
|
||||
LBT_ENABLED = 0b1,
|
||||
LBT_DISABLED = 0b0
|
||||
};
|
||||
static String getLBTEnableByteByParams(byte LBTEnableByte)
|
||||
{
|
||||
switch (LBTEnableByte)
|
||||
{
|
||||
enum LBT_ENABLE_BYTE { LBT_ENABLED = 0b1, LBT_DISABLED = 0b0 };
|
||||
static std::string getLBTEnableByteByParams(byte LBTEnableByte) {
|
||||
switch (LBTEnableByte) {
|
||||
case LBT_ENABLED:
|
||||
return F("Enabled");
|
||||
return "Enabled";
|
||||
break;
|
||||
case LBT_DISABLED:
|
||||
return F("Disabled (default)");
|
||||
return "Disabled (default)";
|
||||
break;
|
||||
default:
|
||||
return F("Invalid LBT enable byte!");
|
||||
return "Invalid LBT enable byte!";
|
||||
}
|
||||
}
|
||||
|
||||
enum RSSI_ENABLE_BYTE {
|
||||
RSSI_ENABLED = 0b1,
|
||||
RSSI_DISABLED = 0b0
|
||||
};
|
||||
static String getRSSIEnableByteByParams(byte RSSIEnableByte)
|
||||
{
|
||||
switch (RSSIEnableByte)
|
||||
{
|
||||
enum RSSI_ENABLE_BYTE { RSSI_ENABLED = 0b1, RSSI_DISABLED = 0b0 };
|
||||
static std::string getRSSIEnableByteByParams(byte RSSIEnableByte) {
|
||||
switch (RSSIEnableByte) {
|
||||
case RSSI_ENABLED:
|
||||
return F("Enabled");
|
||||
return "Enabled";
|
||||
break;
|
||||
case RSSI_DISABLED:
|
||||
return F("Disabled (default)");
|
||||
return "Disabled (default)";
|
||||
break;
|
||||
default:
|
||||
return F("Invalid RSSI enable byte!");
|
||||
return "Invalid RSSI enable byte!";
|
||||
}
|
||||
}
|
||||
|
||||
enum FIDEX_TRANSMISSION
|
||||
{
|
||||
FT_TRANSPARENT_TRANSMISSION = 0b0,
|
||||
FT_FIXED_TRANSMISSION = 0b1
|
||||
};
|
||||
enum FIDEX_TRANSMISSION { FT_TRANSPARENT_TRANSMISSION = 0b0, FT_FIXED_TRANSMISSION = 0b1 };
|
||||
|
||||
|
||||
static String getFixedTransmissionDescriptionByParams(byte fixedTransmission)
|
||||
{
|
||||
switch (fixedTransmission)
|
||||
{
|
||||
static std::string getFixedTransmissionDescriptionByParams(byte fixedTransmission) {
|
||||
switch (fixedTransmission) {
|
||||
case FT_TRANSPARENT_TRANSMISSION:
|
||||
return F("Transparent transmission (default)");
|
||||
return "Transparent transmission (default)";
|
||||
break;
|
||||
case FT_FIXED_TRANSMISSION:
|
||||
return F("Fixed transmission (first three bytes can be used as high/low address and channel)");
|
||||
return "Fixed transmission (first three bytes can be used as high/low address and channel)";
|
||||
break;
|
||||
default:
|
||||
return F("Invalid fixed transmission param!");
|
||||
return "Invalid fixed transmission param!";
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef E220_22
|
||||
enum TRANSMISSION_POWER
|
||||
{
|
||||
enum TRANSMISSION_POWER {
|
||||
POWER_22 = 0b00,
|
||||
POWER_17 = 0b01,
|
||||
POWER_13 = 0b10,
|
||||
|
@ -380,29 +337,26 @@ static String getFixedTransmissionDescriptionByParams(byte fixedTransmission)
|
|||
|
||||
};
|
||||
|
||||
static String getTransmissionPowerDescriptionByParams(byte transmissionPower)
|
||||
{
|
||||
switch (transmissionPower)
|
||||
{
|
||||
static std::string getTransmissionPowerDescriptionByParams(byte transmissionPower) {
|
||||
switch (transmissionPower) {
|
||||
case POWER_22:
|
||||
return F("22dBm (Default)");
|
||||
return "22dBm (Default)";
|
||||
break;
|
||||
case POWER_17:
|
||||
return F("17dBm");
|
||||
return "17dBm";
|
||||
break;
|
||||
case POWER_13:
|
||||
return F("13dBm");
|
||||
return "13dBm";
|
||||
break;
|
||||
case POWER_10:
|
||||
return F("10dBm");
|
||||
return "10dBm";
|
||||
break;
|
||||
default:
|
||||
return F("Invalid transmission power param");
|
||||
return "Invalid transmission power param";
|
||||
}
|
||||
}
|
||||
#elif defined(E220_30)
|
||||
enum TRANSMISSION_POWER
|
||||
{
|
||||
enum TRANSMISSION_POWER {
|
||||
POWER_30 = 0b00,
|
||||
POWER_27 = 0b01,
|
||||
POWER_24 = 0b10,
|
||||
|
@ -410,29 +364,26 @@ static String getFixedTransmissionDescriptionByParams(byte fixedTransmission)
|
|||
|
||||
};
|
||||
|
||||
static String getTransmissionPowerDescriptionByParams(byte transmissionPower)
|
||||
{
|
||||
switch (transmissionPower)
|
||||
{
|
||||
static std::string getTransmissionPowerDescriptionByParams(byte transmissionPower) {
|
||||
switch (transmissionPower) {
|
||||
case POWER_30:
|
||||
return F("30dBm (Default)");
|
||||
return "30dBm (Default)";
|
||||
break;
|
||||
case POWER_27:
|
||||
return F("27dBm");
|
||||
return "27dBm";
|
||||
break;
|
||||
case POWER_24:
|
||||
return F("24dBm");
|
||||
return "24dBm";
|
||||
break;
|
||||
case POWER_21:
|
||||
return F("21dBm");
|
||||
return "21dBm";
|
||||
break;
|
||||
default:
|
||||
return F("Invalid transmission power param");
|
||||
return "Invalid transmission power param";
|
||||
}
|
||||
}
|
||||
#else
|
||||
enum TRANSMISSION_POWER
|
||||
{
|
||||
enum TRANSMISSION_POWER {
|
||||
POWER_22 = 0b00,
|
||||
POWER_17 = 0b01,
|
||||
POWER_13 = 0b10,
|
||||
|
@ -440,24 +391,22 @@ static String getFixedTransmissionDescriptionByParams(byte fixedTransmission)
|
|||
|
||||
};
|
||||
|
||||
static String getTransmissionPowerDescriptionByParams(byte transmissionPower)
|
||||
{
|
||||
switch (transmissionPower)
|
||||
{
|
||||
static std::string getTransmissionPowerDescriptionByParams(byte transmissionPower) {
|
||||
switch (transmissionPower) {
|
||||
case POWER_22:
|
||||
return F("22dBm (Default)");
|
||||
return "22dBm (Default)";
|
||||
break;
|
||||
case POWER_17:
|
||||
return F("17dBm");
|
||||
return "17dBm";
|
||||
break;
|
||||
case POWER_13:
|
||||
return F("13dBm");
|
||||
return "13dBm";
|
||||
break;
|
||||
case POWER_10:
|
||||
return F("10dBm");
|
||||
return "10dBm";
|
||||
break;
|
||||
default:
|
||||
return F("Invalid transmission power param");
|
||||
return "Invalid transmission power param";
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue