summaryrefslogtreecommitdiff
path: root/libloragw
diff options
context:
space:
mode:
Diffstat (limited to 'libloragw')
-rw-r--r--libloragw/Makefile4
-rw-r--r--libloragw/VERSION2
-rw-r--r--libloragw/doc/CHANGELOG.TXT10
-rw-r--r--libloragw/doc/LICENSE.TXT8
-rw-r--r--libloragw/inc/loragw_hal.h16
-rw-r--r--libloragw/src/agc_fw.var424
-rw-r--r--libloragw/src/arb_fw.var130
-rw-r--r--libloragw/src/loragw_hal.c89
-rw-r--r--libloragw/src/loragw_reg.c3
-rw-r--r--libloragw/src/loragw_spi.ftdi.c4
-rw-r--r--libloragw/src/loragw_spi.native.c2
-rw-r--r--libloragw/tst/test_loragw_hal.c79
-rw-r--r--libloragw/tst/test_loragw_reg.c2
-rw-r--r--libloragw/tst/test_loragw_spi.c2
14 files changed, 398 insertions, 377 deletions
diff --git a/libloragw/Makefile b/libloragw/Makefile
index 38d2fae..6c004f1 100644
--- a/libloragw/Makefile
+++ b/libloragw/Makefile
@@ -3,8 +3,8 @@ include library.cfg
# constant symbols
CC=gcc
-CFLAGS=-O2 -Iinc -I.
-C99FLAGS=-O2 -std=c99 -Iinc -I.
+CFLAGS=-O2 -Wall -Wextra -Iinc -I.
+C99FLAGS=-O2 -Wall -Wextra -std=c99 -Iinc -I.
# configuration-dependant symbols
ifeq ($(LGW_PHY),native)
diff --git a/libloragw/VERSION b/libloragw/VERSION
index 87b0704..eafdd0f 100644
--- a/libloragw/VERSION
+++ b/libloragw/VERSION
@@ -1,5 +1,5 @@
/* Software library version: */
-#define VERSION_LIBRARY "beta7"
+#define VERSION_LIBRARY "beta8"
/* API version */
#define VERSION_API "beta"
diff --git a/libloragw/doc/CHANGELOG.TXT b/libloragw/doc/CHANGELOG.TXT
index 4ec6bd7..f1d4a64 100644
--- a/libloragw/doc/CHANGELOG.TXT
+++ b/libloragw/doc/CHANGELOG.TXT
@@ -1,6 +1,16 @@
Lora Gateway HAL changelog
==========================
+ Beta 8 (from beta 7)
+---------------------
+
+ * API: lgw_receive now return info on RX frequency and RF path for each packet (no need to keep track of RF/IF settings)
+ * Unified some portion of the code with the 470 MHz variant of the HAL (use SX1255 radios instead of SX1257)
+ * Improved AGC and ARB firmwares
+ * Adding -Wall -Wextra for compilation, fixing all the new warnings for cleaner code
+ * Fixed bugs in handling of FSK datarate
+ * test_loragw_hal now dumps the content of all Lora registers after configuration in reg_dump.log
+
Beta 7 (from beta 5)
---------------------
diff --git a/libloragw/doc/LICENSE.TXT b/libloragw/doc/LICENSE.TXT
index eab9548..e406dcb 100644
--- a/libloragw/doc/LICENSE.TXT
+++ b/libloragw/doc/LICENSE.TXT
@@ -1,8 +1,8 @@
-THE FOLLOWING SOFTWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND
+Copyright (C) 2013 SEMTECH S.A.
+
+ THE FOLLOWING SOFTWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND
(2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER.
CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
-OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
+OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-
-Copyright (C) SEMTECH S.A.
diff --git a/libloragw/inc/loragw_hal.h b/libloragw/inc/loragw_hal.h
index 08aa945..0739f37 100644
--- a/libloragw/inc/loragw_hal.h
+++ b/libloragw/inc/loragw_hal.h
@@ -104,8 +104,8 @@ Description:
#define DR_LORA_SF11 0x20
#define DR_LORA_SF12 0x40
#define DR_LORA_MULTI 0x7E
-/* NOTE: for FSK directly use baudrate between 300 bauds and 250 kbauds */
-#define DR_FSK_MIN 300
+/* NOTE: for FSK directly use baudrate between 500 bauds and 250 kbauds */
+#define DR_FSK_MIN 500
#define DR_FSK_MAX 250000
/* values available for the 'coderate' parameters (Lora only) */
@@ -179,13 +179,15 @@ struct lgw_conf_rxif_s {
@brief Structure containing the metadata of a packet that was received and a pointer to the payload
*/
struct lgw_pkt_rx_s {
+ uint32_t freq_hz; /*!> central frequency of the IF chain */
uint8_t if_chain; /*!> by which IF chain was packet received */
uint8_t status; /*!> status of the received packet */
+ uint32_t count_us; /*!> internal gateway counter for timestamping, 1 microsecond resolution */
+ uint8_t rf_chain; /*!> through which RF chain the packet was received */
uint8_t modulation; /*!> modulation used by the packet */
uint8_t bandwidth; /*!> modulation bandwidth (Lora only) */
- uint16_t datarate; /*!> RX datarate of the packet */
- uint8_t coderate; /*!> error-correcting code of the packet */
- uint32_t count_us; /*!> internal gateway counter for timestamping, 1 microsecond resolution */
+ uint32_t datarate; /*!> RX datarate of the packet (SF for Lora) */
+ uint8_t coderate; /*!> error-correcting code of the packet (Lora only) */
float rssi; /*!> average packet RSSI in dB */
float snr; /*!> average packet SNR, in dB (Lora only) */
float snr_min; /*!> minimum packet SNR, in dB (Lora only) */
@@ -207,10 +209,10 @@ struct lgw_pkt_tx_s {
int8_t rf_power; /*!> TX power, in dBm */
uint8_t modulation; /*!> modulation to use for the packet */
uint8_t bandwidth; /*!> modulation bandwidth (Lora only) */
+ uint32_t datarate; /*!> TX datarate (baudrate for FSK, SF for Lora) */
+ uint8_t coderate; /*!> error-correcting code of the packet (Lora only) */
bool invert_pol; /*!> invert signal polarity, for orthogonal downlinks (Lora only) */
uint8_t f_dev; /*!> frequency deviation, in kHz (FSK only) */
- uint16_t datarate; /*!> TX datarate (baudrate for FSK) */
- uint8_t coderate; /*!> error-correcting code of the packet (Lora only) */
uint16_t preamble; /*!> set the preamble length, 0 for default */
bool no_crc; /*!> if true, do not send a CRC in the packet */
bool no_header; /*!> if true, enable implicit header mode (Lora), fixed length (FSK) */
diff --git a/libloragw/src/agc_fw.var b/libloragw/src/agc_fw.var
index 7d30fb9..a85a22e 100644
--- a/libloragw/src/agc_fw.var
+++ b/libloragw/src/agc_fw.var
@@ -11,218 +11,218 @@ Description:
*/
static uint8_t agc_firmware[MCU_AGC_FW_BYTE] = {
-0x8A, 0x51, 0x11, 0x28, 0xFF, 0xBF, 0xFF, 0xBF, 0x80, 0x40, 0x03, 0x4E, 0x83, 0x52, 0x03, 0x53,
-0xA8, 0xC0, 0x04, 0x88, 0xA9, 0x00, 0x0A, 0xC8, 0xAA, 0x00, 0x01, 0x88, 0xAB, 0x40, 0x8A, 0x51,
-0x79, 0x6E, 0x8A, 0x51, 0x3A, 0x2E, 0xA2, 0x70, 0x84, 0x80, 0x37, 0xF0, 0x83, 0x52, 0x03, 0x53,
-0xB3, 0x40, 0x04, 0x88, 0xB4, 0x00, 0x08, 0xF0, 0xB5, 0x40, 0x33, 0x48, 0x84, 0x80, 0x83, 0x93,
-0x00, 0x48, 0xB6, 0x40, 0xB3, 0xCA, 0x34, 0x08, 0x84, 0x80, 0x36, 0x48, 0x80, 0x40, 0xB4, 0x8A,
-0xB5, 0x0B, 0x1D, 0xA8, 0x2B, 0xA8, 0x19, 0x54, 0x99, 0x50, 0x19, 0x95, 0x99, 0x91, 0x19, 0x52,
-0x99, 0x92, 0x18, 0x56, 0x38, 0x68, 0x90, 0x30, 0xB3, 0x40, 0x33, 0x48, 0x8B, 0x00, 0x39, 0xA8,
-0x8B, 0x41, 0x98, 0x10, 0x18, 0x11, 0x98, 0x51, 0x97, 0x81, 0x9C, 0x41, 0x9A, 0x41, 0x9B, 0x81,
-0x9E, 0x81, 0x83, 0x96, 0x03, 0x53, 0xE4, 0x41, 0xE5, 0x81, 0xD2, 0x41, 0xD2, 0x8A, 0x0F, 0xB0,
-0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96, 0x03, 0x53, 0xDA, 0x40, 0xCA, 0x41,
-0xD3, 0x81, 0xD3, 0xCA, 0x0C, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xDB, 0x80, 0x06, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xCB, 0x40, 0x02, 0xF0, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xD4, 0x00, 0x0C, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xDC, 0x40, 0x0C, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xCC, 0x00, 0x03, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xD5, 0x40, 0x0C, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xDD, 0x80, 0x12, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xCD, 0x40, 0x04, 0xF0, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xD6, 0x40, 0x0F, 0xB0, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xDE, 0x80, 0x18, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xCE, 0x40, 0x04, 0xF0, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xD7, 0x80, 0x0C, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xDF, 0xC0, 0x1E, 0xB0, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xCF, 0x80, 0x05, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xD8, 0x00, 0x0C, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xE0, 0xC0, 0x24, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xD0, 0xC0, 0x05, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xD9, 0x40, 0x0C, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xE1, 0x00, 0x2A, 0x70, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xD1, 0x00, 0xB2, 0x41, 0xB3, 0x81, 0xB4, 0x41, 0xB5, 0x81, 0xB6, 0x81, 0xB7, 0xC1,
-0xB8, 0x41, 0xB9, 0x81, 0xBA, 0x81, 0x06, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48,
-0x83, 0x96, 0x03, 0x53, 0xBB, 0x80, 0x0C, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48,
-0x83, 0x96, 0x03, 0x53, 0xBC, 0x40, 0x12, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48,
-0x83, 0x96, 0x03, 0x53, 0xBD, 0x80, 0x18, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48,
-0x83, 0x96, 0x03, 0x53, 0xBE, 0x80, 0x1E, 0xB0, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48,
-0x83, 0x96, 0x03, 0x53, 0xBF, 0xC0, 0x24, 0x30, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48,
-0x83, 0x96, 0x03, 0x53, 0xC0, 0x80, 0x2A, 0x70, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48,
-0x83, 0x96, 0x03, 0x53, 0xC1, 0xC0, 0xEB, 0xC1, 0x02, 0xF0, 0x6B, 0x82, 0x03, 0x5C, 0x39, 0xE9,
-0x3A, 0xE9, 0x3C, 0xE9, 0xB2, 0xE9, 0xB2, 0xE9, 0x6B, 0x88, 0xE8, 0x7E, 0x84, 0x80, 0x83, 0x93,
-0x80, 0x81, 0x08, 0xF0, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x83, 0x96, 0x03, 0x53, 0x6B, 0x88,
-0xE6, 0xBE, 0x84, 0x80, 0x83, 0x52, 0x03, 0x53, 0x33, 0x48, 0x80, 0x40, 0x83, 0x96, 0x03, 0x53,
-0x6B, 0x88, 0xE8, 0x7E, 0x84, 0x80, 0x00, 0x48, 0xD2, 0x7E, 0x84, 0x80, 0x00, 0x48, 0x83, 0x52,
-0x03, 0x53, 0xB3, 0x40, 0x05, 0x30, 0x03, 0xD0, 0xB3, 0x0D, 0xFF, 0x7E, 0x03, 0x9D, 0x5B, 0x29,
-0x83, 0x96, 0x03, 0x53, 0x6B, 0x88, 0xE8, 0x7E, 0x84, 0x80, 0x00, 0x48, 0xDA, 0xBE, 0x84, 0x80,
-0x00, 0x48, 0x83, 0x52, 0x03, 0x53, 0xB4, 0x00, 0x34, 0x87, 0x33, 0x44, 0xB5, 0x40, 0x35, 0x48,
-0x83, 0x96, 0x03, 0x53, 0xA0, 0x80, 0x6B, 0x88, 0x83, 0x52, 0x03, 0x53, 0xB6, 0x40, 0x36, 0x48,
-0x83, 0x96, 0x03, 0x53, 0xA1, 0xC0, 0x0C, 0x30, 0x8A, 0x51, 0x16, 0xA6, 0x8A, 0x51, 0x83, 0x52,
-0x03, 0x53, 0x98, 0x95, 0x98, 0x51, 0x83, 0x96, 0x03, 0x53, 0x6B, 0x88, 0xE6, 0xBE, 0x84, 0x80,
-0x83, 0x93, 0x00, 0x48, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x03, 0x30, 0x03, 0xD0, 0xB3, 0x0D,
-0xFF, 0x7E, 0x03, 0x9D, 0x8E, 0xE9, 0x03, 0xD0, 0x33, 0xCD, 0xB4, 0x00, 0x34, 0x08, 0x96, 0x00,
-0x83, 0x96, 0x03, 0x53, 0x6B, 0xD8, 0x9D, 0x29, 0xA1, 0xA9, 0x83, 0x52, 0x03, 0x53, 0x18, 0x14,
-0xA4, 0xA9, 0x83, 0x52, 0x03, 0x53, 0x18, 0xD0, 0x18, 0x55, 0x18, 0x11, 0x01, 0xF0, 0xB3, 0x40,
-0x33, 0x48, 0x83, 0x96, 0x03, 0x53, 0xEB, 0x47, 0x02, 0xF0, 0x6B, 0x82, 0x03, 0x5C, 0xB1, 0xE9,
-0xB2, 0xE9, 0x3C, 0xE9, 0xEA, 0x81, 0x08, 0xF0, 0x6A, 0x42, 0x03, 0x5C, 0xB8, 0xE9, 0xB9, 0x29,
-0xBB, 0x69, 0xF9, 0x69, 0xF9, 0x69, 0x07, 0x70, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x83, 0x96,
-0x03, 0x53, 0x6A, 0x48, 0xC2, 0x3E, 0x84, 0x80, 0x83, 0x52, 0x03, 0x53, 0x33, 0x48, 0x83, 0x93,
-0x80, 0x40, 0x83, 0x96, 0x03, 0x53, 0x6A, 0x48, 0xC2, 0x3E, 0x84, 0x80, 0x00, 0x48, 0x83, 0x52,
-0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x96, 0x00, 0x83, 0x96, 0x03, 0x53, 0x6A, 0x48, 0xA2, 0x3E,
-0x84, 0x80, 0x00, 0x48, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x95, 0x00, 0x98, 0x54,
-0x98, 0x10, 0x01, 0xF0, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96, 0x03, 0x53, 0xEA, 0x07, 0x08, 0xF0,
-0x6A, 0x42, 0x03, 0x5C, 0xEC, 0x29, 0xED, 0x69, 0xBB, 0x69, 0xF9, 0x69, 0xF9, 0x69, 0xF9, 0x69,
-0x83, 0x52, 0x03, 0x53, 0x18, 0x9E, 0xF5, 0x69, 0xF6, 0x69, 0x04, 0x2A, 0x18, 0x12, 0x2B, 0xA8,
-0x04, 0x2A, 0x83, 0x52, 0x03, 0x53, 0x93, 0x5F, 0xFE, 0xA9, 0xFF, 0xE9, 0x04, 0x2A, 0x8A, 0x51,
-0x38, 0x64, 0x8A, 0x51, 0x04, 0x2A, 0x04, 0x2A, 0x83, 0x96, 0x03, 0x53, 0x68, 0x08, 0xCA, 0x7E,
-0x84, 0x80, 0x83, 0x93, 0x00, 0x48, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xE4, 0x00, 0x66, 0x48, 0xB2, 0x7E, 0x84, 0x80, 0x00, 0x48, 0x83, 0x52, 0x03, 0x53,
-0xB3, 0x40, 0x33, 0x48, 0x83, 0x96, 0x03, 0x53, 0xE5, 0x40, 0x83, 0x52, 0x03, 0x53, 0x1E, 0x48,
-0x01, 0xBE, 0xB3, 0x40, 0x33, 0x48, 0x9E, 0x40, 0x83, 0x96, 0x03, 0x53, 0x65, 0x48, 0x64, 0x87,
-0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x97, 0x40, 0x83, 0x96, 0x03, 0x53, 0x69, 0x48,
-0xCA, 0x7E, 0x84, 0x80, 0x00, 0x48, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96,
-0x03, 0x53, 0xE4, 0x00, 0x67, 0x88, 0xB2, 0x7E, 0x84, 0x80, 0x00, 0x48, 0x83, 0x52, 0x03, 0x53,
-0xB3, 0x40, 0x33, 0x48, 0x83, 0x96, 0x03, 0x53, 0xE5, 0x40, 0x65, 0x48, 0x64, 0x87, 0x83, 0x52,
-0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x9C, 0x00, 0x17, 0x48, 0xB3, 0x40, 0x33, 0x48, 0x9A, 0x00,
-0x83, 0x96, 0x03, 0x53, 0xEA, 0x81, 0x08, 0xF0, 0x6A, 0x42, 0x03, 0x5C, 0x58, 0xAA, 0x59, 0xEA,
-0x5B, 0x2A, 0xE3, 0x2A, 0xE3, 0x2A, 0x6A, 0x48, 0xA2, 0x3E, 0x84, 0x80, 0x00, 0x48, 0x83, 0x52,
-0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x95, 0x00, 0x0D, 0x08, 0xB3, 0x40, 0x83, 0x96, 0x03, 0x53,
-0x6A, 0x48, 0xAA, 0x7E, 0x84, 0x80, 0x83, 0x52, 0x03, 0x53, 0x33, 0x48, 0x80, 0x40, 0x83, 0x96,
-0x03, 0x53, 0x6A, 0x48, 0xAA, 0x7E, 0x84, 0x80, 0x88, 0x30, 0x00, 0x42, 0x03, 0x5C, 0x79, 0x2A,
-0x7A, 0x2A, 0xA2, 0xAA, 0x6A, 0x48, 0xC2, 0x3E, 0x84, 0x80, 0x0F, 0xB0, 0x00, 0x42, 0x03, 0x18,
-0x82, 0x6A, 0x83, 0xAA, 0xA2, 0xAA, 0x6A, 0x48, 0xC2, 0x3E, 0x84, 0x80, 0x00, 0x48, 0x01, 0xBE,
-0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x83, 0x96, 0x03, 0x53, 0x6A, 0x48, 0xC2, 0x3E, 0x84, 0x80,
-0x83, 0x52, 0x03, 0x53, 0x33, 0x48, 0x80, 0x40, 0x83, 0x96, 0x03, 0x53, 0x6A, 0x48, 0xC2, 0x3E,
-0x84, 0x80, 0x00, 0x48, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x33, 0x48, 0x96, 0x00, 0x98, 0x54,
-0x98, 0x10, 0xD6, 0x2A, 0x83, 0x96, 0x03, 0x53, 0x6A, 0x48, 0xAA, 0x7E, 0x84, 0x80, 0x2D, 0xB0,
-0x00, 0x42, 0x03, 0x18, 0xAC, 0xEA, 0xAD, 0x2A, 0xD6, 0x2A, 0x6A, 0x48, 0xC2, 0x3E, 0x84, 0x80,
-0x08, 0xF0, 0x00, 0x42, 0x03, 0x5C, 0xB5, 0x2A, 0xB6, 0x2A, 0xD6, 0x2A, 0x6A, 0x48, 0xC2, 0x3E,
-0x84, 0x80, 0x00, 0x48, 0xFF, 0x7E, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x83, 0x96, 0x03, 0x53,
-0x6A, 0x48, 0xC2, 0x3E, 0x84, 0x80, 0x83, 0x52, 0x03, 0x53, 0x33, 0x48, 0x80, 0x40, 0x83, 0x96,
-0x03, 0x53, 0x6A, 0x48, 0xC2, 0x3E, 0x84, 0x80, 0x00, 0x48, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40,
-0x33, 0x48, 0x96, 0x00, 0x98, 0x54, 0x98, 0x10, 0xD6, 0x2A, 0xD6, 0x2A, 0x01, 0xF0, 0x83, 0x52,
-0xB3, 0x40, 0x33, 0x48, 0x83, 0x96, 0x03, 0x53, 0xEA, 0x07, 0x08, 0xF0, 0x6A, 0x42, 0x03, 0x5C,
-0xE2, 0xEA, 0xE3, 0x2A, 0x5B, 0x2A, 0xEB, 0xC1, 0x02, 0xF0, 0x6B, 0x82, 0x03, 0x5C, 0xE9, 0x2A,
-0xEA, 0x2A, 0xEC, 0x2A, 0xF9, 0x69, 0xF9, 0x69, 0x6B, 0xD8, 0xEF, 0xAA, 0xF3, 0x6A, 0x83, 0x52,
-0x03, 0x53, 0x18, 0x14, 0xF6, 0x6A, 0x83, 0x52, 0x03, 0x53, 0x18, 0xD0, 0x0E, 0x08, 0xB3, 0x40,
-0x33, 0x48, 0x83, 0x96, 0x03, 0x53, 0xE3, 0x40, 0x88, 0x30, 0x63, 0x42, 0x03, 0x5C, 0x01, 0x6B,
-0x02, 0x6B, 0x34, 0xEB, 0x6B, 0x88, 0xE6, 0xBE, 0x84, 0x80, 0x0B, 0x70, 0x83, 0x93, 0x00, 0x42,
-0x03, 0x18, 0x0B, 0xEB, 0x0C, 0xAB, 0x34, 0xEB, 0x6B, 0x88, 0xE6, 0xBE, 0x84, 0x80, 0x00, 0x48,
-0x01, 0xBE, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x83, 0x96, 0x03, 0x53, 0x6B, 0x88, 0xE6, 0xBE,
-0x84, 0x80, 0x83, 0x52, 0x03, 0x53, 0x33, 0x48, 0x80, 0x40, 0x83, 0x96, 0x03, 0x53, 0x6B, 0x88,
-0xE6, 0xBE, 0x84, 0x80, 0x00, 0x48, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x03, 0x30, 0x03, 0xD0,
-0xB3, 0x0D, 0xFF, 0x7E, 0x03, 0x9D, 0x27, 0x2B, 0x03, 0xD0, 0x33, 0xCD, 0xB4, 0x00, 0x34, 0x08,
-0x96, 0x00, 0x18, 0x55, 0x18, 0x11, 0x6F, 0xAB, 0x2D, 0xB0, 0x83, 0x96, 0x03, 0x53, 0x63, 0x42,
-0x03, 0x18, 0x3B, 0x6B, 0x3C, 0x2B, 0x6F, 0xAB, 0x6B, 0x88, 0xE6, 0xBE, 0x84, 0x80, 0x09, 0x30,
-0x83, 0x93, 0x00, 0x42, 0x03, 0x5C, 0x45, 0xEB, 0x46, 0xEB, 0x6F, 0xAB, 0x6B, 0x88, 0xE6, 0xBE,
-0x84, 0x80, 0x00, 0x48, 0xFF, 0x7E, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x83, 0x96, 0x03, 0x53,
-0x6B, 0x88, 0xE6, 0xBE, 0x84, 0x80, 0x83, 0x52, 0x03, 0x53, 0x33, 0x48, 0x80, 0x40, 0x83, 0x96,
-0x03, 0x53, 0x6B, 0x88, 0xE6, 0xBE, 0x84, 0x80, 0x00, 0x48, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40,
-0x03, 0x30, 0x03, 0xD0, 0xB3, 0x0D, 0xFF, 0x7E, 0x03, 0x9D, 0x61, 0xEB, 0x03, 0xD0, 0x33, 0xCD,
-0xB4, 0x00, 0x34, 0x08, 0x96, 0x00, 0x18, 0x55, 0x18, 0x11, 0x6F, 0xAB, 0x6F, 0xAB, 0x83, 0x52,
-0x0F, 0x48, 0xB3, 0x40, 0x33, 0x48, 0x83, 0x96, 0x03, 0x53, 0xE2, 0x00, 0x29, 0x70, 0x62, 0x02,
-0x03, 0x5C, 0x7B, 0xAB, 0x7C, 0x6B, 0xCD, 0x6B, 0x6B, 0x88, 0xE8, 0x7E, 0x84, 0x80, 0x07, 0x70,
-0x83, 0x93, 0x00, 0x42, 0x03, 0x18, 0x85, 0xEB, 0x86, 0xEB, 0xCD, 0x6B, 0x6B, 0x88, 0xE8, 0x7E,
-0x84, 0x80, 0x00, 0x48, 0x01, 0xBE, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x83, 0x96, 0x03, 0x53,
-0x6B, 0x88, 0xE8, 0x7E, 0x84, 0x80, 0x83, 0x52, 0x03, 0x53, 0x33, 0x48, 0x80, 0x40, 0x83, 0x96,
-0x03, 0x53, 0x6B, 0x88, 0xE8, 0x7E, 0x84, 0x80, 0x00, 0x48, 0xD2, 0x7E, 0x84, 0x80, 0x00, 0x48,
-0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x05, 0x30, 0x03, 0xD0, 0xB3, 0x0D, 0xFF, 0x7E, 0x03, 0x9D,
-0xA4, 0xEB, 0x83, 0x96, 0x03, 0x53, 0x6B, 0x88, 0xE8, 0x7E, 0x84, 0x80, 0x00, 0x48, 0xDA, 0xBE,
-0x84, 0x80, 0x00, 0x48, 0x83, 0x52, 0x03, 0x53, 0xB4, 0x00, 0x34, 0x87, 0x33, 0x44, 0xB5, 0x40,
-0x35, 0x48, 0x83, 0x96, 0x03, 0x53, 0xA0, 0x80, 0x6B, 0x88, 0x83, 0x52, 0x03, 0x53, 0xB6, 0x40,
-0x36, 0x48, 0x83, 0x96, 0x03, 0x53, 0xA1, 0xC0, 0x0C, 0x30, 0x8A, 0x51, 0x16, 0xA6, 0x8A, 0x51,
-0x83, 0x52, 0x03, 0x53, 0x98, 0x95, 0x98, 0x51, 0x26, 0xAC, 0x0F, 0xB0, 0x83, 0x96, 0x03, 0x53,
-0x62, 0x02, 0x03, 0x18, 0xD4, 0x2B, 0xD5, 0x6B, 0x26, 0xAC, 0x6B, 0x88, 0xE8, 0x7E, 0x84, 0x80,
-0x83, 0x93, 0x80, 0x88, 0x03, 0x59, 0xDD, 0xAB, 0xDE, 0xAB, 0x26, 0xAC, 0x6B, 0x88, 0xE8, 0x7E,
-0x84, 0x80, 0x00, 0x48, 0xFF, 0x7E, 0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x83, 0x96, 0x03, 0x53,
-0x6B, 0x88, 0xE8, 0x7E, 0x84, 0x80, 0x83, 0x52, 0x03, 0x53, 0x33, 0x48, 0x80, 0x40, 0x83, 0x96,
-0x03, 0x53, 0x6B, 0x88, 0xE8, 0x7E, 0x84, 0x80, 0x00, 0x48, 0xD2, 0x7E, 0x84, 0x80, 0x00, 0x48,
-0x83, 0x52, 0x03, 0x53, 0xB3, 0x40, 0x05, 0x30, 0x03, 0xD0, 0xB3, 0x0D, 0xFF, 0x7E, 0x03, 0x9D,
-0xFC, 0xAB, 0x83, 0x96, 0x03, 0x53, 0x6B, 0x88, 0xE8, 0x7E, 0x84, 0x80, 0x00, 0x48, 0xDA, 0xBE,
-0x84, 0x80, 0x00, 0x48, 0x83, 0x52, 0x03, 0x53, 0xB4, 0x00, 0x34, 0x87, 0x33, 0x44, 0xB5, 0x40,
-0x35, 0x48, 0x83, 0x96, 0x03, 0x53, 0xA0, 0x80, 0x6B, 0x88, 0x83, 0x52, 0x03, 0x53, 0xB6, 0x40,
-0x36, 0x48, 0x83, 0x96, 0x03, 0x53, 0xA1, 0xC0, 0x0C, 0x30, 0x8A, 0x51, 0x16, 0xA6, 0x8A, 0x51,
-0x83, 0x52, 0x03, 0x53, 0x98, 0x95, 0x98, 0x51, 0x26, 0xAC, 0x26, 0xAC, 0x01, 0xF0, 0x83, 0x52,
-0xB3, 0x40, 0x33, 0x48, 0x83, 0x96, 0x03, 0x53, 0xEB, 0x47, 0x02, 0xF0, 0x6B, 0x82, 0x03, 0x5C,
-0x32, 0xAC, 0x33, 0xEC, 0xEC, 0x2A, 0xF9, 0x69, 0xF9, 0x69, 0xF9, 0x69, 0x8A, 0x51, 0x11, 0x28,
-0x83, 0x52, 0x03, 0x53, 0x18, 0x12, 0x00, 0xB0, 0x13, 0xDB, 0x01, 0xF0, 0xAE, 0x40, 0x2E, 0x48,
-0xB2, 0x00, 0x00, 0xB0, 0x18, 0x18, 0x01, 0xF0, 0xAE, 0x40, 0x2E, 0x48, 0xB0, 0xC0, 0x32, 0x58,
-0x4A, 0xAC, 0x4E, 0xEC, 0x83, 0x52, 0x03, 0x53, 0x18, 0x14, 0x51, 0xAC, 0x83, 0x52, 0x03, 0x53,
-0x18, 0xD0, 0x12, 0xC8, 0xAE, 0x40, 0x2E, 0x48, 0x83, 0x96, 0x03, 0x53, 0xA0, 0x80, 0x83, 0x52,
-0x03, 0x53, 0x32, 0x08, 0xAF, 0x80, 0x2F, 0x88, 0x83, 0x96, 0x03, 0x53, 0xA1, 0xC0, 0x04, 0xF0,
-0x8A, 0x51, 0x16, 0xA6, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x11, 0xC8, 0xAE, 0x40, 0x2E, 0x48,
-0x83, 0x96, 0x03, 0x53, 0xA0, 0x80, 0x83, 0x52, 0x03, 0x53, 0x32, 0x08, 0xAF, 0x80, 0x2F, 0x88,
-0x83, 0x96, 0x03, 0x53, 0xA1, 0xC0, 0x05, 0x30, 0x8A, 0x51, 0x16, 0xA6, 0x8A, 0x51, 0x83, 0x52,
-0x03, 0x53, 0x10, 0x88, 0xAE, 0x40, 0x2E, 0x48, 0x83, 0x96, 0x03, 0x53, 0xA0, 0x80, 0x83, 0x52,
-0x03, 0x53, 0x32, 0x08, 0xAF, 0x80, 0x2F, 0x88, 0x83, 0x96, 0x03, 0x53, 0xA1, 0xC0, 0x06, 0x30,
-0x8A, 0x51, 0x16, 0xA6, 0x8A, 0x51, 0x07, 0x70, 0x83, 0x52, 0x03, 0x53, 0xAE, 0x40, 0x2E, 0x48,
-0x83, 0x96, 0x03, 0x53, 0xA0, 0x80, 0x83, 0x52, 0x03, 0x53, 0x32, 0x08, 0xAF, 0x80, 0x2F, 0x88,
-0x83, 0x96, 0x03, 0x53, 0xA1, 0xC0, 0x00, 0xB0, 0x8A, 0x51, 0x16, 0xA6, 0x8A, 0x51, 0x83, 0x52,
-0x03, 0x53, 0x93, 0x1D, 0xA4, 0xAC, 0xA5, 0xEC, 0xB8, 0xEC, 0x1D, 0xB0, 0xAE, 0x40, 0x2E, 0x48,
-0x83, 0x96, 0x03, 0x53, 0xA0, 0x80, 0x83, 0x52, 0x03, 0x53, 0x32, 0x08, 0xAF, 0x80, 0x2F, 0x88,
-0x83, 0x96, 0x03, 0x53, 0xA1, 0xC0, 0x08, 0xF0, 0x8A, 0x51, 0x16, 0xA6, 0x8A, 0x51, 0xCC, 0xEC,
-0x3B, 0xF0, 0x83, 0x52, 0x03, 0x53, 0xAE, 0x40, 0x2E, 0x48, 0x83, 0x96, 0x03, 0x53, 0xA0, 0x80,
-0x83, 0x52, 0x03, 0x53, 0x32, 0x08, 0xAF, 0x80, 0x2F, 0x88, 0x83, 0x96, 0x03, 0x53, 0xA1, 0xC0,
-0x08, 0xF0, 0x8A, 0x51, 0x16, 0xA6, 0x8A, 0x51, 0x0F, 0xB0, 0x83, 0x52, 0x03, 0x53, 0xAE, 0x40,
-0x2E, 0x48, 0x83, 0x96, 0x03, 0x53, 0xA0, 0x80, 0x83, 0x52, 0x03, 0x53, 0x32, 0x08, 0xAF, 0x80,
-0x2F, 0x88, 0x83, 0x96, 0x03, 0x53, 0xA1, 0xC0, 0x00, 0xB0, 0x8A, 0x51, 0x16, 0xA6, 0x8A, 0x51,
-0x83, 0x52, 0x03, 0x53, 0x19, 0x52, 0x99, 0x92, 0x32, 0x08, 0x03, 0x9D, 0xE8, 0xEC, 0xEB, 0x6C,
-0x19, 0x51, 0x99, 0xD5, 0xED, 0x6C, 0x19, 0x10, 0x99, 0x94, 0x93, 0x1D, 0xF0, 0xEC, 0xF4, 0x2C,
-0x83, 0x52, 0x03, 0x53, 0x19, 0x96, 0xF7, 0xAC, 0x83, 0x52, 0x03, 0x53, 0x19, 0x52, 0x93, 0xD9,
-0xFA, 0x6C, 0xFE, 0xAC, 0x83, 0x52, 0x03, 0x53, 0x99, 0xD6, 0x01, 0x6D, 0x83, 0x52, 0x03, 0x53,
-0x99, 0x92, 0x02, 0x6D, 0x93, 0x1B, 0x05, 0xAD, 0x06, 0xAD, 0x02, 0x6D, 0x07, 0xED, 0x32, 0x08,
-0x03, 0x9D, 0x0B, 0xED, 0x0E, 0xED, 0x99, 0x91, 0x19, 0x95, 0x11, 0xAD, 0x99, 0x50, 0x19, 0x54,
-0x11, 0xAD, 0x03, 0x30, 0xAE, 0x40, 0x2E, 0x48, 0x83, 0x96, 0x03, 0x53, 0xA0, 0x80, 0x83, 0x52,
-0x03, 0x53, 0x32, 0x08, 0xAF, 0x80, 0x2F, 0x88, 0x83, 0x96, 0x03, 0x53, 0xA1, 0xC0, 0x00, 0xB0,
-0x8A, 0x51, 0x16, 0xA6, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0xB1, 0x41, 0x2D, 0x2D, 0x31, 0x08,
-0x01, 0xBE, 0xAE, 0x40, 0x2E, 0x48, 0xB1, 0x00, 0x2D, 0x2D, 0x64, 0x70, 0x31, 0x02, 0x03, 0x5C,
-0x32, 0xED, 0x33, 0x2D, 0x27, 0x2D, 0x18, 0x56, 0x30, 0x18, 0x37, 0x6D, 0x3B, 0x6D, 0x83, 0x52,
-0x03, 0x53, 0x18, 0x14, 0x3E, 0x6D, 0x83, 0x52, 0x03, 0x53, 0x18, 0xD0, 0x08, 0x40, 0x83, 0x52,
-0x03, 0x53, 0x18, 0x12, 0x00, 0xB0, 0x13, 0xDB, 0x01, 0xF0, 0xA2, 0xC0, 0x22, 0xC8, 0xA6, 0x00,
-0x00, 0xB0, 0x18, 0x18, 0x01, 0xF0, 0xA2, 0xC0, 0x22, 0xC8, 0xA4, 0xC0, 0x26, 0x58, 0x51, 0xED,
-0x55, 0x2D, 0x83, 0x52, 0x03, 0x53, 0x18, 0x14, 0x58, 0xED, 0x83, 0x52, 0x03, 0x53, 0x18, 0xD0,
-0x12, 0xC8, 0xA2, 0xC0, 0x22, 0xC8, 0xBF, 0xC0, 0x26, 0x08, 0xA3, 0x00, 0x23, 0x08, 0xC0, 0x80,
-0x04, 0xF0, 0x8A, 0x51, 0x5D, 0x26, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x11, 0xC8, 0xA2, 0xC0,
-0x22, 0xC8, 0xBF, 0xC0, 0x26, 0x08, 0xA3, 0x00, 0x23, 0x08, 0xC0, 0x80, 0x05, 0x30, 0x8A, 0x51,
-0x5D, 0x26, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x10, 0x88, 0xA2, 0xC0, 0x22, 0xC8, 0xBF, 0xC0,
-0x26, 0x08, 0xA3, 0x00, 0x23, 0x08, 0xC0, 0x80, 0x06, 0x30, 0x8A, 0x51, 0x5D, 0x26, 0x8A, 0x51,
-0x07, 0x70, 0x83, 0x52, 0x03, 0x53, 0xA2, 0xC0, 0x22, 0xC8, 0xBF, 0xC0, 0x26, 0x08, 0xA3, 0x00,
-0x23, 0x08, 0xC0, 0x80, 0x00, 0xB0, 0x8A, 0x51, 0x5D, 0x26, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53,
-0x93, 0x1D, 0x93, 0x2D, 0x94, 0xED, 0xA1, 0xED, 0x1D, 0xB0, 0xA2, 0xC0, 0x22, 0xC8, 0xBF, 0xC0,
-0x26, 0x08, 0xA3, 0x00, 0x23, 0x08, 0xC0, 0x80, 0x08, 0xF0, 0x8A, 0x51, 0x5D, 0x26, 0x8A, 0x51,
-0xAF, 0xAD, 0x3B, 0xF0, 0x83, 0x52, 0x03, 0x53, 0xA2, 0xC0, 0x22, 0xC8, 0xBF, 0xC0, 0x26, 0x08,
-0xA3, 0x00, 0x23, 0x08, 0xC0, 0x80, 0x08, 0xF0, 0x8A, 0x51, 0x5D, 0x26, 0x8A, 0x51, 0x0F, 0xB0,
-0x83, 0x52, 0x03, 0x53, 0xA2, 0xC0, 0x22, 0xC8, 0xBF, 0xC0, 0x26, 0x08, 0xA3, 0x00, 0x23, 0x08,
-0xC0, 0x80, 0x00, 0xB0, 0x8A, 0x51, 0x5D, 0x26, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x19, 0x52,
-0x99, 0x92, 0x26, 0x08, 0x03, 0x9D, 0xC5, 0x2D, 0xC8, 0xED, 0x19, 0x51, 0x99, 0xD5, 0xCA, 0x2D,
-0x19, 0x10, 0x99, 0x94, 0x93, 0x1D, 0xCD, 0x6D, 0xD1, 0x2D, 0x83, 0x52, 0x03, 0x53, 0x19, 0x96,
-0xD4, 0x2D, 0x83, 0x52, 0x03, 0x53, 0x19, 0x52, 0x93, 0xD9, 0xD7, 0xAD, 0xDB, 0xAD, 0x83, 0x52,
-0x03, 0x53, 0x99, 0xD6, 0xDE, 0xAD, 0x83, 0x52, 0x03, 0x53, 0x99, 0x92, 0xDF, 0xED, 0x93, 0x1B,
-0xE2, 0x2D, 0xE3, 0x6D, 0xDF, 0xED, 0xE4, 0x2D, 0x26, 0x08, 0x03, 0x9D, 0xE8, 0x2D, 0xEB, 0xAD,
-0x99, 0x91, 0x19, 0x95, 0xEE, 0xAD, 0x99, 0x50, 0x19, 0x54, 0xEE, 0xAD, 0x03, 0x30, 0xA2, 0xC0,
-0x22, 0xC8, 0xBF, 0xC0, 0x26, 0x08, 0xA3, 0x00, 0x23, 0x08, 0xC0, 0x80, 0x00, 0xB0, 0x8A, 0x51,
-0x5D, 0x26, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0xA5, 0x41, 0x04, 0x6E, 0x25, 0x08, 0x01, 0xBE,
-0xA2, 0xC0, 0x22, 0xC8, 0xA5, 0x00, 0x04, 0x6E, 0x64, 0x70, 0x25, 0x02, 0x03, 0x5C, 0x09, 0xAE,
-0x0A, 0xAE, 0xFE, 0xED, 0x18, 0x56, 0x24, 0x18, 0x0E, 0xEE, 0x12, 0xAE, 0x83, 0x52, 0x03, 0x53,
-0x18, 0x14, 0x15, 0xEE, 0x83, 0x52, 0x03, 0x53, 0x18, 0xD0, 0x08, 0x40, 0x83, 0x52, 0x03, 0x53,
-0xAD, 0x40, 0x83, 0x96, 0x03, 0x53, 0x21, 0xC8, 0x03, 0x9D, 0x1F, 0x6E, 0x2B, 0x2E, 0x20, 0x88,
-0x83, 0x52, 0x03, 0x53, 0xAC, 0x00, 0x2C, 0x08, 0x88, 0x80, 0x2D, 0x48, 0x80, 0x38, 0xAC, 0x00,
-0x2C, 0x08, 0x86, 0xC0, 0x39, 0x2E, 0x83, 0x96, 0x03, 0x53, 0x20, 0x88, 0x83, 0x52, 0x03, 0x53,
-0xAC, 0x00, 0x2C, 0x08, 0x88, 0x80, 0x2D, 0x48, 0x80, 0x38, 0xAC, 0x00, 0x2C, 0x08, 0x85, 0xC0,
-0x39, 0x2E, 0x08, 0x40, 0x8A, 0x51, 0x92, 0xA6, 0x8A, 0x51, 0xB7, 0x80, 0x8A, 0x51, 0x93, 0xE6,
-0x8A, 0x51, 0xB8, 0x00, 0x8A, 0x51, 0x94, 0xA6, 0x8A, 0x51, 0xB9, 0x40, 0x8A, 0x51, 0x95, 0xE6,
-0x8A, 0x51, 0xBA, 0x40, 0x8A, 0x51, 0x96, 0xE6, 0x8A, 0x51, 0xBB, 0x80, 0x8A, 0x51, 0x97, 0x26,
-0x8A, 0x51, 0xBC, 0x40, 0x8A, 0x51, 0x98, 0xA6, 0x8A, 0x51, 0xBD, 0x80, 0x8A, 0x51, 0x99, 0xE6,
-0x8A, 0x51, 0xBE, 0x80, 0x83, 0x01, 0x8A, 0x51, 0x13, 0x68, 0x83, 0x52, 0x03, 0x53, 0xA1, 0xC0,
-0x40, 0x88, 0x03, 0x9D, 0x64, 0xEE, 0x6E, 0x6E, 0x3F, 0xC8, 0xA0, 0x80, 0x20, 0x88, 0x88, 0x80,
-0x21, 0xC8, 0x80, 0x38, 0xA0, 0x80, 0x20, 0x88, 0x86, 0xC0, 0x78, 0x2E, 0x3F, 0xC8, 0xA0, 0x80,
-0x20, 0x88, 0x88, 0x80, 0x21, 0xC8, 0x80, 0x38, 0xA0, 0x80, 0x20, 0x88, 0x85, 0xC0, 0x78, 0x2E,
-0x08, 0x40, 0x8B, 0xDC, 0x7C, 0x6E, 0x7D, 0xAE, 0x81, 0xAE, 0x8A, 0x51, 0x3F, 0x65, 0x8A, 0x51,
-0x81, 0xAE, 0x10, 0xF0, 0x83, 0x52, 0x03, 0x53, 0xA7, 0x40, 0x27, 0x48, 0x8B, 0x00, 0x2B, 0x48,
-0x81, 0x80, 0x2A, 0x08, 0x8A, 0xC0, 0x29, 0x08, 0x84, 0x80, 0x28, 0x4E, 0x83, 0xC0, 0x80, 0x0E,
-0x00, 0xCE, 0x09, 0x80, 0x00, 0xF4, 0x01, 0x34, 0x02, 0x34, 0x03, 0x74, 0x04, 0x34, 0x05, 0x74,
-0x06, 0x74, 0x07, 0xB4, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0x8A, 0x51, 0x0D, 0x68, 0xFF, 0xBF, 0xFF, 0xBF, 0x80, 0x40, 0x03, 0x4E, 0x83, 0x52, 0x03, 0x53,
+0xA6, 0x00, 0x0A, 0xC8, 0xA7, 0x40, 0x8A, 0x51, 0x17, 0x2B, 0x8A, 0x51, 0x4B, 0xEC, 0x95, 0x41,
+0x96, 0x41, 0x97, 0x81, 0x98, 0x01, 0x99, 0x41, 0x9A, 0x41, 0x9B, 0x81, 0x9C, 0x41, 0x9E, 0x81,
+0x19, 0x54, 0x19, 0x95, 0x18, 0x56, 0x8B, 0x41, 0x0F, 0xB0, 0xBE, 0xC1, 0xBE, 0x0A, 0xC9, 0x00,
+0x02, 0xF0, 0xB3, 0x81, 0xBF, 0xC0, 0x0F, 0xB0, 0xCA, 0x00, 0x06, 0x30, 0xB4, 0x00, 0x03, 0x30,
+0xC0, 0x80, 0x0F, 0xB0, 0xCB, 0x40, 0x0C, 0x30, 0xB5, 0x40, 0x03, 0x30, 0xC1, 0xC0, 0x0C, 0x30,
+0xCC, 0x00, 0x12, 0x30, 0xB6, 0x40, 0x03, 0x30, 0xC2, 0xC0, 0x09, 0x30, 0xCD, 0x40, 0x18, 0x30,
+0xB7, 0x80, 0x04, 0xF0, 0xC3, 0x00, 0x0C, 0x30, 0xCE, 0x40, 0x1E, 0xB0, 0xB8, 0x00, 0x04, 0xF0,
+0xC4, 0xC0, 0x09, 0x30, 0xCF, 0x80, 0x24, 0x30, 0xB9, 0x40, 0x05, 0x30, 0xC5, 0x00, 0x0C, 0x30,
+0xD0, 0xC0, 0x2A, 0x70, 0xBA, 0x40, 0x05, 0x30, 0xC6, 0x00, 0x09, 0x30, 0xD1, 0x00, 0x30, 0x30,
+0xBB, 0x80, 0x06, 0x30, 0xC7, 0x40, 0x0C, 0x30, 0xD2, 0x00, 0x36, 0xB0, 0xBC, 0x40, 0x06, 0x30,
+0xC8, 0xC0, 0x09, 0x30, 0xD3, 0x40, 0x3C, 0xB0, 0xBD, 0x80, 0xE3, 0x81, 0x63, 0x48, 0x60, 0xFE,
+0x84, 0x80, 0x83, 0x93, 0x80, 0x81, 0x63, 0x48, 0x60, 0xFE, 0x84, 0x80, 0x00, 0x48, 0x3E, 0xBE,
+0x84, 0x80, 0x00, 0x48, 0xAE, 0x40, 0x05, 0x30, 0x03, 0xD0, 0xAE, 0x0D, 0xFF, 0x7E, 0x03, 0x9D,
+0x6C, 0xA8, 0x63, 0x48, 0x60, 0xFE, 0x84, 0x80, 0x00, 0x48, 0x49, 0x3E, 0x84, 0x80, 0x03, 0xD0,
+0x00, 0xCD, 0x2E, 0x44, 0x83, 0x96, 0xA0, 0x80, 0x83, 0x52, 0x63, 0x48, 0x83, 0x96, 0xA1, 0xC0,
+0x0C, 0x30, 0x8A, 0x51, 0x03, 0x63, 0x8A, 0x51, 0x63, 0x48, 0x5E, 0xBE, 0x84, 0x80, 0x08, 0xF0,
+0x80, 0x40, 0x63, 0x48, 0x5E, 0xBE, 0x84, 0x80, 0x00, 0xCE, 0xF0, 0x39, 0x96, 0x00, 0x63, 0xDC,
+0x95, 0xA8, 0x83, 0x52, 0x03, 0x53, 0x18, 0x14, 0x98, 0x68, 0x83, 0x52, 0x03, 0x53, 0x18, 0xD0,
+0x18, 0x55, 0x18, 0x11, 0x02, 0xF0, 0xE3, 0xCA, 0x63, 0x42, 0x03, 0x5C, 0x5E, 0xE8, 0xE2, 0x41,
+0x62, 0x08, 0x5A, 0x7E, 0x84, 0x80, 0x07, 0x70, 0x83, 0x93, 0x80, 0x40, 0x62, 0x08, 0x5A, 0x7E,
+0x84, 0x80, 0x00, 0x48, 0x96, 0x00, 0x62, 0x08, 0x95, 0x00, 0x98, 0x54, 0x98, 0x10, 0x04, 0xF0,
+0xE2, 0x8A, 0x62, 0x02, 0x03, 0x5C, 0xA0, 0x28, 0x93, 0x5F, 0xB9, 0xE8, 0x8A, 0x51, 0xCF, 0x21,
+0x8A, 0x51, 0xE2, 0x41, 0x62, 0x08, 0x95, 0x00, 0x62, 0x08, 0x2F, 0xBE, 0x84, 0x80, 0x0D, 0x08,
+0x83, 0x93, 0x80, 0x40, 0x62, 0x08, 0x2F, 0xBE, 0x84, 0x80, 0x88, 0x30, 0x00, 0x42, 0x62, 0x08,
+0x03, 0x5C, 0xD5, 0xE8, 0x5A, 0x7E, 0x84, 0x80, 0x0F, 0xB0, 0x00, 0x42, 0x62, 0x08, 0x03, 0x18,
+0xD5, 0xE8, 0x5A, 0x7E, 0x84, 0x80, 0x00, 0x8A, 0xE7, 0x28, 0x2F, 0xBE, 0x84, 0x80, 0x2D, 0xB0,
+0x00, 0x42, 0x03, 0x18, 0xF4, 0xE8, 0x62, 0x08, 0x5A, 0x7E, 0x84, 0x80, 0x08, 0xF0, 0x00, 0x42,
+0x03, 0x5C, 0xF4, 0xE8, 0x62, 0x08, 0x5A, 0x7E, 0x84, 0x80, 0x00, 0x48, 0xFF, 0x7E, 0xAE, 0x40,
+0x62, 0x08, 0x5A, 0x7E, 0x84, 0x80, 0x2E, 0x48, 0x80, 0x40, 0x62, 0x08, 0x5A, 0x7E, 0x84, 0x80,
+0x00, 0x48, 0x96, 0x00, 0x98, 0x54, 0x98, 0x10, 0x04, 0xF0, 0xE2, 0x8A, 0x62, 0x02, 0x03, 0x5C,
+0xBA, 0xE8, 0xE3, 0x81, 0x63, 0xDC, 0x00, 0xE9, 0x83, 0x52, 0x03, 0x53, 0x18, 0x14, 0x03, 0x69,
+0x83, 0x52, 0x03, 0x53, 0x18, 0xD0, 0x63, 0x48, 0x56, 0x7E, 0x84, 0x80, 0x0E, 0x08, 0x83, 0x93,
+0x80, 0x40, 0x63, 0x48, 0x56, 0x7E, 0x84, 0x80, 0x88, 0x30, 0x00, 0x42, 0x63, 0x48, 0x03, 0x5C,
+0x1C, 0xA9, 0x5E, 0xBE, 0x84, 0x80, 0x0B, 0x70, 0x00, 0x42, 0x63, 0x48, 0x03, 0x18, 0x1C, 0xA9,
+0x5E, 0xBE, 0x84, 0x80, 0x00, 0x8A, 0x2E, 0xE9, 0x56, 0x7E, 0x84, 0x80, 0x2D, 0xB0, 0x00, 0x42,
+0x63, 0x48, 0x03, 0x18, 0x3D, 0x29, 0x5E, 0xBE, 0x84, 0x80, 0x09, 0x30, 0x00, 0x42, 0x63, 0x48,
+0x03, 0x5C, 0x3D, 0x29, 0x5E, 0xBE, 0x84, 0x80, 0x00, 0x48, 0xFF, 0x7E, 0xAE, 0x40, 0x63, 0x48,
+0x5E, 0xBE, 0x84, 0x80, 0x2E, 0x48, 0x80, 0x40, 0x63, 0x48, 0x5E, 0xBE, 0x84, 0x80, 0x00, 0xCE,
+0xF0, 0x39, 0x96, 0x00, 0x18, 0x55, 0x18, 0x11, 0x63, 0x48, 0x54, 0x3E, 0x84, 0x80, 0x0F, 0x48,
+0x80, 0x40, 0x63, 0x48, 0x54, 0x3E, 0x84, 0x80, 0x29, 0x70, 0x00, 0x42, 0x63, 0x48, 0x03, 0x5C,
+0x68, 0xA9, 0x60, 0xFE, 0x84, 0x80, 0x0A, 0x30, 0x00, 0x42, 0x63, 0x48, 0x03, 0x18, 0x68, 0xA9,
+0x60, 0xFE, 0x84, 0x80, 0x00, 0x8A, 0xAE, 0x40, 0x63, 0x48, 0x60, 0xFE, 0x84, 0x80, 0x2E, 0x48,
+0x80, 0x40, 0x63, 0x48, 0x60, 0xFE, 0x84, 0x80, 0x00, 0x48, 0x3E, 0xBE, 0x84, 0x80, 0x00, 0x48,
+0xAE, 0x40, 0x05, 0x30, 0x03, 0xD0, 0xAE, 0x0D, 0xFF, 0x7E, 0x03, 0x9D, 0x62, 0xA9, 0x8D, 0xE9,
+0x54, 0x3E, 0x84, 0x80, 0x0F, 0xB0, 0x00, 0x42, 0x03, 0x18, 0xA2, 0xA9, 0x63, 0x48, 0x60, 0xFE,
+0x84, 0x80, 0x80, 0x88, 0x03, 0x59, 0xA2, 0xA9, 0x63, 0x48, 0x60, 0xFE, 0x84, 0x80, 0x00, 0x48,
+0xFF, 0x7E, 0xAE, 0x40, 0x63, 0x48, 0x60, 0xFE, 0x84, 0x80, 0x2E, 0x48, 0x80, 0x40, 0x63, 0x48,
+0x60, 0xFE, 0x84, 0x80, 0x00, 0x48, 0x3E, 0xBE, 0x84, 0x80, 0x00, 0x48, 0xAE, 0x40, 0x05, 0x30,
+0x03, 0xD0, 0xAE, 0x0D, 0xFF, 0x7E, 0x03, 0x9D, 0x88, 0x69, 0x63, 0x48, 0x60, 0xFE, 0x84, 0x80,
+0x00, 0x48, 0x49, 0x3E, 0x84, 0x80, 0x03, 0xD0, 0x00, 0xCD, 0x2E, 0x44, 0x83, 0x96, 0xA0, 0x80,
+0x83, 0x52, 0x63, 0x48, 0x83, 0x96, 0xA1, 0xC0, 0x0C, 0x30, 0x8A, 0x51, 0x03, 0x63, 0x8A, 0x51,
+0x98, 0x95, 0x98, 0x51, 0x02, 0xF0, 0xE3, 0xCA, 0x63, 0x42, 0x03, 0x5C, 0xFA, 0x28, 0x60, 0xC8,
+0x33, 0x7E, 0x84, 0x80, 0x00, 0x48, 0xD8, 0x00, 0x06, 0x30, 0x83, 0x96, 0xA0, 0x80, 0x83, 0x52,
+0x5E, 0x88, 0xF8, 0xBE, 0x8A, 0x51, 0x38, 0x64, 0x8A, 0x51, 0xD9, 0x40, 0x58, 0x87, 0x97, 0x40,
+0x61, 0x08, 0x33, 0x7E, 0x84, 0x80, 0x00, 0x48, 0xD8, 0x00, 0x06, 0x30, 0x83, 0x96, 0xA0, 0x80,
+0x83, 0x52, 0x5F, 0xC8, 0xF8, 0xBE, 0x8A, 0x51, 0x38, 0x64, 0x8A, 0x51, 0xD9, 0x40, 0x58, 0x87,
+0x9C, 0x00, 0x17, 0x48, 0x9B, 0x40, 0x60, 0xC8, 0x9A, 0x00, 0x9E, 0x81, 0xB4, 0xA8, 0x18, 0x12,
+0x00, 0xB0, 0x13, 0xDB, 0x01, 0xF0, 0xAD, 0x40, 0x00, 0xB0, 0x18, 0x18, 0x01, 0xF0, 0xAB, 0x40,
+0x2D, 0xDC, 0xDE, 0x69, 0x83, 0x52, 0x03, 0x53, 0x18, 0x14, 0xE1, 0xE9, 0x83, 0x52, 0x03, 0x53,
+0x18, 0xD0, 0x12, 0xC8, 0x83, 0x96, 0xA0, 0x80, 0x83, 0x52, 0x2D, 0x48, 0x83, 0x96, 0xA1, 0xC0,
+0x04, 0xF0, 0x03, 0x63, 0x8A, 0x51, 0x11, 0xC8, 0x83, 0x96, 0xA0, 0x80, 0x83, 0x52, 0x2D, 0x48,
+0x83, 0x96, 0xA1, 0xC0, 0x05, 0x30, 0x03, 0x63, 0x8A, 0x51, 0x10, 0x88, 0x83, 0x96, 0xA0, 0x80,
+0x83, 0x52, 0x2D, 0x48, 0x83, 0x96, 0xA1, 0xC0, 0x06, 0x30, 0x03, 0x63, 0x8A, 0x51, 0x83, 0x96,
+0xA0, 0xC1, 0xA0, 0x0A, 0x83, 0x52, 0x2D, 0x48, 0x83, 0x96, 0xA1, 0xC0, 0x00, 0xB0, 0x03, 0x63,
+0x8A, 0x51, 0x0A, 0x30, 0x83, 0x96, 0xA0, 0x80, 0xA1, 0x01, 0xEA, 0xE2, 0x8A, 0x51, 0x05, 0x30,
+0x83, 0x96, 0x03, 0x53, 0xA0, 0x80, 0x83, 0x52, 0x2D, 0x48, 0x83, 0x96, 0xA1, 0xC0, 0x00, 0xB0,
+0x03, 0x63, 0x8A, 0x51, 0x0A, 0x30, 0x83, 0x96, 0xA0, 0x80, 0xA1, 0x01, 0xEA, 0xE2, 0x8A, 0x51,
+0x83, 0x52, 0x03, 0x53, 0x93, 0x1D, 0x28, 0x6A, 0x19, 0x96, 0x99, 0xD6, 0x2E, 0xB0, 0x2B, 0xEA,
+0x19, 0x96, 0x99, 0x92, 0x3A, 0xB0, 0xAC, 0x00, 0x83, 0x96, 0xA0, 0x80, 0x83, 0x52, 0x2D, 0x48,
+0x83, 0x96, 0xA1, 0xC0, 0x08, 0xF0, 0x03, 0x63, 0x8A, 0x51, 0x0A, 0x30, 0x83, 0x96, 0xA0, 0x80,
+0xA1, 0x01, 0xEA, 0xE2, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x2D, 0x48, 0x03, 0x59, 0x42, 0x6A,
+0x19, 0x51, 0x43, 0xAA, 0x19, 0x10, 0x0A, 0x30, 0x83, 0x96, 0xA0, 0x80, 0xA1, 0x01, 0xEA, 0xE2,
+0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x2D, 0x48, 0x03, 0x59, 0x50, 0x6A, 0x99, 0xD5, 0x51, 0xAA,
+0x99, 0x94, 0x32, 0x70, 0x83, 0x96, 0xA0, 0x80, 0xA1, 0x01, 0xEA, 0xE2, 0x8A, 0x51, 0x0D, 0x70,
+0x83, 0x96, 0x03, 0x53, 0xA0, 0x80, 0x83, 0x52, 0x2D, 0x48, 0x83, 0x96, 0xA1, 0xC0, 0x00, 0xB0,
+0x03, 0x63, 0x8A, 0x51, 0x0A, 0x30, 0x83, 0x96, 0xA0, 0x80, 0xA1, 0x01, 0xEA, 0xE2, 0x8A, 0x51,
+0x83, 0x52, 0x03, 0x53, 0x93, 0x1B, 0x68, 0xAA, 0x99, 0x92, 0x0A, 0x30, 0x83, 0x96, 0xA0, 0x80,
+0xA1, 0x01, 0xEA, 0xE2, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x19, 0x52, 0x0A, 0x30, 0x83, 0x96,
+0xA0, 0x80, 0xA1, 0x01, 0xEA, 0xE2, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x2D, 0x48, 0x03, 0x59,
+0x83, 0xAA, 0x99, 0x91, 0x84, 0x6A, 0x99, 0x50, 0x0A, 0x30, 0x83, 0x96, 0xA0, 0x80, 0xA1, 0x01,
+0xEA, 0xE2, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x2C, 0x08, 0x0F, 0x39, 0x03, 0x59, 0xB0, 0xAA,
+0xFF, 0xB0, 0xAC, 0xC7, 0x2C, 0x08, 0x83, 0x96, 0xA0, 0x80, 0x83, 0x52, 0x2D, 0x48, 0x83, 0x96,
+0xA1, 0xC0, 0x08, 0xF0, 0x03, 0x63, 0x8A, 0x51, 0x05, 0x30, 0x85, 0xAA, 0xF0, 0xB0, 0xAC, 0xC7,
+0x2C, 0x08, 0x83, 0x96, 0xA0, 0x80, 0x83, 0x52, 0x2D, 0x48, 0x83, 0x96, 0xA1, 0xC0, 0x08, 0xF0,
+0x03, 0x63, 0x8A, 0x51, 0x05, 0x30, 0x83, 0x96, 0xA0, 0x80, 0xA1, 0x01, 0xEA, 0xE2, 0x8A, 0x51,
+0x83, 0x52, 0x03, 0x53, 0x2C, 0x08, 0x30, 0xB9, 0x03, 0x9D, 0x9E, 0x2A, 0x05, 0x30, 0x83, 0x96,
+0xA0, 0x80, 0x83, 0x52, 0x2D, 0x48, 0x83, 0x96, 0xA1, 0xC0, 0x00, 0xB0, 0x03, 0x63, 0x8A, 0x51,
+0x0A, 0x30, 0x83, 0x96, 0xA0, 0x80, 0xA1, 0x01, 0xEA, 0xE2, 0x8A, 0x51, 0x03, 0x30, 0x83, 0x96,
+0x03, 0x53, 0xA0, 0x80, 0x83, 0x52, 0x2D, 0x48, 0x83, 0x96, 0xA1, 0xC0, 0x00, 0xB0, 0x03, 0x63,
+0x8A, 0x51, 0x0A, 0x30, 0x83, 0x96, 0xA0, 0x80, 0xA1, 0x01, 0xEA, 0xE2, 0x8A, 0x51, 0x83, 0x52,
+0x03, 0x53, 0x2D, 0x48, 0x03, 0x59, 0xDE, 0x6A, 0x19, 0x95, 0xDF, 0xAA, 0x19, 0x54, 0x18, 0x56,
+0x2B, 0xDC, 0xE6, 0x2A, 0x83, 0x52, 0x03, 0x53, 0x18, 0x14, 0x08, 0x40, 0x83, 0x52, 0x03, 0x53,
+0x18, 0xD0, 0x08, 0x40, 0x83, 0x52, 0xA9, 0x41, 0xAA, 0x41, 0x2A, 0x08, 0x80, 0x7A, 0xA8, 0xC0,
+0x83, 0x96, 0x21, 0xC8, 0x80, 0x7A, 0x83, 0x52, 0x28, 0xC2, 0x03, 0x9D, 0xFB, 0xAA, 0x83, 0x96,
+0x20, 0x88, 0x83, 0x52, 0x29, 0x02, 0x03, 0x18, 0x08, 0x40, 0x83, 0x52, 0x03, 0x53, 0xA9, 0x8A,
+0x03, 0x59, 0xAA, 0x8A, 0xED, 0x6A, 0x83, 0x52, 0xA8, 0xC0, 0x83, 0x96, 0x21, 0xC8, 0x03, 0x59,
+0x10, 0x6B, 0x20, 0x88, 0x83, 0x52, 0x88, 0x80, 0x28, 0xC8, 0x80, 0x38, 0x86, 0xC0, 0x08, 0x40,
+0x20, 0x88, 0x83, 0x52, 0x88, 0x80, 0x28, 0xC8, 0x80, 0x38, 0x85, 0xC0, 0x08, 0x40, 0x8B, 0xDC,
+0x1A, 0xEB, 0x23, 0xA3, 0x10, 0xF0, 0x8B, 0x00, 0x27, 0x48, 0x8A, 0xC0, 0x26, 0x8E, 0x83, 0xC0,
+0x80, 0x0E, 0x00, 0xCE, 0x09, 0x80, 0x18, 0x12, 0x00, 0xB0, 0x13, 0xDB, 0x01, 0xF0, 0xA5, 0x00,
+0x00, 0xB0, 0x18, 0x18, 0x01, 0xF0, 0xA3, 0x00, 0x25, 0x9C, 0x32, 0xEB, 0x83, 0x52, 0x03, 0x53,
+0x18, 0x14, 0x35, 0x2B, 0x83, 0x52, 0x03, 0x53, 0x18, 0xD0, 0x12, 0xC8, 0xE4, 0x00, 0x25, 0x08,
+0xE5, 0x40, 0x04, 0xF0, 0x28, 0x24, 0x8A, 0x51, 0x11, 0xC8, 0xE4, 0x00, 0x25, 0x08, 0xE5, 0x40,
+0x05, 0x30, 0x28, 0x24, 0x8A, 0x51, 0x10, 0x88, 0xE4, 0x00, 0x25, 0x08, 0xE5, 0x40, 0x06, 0x30,
+0x28, 0x24, 0x8A, 0x51, 0xE4, 0x41, 0xE4, 0x8A, 0x25, 0x08, 0xE5, 0x40, 0x00, 0xB0, 0x28, 0x24,
+0x8A, 0x51, 0x0A, 0x30, 0xE4, 0x00, 0xE5, 0x81, 0x14, 0x24, 0x8A, 0x51, 0x05, 0x30, 0x83, 0x52,
+0x03, 0x53, 0xE4, 0x00, 0x25, 0x08, 0xE5, 0x40, 0x00, 0xB0, 0x28, 0x24, 0x8A, 0x51, 0x0A, 0x30,
+0xE4, 0x00, 0xE5, 0x81, 0x14, 0x24, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x93, 0x1D, 0x6C, 0x2B,
+0x19, 0x96, 0x99, 0xD6, 0x2E, 0xB0, 0x6F, 0xAB, 0x19, 0x96, 0x99, 0x92, 0x3A, 0xB0, 0xA4, 0xC0,
+0xE4, 0x00, 0x25, 0x08, 0xE5, 0x40, 0x08, 0xF0, 0x28, 0x24, 0x8A, 0x51, 0x0A, 0x30, 0xE4, 0x00,
+0xE5, 0x81, 0x14, 0x24, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x25, 0x08, 0x03, 0x59, 0x82, 0xAB,
+0x19, 0x51, 0x83, 0xEB, 0x19, 0x10, 0x0A, 0x30, 0xE4, 0x00, 0xE5, 0x81, 0x14, 0x24, 0x8A, 0x51,
+0x83, 0x52, 0x03, 0x53, 0x25, 0x08, 0x03, 0x59, 0x8F, 0x6B, 0x99, 0xD5, 0x90, 0xAB, 0x99, 0x94,
+0x32, 0x70, 0xE4, 0x00, 0xE5, 0x81, 0x14, 0x24, 0x8A, 0x51, 0x0D, 0x70, 0x83, 0x52, 0x03, 0x53,
+0xE4, 0x00, 0x25, 0x08, 0xE5, 0x40, 0x00, 0xB0, 0x28, 0x24, 0x8A, 0x51, 0x0A, 0x30, 0xE4, 0x00,
+0xE5, 0x81, 0x14, 0x24, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x93, 0x1B, 0xA3, 0x2B, 0x99, 0x92,
+0x0A, 0x30, 0xE4, 0x00, 0xE5, 0x81, 0x14, 0x24, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x19, 0x52,
+0x0A, 0x30, 0xE4, 0x00, 0xE5, 0x81, 0x14, 0x24, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x25, 0x08,
+0x03, 0x59, 0xBC, 0x6B, 0x99, 0x91, 0xBD, 0xAB, 0x99, 0x50, 0x0A, 0x30, 0xE4, 0x00, 0xE5, 0x81,
+0x14, 0x24, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x24, 0xC8, 0x0F, 0x39, 0x03, 0x59, 0xE1, 0x2B,
+0xFF, 0xB0, 0xA4, 0x87, 0x24, 0xC8, 0xE4, 0x00, 0x25, 0x08, 0xE5, 0x40, 0x08, 0xF0, 0x28, 0x24,
+0x8A, 0x51, 0x05, 0x30, 0xBE, 0xAB, 0xF0, 0xB0, 0xA4, 0x87, 0x24, 0xC8, 0xE4, 0x00, 0x25, 0x08,
+0xE5, 0x40, 0x08, 0xF0, 0x28, 0x24, 0x8A, 0x51, 0x05, 0x30, 0xE4, 0x00, 0xE5, 0x81, 0x14, 0x24,
+0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x24, 0xC8, 0x30, 0xB9, 0x03, 0x9D, 0xD3, 0x6B, 0x05, 0x30,
+0xE4, 0x00, 0x25, 0x08, 0xE5, 0x40, 0x00, 0xB0, 0x28, 0x24, 0x8A, 0x51, 0x0A, 0x30, 0xE4, 0x00,
+0xE5, 0x81, 0x14, 0x24, 0x8A, 0x51, 0x03, 0x30, 0x83, 0x52, 0x03, 0x53, 0xE4, 0x00, 0x25, 0x08,
+0xE5, 0x40, 0x00, 0xB0, 0x28, 0x24, 0x8A, 0x51, 0x0A, 0x30, 0xE4, 0x00, 0xE5, 0x81, 0x14, 0x24,
+0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x25, 0x08, 0x03, 0x59, 0x08, 0x2C, 0x19, 0x95, 0x09, 0x6C,
+0x19, 0x54, 0x18, 0x56, 0x23, 0x9C, 0x10, 0x2C, 0x83, 0x52, 0x03, 0x53, 0x18, 0x14, 0x08, 0x40,
+0x83, 0x52, 0x03, 0x53, 0x18, 0xD0, 0x08, 0x40, 0xA1, 0x01, 0xA2, 0x01, 0x22, 0xC8, 0x80, 0x7A,
+0xA0, 0x80, 0x65, 0x48, 0x80, 0x7A, 0x20, 0x82, 0x03, 0x9D, 0x20, 0x2C, 0x64, 0x08, 0x21, 0xC2,
+0x03, 0x18, 0x08, 0x40, 0x83, 0x52, 0x03, 0x53, 0xA1, 0x4A, 0x03, 0x59, 0xA2, 0x4A, 0x16, 0xAC,
+0xA0, 0x80, 0x65, 0x48, 0x03, 0x59, 0x32, 0xAC, 0x64, 0x08, 0x88, 0x80, 0x20, 0x88, 0x80, 0x38,
+0x86, 0xC0, 0x08, 0x40, 0x64, 0x08, 0x88, 0x80, 0x20, 0x88, 0x80, 0x38, 0x85, 0xC0, 0x08, 0x40,
+0xA9, 0x00, 0xA8, 0x01, 0x29, 0x9C, 0x40, 0x2C, 0x83, 0x96, 0x20, 0x88, 0x83, 0x52, 0xA8, 0x87,
+0x83, 0x96, 0x03, 0xD0, 0xA0, 0x4D, 0x83, 0x52, 0x03, 0xD0, 0xA9, 0x8C, 0xA9, 0x48, 0x03, 0x9D,
+0x3A, 0xEC, 0x28, 0xC8, 0x08, 0x40, 0x83, 0x01, 0x8A, 0x51, 0x0F, 0xA8, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
diff --git a/libloragw/src/arb_fw.var b/libloragw/src/arb_fw.var
index 014a8e5..fae1ef3 100644
--- a/libloragw/src/arb_fw.var
+++ b/libloragw/src/arb_fw.var
@@ -11,7 +11,7 @@ Description:
*/
static uint8_t arb_firmware[MCU_ARB_FW_BYTE] = {
-0x8A, 0x51, 0x0E, 0xEE, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0x8A, 0x51, 0x18, 0xAE, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
@@ -203,70 +203,70 @@ static uint8_t arb_firmware[MCU_ARB_FW_BYTE] = {
0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
-0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0x64, 0xC0, 0x80, 0x81,
-0x84, 0x0A, 0x04, 0xC6, 0x03, 0x59, 0x00, 0xF4, 0x04, 0xC6, 0x07, 0xEE, 0xDC, 0x81, 0x83, 0x93,
-0x20, 0xF0, 0x84, 0x80, 0x57, 0xF0, 0x8A, 0x51, 0x06, 0x66, 0x8A, 0x51, 0xDD, 0xC1, 0xDE, 0xC1,
-0xA0, 0x30, 0x84, 0x80, 0xA9, 0xB0, 0x8A, 0x51, 0x06, 0x66, 0x83, 0x01, 0x8A, 0x51, 0x44, 0xAE,
-0x83, 0x52, 0xD7, 0x80, 0xDC, 0x90, 0x96, 0x00, 0x57, 0x88, 0x96, 0x00, 0x57, 0x88, 0x96, 0x00,
-0x57, 0x88, 0x96, 0x00, 0x8D, 0xDC, 0x08, 0x40, 0x15, 0x54, 0xDC, 0xD4, 0x0D, 0xDD, 0x2E, 0x2E,
-0x10, 0x88, 0x83, 0x96, 0xA6, 0x00, 0x83, 0x52, 0x11, 0xC8, 0x83, 0x96, 0xA7, 0x40, 0x83, 0x52,
-0x0F, 0x48, 0x83, 0x96, 0xA8, 0xC0, 0x83, 0x52, 0x0E, 0x08, 0x83, 0x96, 0xA4, 0xC0, 0x83, 0x52,
-0x12, 0xC8, 0xDD, 0x80, 0x15, 0x10, 0x08, 0x40, 0x8A, 0x51, 0x99, 0xE6, 0x8A, 0x51, 0x83, 0x52,
-0x0D, 0x58, 0x61, 0xEE, 0x83, 0x96, 0xA5, 0x41, 0x08, 0xF0, 0x25, 0x02, 0x03, 0x18, 0x47, 0x2E,
-0x83, 0x52, 0x5C, 0x94, 0x83, 0x96, 0x25, 0x08, 0x8A, 0x51, 0x20, 0x26, 0x8A, 0x51, 0xDC, 0x1C,
-0x5C, 0x2E, 0x8A, 0x51, 0xF0, 0xE6, 0x8A, 0x51, 0x0D, 0x58, 0x47, 0x2E, 0x83, 0x96, 0xA5, 0x8A,
-0x4C, 0xEE, 0x5C, 0xDC, 0x47, 0x2E, 0x8A, 0x51, 0x68, 0xA6, 0x8A, 0x51, 0x5C, 0x50, 0x47, 0x2E,
-0xDE, 0xC1, 0x08, 0xF0, 0x5E, 0x82, 0x03, 0x18, 0x08, 0x40, 0x5E, 0x88, 0x28, 0xFE, 0x84, 0x80,
-0x83, 0x93, 0x00, 0xCB, 0x97, 0x6E, 0x5E, 0x88, 0x28, 0xFE, 0x84, 0x80, 0x80, 0x81, 0x5E, 0x88,
-0x40, 0xBE, 0x84, 0x80, 0x00, 0x48, 0x97, 0x40, 0x5E, 0x88, 0x20, 0xBE, 0x84, 0x80, 0x00, 0x48,
-0x98, 0xC0, 0x5E, 0x88, 0x30, 0xFE, 0x84, 0x80, 0x00, 0x48, 0x99, 0x00, 0x5E, 0x88, 0x38, 0x3E,
-0x84, 0x80, 0x00, 0x48, 0x9A, 0x00, 0x5E, 0x88, 0x9B, 0x40, 0x5E, 0x88, 0x48, 0xFE, 0x84, 0x80,
-0x00, 0x48, 0x9C, 0x00, 0x95, 0x94, 0x95, 0x94, 0x95, 0x94, 0x95, 0x94, 0x95, 0x50, 0xDE, 0x0A,
-0x69, 0x2E, 0x95, 0x41, 0x96, 0x41, 0x97, 0x81, 0x98, 0x01, 0x99, 0x41, 0x9A, 0x41, 0x9B, 0x81,
-0x9C, 0x41, 0x9E, 0x81, 0xDE, 0xC1, 0x08, 0xF0, 0x5E, 0x82, 0x03, 0x18, 0xC1, 0xEE, 0x5E, 0x88,
-0x30, 0xFE, 0x84, 0x80, 0x80, 0x81, 0x5E, 0x88, 0x38, 0x3E, 0x84, 0x80, 0x80, 0x81, 0x5E, 0x88,
-0x48, 0xFE, 0x84, 0x80, 0x80, 0x81, 0x5E, 0x88, 0x20, 0xBE, 0x84, 0x80, 0x80, 0x81, 0x5E, 0x88,
-0x40, 0xBE, 0x84, 0x80, 0x80, 0x81, 0x5E, 0x88, 0x28, 0xFE, 0x84, 0x80, 0x80, 0x81, 0xDE, 0x0A,
-0xA3, 0x2E, 0x83, 0x96, 0xA5, 0x41, 0x83, 0x52, 0x5C, 0x50, 0xDC, 0x90, 0x5C, 0x91, 0x83, 0x96,
-0xA8, 0x01, 0xA0, 0xC1, 0xA1, 0x01, 0xA2, 0x01, 0xA3, 0x41, 0x83, 0x52, 0x97, 0x81, 0x98, 0x01,
-0x99, 0x41, 0x9A, 0x41, 0x9B, 0x81, 0x9C, 0x41, 0x83, 0x96, 0xA6, 0x41, 0xA7, 0x81, 0xA8, 0x01,
-0xA4, 0x01, 0x83, 0x52, 0xDD, 0xC1, 0xDE, 0xC1, 0x83, 0x96, 0xA5, 0x41, 0x83, 0x52, 0x02, 0xF0,
-0x5C, 0x50, 0xDC, 0x90, 0x5C, 0x91, 0xD0, 0xC0, 0x03, 0x30, 0xD1, 0x00, 0xD2, 0x00, 0x04, 0xF0,
-0xD3, 0x40, 0x05, 0x30, 0xD4, 0x00, 0x06, 0x30, 0xD5, 0x40, 0x07, 0x70, 0xD6, 0x40, 0x08, 0x40,
-0x5C, 0x91, 0xDE, 0xC1, 0x08, 0xF0, 0x5E, 0x82, 0x03, 0x18, 0xA2, 0x2F, 0x0A, 0x30, 0x83, 0x96,
-0x28, 0xC2, 0x83, 0x52, 0x03, 0x5C, 0x5C, 0xD5, 0x83, 0x96, 0x27, 0x48, 0xA1, 0xC0, 0xA0, 0xC1,
-0x26, 0x08, 0xA0, 0x47, 0x03, 0x18, 0xA1, 0x4A, 0x83, 0x52, 0x5E, 0x88, 0x30, 0xFE, 0x84, 0x80,
-0x83, 0x93, 0x00, 0x48, 0xD9, 0x40, 0x5E, 0x88, 0x38, 0x3E, 0x84, 0x80, 0x00, 0x48, 0x83, 0x96,
-0xA3, 0x00, 0x83, 0x52, 0x59, 0x48, 0x83, 0x96, 0xA2, 0xC0, 0x01, 0xF0, 0x83, 0x52, 0xD9, 0x40,
-0x5E, 0xCA, 0x1C, 0x2F, 0x03, 0xD0, 0xD9, 0x0D, 0xFF, 0x7E, 0x03, 0x9D, 0x1A, 0x2F, 0x59, 0x48,
-0x13, 0x45, 0x03, 0x9D, 0x28, 0xEF, 0x5E, 0x88, 0x28, 0xFE, 0x84, 0x80, 0x00, 0xCB, 0x9C, 0x6F,
-0x5E, 0x88, 0x40, 0xBE, 0x84, 0x80, 0x00, 0x48, 0x5D, 0xC6, 0x03, 0x9D, 0x9C, 0x6F, 0x5E, 0x88,
-0x20, 0xBE, 0x84, 0x80, 0x00, 0x48, 0x83, 0x96, 0x24, 0x06, 0x03, 0x9D, 0x3B, 0xAF, 0x83, 0x52,
-0x03, 0x53, 0x5C, 0xD5, 0x9C, 0x6F, 0x83, 0x52, 0x5D, 0x88, 0x4A, 0x3E, 0x84, 0x80, 0x00, 0x48,
-0x83, 0x96, 0x22, 0x47, 0x83, 0x52, 0xD9, 0x40, 0x83, 0x96, 0x23, 0x08, 0x03, 0x18, 0x23, 0x4A,
-0x83, 0x52, 0xDA, 0x40, 0x80, 0x7A, 0xDB, 0x80, 0x83, 0x96, 0x21, 0xC8, 0x80, 0x7A, 0x83, 0x52,
-0x5B, 0x82, 0x03, 0x9D, 0x57, 0xAF, 0x83, 0x96, 0x20, 0x88, 0x83, 0x52, 0x59, 0x42, 0x03, 0x5C,
-0x9C, 0x6F, 0x83, 0x52, 0x03, 0x53, 0x5D, 0x88, 0x4A, 0x3E, 0x84, 0x80, 0x83, 0x96, 0x23, 0x08,
-0x83, 0x52, 0xDA, 0x40, 0x83, 0x93, 0x00, 0x48, 0x83, 0x96, 0x22, 0xC2, 0x83, 0x52, 0xD9, 0x40,
-0x03, 0x5C, 0xDA, 0xC3, 0x83, 0x96, 0x21, 0xC8, 0x80, 0x7A, 0x83, 0x52, 0xDB, 0x80, 0x5A, 0x48,
-0x80, 0x7A, 0x5B, 0x82, 0x03, 0x9D, 0x77, 0xEF, 0x59, 0x48, 0x83, 0x96, 0x20, 0x82, 0x03, 0x5C,
-0x9C, 0x6F, 0x83, 0x52, 0x03, 0x53, 0x5E, 0x88, 0x48, 0xFE, 0x84, 0x80, 0x83, 0x93, 0x00, 0x48,
-0x02, 0xBE, 0xD9, 0x40, 0x00, 0xB0, 0x03, 0x18, 0x01, 0xF0, 0xDA, 0x40, 0x80, 0x7A, 0xDB, 0x80,
-0x80, 0xF0, 0x5B, 0x82, 0x03, 0x9D, 0x90, 0xEF, 0x83, 0x96, 0x28, 0xC8, 0x83, 0x52, 0x59, 0x42,
-0x03, 0x18, 0x37, 0xAF, 0x83, 0x52, 0x03, 0x53, 0x5E, 0x88, 0x28, 0xFE, 0x84, 0x80, 0x83, 0x93,
-0x80, 0x81, 0x5E, 0x88, 0xE8, 0x27, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x5C, 0xD9, 0xA2, 0x2F,
-0xDE, 0x0A, 0xF2, 0x6E, 0x5C, 0xD9, 0x08, 0x40, 0xDE, 0xC1, 0x08, 0xF0, 0x5E, 0x82, 0x03, 0x18,
-0x08, 0x40, 0x01, 0xF0, 0xD9, 0x40, 0x5E, 0xCA, 0xAF, 0xEF, 0x03, 0xD0, 0xD9, 0x0D, 0xFF, 0x7E,
-0x03, 0x9D, 0xAD, 0xAF, 0x59, 0x48, 0x13, 0x45, 0x03, 0x9D, 0xE6, 0xAF, 0x5E, 0x88, 0x28, 0xFE,
-0x84, 0x80, 0x83, 0x93, 0x80, 0x88, 0x03, 0x9D, 0xE6, 0xAF, 0x5E, 0x88, 0x30, 0xFE, 0x84, 0x80,
-0x83, 0x96, 0x26, 0x08, 0x80, 0x40, 0x83, 0x52, 0x5E, 0x88, 0x38, 0x3E, 0x84, 0x80, 0x83, 0x96,
-0x27, 0x48, 0x80, 0x40, 0x83, 0x52, 0x5E, 0x88, 0x48, 0xFE, 0x84, 0x80, 0x83, 0x96, 0x28, 0xC8,
-0x80, 0x40, 0x83, 0x52, 0x5E, 0x88, 0x20, 0xBE, 0x84, 0x80, 0x83, 0x96, 0x24, 0xC8, 0x80, 0x40,
-0x83, 0x52, 0x5E, 0x88, 0x40, 0xBE, 0x84, 0x80, 0x5D, 0x88, 0x80, 0x40, 0x5E, 0x88, 0x28, 0xFE,
-0x84, 0x80, 0x80, 0x81, 0x80, 0xCA, 0x9E, 0xCA, 0x5C, 0xD5, 0x08, 0x40, 0xDE, 0x0A, 0xA5, 0x6F,
-0xD8, 0x00, 0x9B, 0x40, 0x15, 0x95, 0x15, 0x95, 0x15, 0x95, 0x15, 0x95, 0x15, 0x95, 0x15, 0x95,
-0x15, 0x95, 0x15, 0x51, 0x01, 0xF0, 0xD7, 0x80, 0x58, 0x4A, 0xF8, 0xAF, 0x03, 0xD0, 0xD7, 0x4D,
-0xFF, 0x7E, 0x03, 0x9D, 0xF6, 0xEF, 0x57, 0x88, 0x13, 0x45, 0x03, 0x59, 0x08, 0x40, 0xF2, 0xAF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
+0x64, 0xC0, 0x80, 0x81, 0x84, 0x0A, 0x04, 0xC6, 0x03, 0x59, 0x00, 0xF4, 0x04, 0xC6, 0x11, 0xAE,
+0xD2, 0x41, 0x83, 0x93, 0x21, 0x30, 0x84, 0x80, 0x48, 0x30, 0x8A, 0x51, 0x10, 0x26, 0x8A, 0x51,
+0x83, 0x96, 0xA7, 0x81, 0xA0, 0x30, 0x84, 0x80, 0xA7, 0xF0, 0x8A, 0x51, 0x10, 0x26, 0x83, 0x01,
+0x8A, 0x51, 0x2A, 0xEE, 0x8A, 0x51, 0x50, 0x66, 0x8A, 0x51, 0x83, 0x52, 0x0D, 0x58, 0x47, 0x2E,
+0xC2, 0x01, 0x83, 0x96, 0x27, 0x94, 0x83, 0x52, 0x42, 0xC8, 0x8A, 0x51, 0xF2, 0x26, 0x8A, 0x51,
+0x83, 0x52, 0x03, 0x53, 0x52, 0x9C, 0x3F, 0xAE, 0x8A, 0x51, 0x2C, 0xE7, 0x8A, 0x51, 0x0D, 0x58,
+0x2D, 0x2E, 0x04, 0xF0, 0xC2, 0x4A, 0x42, 0xC2, 0x03, 0x18, 0x2D, 0x2E, 0x31, 0xEE, 0x83, 0x96,
+0x27, 0xDC, 0x4D, 0x2E, 0x8A, 0x51, 0xA1, 0xA6, 0x8A, 0x51, 0x83, 0x96, 0x27, 0x50, 0x2D, 0x2E,
+0x95, 0x41, 0x96, 0x41, 0x97, 0x81, 0x98, 0x01, 0x99, 0x41, 0x9A, 0x41, 0x9B, 0x81, 0x9C, 0x41,
+0x9E, 0x81, 0xC7, 0x81, 0x04, 0xF0, 0x47, 0x42, 0x03, 0x18, 0x78, 0x2E, 0x47, 0x48, 0x31, 0x3E,
+0x84, 0x80, 0x80, 0x81, 0x47, 0x48, 0x35, 0x7E, 0x84, 0x80, 0x80, 0x81, 0x47, 0x48, 0x3D, 0xBE,
+0x84, 0x80, 0x80, 0x81, 0x47, 0x48, 0x29, 0x3E, 0x84, 0x80, 0x80, 0x81, 0x47, 0x48, 0x39, 0x7E,
+0x84, 0x80, 0x80, 0x81, 0x47, 0x48, 0x2D, 0x7E, 0x84, 0x80, 0x80, 0x81, 0xC7, 0xCA, 0x5A, 0x2E,
+0xC3, 0x41, 0xC4, 0x01, 0xC6, 0x41, 0xC1, 0x01, 0xC5, 0x41, 0x83, 0x96, 0x27, 0x50, 0x83, 0x52,
+0x02, 0xF0, 0x52, 0x10, 0xD2, 0x50, 0x83, 0x96, 0xA0, 0x80, 0x03, 0x30, 0xA1, 0xC0, 0xA2, 0xC0,
+0x04, 0xF0, 0xA3, 0x00, 0x05, 0x30, 0xA4, 0xC0, 0x06, 0x30, 0xA5, 0x00, 0x07, 0x70, 0xA6, 0x00,
+0x83, 0x52, 0xA0, 0xC1, 0xA1, 0xC0, 0x06, 0x30, 0xA2, 0xC0, 0x05, 0x30, 0xA3, 0x00, 0x04, 0xF0,
+0xA4, 0xC0, 0x03, 0x30, 0xA5, 0x00, 0x02, 0xF0, 0xA6, 0x00, 0xA7, 0x81, 0xA7, 0xCA, 0xA8, 0x01,
+0x08, 0x40, 0x83, 0x52, 0xC7, 0x81, 0x04, 0xF0, 0x47, 0x42, 0x03, 0x18, 0x08, 0x40, 0x47, 0x48,
+0x2D, 0x7E, 0x84, 0x80, 0x83, 0x93, 0x00, 0xCB, 0xF0, 0x2E, 0x47, 0x48, 0x2D, 0x7E, 0x84, 0x80,
+0x80, 0x81, 0x47, 0x48, 0x39, 0x7E, 0x84, 0x80, 0x00, 0x48, 0x97, 0x40, 0x47, 0x48, 0x29, 0x3E,
+0x84, 0x80, 0x00, 0x48, 0x98, 0xC0, 0x47, 0x48, 0x31, 0x3E, 0x84, 0x80, 0x00, 0x48, 0x99, 0x00,
+0x47, 0x48, 0x35, 0x7E, 0x84, 0x80, 0x00, 0x48, 0x9A, 0x00, 0x47, 0x48, 0x21, 0xFE, 0x84, 0x80,
+0x00, 0x48, 0x9B, 0x40, 0x47, 0x48, 0x3D, 0xBE, 0x84, 0x80, 0x00, 0x48, 0x9C, 0x00, 0x95, 0x94,
+0x0A, 0x30, 0xD3, 0x40, 0xD4, 0x41, 0x18, 0xA7, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x95, 0x50,
+0x0A, 0x30, 0xD3, 0x40, 0xD4, 0x41, 0x18, 0xA7, 0x8A, 0x51, 0x01, 0xF0, 0x83, 0x52, 0x03, 0x53,
+0xCB, 0x40, 0x47, 0x48, 0x21, 0xFE, 0x84, 0x80, 0x83, 0x93, 0x00, 0x8A, 0xE9, 0x6E, 0x03, 0xD0,
+0xCB, 0x0D, 0xFF, 0x7E, 0x03, 0x9D, 0xE7, 0xAE, 0x4B, 0x48, 0x13, 0x45, 0x03, 0x59, 0xDD, 0xAE,
+0xC7, 0xCA, 0xA3, 0x2E, 0xCB, 0x40, 0x52, 0x10, 0x96, 0x00, 0x0A, 0x30, 0xD3, 0x40, 0xD4, 0x41,
+0x18, 0xA7, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x8D, 0xDC, 0x08, 0x40, 0x52, 0x54, 0x15, 0x54,
+0x0A, 0x30, 0xD3, 0x40, 0xD4, 0x41, 0x18, 0xA7, 0x8A, 0x51, 0x83, 0x52, 0x03, 0x53, 0x0D, 0xDD,
+0x05, 0xEF, 0x10, 0x88, 0xC3, 0x00, 0x11, 0xC8, 0xC4, 0xC0, 0x0F, 0x48, 0xC6, 0x00, 0x0E, 0x08,
+0xC1, 0xC0, 0x12, 0xC8, 0xC5, 0x00, 0x15, 0x10, 0x0A, 0x30, 0xD3, 0x40, 0xD4, 0x41, 0x18, 0xEF,
+0xC9, 0x41, 0xCA, 0x41, 0x4A, 0x08, 0x80, 0x7A, 0xC8, 0xC0, 0x54, 0x08, 0x80, 0x7A, 0x48, 0xC2,
+0x03, 0x9D, 0x24, 0xEF, 0x53, 0x48, 0x49, 0x02, 0x03, 0x18, 0x08, 0x40, 0x83, 0x52, 0x03, 0x53,
+0xC9, 0x8A, 0x03, 0x59, 0xCA, 0x8A, 0x1A, 0x2F, 0xD2, 0x50, 0xC7, 0x81, 0x04, 0xF0, 0x47, 0x42,
+0x03, 0x18, 0xBF, 0x2F, 0x0A, 0x30, 0x46, 0x02, 0x03, 0x18, 0x38, 0x2F, 0xD2, 0x94, 0xBB, 0xEF,
+0x01, 0xF0, 0xC8, 0xC0, 0x47, 0x48, 0x21, 0xFE, 0x84, 0x80, 0x83, 0x93, 0x00, 0x8A, 0x42, 0xEF,
+0x03, 0xD0, 0xC8, 0x8D, 0xFF, 0x7E, 0x03, 0x9D, 0x40, 0xAF, 0x48, 0xC8, 0x13, 0x45, 0x03, 0x9D,
+0x4E, 0x6F, 0x47, 0x48, 0x2D, 0x7E, 0x84, 0x80, 0x00, 0xCB, 0xBB, 0xEF, 0x47, 0x48, 0x39, 0x7E,
+0x84, 0x80, 0x00, 0x48, 0x45, 0x46, 0x03, 0x9D, 0xBB, 0xEF, 0x44, 0xC8, 0xD1, 0x00, 0xD0, 0x01,
+0x43, 0x08, 0xD0, 0x87, 0x03, 0x18, 0xD1, 0x8A, 0x47, 0x48, 0x31, 0x3E, 0x84, 0x80, 0x00, 0x48,
+0xC8, 0xC0, 0x47, 0x48, 0x35, 0x7E, 0x84, 0x80, 0x00, 0x48, 0xCD, 0x40, 0x48, 0xC8, 0xCC, 0x00,
+0x45, 0x08, 0x0C, 0xBC, 0xC8, 0xC0, 0xFF, 0xB0, 0xC8, 0x4A, 0xC9, 0x00, 0x0F, 0xB0, 0xCA, 0x00,
+0x74, 0x6F, 0x4A, 0x8D, 0xCA, 0x8C, 0xC9, 0x8C, 0xC8, 0x8B, 0x71, 0x6F, 0x83, 0x52, 0x03, 0x53,
+0x49, 0x08, 0xCE, 0x40, 0x4A, 0x08, 0xCF, 0x80, 0x47, 0x48, 0x29, 0x3E, 0x84, 0x80, 0x83, 0x93,
+0x00, 0x48, 0x41, 0x06, 0x03, 0x9D, 0xBB, 0xEF, 0x50, 0xC8, 0xFF, 0x7E, 0xC8, 0xC0, 0x51, 0x08,
+0x03, 0x18, 0x01, 0xBE, 0xFF, 0x7E, 0xC9, 0x00, 0x4E, 0x48, 0x48, 0x05, 0xCA, 0x00, 0x4F, 0x88,
+0x49, 0x45, 0xCB, 0x40, 0x4D, 0x86, 0x03, 0x9D, 0x97, 0xAF, 0x4C, 0x08, 0x4A, 0x46, 0x03, 0x59,
+0x36, 0x6F, 0x4E, 0x48, 0x50, 0x05, 0xC8, 0xC0, 0x4F, 0x88, 0x51, 0x45, 0xC9, 0x00, 0x4D, 0x86,
+0x03, 0x9D, 0xA4, 0x2F, 0x4C, 0x08, 0x48, 0x06, 0x03, 0x59, 0x36, 0x6F, 0x50, 0xC8, 0x01, 0xBE,
+0xC8, 0xC0, 0x51, 0x08, 0x03, 0x18, 0x01, 0xBE, 0x00, 0x7E, 0xC9, 0x00, 0x4E, 0x48, 0x48, 0x05,
+0xCA, 0x00, 0x4F, 0x88, 0x49, 0x45, 0xCB, 0x40, 0x4D, 0x86, 0x03, 0x9D, 0xB9, 0xAF, 0x4C, 0x08,
+0x4A, 0x46, 0x03, 0x59, 0x36, 0x6F, 0xD2, 0x98, 0xBF, 0x2F, 0xC7, 0xCA, 0x2E, 0x6F, 0xD2, 0x98,
+0x08, 0x40, 0xC7, 0x81, 0x04, 0xF0, 0x47, 0x42, 0x03, 0x18, 0x08, 0x40, 0x01, 0xF0, 0xC8, 0xC0,
+0x47, 0x48, 0x21, 0xFE, 0x84, 0x80, 0x83, 0x93, 0x00, 0x8A, 0xD0, 0x2F, 0x03, 0xD0, 0xC8, 0x8D,
+0xFF, 0x7E, 0x03, 0x9D, 0xCE, 0xAF, 0x48, 0xC8, 0x13, 0x45, 0x03, 0x9D, 0xFE, 0x2F, 0x47, 0x48,
+0x2D, 0x7E, 0x84, 0x80, 0x80, 0x88, 0x03, 0x9D, 0xFE, 0x2F, 0x47, 0x48, 0x31, 0x3E, 0x84, 0x80,
+0x43, 0x08, 0x80, 0x40, 0x47, 0x48, 0x35, 0x7E, 0x84, 0x80, 0x44, 0xC8, 0x80, 0x40, 0x47, 0x48,
+0x3D, 0xBE, 0x84, 0x80, 0x46, 0x08, 0x80, 0x40, 0x47, 0x48, 0x29, 0x3E, 0x84, 0x80, 0x41, 0xC8,
+0x80, 0x40, 0x47, 0x48, 0x39, 0x7E, 0x84, 0x80, 0x45, 0x08, 0x80, 0x40, 0x47, 0x48, 0x2D, 0x7E,
+0x84, 0x80, 0x80, 0x81, 0x80, 0xCA, 0xA0, 0x0A, 0xD2, 0x94, 0x08, 0x40, 0xC7, 0xCA, 0xC2, 0x2F,
0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF,
diff --git a/libloragw/src/loragw_hal.c b/libloragw/src/loragw_hal.c
index a57d9f1..930f13e 100644
--- a/libloragw/src/loragw_hal.c
+++ b/libloragw/src/loragw_hal.c
@@ -36,7 +36,7 @@ Description:
#else
#define DEBUG_MSG(str)
#define DEBUG_PRINTF(fmt, args...)
- #define DEBUG_ARRAY(a,b,c)
+ #define DEBUG_ARRAY(a,b,c) for(a=0;a!=0;){}
#define CHECK_NULL(a) if(a==NULL){return LGW_HAL_ERROR;}
#endif
@@ -61,25 +61,25 @@ const uint32_t rf_tx_upfreq[LGW_RF_CHAIN_NB] = LGW_RF_TX_UPFREQ;
#define MCU_AGC_FW_BYTE 8192 /* size of the firmware IN BYTES (= twice the number of 14b words) */
/*
-SX1275 frequency setting :
+SX1257 frequency setting :
F_register(24bit) = F_rf (Hz) / F_step(Hz)
= F_rf (Hz) * 2^19 / F_xtal(Hz)
+ = F_rf (Hz) * 2^19 / 32e6
= F_rf (Hz) * 256/15625
*/
-#define SX1257_DENOM 15625 /* pll settings denominator when the numerator is 2^8 */
+#define SX125x_32MHz_FRAC 15625 /* irreductible fraction for PLL register caculation */
-#define SX1257_CLK_OUT 1
-#define SX1257_TX_DAC_CLK_SEL 1 /* 0:int, 1:ext */
-#define SX1257_TX_DAC_GAIN 2 /* 3:0, 2:-3, 1:-6, 0:-9 dBFS (default 2) */
-#define SX1257_TX_MIX_GAIN 14 /* -38 + 2*TxMixGain dB (default 14) */
-#define SX1257_TX_PLL_BW 3 /* 0:75, 1:150, 2:225, 3:300 kHz (default 3) */
-#define SX1257_TX_ANA_BW 0 /* 17.5 / 2*(41-TxAnaBw) MHz (default 0) */
-#define SX1257_TX_DAC_BW 7 /* 24 + 8*TxDacBw Nb FIR taps (default 2) */
-#define SX1257_RX_LNA_GAIN 1 /* 1 to 6, 1 highest gain */
-#define SX1257_RX_BB_GAIN 12 /* 0 to 15 , 15 highest gain */
-#define SX1257_RX_ADC_BW 7 /* 0 to 7, 2:100<BW<200, 5:200<BW<400,7:400<BW (kHz) */
-#define SX1257_RX_ADC_TRIM 6 /* 0 to 7, 6 for 32MHz ref, 5 for 36MHz ref */
-#define SX1257_RXBB_BW 2
+#define SX125x_TX_DAC_CLK_SEL 1 /* 0:int, 1:ext */
+#define SX125x_TX_DAC_GAIN 2 /* 3:0, 2:-3, 1:-6, 0:-9 dBFS (default 2) */
+#define SX125x_TX_MIX_GAIN 14 /* -38 + 2*TxMixGain dB (default 14) */
+#define SX125x_TX_PLL_BW 3 /* 0:75, 1:150, 2:225, 3:300 kHz (default 3) */
+#define SX125x_TX_ANA_BW 0 /* 17.5 / 2*(41-TxAnaBw) MHz (default 0) */
+#define SX125x_TX_DAC_BW 7 /* 24 + 8*TxDacBw Nb FIR taps (default 2) */
+#define SX125x_RX_LNA_GAIN 1 /* 1 to 6, 1 highest gain */
+#define SX125x_RX_BB_GAIN 12 /* 0 to 15 , 15 highest gain */
+#define SX125x_RX_ADC_BW 7 /* 0 to 7, 2:100<BW<200, 5:200<BW<400,7:400<BW (kHz) */
+#define SX125x_RX_ADC_TRIM 6 /* 0 to 7, 6 for 32MHz ref, 5 for 36MHz ref */
+#define SX125x_RXBB_BW 2
#define RSSI_OFFSET_LORA_MULTI -128.0 /* calibrated value */
#define RSSI_OFFSET_LORA_STD -167.0 /* calibrated for all bandwidth */
@@ -115,7 +115,7 @@ the _start function assumes
static bool lgw_is_started = false;
static bool rf_enable[LGW_RF_CHAIN_NB] = {0, 0};
-static uint32_t rf_rx_freq[LGW_IF_CHAIN_NB] = {0, 0}; /* absolute, in Hz */
+static uint32_t rf_rx_freq[LGW_RF_CHAIN_NB] = {0, 0}; /* absolute, in Hz */
static bool if_enable[LGW_IF_CHAIN_NB] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
static bool if_rf_chain[LGW_IF_CHAIN_NB] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* for each IF, 0 -> radio A, 1 -> radio B */
@@ -135,9 +135,9 @@ static uint32_t fsk_rx_dr = 0; /* FSK modem datarate in bauds */
int load_firmware(uint8_t target, uint8_t *firmware, uint16_t size);
-void sx125x_write(uint8_t rf_chain, uint8_t addr, uint8_t data);
+void sx125x_write(uint8_t channel, uint8_t addr, uint8_t data);
-uint8_t sx125x_read(uint8_t rf_chain, uint8_t addr);
+uint8_t sx125x_read(uint8_t channel, uint8_t addr);
int setup_sx1257(uint8_t rf_chain, uint32_t freq_hz);
@@ -148,7 +148,6 @@ void lgw_constant_adjust(void);
/* size is the firmware size in bytes (not 14b words) */
int load_firmware(uint8_t target, uint8_t *firmware, uint16_t size) {
- int32_t read_value;
int reg_rst;
int reg_sel;
@@ -292,24 +291,28 @@ int setup_sx1257(uint8_t rf_chain, uint32_t freq_hz) {
DEBUG_MSG("ERROR: INVALID RF_CHAIN\n");
return -1;
}
-
- /* misc */
- sx125x_write(rf_chain, 0x10, SX1257_TX_DAC_CLK_SEL + SX1257_CLK_OUT*2);
+
+ if (rf_chain == 0) { /* Enable 'clock out' for radio A only */
+ sx125x_write(rf_chain, 0x10, SX125x_TX_DAC_CLK_SEL + 2);
+ } else {
+ sx125x_write(rf_chain, 0x10, SX125x_TX_DAC_CLK_SEL);
+ }
+ sx125x_write(rf_chain, 0x26, 0X2D); /* Disable gm of oscillator block */
/* Tx gain and trim */
- sx125x_write(rf_chain, 0x08, SX1257_TX_MIX_GAIN + SX1257_TX_DAC_GAIN*16);
- sx125x_write(rf_chain, 0x0A, SX1257_TX_ANA_BW + SX1257_TX_PLL_BW*32);
- sx125x_write(rf_chain, 0x0B, SX1257_TX_DAC_BW);
+ sx125x_write(rf_chain, 0x08, SX125x_TX_MIX_GAIN + SX125x_TX_DAC_GAIN*16);
+ sx125x_write(rf_chain, 0x0A, SX125x_TX_ANA_BW + SX125x_TX_PLL_BW*32);
+ sx125x_write(rf_chain, 0x0B, SX125x_TX_DAC_BW);
/* Rx gain and trim */
- sx125x_write(rf_chain, 0x0C, 0 + SX1257_RX_BB_GAIN*2 + SX1257_RX_LNA_GAIN*32);
- sx125x_write(rf_chain, 0x0D, SX1257_RXBB_BW + SX1257_RX_ADC_TRIM*4 + SX1257_RX_ADC_BW*32);
+ sx125x_write(rf_chain, 0x0C, 0 + SX125x_RX_BB_GAIN*2 + SX125x_RX_LNA_GAIN*32);
+ sx125x_write(rf_chain, 0x0D, SX125x_RXBB_BW + SX125x_RX_ADC_TRIM*4 + SX125x_RX_ADC_BW*32);
/* set RX PLL frequency */
- part_int = freq_hz / SX1257_DENOM; /* integer part, gives the MSB and the middle byte */
- part_frac = ((freq_hz % SX1257_DENOM) << 8) / SX1257_DENOM; /* fractional part, gives LSB */
- sx125x_write(rf_chain, 0x01,0xFF & (part_int >> 8)); /* Most Significant Byte */
- sx125x_write(rf_chain, 0x02,0xFF & part_int); /* middle byte */
+ part_int = freq_hz / (SX125x_32MHz_FRAC << 8); /* integer part, gives the MSB */
+ part_frac = ((freq_hz % (SX125x_32MHz_FRAC << 8)) << 8) / SX125x_32MHz_FRAC; /* fractional part, gives middle part and LSB */
+ sx125x_write(rf_chain, 0x01,0xFF & part_int); /* Most Significant Byte */
+ sx125x_write(rf_chain, 0x02,0xFF & (part_frac >> 8)); /* middle byte */
sx125x_write(rf_chain, 0x03,0xFF & part_frac); /* Least Significant Byte */
/* start and PLL lock */
@@ -321,9 +324,9 @@ int setup_sx1257(uint8_t rf_chain, uint32_t freq_hz) {
sx125x_write(rf_chain, 0x00, 1); /* enable Xtal oscillator */
sx125x_write(rf_chain, 0x00, 3); /* Enable RX (PLL+FE) */
++cpt_attempts;
- DEBUG_PRINTF("Note: SX1257 #%d PLL start (attempt %d)\n", rf_chain, cpt_attempts);
+ DEBUG_PRINTF("Note: SX125x #%d PLL start (attempt %d)\n", rf_chain, cpt_attempts);
wait_ms(1);
- } while(sx125x_read(rf_chain, 0x11) & 0x02 == 0);
+ } while((sx125x_read(rf_chain, 0x11) & 0x02) == 0);
return 0;
}
@@ -340,7 +343,7 @@ void lgw_constant_adjust(void) {
// lgw_reg_w(LGW_MBWSSF_MODEM_INVERT_IQ,0); /* default 0 */
// lgw_reg_w(LGW_DC_NOTCH_EN,1); /* default 1 */
lgw_reg_w(LGW_RSSI_BB_FILTER_ALPHA,9); /* default 7 */
- lgw_reg_w(LGW_RSSI_DEC_FILTER_ALPHA,7); /* default 5 */
+ lgw_reg_w(LGW_RSSI_DEC_FILTER_ALPHA,9); /* default 5 */
lgw_reg_w(LGW_RSSI_CHANN_FILTER_ALPHA,7); /* default 8 */
// lgw_reg_w(LGW_RSSI_BB_DEFAULT_VALUE,32); /* default 32 */
lgw_reg_w(LGW_RSSI_CHANN_DEFAULT_VALUE,90); /* default 100 */
@@ -608,7 +611,6 @@ int lgw_rxif_setconf(uint8_t if_chain, struct lgw_conf_rxif_s conf) {
int lgw_start(void) {
int i, j;
int reg_stat;
- int32_t read_value;
if (lgw_is_started == true) {
DEBUG_MSG("Note: Lora Gateway already started, restarting it now\n");
@@ -747,7 +749,6 @@ int lgw_receive(uint8_t max_pkt, struct lgw_pkt_rx_s *pkt_data) {
int nb_pkt_fetch; /* loop variable and return value */
struct lgw_pkt_rx_s *p; /* pointer to the current structure in the struct array */
uint8_t buff[255+RX_METADATA_NB]; /* buffer to store the result of SPI read bursts */
- uint16_t data_addr; /* address read from the FIFO and programmed before the data buffer read operation */
int s; /* size of the payload, uses to address metadata */
int ifmod; /* type of if_chain/modem a packet was received by */
int stat_fifo; /* the packet status as indicated in the FIFO */
@@ -864,6 +865,10 @@ int lgw_receive(uint8_t max_pkt, struct lgw_pkt_rx_s *pkt_data) {
p->count_us = (uint32_t)buff[s+6] + ((uint32_t)buff[s+7] << 8) + ((uint32_t)buff[s+8] << 16) + ((uint32_t)buff[s+9] << 24);
p->crc = (uint16_t)buff[s+10] + ((uint16_t)buff[s+11] << 8);
+ /* get back info from configuration so that application doesn't have to keep track of it */
+ p->rf_chain = (uint8_t)if_rf_chain[p->if_chain];
+ p->freq_hz = (uint32_t)((int32_t)rf_rx_freq[p->rf_chain] + if_freq[p->if_chain]);
+
/* advance packet FIFO */
lgw_reg_w(LGW_RX_PACKET_DATA_FIFO_NUM_STORED, 0);
}
@@ -874,13 +879,13 @@ int lgw_receive(uint8_t max_pkt, struct lgw_pkt_rx_s *pkt_data) {
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
int lgw_send(struct lgw_pkt_tx_s pkt_data) {
+ int i;
uint8_t buff[256+TX_METADATA_NB]; /* buffer to prepare the packet to send + metadata before SPI write burst */
uint32_t part_int; /* integer part for PLL register value calculation */
uint32_t part_frac; /* fractional part for PLL register value calculation */
uint16_t fsk_dr_div; /* divider to configure for target datarate */
int transfer_size = 0; /* data to transfer from host to TX databuffer */
int payload_offset = 0; /* start of the payload content in the databuffer */
- int i;
/* check if the gateway is running */
if (lgw_is_started == false) {
@@ -953,10 +958,10 @@ int lgw_send(struct lgw_pkt_tx_s pkt_data) {
payload_offset = TX_METADATA_NB; /* start the payload just after the metadata */
/* metadata 0 to 2, TX PLL frequency */
- part_int = pkt_data.freq_hz / SX1257_DENOM; /* integer part, gives the MSB and the middle byte */
- part_frac = ((pkt_data.freq_hz % SX1257_DENOM) << 8) / SX1257_DENOM; /* fractional part, gives LSB */
- buff[0] = 0xFF & (part_int >> 8); /* Most Significant Byte */
- buff[1] = 0xFF & part_int; /* middle byte */
+ part_int = pkt_data.freq_hz / (SX125x_32MHz_FRAC << 8); /* integer part, gives the MSB */
+ part_frac = ((pkt_data.freq_hz % (SX125x_32MHz_FRAC << 8)) << 8) / SX125x_32MHz_FRAC; /* fractional part, gives middle part and LSB */
+ buff[0] = 0xFF & part_int; /* Most Significant Byte */
+ buff[1] = 0xFF & (part_frac >> 8); /* middle byte */
buff[2] = 0xFF & part_frac; /* Least Significant Byte */
/* metadata 3 to 6, timestamp trigger value */
@@ -1053,7 +1058,7 @@ int lgw_send(struct lgw_pkt_tx_s pkt_data) {
buff[13] = 0xFF & pkt_data.preamble;
/* metadata 14 & 15, FSK baudrate */
- fsk_dr_div = LGW_XTAL_FREQU / pkt_data.datarate;
+ fsk_dr_div = (uint16_t)((uint32_t)LGW_XTAL_FREQU / pkt_data.datarate); /* Ok for datarate between 500bps and 250kbps */
buff[14] = 0xFF & (fsk_dr_div >> 8);
buff[15] = 0xFF & fsk_dr_div;
diff --git a/libloragw/src/loragw_reg.c b/libloragw/src/loragw_reg.c
index fea9784..68bba55 100644
--- a/libloragw/src/loragw_reg.c
+++ b/libloragw/src/loragw_reg.c
@@ -479,7 +479,6 @@ int lgw_disconnect(void) {
/* soft-reset function */
int lgw_soft_reset(void) {
- int32_t read_value;
/* check if SPI is initialised */
if ((lgw_spi_target == NULL) || (lgw_regpage < 0)) {
DEBUG_MSG("ERROR: GATEWAY UNCONNECTED\n");
@@ -610,7 +609,7 @@ int lgw_reg_r(uint16_t register_id, int32_t *reg_value) {
int spi_stat = LGW_SPI_SUCCESS;
struct lgw_reg_s r;
uint8_t bufu[4] = "\x00\x00\x00\x00";
- int8_t *bufs = bufu;
+ int8_t *bufs = (int8_t *)bufu;
int i, size_byte;
uint32_t u = 0;
diff --git a/libloragw/src/loragw_spi.ftdi.c b/libloragw/src/loragw_spi.ftdi.c
index 7b71901..8a16cca 100644
--- a/libloragw/src/loragw_spi.ftdi.c
+++ b/libloragw/src/loragw_spi.ftdi.c
@@ -177,7 +177,7 @@ int lgw_spi_wb(void *spi_target, uint8_t address, uint8_t *data, uint16_t size)
uint8_t command;
uint8_t *out_buf = NULL;
int size_to_do, buf_size, chunk_size, offset;
- int a, b, c;
+ int a=0, b=0, c=0;
int i;
/* check input parameters */
@@ -243,7 +243,7 @@ int lgw_spi_rb(void *spi_target, uint8_t address, uint8_t *data, uint16_t size)
struct mpsse_context *mpsse = spi_target;
uint8_t command;
int size_to_do, chunk_size, offset;
- int a, b, c, d;
+ int a=0, b=0, c=0, d=0;
int i;
/* check input parameters */
diff --git a/libloragw/src/loragw_spi.native.c b/libloragw/src/loragw_spi.native.c
index f5f0701..64e9427 100644
--- a/libloragw/src/loragw_spi.native.c
+++ b/libloragw/src/loragw_spi.native.c
@@ -59,7 +59,7 @@ Description:
int lgw_spi_open(void **spi_target_ptr) {
int *spi_device = NULL;
int dev;
- int a,b,c;
+ int a=0, b=0;
int i;
/* check input variables */
diff --git a/libloragw/tst/test_loragw_hal.c b/libloragw/tst/test_loragw_hal.c
index a210bee..6afcc45 100644
--- a/libloragw/tst/test_loragw_hal.c
+++ b/libloragw/tst/test_loragw_hal.c
@@ -28,6 +28,7 @@ Description:
#include <signal.h> /* sigaction */
#include "loragw_hal.h"
+#include "loragw_reg.h"
#include "loragw_aux.h"
/* -------------------------------------------------------------------------- */
@@ -60,7 +61,7 @@ static void sig_handler(int sigio) {
/* -------------------------------------------------------------------------- */
/* --- MAIN FUNCTION -------------------------------------------------------- */
-int main(int argc, char **argv)
+int main()
{
struct sigaction sigact; /* SIGQUIT&SIGINT&SIGTERM signal handling */
@@ -73,14 +74,13 @@ int main(int argc, char **argv)
int i, j;
int nb_pkt;
- uint8_t x;
uint32_t tx_cnt = 0;
unsigned long loop_cnt = 0;
- int tx_path = 0;
- struct lgw_pkt_tx_s txs;
uint8_t status_var = 0;
+ FILE * reg_dump = NULL;
+
/* configure signal handling */
sigemptyset(&sigact.sa_mask);
sigact.sa_flags = 0;
@@ -109,32 +109,29 @@ int main(int argc, char **argv)
ifconf.enable = true;
ifconf.rf_chain = 0;
ifconf.freq_hz = -300000;
- ifconf.bandwidth = BW_125KHZ;
ifconf.datarate = DR_LORA_MULTI;
lgw_rxif_setconf(0, ifconf); /* chain 0: Lora 125kHz, all SF, on 865.7 MHz */
ifconf.enable = true;
ifconf.rf_chain = 0;
ifconf.freq_hz = 300000;
- ifconf.bandwidth = BW_125KHZ;
ifconf.datarate = DR_LORA_MULTI;
lgw_rxif_setconf(1, ifconf); /* chain 1: Lora 125kHz, all SF, on 866.3 MHz */
ifconf.enable = true;
ifconf.rf_chain = 1;
ifconf.freq_hz = -300000;
- ifconf.bandwidth = BW_125KHZ;
ifconf.datarate = DR_LORA_MULTI;
lgw_rxif_setconf(2, ifconf); /* chain 2: Lora 125kHz, all SF, on 867.7 MHz */
ifconf.enable = true;
ifconf.rf_chain = 1;
ifconf.freq_hz = 300000;
- ifconf.bandwidth = BW_125KHZ;
ifconf.datarate = DR_LORA_MULTI;
lgw_rxif_setconf(3, ifconf); /* chain 3: Lora 125kHz, all SF, on 868.3 MHz */
/* set configuration for Lora 'stand alone' channel */
+ memset(&ifconf, 0, sizeof(ifconf));
ifconf.enable = true;
ifconf.rf_chain = 0;
ifconf.freq_hz = 0;
@@ -143,44 +140,52 @@ int main(int argc, char **argv)
lgw_rxif_setconf(8, ifconf); /* chain 8: Lora 250kHz, SF10, on 866.0 MHz */
/* set configuration for FSK channel */
+ memset(&ifconf, 0, sizeof(ifconf));
ifconf.enable = true;
ifconf.rf_chain = 1;
ifconf.freq_hz = 0;
ifconf.bandwidth = BW_250KHZ;
ifconf.datarate = 64000;
- lgw_rxif_setconf(9, ifconf); /* chain 9: FSK 64kbps, fdev 32kHz, variable payload, on 868.0 MHz */
+ lgw_rxif_setconf(9, ifconf); /* chain 9: FSK 64kbps, on 868.0 MHz */
/* set configuration for TX packet */
- memset(&txs, 0, sizeof(txs));
- txs.freq_hz = 867000000;
- txs.tx_mode = IMMEDIATE;
- txs.modulation = MOD_LORA;
- txs.bandwidth = BW_250KHZ;
- txs.datarate = DR_LORA_SF10;
- txs.coderate = CR_LORA_4_5;
- strcpy((char *)txs.payload, "TX.TEST.LORA.GW.????" );
- txs.size = 20;
- txs.preamble = 6;
- txs.rf_chain = 0;
+ memset(&txpkt, 0, sizeof(txpkt));
+ txpkt.freq_hz = 867000000;
+ txpkt.tx_mode = IMMEDIATE;
+ txpkt.modulation = MOD_LORA;
+ txpkt.bandwidth = BW_250KHZ;
+ txpkt.datarate = DR_LORA_SF10;
+ txpkt.coderate = CR_LORA_4_5;
+ strcpy((char *)txpkt.payload, "TX.TEST.LORA.GW.????" );
+ txpkt.size = 20;
+ txpkt.preamble = 6;
+ txpkt.rf_chain = 0;
/*
- memset(&txs, 0, sizeof(txs));
- txs.freq_hz = 867000000;
- txs.tx_mode = IMMEDIATE;
- txs.modulation = MOD_FSK;
- txs.f_dev = 50;
- txs.datarate = 64000;
- strcpy((char *)txs.payload, "TX.TEST.LORA.GW.????" );
- txs.size = 20;
- txs.preamble = 4;
- txs.rf_chain = 0;
+ memset(&txpkt, 0, sizeof(txpkt));
+ txpkt.freq_hz = 867000000;
+ txpkt.tx_mode = IMMEDIATE;
+ txpkt.modulation = MOD_FSK;
+ txpkt.f_dev = 50;
+ txpkt.datarate = 64000;
+ strcpy((char *)txpkt.payload, "TX.TEST.LORA.GW.????" );
+ txpkt.size = 20;
+ txpkt.preamble = 4;
+ txpkt.rf_chain = 0;
*/
-// printf("***\n%s\n***\n", lgw_version_info());
+ printf("*** Library version information ***\n%s\n***\n", lgw_version_info());
/* connect, configure and start the Lora gateway */
lgw_start();
+ /* once configured, dump content of registers to a file, for reference */
+ reg_dump = fopen("reg_dump.log", "w");
+ if (reg_dump != NULL) {
+ lgw_reg_check(reg_dump);
+ fclose(reg_dump);
+ }
+
while ((quit_sig != 1) && (exit_sig != 1)) {
loop_cnt++;
@@ -248,13 +253,13 @@ int main(int argc, char **argv)
/* send a packet every X loop */
if (loop_cnt%16 == 0) {
/* 32b counter in the payload, big endian */
- txs.payload[16] = 0xff & (tx_cnt >> 24);
- txs.payload[17] = 0xff & (tx_cnt >> 16);
- txs.payload[18] = 0xff & (tx_cnt >> 8);
- txs.payload[19] = 0xff & tx_cnt;
- i = lgw_send(txs); /* non-blocking scheduling of TX packet */
+ txpkt.payload[16] = 0xff & (tx_cnt >> 24);
+ txpkt.payload[17] = 0xff & (tx_cnt >> 16);
+ txpkt.payload[18] = 0xff & (tx_cnt >> 8);
+ txpkt.payload[19] = 0xff & tx_cnt;
+ i = lgw_send(txpkt); /* non-blocking scheduling of TX packet */
j = 0;
- printf("+++\nSending packet #%d, rf path %d, return %d\nstatus -> ", tx_cnt, txs.rf_chain, i);
+ printf("+++\nSending packet #%d, rf path %d, return %d\nstatus -> ", tx_cnt, txpkt.rf_chain, i);
do {
++j;
wait_ms(100);
diff --git a/libloragw/tst/test_loragw_reg.c b/libloragw/tst/test_loragw_reg.c
index 2b80109..21ff8ee 100644
--- a/libloragw/tst/test_loragw_reg.c
+++ b/libloragw/tst/test_loragw_reg.c
@@ -24,7 +24,7 @@ Description:
#define BURST_TEST_LENGTH 8192
-int main(int argc, char **argv)
+int main()
{
int32_t read_value, test_value;
uint16_t lfsr;
diff --git a/libloragw/tst/test_loragw_spi.c b/libloragw/tst/test_loragw_spi.c
index 0eae55d..e288df5 100644
--- a/libloragw/tst/test_loragw_spi.c
+++ b/libloragw/tst/test_loragw_spi.c
@@ -34,7 +34,7 @@ Description:
/* -------------------------------------------------------------------------- */
/* --- MAIN FUNCTION -------------------------------------------------------- */
-int main(int argc, char **argv)
+int main()
{
int i;
void *spi_target = NULL;