462 lines
8.9 KiB
C
462 lines
8.9 KiB
C
#include "Arduino.h"
|
|
|
|
#ifdef FREQUENCY_433
|
|
#define OPERATING_FREQUENCY 410
|
|
#elif defined(FREQUENCY_400)
|
|
#define OPERATING_FREQUENCY 410
|
|
#elif defined(FREQUENCY_230)
|
|
#define OPERATING_FREQUENCY 220
|
|
#elif defined(FREQUENCY_868)
|
|
#define OPERATING_FREQUENCY 850
|
|
#elif defined(FREQUENCY_915)
|
|
#define OPERATING_FREQUENCY 850
|
|
#else
|
|
#define OPERATING_FREQUENCY 410
|
|
#endif
|
|
|
|
#define BROADCAST_ADDRESS 255
|
|
|
|
typedef enum RESPONSE_STATUS {
|
|
#ifndef ARDUINO_ARCH_STM32
|
|
SUCCESS = 1,
|
|
#endif
|
|
E220_SUCCESS = 1,
|
|
ERR_E220_UNKNOWN, /* something shouldn't happened */
|
|
ERR_E220_NOT_SUPPORT,
|
|
ERR_E220_NOT_IMPLEMENT,
|
|
ERR_E220_NOT_INITIAL,
|
|
ERR_E220_INVALID_PARAM,
|
|
ERR_E220_DATA_SIZE_NOT_MATCH,
|
|
ERR_E220_BUF_TOO_SMALL,
|
|
ERR_E220_TIMEOUT,
|
|
ERR_E220_HARDWARE,
|
|
ERR_E220_HEAD_NOT_RECOGNIZED,
|
|
ERR_E220_NO_RESPONSE_FROM_DEVICE,
|
|
ERR_E220_WRONG_UART_CONFIG,
|
|
ERR_E220_WRONG_FORMAT,
|
|
ERR_E220_PACKET_TOO_BIG
|
|
} Status;
|
|
|
|
static String getResponseDescriptionByParams(byte status){
|
|
switch (status)
|
|
{
|
|
case E220_SUCCESS:
|
|
return F("Success");
|
|
break;
|
|
case ERR_E220_UNKNOWN:
|
|
return F("Unknown");
|
|
break;
|
|
case ERR_E220_NOT_SUPPORT:
|
|
return F("Not support!");
|
|
break;
|
|
case ERR_E220_NOT_IMPLEMENT:
|
|
return F("Not implement");
|
|
break;
|
|
case ERR_E220_NOT_INITIAL:
|
|
return F("Not initial!");
|
|
break;
|
|
case ERR_E220_INVALID_PARAM:
|
|
return F("Invalid param!");
|
|
break;
|
|
case ERR_E220_DATA_SIZE_NOT_MATCH:
|
|
return F("Data size not match!");
|
|
break;
|
|
case ERR_E220_BUF_TOO_SMALL:
|
|
return F("Buff too small!");
|
|
break;
|
|
case ERR_E220_TIMEOUT:
|
|
return F("Timeout!!");
|
|
break;
|
|
case ERR_E220_HARDWARE:
|
|
return F("Hardware error!");
|
|
break;
|
|
case ERR_E220_HEAD_NOT_RECOGNIZED:
|
|
return F("Save mode returned not recognized!");
|
|
break;
|
|
case ERR_E220_NO_RESPONSE_FROM_DEVICE:
|
|
return F("No response from device! (Check wiring)");
|
|
break;
|
|
case ERR_E220_WRONG_UART_CONFIG:
|
|
return F("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!");
|
|
break;
|
|
default:
|
|
return F("Invalid status!");
|
|
}
|
|
}
|
|
|
|
enum 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)
|
|
{
|
|
case MODE_00_8N1:
|
|
return F("8N1 (Default)");
|
|
break;
|
|
case MODE_01_8O1:
|
|
return F("8O1");
|
|
break;
|
|
case MODE_10_8E1:
|
|
return F("8E1");
|
|
break;
|
|
case MODE_11_8N1:
|
|
return F("8N1 (equal to 00");
|
|
break;
|
|
default:
|
|
return F("Invalid UART Parity!");
|
|
}
|
|
}
|
|
|
|
enum UART_BPS_TYPE
|
|
{
|
|
UART_BPS_1200 = 0b000,
|
|
UART_BPS_2400 = 0b001,
|
|
UART_BPS_4800 = 0b010,
|
|
UART_BPS_9600 = 0b011,
|
|
UART_BPS_19200 = 0b100,
|
|
UART_BPS_38400 = 0b101,
|
|
UART_BPS_57600 = 0b110,
|
|
UART_BPS_115200 = 0b111
|
|
};
|
|
|
|
enum UART_BPS_RATE
|
|
{
|
|
UART_BPS_RATE_1200 = 1200,
|
|
UART_BPS_RATE_2400 = 2400,
|
|
UART_BPS_RATE_4800 = 4800,
|
|
UART_BPS_RATE_9600 = 9600,
|
|
UART_BPS_RATE_19200 = 19200,
|
|
UART_BPS_RATE_38400 = 38400,
|
|
UART_BPS_RATE_57600 = 57600,
|
|
UART_BPS_RATE_115200 = 115200
|
|
};
|
|
|
|
static String getUARTBaudRateDescriptionByParams(byte uartBaudRate)
|
|
{
|
|
switch (uartBaudRate)
|
|
{
|
|
case UART_BPS_1200:
|
|
return F("1200bps");
|
|
break;
|
|
case UART_BPS_2400:
|
|
return F("2400bps");
|
|
break;
|
|
case UART_BPS_4800:
|
|
return F("4800bps");
|
|
break;
|
|
case UART_BPS_9600:
|
|
return F("9600bps (default)");
|
|
break;
|
|
case UART_BPS_19200:
|
|
return F("19200bps");
|
|
break;
|
|
case UART_BPS_38400:
|
|
return F("38400bps");
|
|
break;
|
|
case UART_BPS_57600:
|
|
return F("57600bps");
|
|
break;
|
|
case UART_BPS_115200:
|
|
return F("115200bps");
|
|
break;
|
|
default:
|
|
return F("Invalid UART Baud Rate!");
|
|
}
|
|
}
|
|
|
|
enum AIR_DATA_RATE
|
|
{
|
|
AIR_DATA_RATE_000_24 = 0b000,
|
|
AIR_DATA_RATE_001_24 = 0b001,
|
|
AIR_DATA_RATE_010_24 = 0b010,
|
|
AIR_DATA_RATE_011_48 = 0b011,
|
|
AIR_DATA_RATE_100_96 = 0b100,
|
|
AIR_DATA_RATE_101_192 = 0b101,
|
|
AIR_DATA_RATE_110_384 = 0b110,
|
|
AIR_DATA_RATE_111_625 = 0b111
|
|
};
|
|
|
|
|
|
static String getAirDataRateDescriptionByParams(byte airDataRate)
|
|
{
|
|
switch (airDataRate)
|
|
{
|
|
case AIR_DATA_RATE_000_24:
|
|
return F("2.4kbps");
|
|
break;
|
|
case AIR_DATA_RATE_001_24:
|
|
return F("2.4kbps");
|
|
break;
|
|
case AIR_DATA_RATE_010_24:
|
|
return F("2.4kbps (default)");
|
|
break;
|
|
case AIR_DATA_RATE_011_48:
|
|
return F("4.8kbps");
|
|
break;
|
|
case AIR_DATA_RATE_100_96:
|
|
return F("9.6kbps");
|
|
break;
|
|
case AIR_DATA_RATE_101_192:
|
|
return F("19.2kbps");
|
|
break;
|
|
case AIR_DATA_RATE_110_384:
|
|
return F("38.4kbps");
|
|
break;
|
|
case AIR_DATA_RATE_111_625:
|
|
return F("62.5kbps");
|
|
break;
|
|
default:
|
|
return F("Invalid Air Data Rate!");
|
|
}
|
|
}
|
|
|
|
enum SUB_PACKET_SETTING {
|
|
SPS_200_00 = 0b00,
|
|
SPS_128_01 = 0b01,
|
|
SPS_064_10 = 0b10,
|
|
SPS_032_11 = 0b11
|
|
|
|
};
|
|
static String getSubPacketSettingByParams(byte subPacketSetting)
|
|
{
|
|
switch (subPacketSetting)
|
|
{
|
|
case SPS_200_00:
|
|
return F("200bytes (default)");
|
|
break;
|
|
case SPS_128_01:
|
|
return F("128bytes");
|
|
break;
|
|
case SPS_064_10:
|
|
return F("64bytes");
|
|
break;
|
|
case SPS_032_11:
|
|
return F("32bytes");
|
|
break;
|
|
default:
|
|
return F("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)
|
|
{
|
|
case RSSI_AMBIENT_NOISE_ENABLED:
|
|
return F("Enabled");
|
|
break;
|
|
case RSSI_AMBIENT_NOISE_DISABLED:
|
|
return F("Disabled (default)");
|
|
break;
|
|
default:
|
|
return F("Invalid RSSI Ambient Noise enabled!");
|
|
}
|
|
}
|
|
|
|
enum WOR_PERIOD {
|
|
WOR_500_000 = 0b000,
|
|
WOR_1000_001 = 0b001,
|
|
WOR_1500_010 = 0b010,
|
|
WOR_2000_011 = 0b011,
|
|
WOR_2500_100 = 0b100,
|
|
WOR_3000_101 = 0b101,
|
|
WOR_3500_110 = 0b110,
|
|
WOR_4000_111 = 0b111
|
|
|
|
};
|
|
static String getWORPeriodByParams(byte WORPeriod)
|
|
{
|
|
switch (WORPeriod)
|
|
{
|
|
case WOR_500_000:
|
|
return F("500ms");
|
|
break;
|
|
case WOR_1000_001:
|
|
return F("1000ms");
|
|
break;
|
|
case WOR_1500_010:
|
|
return F("1500ms");
|
|
break;
|
|
case WOR_2000_011:
|
|
return F("2000ms (default)");
|
|
break;
|
|
case WOR_2500_100:
|
|
return F("2500ms");
|
|
break;
|
|
case WOR_3000_101:
|
|
return F("3000ms");
|
|
break;
|
|
case WOR_3500_110:
|
|
return F("3500ms");
|
|
break;
|
|
case WOR_4000_111:
|
|
return F("4000ms");
|
|
break;
|
|
default:
|
|
return F("Invalid WOR period!");
|
|
}
|
|
}
|
|
enum LBT_ENABLE_BYTE {
|
|
LBT_ENABLED = 0b1,
|
|
LBT_DISABLED = 0b0
|
|
};
|
|
static String getLBTEnableByteByParams(byte LBTEnableByte)
|
|
{
|
|
switch (LBTEnableByte)
|
|
{
|
|
case LBT_ENABLED:
|
|
return F("Enabled");
|
|
break;
|
|
case LBT_DISABLED:
|
|
return F("Disabled (default)");
|
|
break;
|
|
default:
|
|
return F("Invalid LBT enable byte!");
|
|
}
|
|
}
|
|
|
|
enum RSSI_ENABLE_BYTE {
|
|
RSSI_ENABLED = 0b1,
|
|
RSSI_DISABLED = 0b0
|
|
};
|
|
static String getRSSIEnableByteByParams(byte RSSIEnableByte)
|
|
{
|
|
switch (RSSIEnableByte)
|
|
{
|
|
case RSSI_ENABLED:
|
|
return F("Enabled");
|
|
break;
|
|
case RSSI_DISABLED:
|
|
return F("Disabled (default)");
|
|
break;
|
|
default:
|
|
return F("Invalid RSSI enable byte!");
|
|
}
|
|
}
|
|
|
|
enum FIDEX_TRANSMISSION
|
|
{
|
|
FT_TRANSPARENT_TRANSMISSION = 0b0,
|
|
FT_FIXED_TRANSMISSION = 0b1
|
|
};
|
|
|
|
|
|
static String getFixedTransmissionDescriptionByParams(byte fixedTransmission)
|
|
{
|
|
switch (fixedTransmission)
|
|
{
|
|
case FT_TRANSPARENT_TRANSMISSION:
|
|
return F("Transparent transmission (default)");
|
|
break;
|
|
case FT_FIXED_TRANSMISSION:
|
|
return F("Fixed transmission (first three bytes can be used as high/low address and channel)");
|
|
break;
|
|
default:
|
|
return F("Invalid fixed transmission param!");
|
|
}
|
|
}
|
|
|
|
#ifdef E220_22
|
|
enum TRANSMISSION_POWER
|
|
{
|
|
POWER_22 = 0b00,
|
|
POWER_17 = 0b01,
|
|
POWER_13 = 0b10,
|
|
POWER_10 = 0b11
|
|
|
|
};
|
|
|
|
static String getTransmissionPowerDescriptionByParams(byte transmissionPower)
|
|
{
|
|
switch (transmissionPower)
|
|
{
|
|
case POWER_22:
|
|
return F("22dBm (Default)");
|
|
break;
|
|
case POWER_17:
|
|
return F("17dBm");
|
|
break;
|
|
case POWER_13:
|
|
return F("13dBm");
|
|
break;
|
|
case POWER_10:
|
|
return F("10dBm");
|
|
break;
|
|
default:
|
|
return F("Invalid transmission power param");
|
|
}
|
|
}
|
|
#elif defined(E220_30)
|
|
enum TRANSMISSION_POWER
|
|
{
|
|
POWER_30 = 0b00,
|
|
POWER_27 = 0b01,
|
|
POWER_24 = 0b10,
|
|
POWER_21 = 0b11
|
|
|
|
};
|
|
|
|
static String getTransmissionPowerDescriptionByParams(byte transmissionPower)
|
|
{
|
|
switch (transmissionPower)
|
|
{
|
|
case POWER_30:
|
|
return F("30dBm (Default)");
|
|
break;
|
|
case POWER_27:
|
|
return F("27dBm");
|
|
break;
|
|
case POWER_24:
|
|
return F("24dBm");
|
|
break;
|
|
case POWER_21:
|
|
return F("21dBm");
|
|
break;
|
|
default:
|
|
return F("Invalid transmission power param");
|
|
}
|
|
}
|
|
#else
|
|
enum TRANSMISSION_POWER
|
|
{
|
|
POWER_22 = 0b00,
|
|
POWER_17 = 0b01,
|
|
POWER_13 = 0b10,
|
|
POWER_10 = 0b11
|
|
|
|
};
|
|
|
|
static String getTransmissionPowerDescriptionByParams(byte transmissionPower)
|
|
{
|
|
switch (transmissionPower)
|
|
{
|
|
case POWER_22:
|
|
return F("22dBm (Default)");
|
|
break;
|
|
case POWER_17:
|
|
return F("17dBm");
|
|
break;
|
|
case POWER_13:
|
|
return F("13dBm");
|
|
break;
|
|
case POWER_10:
|
|
return F("10dBm");
|
|
break;
|
|
default:
|
|
return F("Invalid transmission power param");
|
|
}
|
|
}
|
|
#endif
|