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