From a0bf8e40430dc82c8c8140f07d71dc10ac232361 Mon Sep 17 00:00:00 2001 From: "avery.babka" Date: Fri, 25 Jul 2025 14:06:59 -0500 Subject: [PATCH] Upload files to "/" --- RF.ino | 185 ++++++++++++++++++++ RF_Keys.h | 485 +++++++++++++++++++++++++++++++++++++++++++++++++++++ SD_ADI.ino | 195 +++++++++++++++++++++ SPI_ADI.h | 21 +++ slave.ino | 161 ++++++++++++++++++ 5 files changed, 1047 insertions(+) create mode 100644 RF.ino create mode 100644 RF_Keys.h create mode 100644 SD_ADI.ino create mode 100644 SPI_ADI.h create mode 100644 slave.ino diff --git a/RF.ino b/RF.ino new file mode 100644 index 0000000..423e246 --- /dev/null +++ b/RF.ino @@ -0,0 +1,185 @@ +#include "RF_Keys.h" +enum +{ + RF_IDLE = 0, + RF_SETUP = 10, + RF_PREAMBLE = 20, + RF_TX_CODE = 30, + RF_TX_CODE_WAIT = 40, + RF_TX_DONE = 1000 +}; + +uint16_t rfTxState = RF_IDLE; +uint8_t *rfKeyPtr; +uint8_t rfKeyCount; +uint8_t rfIdx; +uint32_t rfTime; + +void initRF() +{ + initCC1101(); +} + +void rfSendKey(uint8_t key, uint8_t channel) +{ + Serial.print("Key - "); + Serial.print(key); + Serial.print(" Ch - "); + Serial.println(channel); + if (rfKey.key == RF_NO_KEY) // make sure there are no pending keys + { + rfKey.key = key; + rfKey.channel = channel; + } +} + +/******************************************************************************* + +*******************************************************************************/ +void rfTask() +{ + + rfTxTask(); + + switch (rfState) + { + case 0: + if (rfKey.key != RF_NO_KEY) + rfState = 100; + break; + + case 100: // send a key + if (rfTxState == RF_IDLE) + rfTxState = RF_SETUP; + rfState++; + break; + + case 101: + if (rfTxState == RF_IDLE) + rfState = 0; + } +} + +/******************************************************************************** +This task is to simulate a replicated transmission from a DD2702H transmitter + +The CC1100 will enter asynchronous transmission mode. +Then a preamble (0xAA) will be transmitted for approximately 145mS +The CC1100 will then be put into packet mode. +A keypacket sequence will be transmitted. + A down or up key will transmit 7 packets. + A stop or prog key will transmit 3 packets. + There is an 82mS delay between each packet. + +When tranmission is complete, CC1101 will be put into idle mode. + + +*********************************************************************************/ +void rfTxTask(void) +{ + long x = 0; + byte b; + + switch (rfTxState) + { + case RF_IDLE: + break; + + case RF_SETUP: + switch (rfKey.key) + { + case RF_KEY_DN: + rfKeyPtr = &DnKey[0][0] + (rfKey.channel * 9 * 21); + // Serial.println("RF Down Key"); + // Serial.print("Channel ");Serial.println(rfKey.channel); + // Serial.println("Dn Key ");Serial.println((long unsigned int)&DnKey[0][0],HEX); + // Serial.print("rfKeyPtr ");Serial.println((long unsigned int)rfKeyPtr,HEX); + rfKeyCount = 9; + break; + + case RF_KEY_UP: + rfKeyPtr = &UpKey[0][0] + (rfKey.channel * 9 * 21); + // Serial.println("RF Up Key"); + rfKeyCount = 9; + break; + + case RF_KEY_STOP: + rfKeyPtr = &StopKey[0][0] + (rfKey.channel * 3 * 21); + // Serial.println("RF Stop Key"); + rfKeyCount = 3; + break; + + case RF_KEY_PROG: + rfKeyPtr = &ProgKey[0][0] + (rfKey.channel * 3 * 21); + // Serial.println("RF Prog Key"); + rfKeyCount = 3; + break; + } + rfTxState = RF_PREAMBLE; + break; + + case RF_PREAMBLE: + // async mode will be used to send a 140ms preamble + SendCCData(0x08, 0x30); // async mode + ccTxOn(); + ccTx.write(0x2d); + ccTx.write(0xd4); + ccTx.write(0x2d); + ccTx.write(0xd4); + while (++x < 500) + { + ccTx.write(0xAA); + } + // switch to packet mode to send key codes. + // this will allow CC1100 to calculate the CRC and append to packet + SendCCData(0x08, 0x04); // packet mode, fixed length, crc enabled + rfIdx = 0; + rfTxState = RF_TX_CODE; + break; + + case RF_TX_CODE: + SendCCCommand(CC_CMD_TX_FLUSH); // flush Tx FIFO + for (b = 0; b < 21; b++) + { + RFTXArray[b] = *rfKeyPtr++; + // Serial.print(RFTXArray[b],HEX);Serial.print(" "); + } + // Serial.println(" "); + SendCCDataBurst(CC_CMD_FIFO, RFTXArray, 21); + ccTxOn(); + rfTime = millis(); + while (GetCCData(CC_STATUS_MSTATE) != 1) + { + if (millis() - rfTime > 20) + { + // Serial.println("RF Timeout"); + rfTxState = RF_IDLE; + break; + } + } + rfIdx++; + rfTime = millis(); + rfTxState = RF_TX_CODE_WAIT; + break; + + case RF_TX_CODE_WAIT: + if (rfIdx >= rfKeyCount) + { + rfTxState = RF_TX_DONE; + } + else + { + if ((millis() - rfTime) > 82) + { + rfTxState = RF_TX_CODE; + } + } + break; + + case RF_TX_DONE: + rfKey.key = RF_NO_KEY; + rfKey.channel = 0; + rfTxState = RF_IDLE; + break; + } +} diff --git a/RF_Keys.h b/RF_Keys.h new file mode 100644 index 0000000..31f2442 --- /dev/null +++ b/RF_Keys.h @@ -0,0 +1,485 @@ +#ifndef RF_KEYS_H +#define RF_KEYS_H +enum +{ + RF_NO_KEY = 0, + RF_KEY_DN, + RF_KEY_UP, + RF_KEY_STOP, + RF_KEY_PROG +} rfKeys; + +typedef struct +{ + unsigned key : 4; + unsigned channel : 4; +} rfKey_t; + +rfKey_t rfKey; + +///////////////////// Down Keys +uint8_t DnKey[][21] PROGMEM = { + // Ch 0 + {0x12, 0x12, 0xC1, 0x60, 0x42, 0xAD, 0xB9, 0xDF, 0x7C, 0xB9, 0xCD, 0x21, 0xF9, 0x00, 0x83, 0xF1, 0x79, 0x56, 0x49, 0x2C, 0x72}, + {0x12, 0x12, 0xC1, 0xCD, 0xA4, 0xA7, 0x9E, 0x3E, 0x3A, 0xC5, 0x30, 0x09, 0x9C, 0x67, 0x1E, 0x84, 0xFE, 0x8F, 0x96, 0xA1, 0x42}, + {0x12, 0x12, 0xC1, 0xB1, 0xD8, 0x73, 0x20, 0x15, 0x99, 0xEC, 0x05, 0x8D, 0x22, 0xF6, 0x1C, 0x89, 0x1F, 0x79, 0xD5, 0x4A, 0x15}, + {0x12, 0x12, 0xC1, 0x40, 0x9C, 0x59, 0x12, 0x86, 0x66, 0x08, 0x8F, 0x43, 0x20, 0xEB, 0x0A, 0x78, 0xF7, 0xAF, 0xE0, 0x53, 0xB3}, + {0x12, 0x12, 0xC1, 0x91, 0x88, 0x5B, 0xF0, 0x81, 0x9D, 0x76, 0xE0, 0xE5, 0xE8, 0x8E, 0x81, 0x2E, 0x47, 0x45, 0x7E, 0xAA, 0xDB}, + {0x12, 0x12, 0xC1, 0xA7, 0x4D, 0xDD, 0x9C, 0xC0, 0x0F, 0x2C, 0xB2, 0x93, 0x30, 0x60, 0xE0, 0xCE, 0xA9, 0xCC, 0x2A, 0xB5, 0xC4}, + {0x12, 0x12, 0xC1, 0x7A, 0xFD, 0x37, 0x66, 0xE0, 0xB4, 0xF9, 0xC1, 0x0C, 0x6D, 0xA5, 0x26, 0x1B, 0x4E, 0x89, 0xFF, 0x9E, 0xBE}, + {0x12, 0x12, 0xC1, 0x67, 0xB0, 0x58, 0x0A, 0x30, 0x44, 0x16, 0xC9, 0x6A, 0xDA, 0x38, 0xBA, 0xC0, 0xF7, 0x12, 0xCF, 0x67, 0xC9}, + {0x12, 0x12, 0xC1, 0xF6, 0x8F, 0xF8, 0x2B, 0x6B, 0x7B, 0xD1, 0xEA, 0x1B, 0x9F, 0x27, 0xAC, 0x59, 0xBE, 0x00, 0x26, 0xFD, 0xA1}, + // Ch 1 + {0x12, 0x12, 0xC1, 0x84, 0x90, 0x8B, 0xA2, 0xA2, 0x72, 0xFA, 0xAB, 0xAB, 0xCA, 0xEE, 0x50, 0xA0, 0xB9, 0xCC, 0x90, 0x83, 0x5B}, // CH1 + {0x12, 0x12, 0xC1, 0x72, 0xEC, 0x45, 0x70, 0x5A, 0x87, 0xEC, 0xF1, 0xCA, 0x8E, 0x28, 0xF4, 0x92, 0xD8, 0x68, 0x90, 0x02, 0x88}, + {0x12, 0x12, 0xC1, 0xF0, 0xD0, 0x34, 0xEF, 0xEB, 0xBA, 0xA2, 0xD0, 0xDE, 0x38, 0x8F, 0x7A, 0xA2, 0xE9, 0x10, 0x2B, 0xEF, 0x50}, + {0x12, 0x12, 0xC1, 0x8C, 0x11, 0x95, 0x33, 0x7C, 0x16, 0x8C, 0x9D, 0xDF, 0xBE, 0x13, 0x3D, 0x6F, 0x66, 0xD2, 0x76, 0x64, 0xFE}, + {0x12, 0x12, 0xC1, 0x50, 0x1C, 0x32, 0xC4, 0xE4, 0xFB, 0xE3, 0xF6, 0x9C, 0x93, 0x8D, 0xD1, 0x94, 0xBA, 0x9B, 0x40, 0x94, 0x2C}, + {0x12, 0x12, 0xC1, 0x02, 0x4A, 0x02, 0xF3, 0x60, 0x9B, 0xA9, 0x90, 0x0A, 0x3E, 0x6D, 0x77, 0xE9, 0x17, 0x83, 0x69, 0xA0, 0xE6}, + {0x12, 0x12, 0xC1, 0xC1, 0xDC, 0xB3, 0x5D, 0x82, 0xBD, 0x38, 0x08, 0xC3, 0xA9, 0xDE, 0xEB, 0x32, 0x6D, 0x44, 0xB6, 0xC0, 0x17}, + {0x12, 0x12, 0xC1, 0x11, 0x4B, 0xC7, 0xB3, 0x46, 0x8F, 0x4D, 0xF8, 0xCA, 0xD6, 0xDE, 0x55, 0xC2, 0x86, 0xC2, 0x6F, 0xF9, 0xDB}, + {0x12, 0x12, 0xC1, 0xEE, 0x47, 0x62, 0x4F, 0xA6, 0x6D, 0x00, 0x4A, 0x3E, 0x79, 0xC5, 0x96, 0x4A, 0x08, 0x26, 0x36, 0x2A, 0xEF}, + // Ch 2 + {0x12, 0x12, 0xC1, 0xF1, 0x64, 0xA8, 0xDB, 0x69, 0xC3, 0xAB, 0xDE, 0xC3, 0x83, 0x8E, 0x66, 0xAE, 0x4F, 0xED, 0xED, 0x37, 0xEA}, // CH2 + {0x12, 0x12, 0xC1, 0x25, 0xBD, 0x25, 0xD3, 0xA4, 0x29, 0x3D, 0x5C, 0x42, 0x74, 0xEF, 0x06, 0x64, 0xB7, 0xBA, 0x66, 0xDD, 0xA0}, + {0x12, 0x12, 0xC1, 0xF4, 0x8B, 0xF4, 0x3F, 0x12, 0xC3, 0x3B, 0x57, 0x6E, 0xD8, 0xF2, 0xAE, 0x35, 0xD9, 0xDA, 0xD4, 0x85, 0x6B}, + {0x12, 0x12, 0xC1, 0x32, 0xE7, 0x63, 0xE2, 0x4E, 0x9F, 0x7F, 0xFF, 0x2E, 0x92, 0x98, 0xA5, 0x9C, 0x31, 0x4A, 0xA6, 0xC3, 0x76}, + {0x12, 0x12, 0xC1, 0x02, 0xCC, 0x20, 0xF6, 0x21, 0x5F, 0x9A, 0xD7, 0x39, 0x82, 0xC1, 0x48, 0x2C, 0xAA, 0xD8, 0xF2, 0xED, 0xBB}, + {0x12, 0x12, 0xC1, 0xBB, 0xE7, 0xBA, 0xB4, 0x95, 0x3A, 0x18, 0x86, 0x9A, 0x01, 0xD7, 0x05, 0xD6, 0x89, 0x3C, 0xB6, 0xCD, 0x06}, + {0x12, 0x12, 0xC1, 0x88, 0x9D, 0xF8, 0x46, 0x0E, 0x81, 0x69, 0xA8, 0x38, 0x9A, 0x7A, 0xFB, 0xAB, 0x3D, 0xA7, 0x61, 0x03, 0x83}, + {0x12, 0x12, 0xC1, 0x2F, 0xF2, 0x2A, 0x49, 0xDB, 0xAE, 0x24, 0xE4, 0x91, 0xC8, 0xC6, 0x7B, 0xDA, 0xF7, 0x22, 0x0D, 0xA9, 0x6E}, + {0x12, 0x12, 0xC1, 0x69, 0x06, 0xC0, 0x18, 0x6B, 0xAA, 0xE9, 0xD7, 0x07, 0x8B, 0x9F, 0x0A, 0x85, 0x8E, 0xB7, 0x1E, 0x14, 0x57}, + // Ch 3 + {0x12, 0x12, 0xC1, 0xED, 0x0A, 0x00, 0xFB, 0x03, 0xB1, 0x0C, 0x67, 0x2F, 0xD0, 0x18, 0x03, 0xCE, 0x85, 0x26, 0x35, 0x79, 0xFD}, // CH3 + {0x12, 0x12, 0xC1, 0x97, 0xD5, 0x5D, 0xCC, 0x9A, 0xEC, 0x04, 0x23, 0xA8, 0x75, 0xB2, 0x2D, 0xF4, 0xAC, 0xD8, 0x23, 0x29, 0x44}, + {0x12, 0x12, 0xC1, 0x1E, 0x62, 0x74, 0x10, 0xF2, 0x12, 0xE4, 0x10, 0x63, 0x2A, 0xE8, 0xC0, 0x59, 0x38, 0xB9, 0x85, 0xE1, 0x16}, + {0x12, 0x12, 0xC1, 0x06, 0xEB, 0xBA, 0x8E, 0xF5, 0x66, 0xFC, 0xA5, 0xA2, 0x05, 0xBB, 0xF6, 0x47, 0x89, 0xDD, 0x6D, 0xF9, 0x61}, + {0x12, 0x12, 0xC1, 0xEF, 0x87, 0x16, 0x5D, 0x2D, 0x1A, 0x8D, 0x4F, 0xB1, 0x3A, 0x4B, 0xAB, 0xBB, 0x2F, 0x58, 0xC0, 0x6C, 0x46}, + {0x12, 0x12, 0xC1, 0x47, 0xF8, 0x2A, 0xAA, 0x07, 0x84, 0xB5, 0xED, 0xDE, 0x56, 0xC5, 0x09, 0x6A, 0x69, 0xC4, 0x8E, 0x35, 0x11}, + {0x12, 0x12, 0xC1, 0xA5, 0xAF, 0x6F, 0xDE, 0x9D, 0xE6, 0x8E, 0x8A, 0x7D, 0xB5, 0x07, 0x50, 0xD0, 0xE7, 0x6C, 0x64, 0x77, 0xDE}, + {0x12, 0x12, 0xC1, 0xF0, 0x01, 0x78, 0x45, 0x42, 0x16, 0xD9, 0x98, 0xD6, 0xFF, 0xA1, 0x70, 0x5B, 0xEA, 0x8E, 0x7A, 0x63, 0x48}, + {0x12, 0x12, 0xC1, 0x71, 0xCE, 0xE3, 0x59, 0x40, 0x66, 0xDE, 0x28, 0x76, 0x7F, 0xDA, 0xBD, 0x88, 0x9C, 0xA7, 0x07, 0x32, 0xA0}, + // Ch 4 + {0x12, 0x12, 0xC1, 0x77, 0x8B, 0x0F, 0x74, 0xE4, 0x5F, 0xF7, 0x03, 0xBA, 0xEA, 0xCC, 0x0D, 0x4A, 0x46, 0x10, 0xD1, 0x0A, 0x09}, + {0x12, 0x12, 0xC1, 0x2B, 0x57, 0xB1, 0x3E, 0x48, 0x5C, 0x21, 0x62, 0xEB, 0x3D, 0xFA, 0x36, 0x39, 0xCB, 0x34, 0xBC, 0x2E, 0x5F}, + {0x12, 0x12, 0xC1, 0x7A, 0x78, 0xAF, 0x92, 0x30, 0x83, 0x7A, 0xF0, 0x84, 0x10, 0x61, 0x0B, 0xFA, 0x01, 0x35, 0x51, 0xEF, 0x6E}, + {0x12, 0x12, 0xC1, 0x95, 0x41, 0x58, 0xF7, 0xEC, 0x12, 0x7E, 0x84, 0xE3, 0x0F, 0x86, 0x86, 0xA0, 0xF2, 0x63, 0x78, 0xB6, 0xE5}, + {0x12, 0x12, 0xC1, 0x22, 0xB2, 0x2F, 0x71, 0xA6, 0x56, 0x03, 0xF3, 0x98, 0xF9, 0x41, 0x4E, 0xC8, 0xDB, 0x1E, 0xC2, 0xB0, 0xC5}, + {0x12, 0x12, 0xC1, 0xA7, 0x5F, 0x8D, 0x73, 0x7A, 0x81, 0xFF, 0x88, 0xB8, 0x32, 0x6E, 0x11, 0x7A, 0x95, 0x29, 0x12, 0xDA, 0x02}, + {0x12, 0x12, 0xC1, 0xC0, 0xED, 0x70, 0x2A, 0x0A, 0x73, 0x5B, 0x9F, 0x4C, 0x4E, 0x86, 0x74, 0x0C, 0x0B, 0x5D, 0x11, 0x70, 0xC6}, + {0x12, 0x12, 0xC1, 0x71, 0x05, 0x99, 0xEA, 0xAE, 0x00, 0xC4, 0x2D, 0x97, 0x43, 0xF9, 0x70, 0xE7, 0x05, 0xFD, 0xF0, 0x21, 0xD2}, + {0x12, 0x12, 0xC1, 0x04, 0xA6, 0xAA, 0x74, 0xDC, 0x3F, 0xEF, 0x4B, 0x1E, 0x94, 0x39, 0x02, 0x7C, 0x46, 0x71, 0x97, 0x2F, 0xBE}, + // Ch 5 + {0x12, 0x12, 0xC1, 0xB0, 0x36, 0xA6, 0xD0, 0x57, 0xAB, 0x86, 0x15, 0x72, 0x1D, 0xB1, 0x62, 0x24, 0xCB, 0x6E, 0xAC, 0x9E, 0x49}, + {0x12, 0x12, 0xC1, 0x86, 0x14, 0x6D, 0xD2, 0x8C, 0xAC, 0x5B, 0xA4, 0x17, 0x9D, 0xF7, 0xB8, 0x96, 0xBF, 0x93, 0x3F, 0xCC, 0xC2}, + {0x12, 0x12, 0xC1, 0x1A, 0xF2, 0x10, 0xD5, 0x73, 0xE3, 0x14, 0xD8, 0x0E, 0xB0, 0xE4, 0x7F, 0x0D, 0x3C, 0xC3, 0x28, 0x05, 0xC4}, + {0x12, 0x12, 0xC1, 0x4E, 0x1C, 0x8E, 0x14, 0xA5, 0x57, 0x1B, 0x72, 0x3B, 0x92, 0x6A, 0xC0, 0x31, 0x6E, 0x4C, 0x70, 0x9C, 0xE5}, + {0x12, 0x12, 0xC1, 0x4D, 0x3C, 0x58, 0xEC, 0xE7, 0xAC, 0x30, 0xA7, 0x2D, 0xE2, 0xF0, 0x5B, 0xEE, 0xDA, 0xB3, 0x33, 0xD8, 0x3D}, + {0x12, 0x12, 0xC1, 0x54, 0xDF, 0x42, 0x18, 0x0F, 0xB7, 0x7F, 0x05, 0x86, 0xA9, 0x17, 0x23, 0x7B, 0xF7, 0x0B, 0x32, 0x0C, 0xF2}, + {0x12, 0x12, 0xC1, 0xA9, 0x0F, 0x7B, 0xBB, 0x1C, 0x3F, 0x8D, 0x9C, 0xB0, 0x32, 0xA4, 0x18, 0xC0, 0x48, 0x72, 0x98, 0x08, 0xBC}, + {0x12, 0x12, 0xC1, 0xD0, 0xB1, 0x22, 0x01, 0x6F, 0x02, 0x47, 0x35, 0x0A, 0xC4, 0xF7, 0x22, 0xFD, 0x03, 0xFB, 0x1D, 0x3A, 0x50}, + {0x12, 0x12, 0xC1, 0xF9, 0x0F, 0x9B, 0xE9, 0xEB, 0x51, 0x01, 0xCD, 0xB7, 0x12, 0xB3, 0xA1, 0x76, 0xE1, 0x14, 0x61, 0x33, 0x3A}, + // Ch 6 + {0x12, 0x12, 0xC1, 0x6B, 0xD5, 0x99, 0x92, 0x0D, 0x3A, 0x96, 0x18, 0x36, 0x04, 0x26, 0x45, 0xFC, 0xBD, 0x95, 0xCE, 0x12, 0x45}, + {0x12, 0x12, 0xC1, 0xFA, 0xAB, 0x5C, 0xF4, 0x9C, 0xBE, 0x96, 0x78, 0x14, 0xF8, 0x3C, 0x3D, 0x95, 0x1A, 0x8F, 0x9F, 0x92, 0xB1}, + {0x12, 0x12, 0xC1, 0x37, 0x00, 0x01, 0x9F, 0x6C, 0xA0, 0x4B, 0x1F, 0xB9, 0x2F, 0x91, 0xD1, 0x59, 0x83, 0x83, 0xC4, 0x8B, 0xB1}, + {0x12, 0x12, 0xC1, 0x28, 0x6B, 0xC7, 0xB4, 0x2C, 0xA4, 0x7F, 0x6D, 0x6E, 0xA2, 0x11, 0xC9, 0xA3, 0xA9, 0x14, 0x33, 0x57, 0xB4}, + {0x12, 0x12, 0xC1, 0x45, 0xDA, 0x02, 0x6B, 0xFA, 0x32, 0x67, 0xDB, 0x36, 0xE7, 0xDD, 0xA8, 0xFB, 0x42, 0x67, 0xD8, 0x02, 0x68}, + {0x12, 0x12, 0xC1, 0x6D, 0x0F, 0xE2, 0xDB, 0x25, 0x0B, 0x32, 0x26, 0xBF, 0xFE, 0xAB, 0x1A, 0x12, 0x48, 0x6D, 0x38, 0xC4, 0xFD}, + {0x12, 0x12, 0xC1, 0xAE, 0x8C, 0x69, 0x90, 0xB9, 0xEF, 0x61, 0xDF, 0x47, 0x00, 0xF3, 0x12, 0xE5, 0xE9, 0xB4, 0xED, 0xBF, 0x71}, + {0x12, 0x12, 0xC1, 0x19, 0x1E, 0x78, 0x96, 0x36, 0x97, 0x66, 0xEC, 0xB4, 0x7F, 0x31, 0x46, 0x84, 0x0F, 0x6F, 0xCF, 0x95, 0x51}, + {0x12, 0x12, 0xC1, 0xE5, 0xDB, 0x65, 0x51, 0xA9, 0xEF, 0xD3, 0x0D, 0x9D, 0x01, 0x59, 0xFB, 0x11, 0x8B, 0x6D, 0xD8, 0xF1, 0xFB}, + // Ch 7 + {0x12, 0x12, 0xC1, 0x7A, 0xB9, 0xB8, 0x8E, 0x33, 0xC3, 0x98, 0x78, 0xCB, 0x2A, 0x3F, 0x00, 0x6C, 0xD4, 0x02, 0xA3, 0x02, 0x1E}, + {0x12, 0x12, 0xC1, 0x4F, 0xFC, 0xBF, 0xBC, 0xCD, 0x09, 0x4C, 0x09, 0x73, 0x34, 0x0C, 0x91, 0xD0, 0xCC, 0x51, 0x17, 0x1F, 0x03}, + {0x12, 0x12, 0xC1, 0x5D, 0x62, 0x41, 0x4F, 0x4C, 0x1A, 0x68, 0x9E, 0x3E, 0x44, 0x4D, 0x85, 0xAA, 0xFD, 0xEA, 0xB5, 0xE1, 0x9E}, + {0x12, 0x12, 0xC1, 0x3B, 0x13, 0xE3, 0x4F, 0xF6, 0xD1, 0x05, 0xAD, 0xA3, 0x31, 0x8F, 0x5F, 0x33, 0x70, 0x98, 0x1B, 0xD6, 0xB9}, + {0x12, 0x12, 0xC1, 0x2C, 0x71, 0x60, 0x72, 0x9B, 0x53, 0x49, 0x84, 0xF0, 0x85, 0x11, 0xEE, 0x5C, 0xE7, 0xC9, 0x20, 0x5E, 0xDF}, + {0x12, 0x12, 0xC1, 0xFA, 0x77, 0x1D, 0xCC, 0x6A, 0xCE, 0xFB, 0x23, 0x22, 0xA5, 0xC6, 0xF4, 0x05, 0x0A, 0x02, 0xF1, 0x9B, 0xBD}, + {0x12, 0x12, 0xC1, 0x74, 0x30, 0x6A, 0xBF, 0x25, 0xAE, 0x2A, 0x36, 0x69, 0x7F, 0xDA, 0x40, 0x76, 0xE8, 0x80, 0x96, 0x58, 0x3D}, + {0x12, 0x12, 0xC1, 0xD8, 0x45, 0x9F, 0x66, 0x9F, 0x1C, 0x7B, 0xD8, 0x33, 0x4A, 0x5A, 0x52, 0x5F, 0x90, 0x78, 0xAF, 0x3F, 0xF2}, + {0x12, 0x12, 0xC1, 0x25, 0x52, 0xF1, 0x66, 0x1F, 0x7A, 0x5A, 0x5B, 0x3A, 0xA1, 0xA5, 0xF4, 0x8E, 0xC7, 0xD5, 0xE6, 0x7A, 0x7A}, + // Ch 8 + {0x12, 0x12, 0xC1, 0xE0, 0x49, 0x97, 0x0F, 0x6F, 0xE4, 0x84, 0x4E, 0xB1, 0xD0, 0xAC, 0xF4, 0xBB, 0xA8, 0xFE, 0x06, 0x8F, 0xE9}, + {0x12, 0x12, 0xC1, 0x15, 0xDE, 0xB9, 0x12, 0x02, 0xB8, 0x33, 0x82, 0xA7, 0x3F, 0xE4, 0x52, 0xCE, 0xC6, 0x09, 0xF3, 0x4E, 0x75}, + {0x12, 0x12, 0xC1, 0x74, 0x69, 0x57, 0xA3, 0xCB, 0x57, 0x86, 0x71, 0x63, 0x48, 0xFC, 0x73, 0xB4, 0xD8, 0xC8, 0x7E, 0xCF, 0xA8}, + {0x12, 0x12, 0xC1, 0x1F, 0x60, 0xDA, 0xA1, 0x4F, 0x9B, 0x76, 0x99, 0x6A, 0xEF, 0xE6, 0x8B, 0x29, 0xDD, 0xD9, 0x9B, 0x41, 0x4E}, + {0x12, 0x12, 0xC1, 0xAC, 0xC2, 0xB4, 0x4B, 0x8C, 0x17, 0x81, 0xC8, 0xF4, 0xCB, 0x6B, 0xAB, 0xD7, 0xA0, 0x46, 0x00, 0xD2, 0xD3}, + {0x12, 0x12, 0xC1, 0x60, 0x0C, 0xC4, 0xB4, 0x21, 0x04, 0xCC, 0x7C, 0xDF, 0xB9, 0xBA, 0x10, 0x02, 0x8E, 0xE4, 0x15, 0xD1, 0xAF}, + {0x12, 0x12, 0xC1, 0x9D, 0xF0, 0x48, 0x6E, 0x1E, 0xDF, 0x63, 0x36, 0x64, 0xBC, 0xCB, 0x0E, 0x5E, 0x73, 0x43, 0x30, 0x25, 0xAF}, + {0x12, 0x12, 0xC1, 0x32, 0x6B, 0x72, 0x77, 0xB8, 0x26, 0x4D, 0x64, 0xDF, 0x40, 0x91, 0x48, 0x5B, 0x59, 0x96, 0x62, 0x79, 0x98}, + {0x12, 0x12, 0xC1, 0x55, 0xA9, 0x2B, 0xFF, 0xB1, 0x57, 0x6F, 0xA4, 0x71, 0xB1, 0x88, 0x62, 0x75, 0xA3, 0x85, 0x6C, 0x88, 0x48}, + // Ch 9 + {0x12, 0x12, 0xC1, 0x18, 0xD5, 0xCA, 0x5B, 0xF7, 0xD3, 0x0A, 0xF1, 0x78, 0xA5, 0xA6, 0x00, 0x4B, 0xEF, 0xE4, 0xD0, 0x04, 0xF1}, + {0x12, 0x12, 0xC1, 0x39, 0xD9, 0x02, 0x46, 0xAC, 0xB9, 0x1F, 0x45, 0x04, 0xB8, 0xF1, 0x36, 0x19, 0x3C, 0xD5, 0x94, 0x3F, 0xD4}, + {0x12, 0x12, 0xC1, 0xE3, 0xE5, 0x1D, 0xE3, 0x6D, 0xA0, 0xBA, 0x5A, 0x87, 0xBF, 0xF4, 0x4A, 0x4D, 0xCE, 0xEE, 0x17, 0xEB, 0xD2}, + {0x12, 0x12, 0xC1, 0x31, 0xC9, 0x14, 0x1D, 0x47, 0xF2, 0x6D, 0xAD, 0x3B, 0xE8, 0x39, 0x9D, 0x1F, 0x36, 0xDA, 0x32, 0xD9, 0xEA}, + {0x12, 0x12, 0xC1, 0x16, 0xBC, 0x50, 0x4F, 0xAF, 0xAF, 0x34, 0x5E, 0xEC, 0x7F, 0xF8, 0xEF, 0x1E, 0x7E, 0x8E, 0xB5, 0x1A, 0xD4}, + {0x12, 0x12, 0xC1, 0x3E, 0x94, 0x4E, 0xD0, 0xC4, 0xC5, 0xBF, 0x76, 0x85, 0x6D, 0xFC, 0x34, 0x34, 0x01, 0xD5, 0x81, 0x08, 0x2E}, + {0x12, 0x12, 0xC1, 0x69, 0x6F, 0xEC, 0xC2, 0x63, 0x92, 0x24, 0x09, 0x5E, 0x5A, 0xF6, 0xA5, 0x6F, 0x98, 0x6A, 0x92, 0xD9, 0x59}, + {0x12, 0x12, 0xC1, 0xCC, 0xB5, 0xE9, 0x20, 0xDC, 0x3F, 0xCE, 0xE3, 0x14, 0xDF, 0x37, 0xF5, 0xD1, 0x9F, 0x0A, 0x9E, 0x62, 0x54}, + {0x12, 0x12, 0xC1, 0x73, 0xBF, 0x19, 0x94, 0xDC, 0x9A, 0x8F, 0x2F, 0xEB, 0xD5, 0xC4, 0xC7, 0x46, 0x1E, 0x6D, 0x47, 0x0E, 0xEE}, + // Ch 10 + {0x12, 0x12, 0xC1, 0xA0, 0xB5, 0xE0, 0x84, 0xE8, 0x03, 0xF8, 0xFD, 0x10, 0x0E, 0xB3, 0xB7, 0x01, 0x2D, 0x18, 0x4F, 0x80, 0xF7}, + {0x12, 0x12, 0xC1, 0x97, 0x5F, 0xB4, 0x4A, 0xED, 0x20, 0xBE, 0x9A, 0x81, 0xC2, 0x2B, 0xC7, 0x5D, 0x32, 0xF9, 0xE4, 0x76, 0x04}, + {0x12, 0x12, 0xC1, 0xB2, 0x60, 0x3B, 0x88, 0xE5, 0xB4, 0xEF, 0xCC, 0x91, 0x90, 0x8C, 0xBD, 0x92, 0x36, 0xAE, 0x0F, 0x7C, 0xD0}, + {0x12, 0x12, 0xC1, 0x35, 0x28, 0x56, 0xD1, 0x1F, 0x96, 0xD9, 0x83, 0x6B, 0xE4, 0xAE, 0x47, 0x70, 0xC8, 0x00, 0x49, 0x49, 0x8B}, + {0x12, 0x12, 0xC1, 0x5D, 0x68, 0xAF, 0x13, 0x5D, 0xB1, 0xE2, 0xFD, 0xF9, 0x92, 0xFC, 0x10, 0x79, 0xE6, 0x6F, 0xD9, 0xD8, 0x01}, + {0x12, 0x12, 0xC1, 0xE9, 0x3F, 0x53, 0x97, 0xD3, 0x14, 0x6E, 0xBD, 0x1A, 0x06, 0x81, 0x91, 0xAF, 0xEF, 0x59, 0x32, 0x55, 0xEA}, + {0x12, 0x12, 0xC1, 0x1F, 0x01, 0x97, 0x60, 0x06, 0x02, 0x76, 0xF4, 0xBB, 0x09, 0x99, 0x63, 0xF2, 0x7B, 0xA0, 0x21, 0x61, 0xAD}, + {0x12, 0x12, 0xC1, 0xCA, 0xF0, 0xAF, 0x66, 0xDC, 0x99, 0x2F, 0x74, 0xD3, 0x27, 0x2E, 0x51, 0xEA, 0x74, 0xD4, 0xFE, 0xD1, 0x92}, + {0x12, 0x12, 0xC1, 0xA9, 0x96, 0x7C, 0x2C, 0x7A, 0x62, 0x14, 0x79, 0xC0, 0x25, 0x06, 0x2E, 0x2D, 0xB1, 0x0E, 0xDB, 0xB3, 0xBA}, + // Ch 11 + {0x12, 0x12, 0xC1, 0x10, 0xDF, 0xC8, 0x74, 0x40, 0xEB, 0xD3, 0x55, 0x8A, 0x72, 0x1B, 0x0C, 0x2F, 0xEA, 0x4B, 0x0B, 0xF7, 0x10}, + {0x12, 0x12, 0xC1, 0x97, 0x85, 0x38, 0xB2, 0x44, 0xB5, 0x51, 0x3F, 0x6A, 0x33, 0x04, 0xF8, 0x6F, 0xDC, 0xC7, 0xB2, 0x71, 0xFA}, + {0x12, 0x12, 0xC1, 0xC1, 0x63, 0xD9, 0x99, 0xCB, 0x61, 0x9E, 0x76, 0x5B, 0xBD, 0xC1, 0xDE, 0x57, 0xEE, 0x0C, 0xFC, 0x5B, 0xFB}, + {0x12, 0x12, 0xC1, 0x72, 0x05, 0x60, 0xA1, 0x0A, 0x2F, 0x2B, 0xEF, 0x4B, 0xF7, 0x91, 0xB1, 0xD5, 0x30, 0x20, 0x15, 0x26, 0xD1}, + {0x12, 0x12, 0xC1, 0x02, 0x16, 0x7A, 0xC9, 0xEA, 0x64, 0x1B, 0xC4, 0x9C, 0x6A, 0xCE, 0xF3, 0x68, 0x80, 0x48, 0x98, 0xF0, 0xC4}, + {0x12, 0x12, 0xC1, 0x8B, 0xB9, 0x54, 0xD9, 0x31, 0xD1, 0xE5, 0x6B, 0x78, 0xBD, 0xA4, 0x2B, 0x87, 0x47, 0x88, 0x29, 0x19, 0xCF}, + {0x12, 0x12, 0xC1, 0x50, 0xAA, 0xED, 0x31, 0xB3, 0x64, 0x33, 0x90, 0xE0, 0xD3, 0xAB, 0x76, 0x1F, 0x8A, 0x39, 0x73, 0x01, 0x47}, + {0x12, 0x12, 0xC1, 0x6E, 0x23, 0x8D, 0x18, 0x80, 0x4E, 0x63, 0xAC, 0x3B, 0xC9, 0xB2, 0xC9, 0x45, 0x8C, 0xE2, 0x82, 0xCF, 0x91}, + {0x12, 0x12, 0xC1, 0xE9, 0x67, 0x08, 0xEC, 0x44, 0x30, 0x24, 0x6D, 0x6E, 0x6F, 0xC2, 0x9C, 0xA3, 0x80, 0xC0, 0x84, 0xCA, 0x5B}, + // Ch 12 + {0x12, 0x12, 0xC1, 0xE7, 0x27, 0x96, 0x57, 0xCB, 0x0F, 0x18, 0xE8, 0x1F, 0x01, 0x26, 0x34, 0x89, 0x8B, 0xD1, 0xF8, 0x2E, 0x5D}, + {0x12, 0x12, 0xC1, 0x7E, 0xB6, 0xF3, 0x82, 0xBF, 0xE8, 0x3F, 0x7E, 0xB7, 0xC3, 0xA1, 0x2A, 0x18, 0x19, 0xE3, 0xA7, 0x42, 0x84}, + {0x12, 0x12, 0xC1, 0xDF, 0x50, 0x5E, 0x22, 0xFE, 0x81, 0xCD, 0x07, 0x06, 0xFF, 0x4C, 0xD5, 0x87, 0xE1, 0x5A, 0x7B, 0xE5, 0x92}, + {0x12, 0x12, 0xC1, 0x06, 0xDB, 0x93, 0x3C, 0x7F, 0xEF, 0x59, 0xC8, 0x76, 0xBB, 0x49, 0x54, 0xAD, 0x15, 0xB1, 0x17, 0x3A, 0xF4}, + {0x12, 0x12, 0xC1, 0xF4, 0xE5, 0xCA, 0xDE, 0x89, 0x97, 0xE0, 0xCF, 0xC0, 0xB2, 0xF8, 0xD2, 0xFB, 0x71, 0x08, 0xF5, 0x8D, 0x2F}, + {0x12, 0x12, 0xC1, 0x9F, 0xB5, 0xAE, 0xD8, 0x5B, 0xE7, 0xB9, 0x75, 0xF6, 0x22, 0x2D, 0xFD, 0xFD, 0x54, 0x9C, 0x23, 0xE4, 0x65}, + {0x12, 0x12, 0xC1, 0xA3, 0x7C, 0x8D, 0xDA, 0xE3, 0xB8, 0x8E, 0x57, 0x41, 0xBF, 0x1F, 0xBB, 0xA8, 0x2F, 0xDF, 0x7D, 0x69, 0x3C}, + {0x12, 0x12, 0xC1, 0x33, 0xA5, 0xCB, 0x76, 0x4D, 0x85, 0x63, 0x62, 0x69, 0xC6, 0x42, 0xCA, 0x38, 0xEE, 0xB3, 0x29, 0xCF, 0xA3}, + {0x12, 0x12, 0xC1, 0x85, 0xA4, 0x3B, 0xAB, 0x49, 0x36, 0x46, 0x3A, 0xEB, 0xFA, 0x07, 0xEE, 0x3B, 0xD0, 0xEA, 0x95, 0x01, 0x99}, + // Ch 13 + {0x12, 0x12, 0xC1, 0x02, 0xD4, 0x3A, 0xEC, 0x70, 0xCE, 0x91, 0x46, 0xF4, 0xCD, 0x55, 0x80, 0x27, 0xEA, 0x71, 0x7E, 0x69, 0x02}, + {0x12, 0x12, 0xC1, 0xDF, 0x60, 0x38, 0x00, 0x74, 0x6B, 0x17, 0x83, 0x8D, 0x41, 0x52, 0xA5, 0xA2, 0x4B, 0x07, 0x14, 0xFC, 0xA3}, + {0x12, 0x12, 0xC1, 0xAE, 0x47, 0x16, 0xA9, 0x38, 0x4C, 0x0A, 0xDF, 0xAA, 0x89, 0xD8, 0x4F, 0x7E, 0x70, 0xAC, 0x31, 0x68, 0x01}, + {0x12, 0x12, 0xC1, 0xAE, 0x78, 0xD7, 0x7C, 0xCB, 0x2F, 0xE4, 0x05, 0xDE, 0x31, 0x07, 0x7E, 0x9B, 0x16, 0x2F, 0xF4, 0xC5, 0xEF}, + {0x12, 0x12, 0xC1, 0xF1, 0x71, 0x98, 0x1D, 0xFB, 0xAC, 0x4B, 0x21, 0x6F, 0x94, 0xC0, 0xAA, 0x25, 0x1D, 0xE7, 0xC2, 0x1D, 0x7A}, + {0x12, 0x12, 0xC1, 0xDB, 0x70, 0x5F, 0x32, 0xD7, 0x92, 0x4E, 0xC6, 0x29, 0x67, 0xE3, 0xD3, 0xDC, 0xCC, 0xFE, 0x3F, 0x48, 0x28}, + {0x12, 0x12, 0xC1, 0x63, 0xBF, 0x9D, 0xAE, 0xFF, 0x68, 0xA0, 0xC4, 0xF0, 0xA3, 0xCA, 0x51, 0x3F, 0xBF, 0xCD, 0x1D, 0x61, 0xDB}, + {0x12, 0x12, 0xC1, 0x1C, 0x1C, 0xD4, 0x97, 0x3F, 0xDC, 0x0D, 0xD6, 0x0F, 0x73, 0xAC, 0x8B, 0xDD, 0xE3, 0xAA, 0x24, 0x4C, 0x2E}, + {0x12, 0x12, 0xC1, 0x6F, 0x43, 0x68, 0x2F, 0x99, 0xAB, 0x9E, 0x3B, 0x42, 0xFD, 0x54, 0xA0, 0xB0, 0xF3, 0x0C, 0xD7, 0x8D, 0x9C}, + // Ch 14 + {0x12, 0x12, 0xC1, 0x64, 0x55, 0x3D, 0x95, 0x00, 0xC2, 0x67, 0x90, 0xBD, 0x2A, 0xCA, 0x17, 0xBA, 0x2C, 0x3D, 0xC5, 0x47, 0x02}, + {0x12, 0x12, 0xC1, 0x29, 0xDF, 0x64, 0x38, 0xD7, 0x48, 0x90, 0xEA, 0xB7, 0x7B, 0xA8, 0x10, 0xEC, 0xA3, 0x2E, 0x65, 0xCC, 0x6D}, + {0x12, 0x12, 0xC1, 0xC6, 0xF7, 0xB7, 0x48, 0xA0, 0x7F, 0x70, 0xF4, 0xE8, 0x71, 0x28, 0xDE, 0xCB, 0x37, 0xC6, 0x32, 0xFF, 0xD2}, + {0x12, 0x12, 0xC1, 0xDF, 0x61, 0x68, 0x82, 0xFD, 0x8D, 0xD3, 0x8A, 0x40, 0xE1, 0x7E, 0x39, 0xFF, 0xD5, 0xA5, 0x43, 0xF0, 0x2E}, + {0x12, 0x12, 0xC1, 0x4C, 0xFA, 0xE8, 0x10, 0x10, 0x74, 0x91, 0x9B, 0x46, 0xE2, 0x42, 0x4C, 0x53, 0x4E, 0x36, 0x0A, 0xF9, 0x88}, + {0x12, 0x12, 0xC1, 0x76, 0x34, 0x49, 0x30, 0x65, 0x99, 0x5E, 0x65, 0x66, 0xF6, 0x26, 0x45, 0x02, 0x12, 0xF6, 0x64, 0xB0, 0xDE}, + {0x12, 0x12, 0xC1, 0xD8, 0x46, 0x05, 0x7B, 0x6C, 0x73, 0xBA, 0x56, 0xF6, 0xE1, 0x98, 0x14, 0xD0, 0x97, 0x15, 0x14, 0xB7, 0x3F}, + {0x12, 0x12, 0xC1, 0xF9, 0xF1, 0xAC, 0xC3, 0x70, 0xEB, 0xC8, 0xE1, 0x7F, 0x4D, 0x94, 0x36, 0x35, 0x68, 0x65, 0x78, 0xBF, 0x42}, + {0x12, 0x12, 0xC1, 0x08, 0x77, 0xAB, 0x10, 0x87, 0x84, 0x4D, 0x8A, 0xA6, 0xA4, 0xDF, 0x29, 0xBF, 0x6A, 0xA1, 0x9E, 0x3D, 0xA9}, + // Ch 15 + {0x12, 0x12, 0xC1, 0x74, 0xF4, 0x33, 0xC1, 0x60, 0x5C, 0xFC, 0x8D, 0xC9, 0xFE, 0x7A, 0x8F, 0x9F, 0x50, 0xD0, 0xA8, 0x30, 0x18}, // CH 15 + {0x12, 0x12, 0xC1, 0x58, 0xE8, 0x84, 0x17, 0x3A, 0xD3, 0xA1, 0x46, 0x1A, 0xF3, 0x3D, 0x77, 0xA8, 0xBD, 0xF4, 0x90, 0xA3, 0x94}, + {0x12, 0x12, 0xC1, 0x37, 0xEE, 0x61, 0xD0, 0x8A, 0xC0, 0x2A, 0xD2, 0x53, 0x76, 0xBD, 0x92, 0x7E, 0x65, 0xE0, 0x57, 0xB8, 0x4D}, + {0x12, 0x12, 0xC1, 0xE8, 0x27, 0xFD, 0x44, 0xE1, 0x0C, 0x59, 0xAB, 0xF4, 0x55, 0xC4, 0x48, 0xD5, 0x36, 0xD0, 0x32, 0xE1, 0x84}, + {0x12, 0x12, 0xC1, 0x0E, 0x17, 0xD3, 0x73, 0xF9, 0x44, 0xC7, 0x8B, 0xDC, 0x9F, 0x76, 0x44, 0xCE, 0xAD, 0xC9, 0xD2, 0x11, 0x80}, + {0x12, 0x12, 0xC1, 0xB2, 0x59, 0x71, 0x96, 0xFD, 0xDB, 0x0F, 0x70, 0xA2, 0xF6, 0x6D, 0x9B, 0xD8, 0x82, 0x69, 0xAD, 0x3D, 0x65}, + {0x12, 0x12, 0xC1, 0x5C, 0x0B, 0xC1, 0x70, 0x84, 0x73, 0x3F, 0x4D, 0x26, 0xF6, 0x0A, 0x5D, 0x19, 0x92, 0x9B, 0x2F, 0xA8, 0xCA}, + {0x12, 0x12, 0xC1, 0x1C, 0x79, 0x96, 0x81, 0xD5, 0x72, 0xB1, 0xE3, 0x83, 0x56, 0x3F, 0x7F, 0xFE, 0x7E, 0x12, 0x19, 0xBE, 0x9B}, + {0x12, 0x12, 0xC1, 0x45, 0xBE, 0xFE, 0x53, 0x3A, 0x4D, 0xE8, 0xA9, 0xA1, 0x13, 0x4D, 0xE0, 0x9E, 0xFE, 0x09, 0x94, 0x0A, 0x75}, +}; + +///////////////////////// Up Keys //////////////////////////////////////////////////////// +uint8_t UpKey[][21] PROGMEM = { + // Ch 0 + {0x12, 0x12, 0xC1, 0x66, 0xAA, 0xF6, 0xC7, 0x7D, 0x3A, 0x65, 0xA7, 0xA0, 0x2C, 0x88, 0x66, 0xD9, 0x7F, 0xEB, 0x9E, 0x6D, 0x0F}, + {0x12, 0x12, 0xC1, 0xED, 0xF9, 0xD5, 0xA4, 0xF7, 0x69, 0x69, 0x29, 0xD6, 0xB3, 0x9D, 0x21, 0x8B, 0x34, 0xA6, 0xDB, 0x96, 0x0E}, + {0x12, 0x12, 0xC1, 0x41, 0x04, 0x83, 0x76, 0x59, 0x7E, 0x6E, 0xDD, 0xA2, 0x20, 0x05, 0x0F, 0x33, 0xC1, 0xA8, 0x47, 0x19, 0x2B}, + {0x12, 0x12, 0xC1, 0x83, 0xA2, 0x91, 0xED, 0xB5, 0x96, 0xB7, 0xFD, 0xFA, 0x89, 0x1C, 0xE3, 0xFC, 0x2C, 0x4F, 0xC9, 0xBC, 0x99}, + {0x12, 0x12, 0xC1, 0x53, 0xF6, 0x32, 0x00, 0x6A, 0x35, 0xF8, 0x2D, 0xBC, 0x9D, 0x9E, 0x56, 0x18, 0xF0, 0xEF, 0x19, 0x11, 0x5F}, + {0x12, 0x12, 0xC1, 0x84, 0xBD, 0x22, 0x8D, 0x6F, 0x31, 0x18, 0xED, 0x39, 0xEC, 0xF1, 0xA4, 0x99, 0x26, 0x4E, 0x85, 0xCF, 0xB3}, + {0x12, 0x12, 0xC1, 0x5F, 0xD0, 0x39, 0x3F, 0x74, 0xD7, 0xA3, 0x31, 0x41, 0x79, 0x0D, 0x9A, 0x20, 0xD2, 0xAC, 0x7D, 0x78, 0x84}, + {0x12, 0x12, 0xC1, 0x9C, 0x7C, 0x86, 0x10, 0x3E, 0xFC, 0x3C, 0x49, 0x84, 0xB2, 0x72, 0x41, 0x24, 0x1C, 0xD0, 0x88, 0x57, 0xB0}, + {0x12, 0x12, 0xC1, 0xD4, 0xFA, 0xB4, 0x3C, 0x2A, 0x47, 0x54, 0x7A, 0x4D, 0x50, 0x9A, 0x38, 0x66, 0x95, 0x5C, 0x99, 0x6A, 0xA8}, + // Ch 1 + {0x12, 0x12, 0xC1, 0x40, 0x24, 0x5A, 0xFD, 0x23, 0x94, 0xFA, 0xAA, 0x26, 0xCB, 0x5D, 0xE7, 0x7A, 0xFB, 0x38, 0x6A, 0x23, 0x4B}, + {0x12, 0x12, 0xC1, 0x56, 0x10, 0x2C, 0xC5, 0xC5, 0x5D, 0xC0, 0xBD, 0x7E, 0x8E, 0x8E, 0x11, 0x71, 0x48, 0x90, 0x98, 0xB2, 0x2C}, + {0x12, 0x12, 0xC1, 0xE1, 0xFE, 0xAE, 0xE8, 0x38, 0x4A, 0xF8, 0xA5, 0xB9, 0xB7, 0x95, 0x3E, 0xBC, 0xF8, 0xAE, 0xDB, 0x87, 0xE9}, + {0x12, 0x12, 0xC1, 0x6A, 0xA8, 0xB0, 0x37, 0x2D, 0x99, 0xF8, 0x2D, 0x18, 0xEE, 0xCD, 0x4D, 0x49, 0x50, 0xEC, 0x1E, 0xE8, 0x56}, + {0x12, 0x12, 0xC1, 0xB7, 0xFD, 0xD1, 0x75, 0x8F, 0x6D, 0x4A, 0x2C, 0xF1, 0xAE, 0x76, 0xCA, 0xCC, 0xC4, 0x2E, 0xC3, 0xCA, 0xDF}, + {0x12, 0x12, 0xC1, 0x9B, 0x90, 0xCC, 0xA5, 0x28, 0x3D, 0x76, 0xA4, 0x7C, 0x00, 0x00, 0xBD, 0x32, 0x74, 0x88, 0xEA, 0x4B, 0xBB}, + {0x12, 0x12, 0xC1, 0x21, 0x2F, 0xC3, 0x3A, 0x5E, 0x9C, 0x70, 0xD7, 0x7A, 0x77, 0x2C, 0xD4, 0x61, 0x15, 0x60, 0x61, 0x84, 0xB5}, + {0x12, 0x12, 0xC1, 0xCD, 0x18, 0x41, 0xEE, 0x23, 0x7F, 0xE2, 0xDF, 0x38, 0x75, 0xC5, 0x64, 0x9E, 0x74, 0xDC, 0x12, 0x1A, 0xDC}, + {0x12, 0x12, 0xC1, 0xAD, 0xC6, 0x7E, 0xED, 0xDF, 0x8B, 0x2C, 0x7D, 0xB3, 0x82, 0x46, 0xD5, 0xBF, 0x2D, 0xDD, 0xFE, 0x17, 0x94}, + // Ch 2 + {0x12, 0x12, 0xC1, 0x9D, 0xC8, 0xC7, 0x2D, 0x07, 0x96, 0x2D, 0xBD, 0xA1, 0x91, 0x23, 0xEF, 0x21, 0x5C, 0x99, 0xAE, 0x54, 0x92}, + {0x12, 0x12, 0xC1, 0xD4, 0x8C, 0x96, 0x75, 0x71, 0x71, 0xBA, 0x83, 0xE7, 0x26, 0xF9, 0x21, 0xD0, 0x2A, 0x51, 0xAE, 0x3F, 0x0F}, + {0x12, 0x12, 0xC1, 0xA8, 0x7E, 0xBF, 0xBF, 0xA3, 0xB7, 0xBC, 0xCC, 0xB1, 0xA2, 0x2E, 0x07, 0xC7, 0xED, 0x0D, 0x76, 0xFE, 0xCE}, + {0x12, 0x12, 0xC1, 0xBB, 0xA4, 0x57, 0x6D, 0xE2, 0xA5, 0x8C, 0x4B, 0x8F, 0x46, 0xE5, 0x12, 0x2D, 0x47, 0xAC, 0x3D, 0x01, 0x0A}, + {0x12, 0x12, 0xC1, 0x08, 0x43, 0x55, 0x66, 0xF7, 0xE4, 0xF2, 0x16, 0x17, 0x74, 0xF9, 0x10, 0x41, 0x06, 0xBD, 0x1A, 0xA5, 0xB4}, + {0x12, 0x12, 0xC1, 0xEE, 0x26, 0x2F, 0x2B, 0xAC, 0xC9, 0x25, 0x1B, 0x2F, 0x8C, 0x96, 0x60, 0xC2, 0x20, 0xC4, 0xCA, 0x88, 0xD3}, + {0x12, 0x12, 0xC1, 0xC4, 0xBA, 0x46, 0x22, 0x71, 0x25, 0x01, 0xC0, 0xAD, 0x14, 0xD1, 0xE8, 0x03, 0x15, 0x1C, 0xBE, 0x15, 0xF3}, + {0x12, 0x12, 0xC1, 0xA8, 0xF3, 0x73, 0xAF, 0x90, 0x1D, 0xCF, 0x7D, 0x89, 0x2D, 0x94, 0x92, 0x8E, 0x58, 0xDA, 0x43, 0xFC, 0x16}, + {0x12, 0x12, 0xC1, 0xC2, 0x03, 0x15, 0x56, 0xF4, 0xBF, 0x82, 0xD0, 0xB0, 0xAD, 0x7F, 0x52, 0xFE, 0xDA, 0xB6, 0x93, 0x6A, 0xFE}, + // Ch 3 + {0x12, 0x12, 0xC1, 0x60, 0x10, 0x6C, 0xAD, 0xE8, 0x0A, 0x46, 0x81, 0xC7, 0x6D, 0x68, 0x0B, 0x07, 0x91, 0xE6, 0x51, 0x29, 0x2F}, + {0x12, 0x12, 0xC1, 0xC1, 0x46, 0xFE, 0x76, 0x63, 0x95, 0x4A, 0x31, 0x13, 0x20, 0x4B, 0x20, 0x93, 0x27, 0x4A, 0xDA, 0x22, 0xB1}, + {0x12, 0x12, 0xC1, 0xFE, 0xFE, 0x3C, 0x74, 0x33, 0x6A, 0x6B, 0xC9, 0x65, 0x2F, 0xD3, 0x9E, 0x24, 0xFD, 0x09, 0x92, 0x90, 0x7F}, + {0x12, 0x12, 0xC1, 0x12, 0xA0, 0xDF, 0xE0, 0x9A, 0x4E, 0xF7, 0x2B, 0xB9, 0xAE, 0xFA, 0x36, 0x4B, 0x92, 0x21, 0x58, 0x97, 0x2C}, + {0x12, 0x12, 0xC1, 0xB7, 0xB3, 0x52, 0x90, 0xC1, 0x88, 0x16, 0x14, 0xAD, 0x75, 0x87, 0xC2, 0x13, 0x9F, 0x4F, 0x9A, 0x6C, 0x65}, + {0x12, 0x12, 0xC1, 0x61, 0x02, 0xAB, 0xB1, 0x33, 0xAE, 0x10, 0x3E, 0x2F, 0x73, 0x6E, 0xCB, 0xE0, 0x04, 0x96, 0xF2, 0x2C, 0x0E}, + {0x12, 0x12, 0xC1, 0xFC, 0x35, 0x43, 0xAC, 0xBD, 0xD5, 0x7F, 0xDB, 0x7D, 0x2D, 0xC1, 0xA6, 0x50, 0x12, 0x91, 0x6B, 0x72, 0x07}, + {0x12, 0x12, 0xC1, 0x96, 0xBC, 0xD0, 0x4B, 0x07, 0x01, 0x63, 0xEB, 0xC0, 0x69, 0xB2, 0x24, 0xA5, 0x1C, 0x65, 0xF8, 0xCE, 0x1E}, + {0x12, 0x12, 0xC1, 0xA6, 0x60, 0x52, 0x7D, 0x01, 0x72, 0x56, 0xB0, 0xB5, 0xF9, 0x7F, 0x8C, 0x39, 0x4B, 0xB1, 0xE3, 0xE1, 0x60}, + // Ch 4 + {0x12, 0x12, 0xC1, 0xDC, 0x45, 0xB8, 0xBD, 0x7B, 0xE2, 0x5C, 0x25, 0xF7, 0xF3, 0xCD, 0xD2, 0x05, 0xD3, 0x3B, 0x0B, 0xBF, 0x78}, + {0x12, 0x12, 0xC1, 0x9C, 0x86, 0x00, 0x13, 0x6D, 0x06, 0x7A, 0xEE, 0xA2, 0x61, 0x7D, 0xF6, 0x16, 0x1B, 0xCE, 0x06, 0x5B, 0xD1}, + {0x12, 0x12, 0xC1, 0x41, 0xFC, 0xF2, 0xFF, 0x25, 0x4B, 0xF7, 0x97, 0x87, 0x42, 0x5D, 0x9F, 0xE9, 0x91, 0xD8, 0x7B, 0x17, 0xAA}, + {0x12, 0x12, 0xC1, 0x9A, 0xB0, 0x57, 0xB3, 0x63, 0x7A, 0xEB, 0x26, 0xCC, 0xD9, 0x06, 0xC9, 0xE5, 0x8C, 0xDF, 0x25, 0x3E, 0xE8}, + {0x12, 0x12, 0xC1, 0x6D, 0xBA, 0xAE, 0xE4, 0x21, 0x08, 0xA9, 0xC6, 0xF3, 0x70, 0x78, 0x66, 0x30, 0xDA, 0xD5, 0xFA, 0x2F, 0x2F}, + {0x12, 0x12, 0xC1, 0x64, 0x8E, 0x0A, 0x65, 0x98, 0x1B, 0xCA, 0x18, 0xF1, 0xE6, 0x1B, 0xB5, 0x13, 0xCD, 0xD7, 0xF5, 0xC5, 0x03}, + {0x12, 0x12, 0xC1, 0xA4, 0x50, 0x1A, 0xDD, 0xCC, 0x7F, 0xFA, 0xBB, 0xA0, 0xE6, 0xFA, 0xDD, 0xC5, 0x7A, 0x6B, 0xF6, 0x3C, 0x1F}, + {0x12, 0x12, 0xC1, 0xE4, 0x3A, 0x30, 0x78, 0x98, 0xF4, 0xA8, 0x50, 0x8A, 0x8E, 0x94, 0x6B, 0xBA, 0x02, 0xB8, 0x06, 0xB1, 0xA2}, + {0x12, 0x12, 0xC1, 0x92, 0xC6, 0x7B, 0xE2, 0xFB, 0x02, 0xC8, 0xA1, 0x83, 0x17, 0xA7, 0x91, 0xBD, 0x1B, 0x18, 0x84, 0x25, 0x33}, + // Ch 5 + {0x12, 0x12, 0xC1, 0x56, 0x5E, 0x00, 0x25, 0x30, 0xAB, 0x9F, 0xA0, 0x11, 0x46, 0xF7, 0x97, 0x81, 0x9E, 0x5C, 0x41, 0x21, 0x30}, + {0x12, 0x12, 0xC1, 0x60, 0xA1, 0xB3, 0x92, 0xF6, 0xB4, 0xAD, 0x96, 0x21, 0x4E, 0xE2, 0x90, 0x18, 0xC1, 0x72, 0xAC, 0xA3, 0xFC}, + {0x12, 0x12, 0xC1, 0xAE, 0x8E, 0x94, 0x6F, 0xE8, 0x79, 0x0C, 0x58, 0xF0, 0x55, 0xD1, 0x13, 0x52, 0x24, 0x7D, 0x96, 0xBA, 0x5F}, + {0x12, 0x12, 0xC1, 0x2E, 0xD7, 0x46, 0x2D, 0x84, 0x93, 0x8A, 0xE9, 0x59, 0x8A, 0xC2, 0x8E, 0xA0, 0xFD, 0x54, 0x67, 0x52, 0x11}, + {0x12, 0x12, 0xC1, 0x80, 0x43, 0x1E, 0x1F, 0x07, 0x1F, 0xF8, 0xD0, 0x69, 0x60, 0xCD, 0x2B, 0x7C, 0xC3, 0xE4, 0xC4, 0x1A, 0x17}, + {0x12, 0x12, 0xC1, 0x9C, 0x5B, 0xB0, 0x84, 0xFA, 0xF6, 0xF8, 0x93, 0x42, 0x35, 0xD2, 0x9E, 0xB1, 0x1E, 0x66, 0xBB, 0x25, 0x0A}, + {0x12, 0x12, 0xC1, 0x07, 0xD1, 0xCF, 0x7C, 0xF1, 0xF7, 0xC1, 0x1F, 0x2C, 0x8C, 0xC4, 0x87, 0xDF, 0xAA, 0x18, 0x85, 0xE3, 0xDA}, + {0x12, 0x12, 0xC1, 0xF4, 0x38, 0xD8, 0x26, 0xFD, 0x79, 0x06, 0x7B, 0x6F, 0x09, 0xAD, 0x7A, 0xE1, 0x7F, 0xA9, 0xB5, 0xA5, 0xB7}, + {0x12, 0x12, 0xC1, 0x1D, 0xEF, 0x74, 0x3F, 0x75, 0x73, 0x74, 0x7E, 0x29, 0x65, 0xE5, 0x63, 0x03, 0x13, 0x26, 0x8A, 0xF4, 0x3F}, + // Ch 6 + {0x12, 0x12, 0xC1, 0xD7, 0xCE, 0x6D, 0x7A, 0x1F, 0x68, 0xCA, 0x91, 0x84, 0xB9, 0xA3, 0x38, 0xE8, 0xB0, 0x6F, 0xE5, 0x67, 0x8B}, + {0x12, 0x12, 0xC1, 0x49, 0x31, 0x0C, 0x68, 0xCD, 0x64, 0x5A, 0xDD, 0xDE, 0x14, 0xC4, 0x38, 0xD3, 0x1B, 0x5B, 0xD2, 0x58, 0x37}, + {0x12, 0x12, 0xC1, 0xA1, 0xC8, 0xBD, 0xF4, 0xB3, 0xF7, 0xD9, 0x46, 0xBB, 0xD9, 0x7E, 0x3E, 0xC5, 0xDD, 0x6D, 0xA2, 0xE2, 0xCF}, + {0x12, 0x12, 0xC1, 0x43, 0x51, 0x21, 0x9D, 0xF5, 0x82, 0x02, 0x25, 0x6A, 0x5B, 0x3F, 0x78, 0x83, 0x4C, 0x02, 0xE3, 0xD4, 0xF8}, + {0x12, 0x12, 0xC1, 0x82, 0x23, 0x2C, 0x21, 0x82, 0x0E, 0x6F, 0xB4, 0xBD, 0x6D, 0xBB, 0x81, 0xE1, 0xCB, 0xFB, 0x52, 0x63, 0xE2}, + {0x12, 0x12, 0xC1, 0x63, 0xCE, 0xF3, 0xD1, 0x2B, 0x69, 0x1C, 0x92, 0x9A, 0x90, 0x44, 0x0F, 0x8A, 0x21, 0xA4, 0x75, 0x66, 0xBA}, + {0x12, 0x12, 0xC1, 0x7C, 0x43, 0x63, 0x18, 0xFB, 0x01, 0xF5, 0x8A, 0xC1, 0xCE, 0x1F, 0x21, 0x92, 0x6D, 0xFE, 0xD6, 0xC1, 0xB2}, + {0x12, 0x12, 0xC1, 0x59, 0x28, 0x4A, 0xE8, 0x05, 0x78, 0x59, 0xDA, 0x53, 0xAA, 0xF8, 0x37, 0x86, 0x15, 0x9C, 0xD3, 0x4E, 0xA0}, + {0x12, 0x12, 0xC1, 0xF8, 0xDB, 0xDB, 0xB6, 0x46, 0x1D, 0x70, 0x1D, 0x5D, 0xB7, 0xB9, 0xF5, 0x7C, 0xAF, 0x0E, 0xD4, 0xBB, 0xBA}, + // Ch 7 + {0x12, 0x12, 0xC1, 0x78, 0x50, 0x2A, 0xB4, 0xE9, 0xDC, 0x18, 0xDE, 0xC7, 0x43, 0x3E, 0x7A, 0x76, 0x71, 0x96, 0x15, 0xD6, 0x4C}, + {0x12, 0x12, 0xC1, 0x15, 0x1E, 0xDD, 0x98, 0xCB, 0x81, 0x1E, 0x22, 0xB0, 0x57, 0x30, 0x1B, 0x48, 0x77, 0x76, 0x96, 0x04, 0x9F}, + {0x12, 0x12, 0xC1, 0x90, 0xBE, 0x21, 0xA7, 0x8E, 0x76, 0xC3, 0x5D, 0xEF, 0x6D, 0xE8, 0x5F, 0xA2, 0x4F, 0x16, 0xF5, 0xD5, 0xA3}, + {0x12, 0x12, 0xC1, 0xEF, 0xB9, 0x9D, 0x03, 0xA9, 0xA5, 0x49, 0x1F, 0x9F, 0xF0, 0x3B, 0x99, 0x0E, 0x5C, 0x3B, 0x30, 0x0B, 0xDE}, + {0x12, 0x12, 0xC1, 0xB0, 0x92, 0x04, 0x51, 0x2E, 0x22, 0xD0, 0x00, 0x3E, 0xD7, 0x44, 0x2C, 0x93, 0xDE, 0x26, 0xD8, 0xCD, 0x88}, + {0x12, 0x12, 0xC1, 0x5E, 0xD9, 0x2F, 0x23, 0x0A, 0x2C, 0x7E, 0x20, 0x46, 0xBE, 0x7C, 0x21, 0xC3, 0xC8, 0x65, 0x3E, 0xE7, 0xD3}, + {0x12, 0x12, 0xC1, 0xED, 0x88, 0x18, 0x8C, 0x6A, 0xAF, 0x96, 0xCA, 0xB1, 0xAA, 0x4E, 0xD4, 0x94, 0x8B, 0x4A, 0x08, 0xB5, 0xB4}, + {0x12, 0x12, 0xC1, 0x53, 0x80, 0x50, 0x7B, 0x60, 0x73, 0x39, 0x2F, 0x51, 0x67, 0xE0, 0x20, 0xA8, 0x78, 0x6E, 0x12, 0x73, 0xEC}, + {0x12, 0x12, 0xC1, 0xAB, 0x79, 0xB9, 0x02, 0x3C, 0x72, 0x91, 0x82, 0x19, 0x8F, 0xE7, 0xEC, 0x02, 0x6F, 0x1A, 0xF2, 0x53, 0xB2}, + // Ch 8 + {0x12, 0x12, 0xC1, 0x4B, 0x1A, 0x1C, 0x16, 0x9A, 0x19, 0xF7, 0x08, 0x8A, 0x25, 0xD3, 0x8C, 0x26, 0x2F, 0xB2, 0x6B, 0x00, 0x30}, + {0x12, 0x12, 0xC1, 0xB6, 0xC8, 0xDA, 0x4E, 0x4C, 0x65, 0x77, 0x2D, 0xB5, 0x6D, 0x60, 0xAC, 0x9D, 0x3A, 0x5F, 0x81, 0x58, 0x3E}, + {0x12, 0x12, 0xC1, 0x8E, 0xCD, 0xD4, 0xD9, 0xDA, 0xE5, 0xF9, 0x9C, 0x5B, 0x27, 0x67, 0x36, 0x86, 0xF3, 0x1B, 0xBF, 0x7D, 0xD5}, + {0x12, 0x12, 0xC1, 0x43, 0x39, 0xD5, 0x85, 0x15, 0x47, 0xB2, 0x03, 0x2E, 0xEA, 0x73, 0x40, 0x05, 0x45, 0x49, 0x4A, 0x93, 0x29}, + {0x12, 0x12, 0xC1, 0x5D, 0xE4, 0x27, 0xEB, 0x55, 0xE1, 0x18, 0x7D, 0x18, 0x4A, 0xBC, 0xE4, 0x39, 0x0F, 0x88, 0xBC, 0x42, 0x85}, + {0x12, 0x12, 0xC1, 0xB1, 0x46, 0x67, 0x71, 0x42, 0xF1, 0x69, 0x04, 0xC7, 0xB9, 0x36, 0x76, 0x64, 0x5C, 0x29, 0x2A, 0x61, 0x9F}, + {0x12, 0x12, 0xC1, 0xC8, 0xED, 0xCB, 0x93, 0x12, 0x8B, 0x45, 0x45, 0xEF, 0xB4, 0xED, 0xB5, 0xA3, 0x8C, 0xD4, 0xAF, 0xFD, 0x86}, + {0x12, 0x12, 0xC1, 0x38, 0x7D, 0x97, 0x24, 0x85, 0x92, 0xBF, 0x6B, 0x50, 0x7B, 0x83, 0xF5, 0x58, 0xAD, 0x5F, 0x11, 0x8B, 0x7D}, + {0x12, 0x12, 0xC1, 0x91, 0xC5, 0x11, 0x95, 0x34, 0x2C, 0x45, 0x57, 0x7A, 0x23, 0x2C, 0xF0, 0xE8, 0x32, 0xCB, 0x0B, 0x21, 0x0A}, + // Ch 9 + {0x12, 0x12, 0xC1, 0xCE, 0x98, 0x4C, 0xDD, 0x6B, 0x72, 0xA2, 0x9A, 0xD7, 0x8C, 0xEB, 0x72, 0xC2, 0x82, 0x39, 0x87, 0x51, 0x3B}, + {0x12, 0x12, 0xC1, 0xC6, 0xBD, 0x92, 0xFD, 0x46, 0x1E, 0x45, 0xB2, 0xB8, 0x96, 0x2E, 0x62, 0x0C, 0xCF, 0xAB, 0xD1, 0x37, 0x21}, + {0x12, 0x12, 0xC1, 0xFD, 0x7A, 0x20, 0x17, 0x30, 0x4B, 0xCE, 0x13, 0x5D, 0x02, 0x6B, 0x33, 0xD4, 0x7B, 0xC8, 0x94, 0xE7, 0x32}, + {0x12, 0x12, 0xC1, 0xFC, 0x84, 0xD1, 0x02, 0x8B, 0x00, 0xAD, 0x5E, 0xED, 0xFC, 0x07, 0x14, 0x1A, 0x2C, 0x96, 0xBC, 0xF3, 0x9C}, + {0x12, 0x12, 0xC1, 0x02, 0x86, 0x78, 0xC1, 0xB1, 0xB7, 0x3C, 0x64, 0xD7, 0x70, 0xE3, 0xE0, 0xAC, 0x85, 0x9F, 0x66, 0xD6, 0xAF}, + {0x12, 0x12, 0xC1, 0x22, 0xA4, 0xD7, 0x83, 0x80, 0x4D, 0x0F, 0xBE, 0xDE, 0x26, 0x87, 0xA2, 0xA5, 0xD9, 0x4A, 0xC3, 0x62, 0x38}, + {0x12, 0x12, 0xC1, 0x62, 0x7F, 0xE0, 0x41, 0xA1, 0xC1, 0xC4, 0x6E, 0x6F, 0xAD, 0xAC, 0xC5, 0x70, 0x4C, 0xC3, 0x37, 0x50, 0x35}, + {0x12, 0x12, 0xC1, 0x19, 0x13, 0x5C, 0x3E, 0xE9, 0x85, 0x88, 0xEC, 0xE0, 0x28, 0x98, 0x8A, 0x70, 0xC7, 0xF9, 0xBD, 0x47, 0x18}, + {0x12, 0x12, 0xC1, 0x84, 0xDC, 0xB9, 0x59, 0x9B, 0xCB, 0x49, 0x4B, 0xE9, 0x5A, 0x0D, 0x65, 0x45, 0x2B, 0x61, 0xC5, 0x54, 0xF8}, + // Ch 10 + {0x12, 0x12, 0xC1, 0xA2, 0x4D, 0x05, 0x7D, 0xBC, 0xFF, 0x87, 0x9C, 0xBB, 0xAF, 0xC5, 0xA6, 0x7C, 0xEC, 0x9E, 0x68, 0x96, 0x37}, + {0x12, 0x12, 0xC1, 0xC6, 0x99, 0x9F, 0x8B, 0xF8, 0xBC, 0xA3, 0x23, 0x5C, 0x79, 0x91, 0x42, 0x5A, 0xC6, 0x2B, 0x87, 0x40, 0x23}, + {0x12, 0x12, 0xC1, 0x8D, 0x6D, 0x55, 0xD5, 0x10, 0x33, 0xAC, 0x99, 0x50, 0xB2, 0xF0, 0xC9, 0xB3, 0x83, 0x03, 0x40, 0x68, 0xA5}, + {0x12, 0x12, 0xC1, 0x3C, 0x45, 0xA7, 0x24, 0x2F, 0xCC, 0xCB, 0x92, 0x8B, 0xC7, 0x33, 0xC7, 0x89, 0xA6, 0x60, 0x2E, 0x93, 0x3E}, + {0x12, 0x12, 0xC1, 0xF2, 0xE1, 0xB9, 0x13, 0x90, 0xFD, 0x94, 0x13, 0x19, 0x64, 0xA9, 0x56, 0xB9, 0x9A, 0xD2, 0x17, 0x9A, 0xEE}, + {0x12, 0x12, 0xC1, 0xA8, 0xCD, 0xEB, 0xDF, 0x52, 0xB5, 0x7A, 0xEB, 0x8A, 0xF6, 0xC1, 0x6A, 0x0A, 0x8A, 0x54, 0x51, 0x37, 0x5B}, + {0x12, 0x12, 0xC1, 0x84, 0x1D, 0x33, 0x28, 0x07, 0x44, 0x96, 0xA6, 0x8F, 0xC9, 0x1F, 0x79, 0x0F, 0x54, 0x13, 0x3C, 0x98, 0x88}, + {0x12, 0x12, 0xC1, 0xCF, 0xE2, 0xBA, 0x1A, 0x9C, 0xFC, 0xDF, 0xFC, 0x85, 0xB8, 0x94, 0x6B, 0x4A, 0x42, 0xB4, 0x38, 0x87, 0x3E}, + {0x12, 0x12, 0xC1, 0x4F, 0xF1, 0xEC, 0x37, 0x0B, 0xD9, 0x87, 0xDA, 0x83, 0x74, 0x94, 0x93, 0xFD, 0x83, 0x14, 0xBE, 0x69, 0xE8}, + // Ch 11 + {0x12, 0x12, 0xC1, 0xBC, 0x75, 0xE2, 0x35, 0x69, 0x60, 0xA9, 0x5F, 0x7D, 0x29, 0x64, 0xC4, 0xEC, 0x74, 0x12, 0xEA, 0x46, 0x64}, + {0x12, 0x12, 0xC1, 0x82, 0xDA, 0x78, 0xB4, 0xFC, 0x63, 0x3A, 0x97, 0x47, 0x6C, 0xA9, 0xB8, 0xB1, 0x60, 0x85, 0xF0, 0x47, 0xDE}, + {0x12, 0x12, 0xC1, 0x9B, 0xD8, 0x23, 0xE1, 0xB2, 0x9D, 0xDF, 0x47, 0x7F, 0x6B, 0x85, 0x99, 0x15, 0xBE, 0xD2, 0x00, 0x30, 0x9B}, + {0x12, 0x12, 0xC1, 0x2B, 0x72, 0xB5, 0x6D, 0x5C, 0x37, 0x08, 0xB2, 0xE0, 0x9B, 0xFA, 0xDC, 0xBD, 0x1D, 0x90, 0xE0, 0x65, 0x34}, + {0x12, 0x12, 0xC1, 0xA5, 0xFB, 0x1E, 0x32, 0xF8, 0x74, 0x67, 0x76, 0xC0, 0x17, 0x67, 0x33, 0xFB, 0x05, 0x55, 0x57, 0x26, 0x8E}, + {0x12, 0x12, 0xC1, 0x9A, 0x12, 0x73, 0xF7, 0x41, 0x37, 0xD1, 0x28, 0xC4, 0xC9, 0x26, 0xBC, 0x8F, 0x26, 0xAB, 0xBE, 0xC8, 0x64}, + {0x12, 0x12, 0xC1, 0xDA, 0x7C, 0x44, 0xED, 0x22, 0x69, 0x2E, 0x85, 0x3B, 0x17, 0x62, 0x49, 0x2C, 0x17, 0x84, 0xAC, 0x20, 0x94}, + {0x12, 0x12, 0xC1, 0xAE, 0x54, 0xCE, 0x14, 0xA5, 0x6A, 0x32, 0x9C, 0x3F, 0xF2, 0xDC, 0x27, 0xF8, 0xE2, 0x3D, 0x7C, 0x63, 0x78}, + {0x12, 0x12, 0xC1, 0x3F, 0x66, 0xFD, 0xD0, 0x98, 0x84, 0xD9, 0x54, 0x94, 0x2A, 0xE5, 0xC5, 0xC9, 0x31, 0xD1, 0xA9, 0x6B, 0x5E}, + // Ch 12 + {0x12, 0x12, 0xC1, 0x3C, 0x41, 0xD5, 0x91, 0x99, 0xBD, 0x9A, 0xC9, 0x5A, 0x10, 0x6C, 0xAC, 0x2A, 0xC2, 0xCC, 0x84, 0xA2, 0xF4}, + {0x12, 0x12, 0xC1, 0x08, 0x06, 0x40, 0x1B, 0x66, 0x98, 0x4D, 0xF0, 0x3A, 0x74, 0x61, 0x86, 0x4A, 0xBA, 0xA2, 0x43, 0xEE, 0x44}, + {0x12, 0x12, 0xC1, 0xDC, 0xC7, 0x24, 0x3C, 0x2E, 0x77, 0xA6, 0x30, 0x8F, 0x1D, 0xD0, 0x5A, 0x45, 0x66, 0x6E, 0xF6, 0x36, 0xC8}, + {0x12, 0x12, 0xC1, 0x27, 0x27, 0x90, 0xAC, 0x65, 0xCB, 0x51, 0x28, 0x4C, 0xF6, 0x7A, 0x1C, 0x78, 0xDF, 0xBC, 0x7A, 0xFC, 0x8F}, + {0x12, 0x12, 0xC1, 0xDB, 0x77, 0x8D, 0xF3, 0x28, 0xF0, 0xAF, 0x57, 0x5F, 0x9A, 0xBD, 0xC8, 0xC0, 0xDC, 0xD7, 0x02, 0xC7, 0x1B}, + {0x12, 0x12, 0xC1, 0xB6, 0x33, 0xA1, 0xF5, 0x1D, 0xC5, 0xE2, 0x58, 0x1E, 0xBE, 0x61, 0x6D, 0x64, 0xAB, 0xF2, 0xD6, 0xDF, 0x68}, + {0x12, 0x12, 0xC1, 0xED, 0x9A, 0x74, 0x52, 0xFF, 0xB8, 0xCA, 0x77, 0x23, 0x5C, 0xBB, 0x45, 0x27, 0x56, 0x38, 0xB3, 0x3F, 0x33}, + {0x12, 0x12, 0xC1, 0x0C, 0x69, 0x16, 0x1F, 0xFA, 0xAF, 0xA6, 0xA9, 0x10, 0x74, 0x3D, 0xFF, 0x9B, 0x05, 0x02, 0xC8, 0xF1, 0xBF}, + {0x12, 0x12, 0xC1, 0x06, 0xEB, 0x80, 0xBD, 0x95, 0x0D, 0xE8, 0xB3, 0x9C, 0x67, 0x4D, 0x0A, 0x96, 0xA5, 0x74, 0xE9, 0x5B, 0xD9}, + // Ch 13 + {0x12, 0x12, 0xC1, 0xD8, 0x40, 0xF3, 0x12, 0x8C, 0x59, 0x78, 0x21, 0x9E, 0x3A, 0x92, 0x9A, 0xEE, 0x35, 0xA3, 0xF2, 0xC2, 0x67}, + {0x12, 0x12, 0xC1, 0xC4, 0x9E, 0xA2, 0xC8, 0x0B, 0x44, 0x19, 0x74, 0x10, 0x08, 0x0B, 0xCB, 0x30, 0xB6, 0x0B, 0x7A, 0x08, 0xEF}, + {0x12, 0x12, 0xC1, 0x8D, 0x4D, 0x47, 0x09, 0x35, 0xFC, 0x84, 0x27, 0x26, 0xC7, 0x1E, 0xB2, 0xB7, 0x59, 0x1D, 0x72, 0x8C, 0x4B}, + {0x12, 0x12, 0xC1, 0x45, 0xFE, 0x73, 0xDF, 0x55, 0x54, 0xB0, 0x34, 0xF4, 0xC3, 0x79, 0x3B, 0xE5, 0xDB, 0x54, 0xCD, 0x98, 0x79}, + {0x12, 0x12, 0xC1, 0x22, 0x9F, 0x14, 0x1C, 0xE1, 0xC6, 0x1B, 0x9E, 0xF3, 0x6C, 0x41, 0xC2, 0xDF, 0x6C, 0x1E, 0x07, 0x2C, 0x6B}, + {0x12, 0x12, 0xC1, 0x00, 0xBB, 0x65, 0x61, 0xDD, 0x6F, 0x8B, 0x21, 0x7E, 0x69, 0xDE, 0x11, 0xA4, 0x07, 0x56, 0x03, 0x1C, 0x92}, + {0x12, 0x12, 0xC1, 0x98, 0x77, 0x44, 0x39, 0x51, 0xB1, 0xBB, 0x01, 0xC2, 0x0F, 0x95, 0xF4, 0xF0, 0x65, 0x26, 0x05, 0x37, 0x27}, + {0x12, 0x12, 0xC1, 0x73, 0x11, 0x72, 0x75, 0xA8, 0x16, 0x50, 0xCA, 0x73, 0x82, 0x21, 0xE7, 0x59, 0xF9, 0x2C, 0xD9, 0xB9, 0xF4}, + {0x12, 0x12, 0xC1, 0x54, 0x03, 0xD0, 0x41, 0x64, 0xAA, 0x44, 0x8D, 0xD6, 0x4C, 0x4E, 0x08, 0xDD, 0x24, 0xC0, 0xFF, 0x06, 0x6D}, + // Ch 14 + {0x12, 0x12, 0xC1, 0x15, 0x4E, 0xC4, 0xAA, 0x22, 0x72, 0x74, 0xDE, 0x73, 0x7C, 0x9B, 0xAA, 0x74, 0xF9, 0x72, 0x03, 0x4D, 0xFC}, + {0x12, 0x12, 0xC1, 0x41, 0x65, 0x9F, 0x10, 0xD7, 0xE0, 0x20, 0x1D, 0x2B, 0xE4, 0x7D, 0xFE, 0x8F, 0x70, 0x5D, 0x38, 0xB2, 0x34}, + {0x12, 0x12, 0xC1, 0x50, 0xEB, 0xC9, 0xA5, 0x15, 0x8A, 0x8D, 0x92, 0xAC, 0x8F, 0x6A, 0x9D, 0x86, 0x22, 0x73, 0x89, 0xD6, 0x50}, + {0x12, 0x12, 0xC1, 0x7F, 0x6C, 0x27, 0x5F, 0x63, 0x71, 0xDC, 0x97, 0x8B, 0x0B, 0x2F, 0xDB, 0x03, 0x46, 0xCE, 0xD0, 0x36, 0xB9}, + {0x12, 0x12, 0xC1, 0xB6, 0x5D, 0xEA, 0xAB, 0x46, 0x20, 0x0F, 0x28, 0xFC, 0xFA, 0x3A, 0x99, 0x29, 0x91, 0x5F, 0xC1, 0x0A, 0x9C}, + {0x12, 0x12, 0xC1, 0x10, 0x05, 0xD4, 0x3A, 0x4B, 0xB2, 0x15, 0xD9, 0x9C, 0x99, 0x37, 0x98, 0x7B, 0xF5, 0x36, 0x16, 0x03, 0xEF}, + {0x12, 0x12, 0xC1, 0x93, 0x47, 0xAD, 0x5F, 0xD3, 0xD1, 0x82, 0x29, 0xC8, 0x97, 0xAF, 0x20, 0xB7, 0x76, 0xCA, 0xA3, 0x3D, 0x01}, + {0x12, 0x12, 0xC1, 0x1D, 0x5B, 0x42, 0x82, 0x85, 0xA7, 0xA3, 0x12, 0x3A, 0x02, 0xF9, 0xA7, 0xC1, 0x15, 0x7C, 0x77, 0x6D, 0x7B}, + {0x12, 0x12, 0xC1, 0x98, 0xFF, 0xFA, 0x10, 0xC6, 0xF1, 0x4C, 0x2C, 0x54, 0x38, 0x89, 0xE4, 0x9C, 0xD4, 0xA7, 0xD0, 0x99, 0x43}, + // Ch 15 + {0x12, 0x12, 0xC1, 0x13, 0xC9, 0xBE, 0x6B, 0xE4, 0x39, 0x1B, 0xB8, 0x85, 0x6C, 0x57, 0x57, 0x07, 0x7F, 0xF7, 0x68, 0xE8, 0x53}, + {0x12, 0x12, 0xC1, 0x77, 0x7C, 0x61, 0x8B, 0x1D, 0x1E, 0xE0, 0x78, 0x6C, 0x1C, 0x05, 0x8D, 0x73, 0xAB, 0xA0, 0x7C, 0x7A, 0xB0}, + {0x12, 0x12, 0xC1, 0x6A, 0x57, 0x86, 0x43, 0x42, 0x76, 0xBF, 0xC3, 0xDE, 0x8A, 0xCD, 0x0A, 0x2E, 0x6C, 0x65, 0xB8, 0x5D, 0x75}, + {0x12, 0x12, 0xC1, 0x9C, 0x45, 0x27, 0x00, 0x58, 0x46, 0x57, 0x9E, 0x29, 0xC8, 0xBF, 0x01, 0x03, 0x59, 0xF2, 0xFB, 0xCC, 0xA3}, + {0x12, 0x12, 0xC1, 0x8C, 0x6A, 0xFF, 0x93, 0x88, 0x6F, 0xC8, 0x4E, 0xE8, 0x49, 0xFA, 0x81, 0x80, 0x70, 0x36, 0x0D, 0x2D, 0x8A}, + {0x12, 0x12, 0xC1, 0x2C, 0xC2, 0xD2, 0x46, 0x3A, 0x15, 0x2E, 0x8B, 0xC9, 0x06, 0x84, 0xE0, 0x47, 0xED, 0x05, 0x7F, 0x86, 0x33}, + {0x12, 0x12, 0xC1, 0xDF, 0x3F, 0x0B, 0x49, 0xB1, 0x34, 0x9A, 0xB8, 0x3A, 0x31, 0xE3, 0x72, 0x2A, 0x9E, 0x9F, 0x75, 0x09, 0xA6}, + {0x12, 0x12, 0xC1, 0xD2, 0xD4, 0x5C, 0xCB, 0xF5, 0x6D, 0x53, 0x00, 0x13, 0x08, 0xAA, 0xA9, 0x18, 0x02, 0x6A, 0x9F, 0x2E, 0x03}, + {0x12, 0x12, 0xC1, 0xAE, 0x27, 0x37, 0x77, 0x30, 0xEE, 0x6A, 0xF1, 0xCB, 0x7E, 0xA5, 0xC9, 0x43, 0x05, 0x15, 0xE1, 0x7B, 0x64}, +}; +///////////////////////// Stop Keys //////////////////////////////////////////////////////// + +uint8_t StopKey[][21] PROGMEM = { + // Ch 0 + {0x12, 0x12, 0xC1, 0x68, 0xF1, 0x9A, 0x1B, 0x7E, 0x16, 0x55, 0x6C, 0xD9, 0xCE, 0x32, 0x61, 0x16, 0xD5, 0x74, 0xB2, 0xEA, 0xAB}, + {0x12, 0x12, 0xC1, 0x86, 0x2E, 0xBC, 0x97, 0xA5, 0x81, 0x94, 0xC9, 0x1A, 0xF0, 0x6C, 0x99, 0x32, 0x22, 0x04, 0xE2, 0xC8, 0xE5}, + {0x12, 0x12, 0xC1, 0x7C, 0x33, 0x53, 0xAA, 0xA3, 0x7B, 0x30, 0x70, 0x15, 0xDF, 0x3E, 0xE4, 0x38, 0x92, 0x0F, 0x00, 0x7B, 0xA6}, + // Ch 1 + {0x12, 0x12, 0xC1, 0x56, 0x4F, 0xC6, 0x5D, 0x1C, 0x26, 0x44, 0xD4, 0x71, 0xBC, 0x8F, 0x86, 0x38, 0x1B, 0xBE, 0xE2, 0xA2, 0x14}, // CH1 + {0x12, 0x12, 0xC1, 0xEC, 0x11, 0xBF, 0xB6, 0x39, 0xEC, 0x3F, 0xB3, 0xB7, 0x19, 0xBD, 0x15, 0xB5, 0x78, 0x77, 0x32, 0x39, 0x22}, + {0x12, 0x12, 0xC1, 0x39, 0x61, 0x4B, 0x2A, 0x68, 0xC5, 0x6A, 0xB0, 0x98, 0x99, 0xA4, 0x74, 0xEA, 0x8C, 0x11, 0xBE, 0xDD, 0x7F}, + // Ch 2 + {0x12, 0x12, 0xC1, 0xB3, 0x3F, 0x1C, 0xF5, 0x95, 0xA3, 0x70, 0x5F, 0x07, 0x8F, 0x56, 0xF8, 0x82, 0x92, 0x69, 0x42, 0xC1, 0xF7}, // CH2 + {0x12, 0x12, 0xC1, 0x04, 0xFB, 0x5E, 0x78, 0x8A, 0x06, 0x3A, 0x46, 0x06, 0xDE, 0xA8, 0x82, 0xD8, 0x9C, 0xB3, 0x77, 0x47, 0x05}, + {0x12, 0x12, 0xC1, 0x6D, 0xFD, 0x66, 0x87, 0x3E, 0xF7, 0x43, 0x01, 0xE4, 0x81, 0x16, 0xCA, 0x3A, 0xA8, 0x03, 0xD0, 0xDB, 0xC6}, + // Ch 3 + {0x12, 0x12, 0xC1, 0x7C, 0x98, 0xEB, 0x03, 0x5D, 0x4A, 0x5C, 0xA6, 0xCC, 0x25, 0x90, 0xC3, 0x85, 0x8B, 0x8F, 0x69, 0xDA, 0x31}, // CH3 + {0x12, 0x12, 0xC1, 0x4E, 0xDA, 0x2A, 0xDC, 0x5D, 0x37, 0xAA, 0x1D, 0x6C, 0xC5, 0x85, 0xA7, 0x7A, 0xBB, 0xB7, 0xC7, 0x7E, 0x06}, + {0x12, 0x12, 0xC1, 0x20, 0xA0, 0x71, 0xA6, 0xF7, 0x65, 0x6D, 0x7A, 0xF5, 0x32, 0x00, 0x9B, 0x84, 0xB8, 0x17, 0x22, 0x06, 0x31}, + // Ch 4 + {0x12, 0x12, 0xC1, 0xA5, 0x52, 0x15, 0x25, 0x8A, 0xB4, 0xB7, 0xB3, 0x78, 0xB3, 0xA8, 0x3C, 0xA6, 0x32, 0x03, 0xA5, 0x09, 0x85}, + {0x12, 0x12, 0xC1, 0x93, 0x71, 0xD1, 0x68, 0xD8, 0x02, 0x8B, 0xBA, 0xFD, 0x61, 0x52, 0x6B, 0xC0, 0xA4, 0xD1, 0xA4, 0x71, 0xF0}, + {0x12, 0x12, 0xC1, 0xAD, 0xCF, 0x1A, 0x11, 0xD2, 0x2E, 0xF9, 0x01, 0x7C, 0x9C, 0xB1, 0xDA, 0x72, 0xC6, 0x76, 0xE8, 0x38, 0x2D}, + // Ch 5 + {0x12, 0x12, 0xC1, 0x42, 0xC3, 0x15, 0x12, 0x91, 0x76, 0x49, 0x1C, 0x20, 0x78, 0x39, 0xF8, 0xD4, 0xE2, 0x12, 0xBF, 0xAE, 0xD2}, + {0x12, 0x12, 0xC1, 0x97, 0x41, 0xDB, 0x4E, 0x9B, 0x53, 0x3F, 0xF7, 0xFF, 0x8E, 0x2F, 0x69, 0x9F, 0x16, 0x28, 0xF5, 0x5A, 0xDD}, + {0x12, 0x12, 0xC1, 0x59, 0x56, 0x90, 0x8E, 0xC9, 0x60, 0x9A, 0x4C, 0x30, 0xE2, 0x8B, 0x4C, 0xD5, 0x1C, 0x94, 0x69, 0x65, 0xEB}, + // Ch 6 + {0x12, 0x12, 0xC1, 0x52, 0x20, 0x55, 0x10, 0x43, 0xE8, 0x58, 0xB9, 0xFD, 0xF5, 0x0E, 0x71, 0x20, 0x1F, 0xE7, 0x1A, 0xB5, 0xEC}, + {0x12, 0x12, 0xC1, 0x44, 0x9B, 0x79, 0xA0, 0x33, 0x48, 0x9A, 0x02, 0x8E, 0xBA, 0xEE, 0x4B, 0xCC, 0x27, 0x14, 0x60, 0x47, 0xFD}, + {0x12, 0x12, 0xC1, 0xC4, 0xC1, 0x3A, 0xE3, 0xC8, 0xD8, 0x14, 0x28, 0xD4, 0x72, 0x12, 0x28, 0xE4, 0x1B, 0xC7, 0x4C, 0x07, 0x93}, + // Ch 7 + {0x12, 0x12, 0xC1, 0xD2, 0x47, 0x37, 0x58, 0x32, 0xD7, 0xF8, 0x36, 0x64, 0x6C, 0x14, 0xA2, 0xEB, 0xB9, 0xC1, 0xEA, 0x09, 0xFA}, + {0x12, 0x12, 0xC1, 0x24, 0xEE, 0x39, 0x31, 0x9C, 0xF5, 0xC7, 0xA4, 0x36, 0xAA, 0x6E, 0x34, 0x0A, 0x6B, 0x9A, 0xE2, 0x60, 0x68}, + {0x12, 0x12, 0xC1, 0x94, 0xBA, 0x65, 0x9A, 0x54, 0x82, 0x8B, 0xA3, 0xF0, 0x37, 0x4F, 0x65, 0x69, 0xC0, 0xA3, 0xDB, 0x40, 0xE6}, + // Ch 8 + {0x12, 0x12, 0xC1, 0xEB, 0xD9, 0x55, 0x25, 0x4F, 0xD5, 0xAE, 0x76, 0xDD, 0x1A, 0x25, 0xC2, 0x67, 0x50, 0x88, 0x17, 0x14, 0x20}, + {0x12, 0x12, 0xC1, 0xE5, 0x82, 0x9A, 0x31, 0xB3, 0x15, 0xAF, 0x0F, 0x28, 0xBD, 0x88, 0xE7, 0x23, 0x12, 0x1D, 0xF2, 0x1E, 0x4C}, + {0x12, 0x12, 0xC1, 0x12, 0x02, 0x7B, 0x18, 0x32, 0xA0, 0x53, 0x79, 0x78, 0x61, 0x5B, 0xCB, 0xF0, 0xFE, 0x6F, 0xB7, 0xFE, 0x4A}, + // Ch 9 + {0x12, 0x12, 0xC1, 0xEF, 0x58, 0xFD, 0xF2, 0x55, 0xCB, 0xBB, 0xF9, 0xC2, 0x51, 0xA2, 0xB7, 0x0C, 0x25, 0x54, 0x7D, 0xE7, 0x07}, + {0x12, 0x12, 0xC1, 0x7A, 0x61, 0x8B, 0x62, 0x30, 0xF9, 0xE8, 0x86, 0x87, 0xB2, 0xF9, 0x38, 0x25, 0x98, 0x10, 0xEE, 0x30, 0x01}, + {0x12, 0x12, 0xC1, 0x04, 0x0C, 0x69, 0xAC, 0x28, 0xA7, 0x30, 0xC5, 0x60, 0x06, 0x27, 0x42, 0x56, 0x76, 0x5C, 0x7D, 0x7D, 0x00}, + // Ch 10 + {0x12, 0x12, 0xC1, 0x9C, 0x6B, 0x91, 0x6D, 0x73, 0x0C, 0xBB, 0xA8, 0x69, 0x0A, 0x0D, 0x9A, 0xD2, 0xD6, 0xC2, 0x69, 0x6D, 0xA5}, + {0x12, 0x12, 0xC1, 0x08, 0xA7, 0x3D, 0x7C, 0x94, 0x16, 0x03, 0x0C, 0x9E, 0x26, 0x3A, 0xAD, 0xA9, 0x45, 0xC6, 0xF8, 0xD4, 0x17}, + {0x12, 0x12, 0xC1, 0x83, 0x44, 0x4B, 0xB8, 0x87, 0xF4, 0x76, 0x0C, 0xCE, 0x4C, 0x74, 0xD6, 0x48, 0xD4, 0xA2, 0x3C, 0x9A, 0xDD}, + // Ch 11 + {0x12, 0x12, 0xC1, 0x0F, 0x8D, 0xA2, 0x2D, 0x9C, 0x42, 0xAE, 0x86, 0xED, 0x43, 0x46, 0x80, 0x82, 0x14, 0xCF, 0xA9, 0xF1, 0x8D}, + {0x12, 0x12, 0xC1, 0x19, 0xFE, 0x63, 0x7C, 0xF2, 0xF6, 0xFC, 0x0E, 0xAC, 0x3C, 0x6C, 0xC6, 0xF7, 0x62, 0x06, 0x5E, 0x7D, 0xF8}, + {0x12, 0x12, 0xC1, 0x39, 0xB0, 0xC7, 0xCD, 0x09, 0x9C, 0x50, 0xE2, 0x6C, 0xB9, 0x26, 0xA4, 0x22, 0x50, 0x02, 0xC0, 0x06, 0x78}, + // Ch 12 + {0x12, 0x12, 0xC1, 0x5F, 0x6F, 0x1D, 0xEC, 0x81, 0x98, 0x56, 0x31, 0xDE, 0xBB, 0x8B, 0x81, 0x59, 0x8E, 0xCE, 0xBC, 0x3A, 0x7D}, + {0x12, 0x12, 0xC1, 0x8B, 0x48, 0x53, 0x6D, 0xAC, 0x5E, 0xCB, 0x99, 0x00, 0x1E, 0x0A, 0x93, 0xAE, 0xA8, 0x09, 0x3C, 0x7D, 0xB2}, + {0x12, 0x12, 0xC1, 0xB6, 0x0C, 0xD1, 0x66, 0x79, 0xBB, 0x96, 0x6E, 0x88, 0xEA, 0xE6, 0xA0, 0x16, 0x91, 0xB1, 0x6C, 0x61, 0x58}, + // Ch 13 + {0x12, 0x12, 0xC1, 0xFF, 0x59, 0x35, 0x48, 0xC5, 0xCA, 0x49, 0x7C, 0x64, 0x5B, 0xBE, 0x7A, 0x16, 0x70, 0x87, 0x4E, 0x04, 0x0E}, + {0x12, 0x12, 0xC1, 0xD1, 0x1B, 0x7D, 0x03, 0x6E, 0xEF, 0x96, 0x8A, 0x1D, 0x66, 0x7F, 0xB9, 0x5C, 0xF9, 0xB2, 0xEB, 0x9F, 0x28}, + {0x12, 0x12, 0xC1, 0x61, 0x3D, 0xFE, 0x14, 0xE1, 0x35, 0xC6, 0xD8, 0x2A, 0xDD, 0x86, 0x93, 0xB1, 0x87, 0xB4, 0xAB, 0x33, 0x1C}, + // Ch 14 + {0x12, 0x12, 0xC1, 0x3D, 0x3A, 0x03, 0x73, 0xE2, 0xE9, 0xB4, 0x3D, 0xDF, 0x73, 0xAF, 0x22, 0x50, 0xE4, 0xD1, 0x3E, 0x7C, 0xD0}, + {0x12, 0x12, 0xC1, 0xC4, 0xD8, 0xEE, 0xEA, 0xA0, 0x60, 0x77, 0x8B, 0xF4, 0x75, 0xB3, 0x03, 0x7B, 0xB8, 0xCD, 0x53, 0x36, 0xB5}, + {0x12, 0x12, 0xC1, 0xCB, 0xE8, 0x16, 0x3D, 0x5F, 0x28, 0x71, 0xF4, 0x9C, 0x1C, 0x4A, 0xAF, 0xFC, 0x1D, 0x04, 0xEA, 0x0E, 0x35}, + // Ch 15 + {0x12, 0x12, 0xC1, 0x0F, 0x51, 0xC7, 0x63, 0x07, 0xEF, 0x63, 0xBF, 0x03, 0x1A, 0xD0, 0x01, 0xE6, 0x39, 0x07, 0x29, 0xCD, 0x6D}, // CH15 + {0x12, 0x12, 0xC1, 0xFD, 0xAE, 0x14, 0x43, 0x5A, 0x19, 0x60, 0x10, 0xFF, 0xD2, 0xDD, 0x94, 0x45, 0xEE, 0xDC, 0xE8, 0x66, 0x4C}, + {0x12, 0x12, 0xC1, 0x9E, 0x8E, 0x7F, 0xBD, 0xC5, 0x79, 0x91, 0x37, 0xF9, 0x3F, 0xAA, 0xF8, 0x85, 0x77, 0x7E, 0x95, 0x3C, 0x82}, +}; + +///////////////////////// Prog Keys //////////////////////////////////////////////////////// + +uint8_t ProgKey[][21] PROGMEM = { + // Ch 0 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + // Ch 1 + {0x12, 0x12, 0xC1, 0x5A, 0xD8, 0x20, 0x62, 0x9B, 0x47, 0xF6, 0x91, 0x81, 0x53, 0xB1, 0x2E, 0x36, 0x34, 0xCD, 0x4D, 0x5F, 0xCE}, // CH1 + {0x12, 0x12, 0xC1, 0xE8, 0x53, 0x43, 0x91, 0xD2, 0xB7, 0x35, 0x38, 0x3F, 0x74, 0xFF, 0x82, 0x09, 0x99, 0x50, 0xC9, 0xEB, 0x77}, + {0x12, 0x12, 0xC1, 0x55, 0xAB, 0x15, 0x16, 0xBA, 0xFD, 0x5C, 0xF6, 0x0A, 0x62, 0xD8, 0xD4, 0xC3, 0xE9, 0xBF, 0xAB, 0x04, 0x08}, + // Ch 2 + {0x12, 0x12, 0xC1, 0x2F, 0xA1, 0x5A, 0x29, 0x76, 0x14, 0x65, 0x3B, 0x34, 0x47, 0x1F, 0x47, 0xEB, 0x1E, 0x5B, 0xA8, 0x94, 0x86}, // CH2 + {0x12, 0x12, 0xC1, 0xB5, 0x84, 0x31, 0xE0, 0xC7, 0x28, 0x9E, 0xBD, 0xF1, 0x44, 0x0E, 0x3E, 0x00, 0x0B, 0x61, 0x4D, 0xE4, 0x9B}, + {0x12, 0x12, 0xC1, 0x91, 0xFC, 0x66, 0x49, 0x92, 0x02, 0x80, 0x41, 0xB8, 0xD1, 0xE2, 0xBF, 0x2C, 0xF1, 0xF5, 0xF1, 0x2F, 0x97}, + // Ch 3 + {0x12, 0x12, 0xC1, 0xAB, 0x15, 0x67, 0x6E, 0x1B, 0x67, 0x48, 0x35, 0xF7, 0x2C, 0x94, 0x10, 0xBC, 0x7C, 0x1B, 0x01, 0xB9, 0x56}, // CH3 + {0x12, 0x12, 0xC1, 0xF7, 0x45, 0x8D, 0x24, 0x45, 0x08, 0xB4, 0x66, 0xF1, 0xAC, 0xE8, 0x36, 0x32, 0xB0, 0x40, 0x33, 0x39, 0xA1}, + {0x12, 0x12, 0xC1, 0xC7, 0x65, 0x20, 0xC3, 0x20, 0x6D, 0x5D, 0xAC, 0x8D, 0x47, 0x0B, 0x5B, 0x62, 0xD5, 0x36, 0x3F, 0xE5, 0x0D}, + // Ch 4 + {0x12, 0x12, 0xC1, 0x85, 0xF5, 0x01, 0xBA, 0x29, 0x64, 0x38, 0x29, 0x9F, 0x15, 0x43, 0x7D, 0x67, 0xFA, 0x49, 0x7A, 0x79, 0x6C}, + {0x12, 0x12, 0xC1, 0xCE, 0xB1, 0x9B, 0x91, 0x35, 0x7B, 0x36, 0x95, 0x86, 0xA1, 0x10, 0x15, 0x7C, 0x3C, 0x06, 0x7A, 0x34, 0xE5}, + {0x12, 0x12, 0xC1, 0x68, 0xB0, 0x62, 0x30, 0xE5, 0x71, 0xF9, 0x41, 0x0B, 0xD7, 0x3F, 0x37, 0x0C, 0xC5, 0x8B, 0x19, 0x6D, 0x83}, + // Ch 5 + {0x12, 0x12, 0xC1, 0x4B, 0x07, 0x47, 0x87, 0x30, 0x84, 0x37, 0x54, 0x0E, 0x51, 0x7C, 0x75, 0x82, 0xF0, 0x0A, 0xBB, 0x0A, 0xAA}, + {0x12, 0x12, 0xC1, 0x05, 0x78, 0x95, 0xF5, 0xCA, 0xA0, 0x3A, 0x02, 0xBC, 0x9B, 0x1F, 0x16, 0x41, 0xA9, 0xE4, 0xFD, 0xE8, 0xB5}, + {0x12, 0x12, 0xC1, 0x42, 0x51, 0x1B, 0x3F, 0x74, 0xEC, 0x31, 0x36, 0xEB, 0x7E, 0x61, 0xB1, 0x8D, 0x8C, 0xF0, 0xF3, 0x84, 0xC3}, + // Ch 6 + {0x12, 0x12, 0xC1, 0x49, 0x9F, 0x73, 0x22, 0x0E, 0xAC, 0xDF, 0x97, 0xCD, 0x65, 0xA8, 0x43, 0xA1, 0xA2, 0x2E, 0xDD, 0xB2, 0xD9}, + {0x12, 0x12, 0xC1, 0x96, 0x91, 0x21, 0x81, 0x59, 0x8A, 0x40, 0x22, 0x05, 0x45, 0x52, 0x35, 0x0E, 0x00, 0xB2, 0x34, 0x37, 0x6D}, + {0x12, 0x12, 0xC1, 0x31, 0x97, 0xC7, 0x9A, 0xFD, 0x15, 0x5F, 0x61, 0x0E, 0xDA, 0x69, 0x08, 0x4E, 0xD7, 0x3D, 0xC5, 0x7E, 0xEC}, + // Ch 7 + {0x12, 0x12, 0xC1, 0xF1, 0x56, 0x31, 0x5E, 0xD5, 0xBD, 0x98, 0x27, 0xB0, 0x0A, 0x5C, 0x97, 0x58, 0x0C, 0xE2, 0x98, 0x71, 0x8D}, + {0x12, 0x12, 0xC1, 0x4B, 0xD0, 0x18, 0x0C, 0x99, 0x9D, 0x17, 0x9F, 0x53, 0x82, 0x61, 0xD5, 0x68, 0x65, 0xD3, 0xDF, 0x07, 0x7F}, + {0x12, 0x12, 0xC1, 0x7F, 0x5A, 0x79, 0x05, 0x06, 0x20, 0xAE, 0xD3, 0xC5, 0xD7, 0x20, 0xA0, 0xE2, 0x1B, 0x33, 0x5D, 0x52, 0xD3}, + // Ch 8 + {0x12, 0x12, 0xC1, 0x47, 0xC3, 0x6D, 0xBE, 0x10, 0xA9, 0x45, 0x88, 0x77, 0xDD, 0x53, 0xBF, 0xF7, 0x0B, 0x48, 0xEC, 0xB3, 0x58}, + {0x12, 0x12, 0xC1, 0x4B, 0x08, 0xD4, 0xAF, 0x88, 0xF6, 0x2F, 0x82, 0xF1, 0x20, 0x52, 0x30, 0x7A, 0x5B, 0x42, 0x02, 0x62, 0x03}, + {0x12, 0x12, 0xC1, 0x5F, 0xA3, 0xAA, 0x42, 0xD0, 0x2C, 0xBB, 0x67, 0x89, 0xDB, 0xFD, 0x0B, 0x20, 0x54, 0xA5, 0x86, 0x61, 0x80}, + // Ch 9 + {0x12, 0x12, 0xC1, 0xC0, 0xF2, 0x7F, 0xC7, 0x32, 0x21, 0x1D, 0x74, 0x11, 0x45, 0x8F, 0x33, 0xEA, 0x2A, 0x7A, 0x16, 0xA5, 0xA1}, + {0x12, 0x12, 0xC1, 0x56, 0xA7, 0x68, 0x4F, 0x65, 0x20, 0xD5, 0x62, 0x8A, 0xCF, 0x73, 0x38, 0xA9, 0xA3, 0xAF, 0x4D, 0xC6, 0x8B}, + {0x12, 0x12, 0xC1, 0xA2, 0xE2, 0x3D, 0xB3, 0xCB, 0x69, 0xE2, 0xEA, 0xB4, 0xE7, 0x16, 0xBC, 0x6B, 0x14, 0x15, 0x57, 0x68, 0xD2}, + // Ch 10 + {0x12, 0x12, 0xC1, 0xCA, 0x02, 0x4C, 0x48, 0x0A, 0x6F, 0x4D, 0x32, 0x00, 0x1D, 0x50, 0x92, 0x4B, 0xA4, 0x4D, 0x50, 0xE6, 0x9D}, + {0x12, 0x12, 0xC1, 0xB7, 0xA5, 0x94, 0xDC, 0x8B, 0x89, 0x30, 0x60, 0x90, 0x83, 0x98, 0xBB, 0x5E, 0x0E, 0x96, 0x82, 0x93, 0xBD}, + {0x12, 0x12, 0xC1, 0x77, 0x80, 0xFA, 0xD2, 0xB6, 0x58, 0x23, 0x78, 0x48, 0x4E, 0xD5, 0x79, 0xC4, 0xAD, 0xE3, 0x74, 0xED, 0xD4}, + // Ch 11 + {0x12, 0x12, 0xC1, 0x65, 0xE0, 0x89, 0x3A, 0x02, 0x53, 0xCD, 0xA5, 0x6F, 0xD2, 0xB8, 0x4F, 0x67, 0x00, 0x69, 0x4B, 0x0F, 0xCE}, + {0x12, 0x12, 0xC1, 0x44, 0xC2, 0x2D, 0xCC, 0x18, 0x7A, 0x09, 0x52, 0x31, 0x77, 0xC8, 0x86, 0xF4, 0xD1, 0x1E, 0x43, 0x44, 0xB5}, + {0x12, 0x12, 0xC1, 0x43, 0xF5, 0xCA, 0xDC, 0xB6, 0x52, 0xA6, 0x41, 0x5B, 0x40, 0x77, 0xFA, 0x3D, 0x73, 0x88, 0xE6, 0xE8, 0x18}, + // Ch 12 + {0x12, 0x12, 0xC1, 0xAA, 0x43, 0xFA, 0x90, 0xD4, 0x1A, 0xDB, 0x79, 0x73, 0x8B, 0x5F, 0xF2, 0xA6, 0x26, 0x7B, 0xF4, 0x18, 0xE7}, + {0x12, 0x12, 0xC1, 0x58, 0x48, 0x6C, 0x72, 0x56, 0xA2, 0x78, 0xF1, 0x2B, 0x0F, 0x67, 0xFB, 0xD3, 0x78, 0x8D, 0xBA, 0x1D, 0x96}, + {0x12, 0x12, 0xC1, 0xC1, 0x69, 0xD5, 0xEA, 0x9A, 0x22, 0xB9, 0xAE, 0x50, 0x2D, 0x32, 0x3D, 0x0B, 0xC0, 0x51, 0x04, 0xAF, 0x57}, + // Ch 13 + {0x12, 0x12, 0xC1, 0x97, 0xAE, 0x21, 0x20, 0x2B, 0x56, 0xBD, 0xBC, 0xF6, 0xD7, 0x0E, 0xAD, 0x73, 0xBD, 0x60, 0x88, 0xE2, 0xD1}, + {0x12, 0x12, 0xC1, 0xCD, 0xAD, 0xBF, 0x00, 0xEC, 0x43, 0x91, 0x86, 0xF9, 0x6C, 0x56, 0x62, 0x3F, 0x29, 0xBF, 0xD3, 0x28, 0x8E}, + {0x12, 0x12, 0xC1, 0xB0, 0xCC, 0x2B, 0x50, 0xC2, 0xC7, 0xB1, 0xC3, 0x74, 0xAF, 0xCE, 0xC6, 0x04, 0x16, 0x2B, 0x89, 0x7E, 0xF6}, + // Ch 14 + {0x12, 0x12, 0xC1, 0x73, 0x0E, 0xD2, 0x4F, 0x94, 0x29, 0x06, 0x12, 0xD5, 0x5C, 0xBC, 0xEB, 0xB3, 0xDF, 0x0D, 0x53, 0x27, 0xCE}, + {0x12, 0x12, 0xC1, 0x86, 0x87, 0x92, 0x3F, 0x77, 0xC5, 0x4E, 0x68, 0x78, 0xBD, 0x84, 0x68, 0x69, 0x93, 0xDB, 0xF3, 0x03, 0xD0}, + {0x12, 0x12, 0xC1, 0xE6, 0xC5, 0x4D, 0xC5, 0x37, 0xB2, 0xE0, 0xCB, 0xD3, 0x7A, 0x92, 0x16, 0xF0, 0x7C, 0x16, 0x29, 0x3B, 0x29}, + // Ch 15 + {0x12, 0x12, 0xC1, 0x72, 0xD6, 0xC3, 0xF4, 0x64, 0xA5, 0xE0, 0x79, 0x6E, 0x51, 0xEE, 0xF0, 0x41, 0x63, 0x30, 0x7A, 0x2C, 0xA6}, // CH4 + {0x12, 0x12, 0xC1, 0x9F, 0x31, 0x8E, 0x5B, 0x90, 0x8F, 0x57, 0x83, 0x4A, 0x23, 0x36, 0x87, 0x17, 0x7E, 0xFF, 0x58, 0x36, 0xE0}, + {0x12, 0x12, 0xC1, 0x70, 0x57, 0xC4, 0x8B, 0x02, 0xAC, 0x57, 0xC2, 0x84, 0x9D, 0xEE, 0x06, 0x56, 0xEA, 0xE1, 0x81, 0x60, 0x34}, +}; + +#endif // RF_KEYS_H diff --git a/SD_ADI.ino b/SD_ADI.ino new file mode 100644 index 0000000..20edf68 --- /dev/null +++ b/SD_ADI.ino @@ -0,0 +1,195 @@ +// #include +// #include +#include "FS.h" +#include "FileLib.h" + +File myFile; + +// sample call +// int16_t datapac[1000]; +// SD_FileWrite(&datapac, "/PARMS.ADI",sizeof(datapac)); +// if we do it like this.. the data dosen't matter if byte 16 or 32. +// just might have to dink with the pointers + + +bool SD_FileExists(char *filename) +{ + if (SD.exists(filename)) + return (1); + else + return (0); +} + +void SD_ParmWrite(int uploadHTTPs) +{ + int i, j; + + //FS fileLibSPIFFS = FL_SPIFFS; + + const char *filename = "/PARMS.ADI"; + if (fileLibSPIFFS.exists(filename)) + fileLibSPIFFS.remove(filename); + File SD_File = fileLibSPIFFS.open(filename, FILE_WRITE); + + Serial.println("Writing Parm file"); + + // if the file opened okay, write to it: + qualifyParms(); + + // calc CSUM + parm[0] = 0; + for (i = 1; i < (PARMSIZE - 1); i++) + parm[0] += parm[i]; + + if (SD_File) + { + Serial.println(String("Open Parms")); + + for (i = 0; i < PARMSIZE; i++) + { + SD_File.write((parm[i] >> 24) & 0xFF); + SD_File.write((parm[i] >> 16) & 0xFF); + SD_File.write((parm[i] >> 8) & 0xFF); + SD_File.write(parm[i] & 0xFF); + } + + displayText("Parm File Save"); + + // close the file: + SD_File.close(); + Serial.println("SD Close"); + restoreFault(7); + if (uploadHTTPs) + UpdateParmHTTPs(); // update cloud + } + else + { + // if the file didn't open, print an error: + Serial.println("SD Error"); + qualifyFault(1,0); + } +} + +byte SD_ParmRead(void) +{ + long ll; + byte err = 0; + int i; + + Serial.println("Reading Parm File"); + + //FS fileLibSPIFFS = FL_SPIFFS; + + // open the file for reading: + File SD_File = fileLibSPIFFS.open("/PARMS.ADI"); + if (SD_File) + { + // read from the file until there's nothing else in it: + if (SD_File.available()) + { + /* + for(i = 0;i < 48;i++) + SDinstr[i] = SD_File.read(); + memcpy(&ssid[0],&SDinstr[0],48); + for(i = 0;i < 48;i++) + SDinstr[i] = SD_File.read(); + memcpy(&pass[0],&SDinstr[0],48); + */ + + for (i = 0; i < PARMSIZE; i++) + { + parm[i] = SD_File.read() << 24; + parm[i] = parm[i] | SD_File.read() << 16; + parm[i] = parm[i] | SD_File.read() << 8; + parm[i] = parm[i] | SD_File.read(); + + Serial.println(parm[i]); + } + restoreFault(1); + } + else + { + qualifyFault(1,0); + } + + // close the file: + SD_File.close(); + + displayText("Parm File Read"); + + // calc/check CSUM + ll = 0; + for (i = 1; i < (PARMSIZE - 1); i++) + ll += parm[i]; + + if (ll != parm[0]) + { + Serial.print("CSUM ERR: "); + err = 1; + Serial.println(String(ll)); + } + else + { + + Serial.println("CSUM OK"); + Serial.print("Serial: "); + Serial.println(String(parm[64])); + } + } + else + { + // if the file didn't open, print an error: + Serial.println("SD Error"); + err = 1; + qualifyFault(1,0); + } + // delay(20); + if (err != 0) + parms.factoryReset(); + + Serial.print("SD Read "); + Serial.println(err); + return (err); +} + +void SD_RemoteParmWrite(char *filename) +{ + int i, j; + + FS fs = SD; + + Serial.print("Saving "); + Serial.println(filename); + + if (fs.exists(filename)) + fs.remove(filename); + File SD_File = fs.open(filename, FILE_WRITE); + + // if the file opened okay, write to it: + + if (SD_File) + { + Serial.println("Parms Open"); + + for (i = 0; i < PARMSIZE; i++) + { + SD_File.write((remoteParm[i] >> 24) & 0xFF); + SD_File.write((remoteParm[i] >> 16) & 0xFF); + SD_File.write((remoteParm[i] >> 8) & 0xFF); + SD_File.write(remoteParm[i] & 0xFF); + } + + displayText("Parm File Save"); + + // close the file: + SD_File.close(); + Serial.println("SD Close"); + restoreFault(7); + } + else + { + // if the file didn't open, print an error: + Serial.println("SD Error"); + qualifyFault(1,0); + } +} diff --git a/SPI_ADI.h b/SPI_ADI.h new file mode 100644 index 0000000..8ce872b --- /dev/null +++ b/SPI_ADI.h @@ -0,0 +1,21 @@ +#ifndef SPI_ADI +#define SPI_ADI + +// HSPI +// uninitalised pointers to SPI objects +SPIClass *hspi = NULL; +static const int spiClk = 1000000; // 1 MHz + +// MCP7940 +#include "TimeLib.h" +// tmElements_t dt; +// #define RTC_CS 22 +// #define RLY_CS 25 +#define IOEXP_CS 2 +#define RF_CS 15 +// #define ADC_CS 4 +// #define CAN_CS 4 + +#define IOEXP_TRIS 0x4F // was 47 +// uint8_t spi_readwrite(uint8_t reg); +#endif diff --git a/slave.ino b/slave.ino new file mode 100644 index 0000000..7489385 --- /dev/null +++ b/slave.ino @@ -0,0 +1,161 @@ +/** @package + + g2_slave.c + + Copyright(c) ADI 2000 + + Author: Dan Smith + Created: DS 9/21/2007 7:56:59 AM + change: DS 9/21/2007 7:59:34 AM +*/ + +int highestScannedBed = 0; +uint16_t lastchar; + +#include "slave.h" +int S232 = 0; +void runSlave(void) /*this runs in the slave unit*/ +{ + static uint8_t c, i; + static int16_t j, cc; + + while (Serial2.available()) // JRB 022823 + { + cc = Serial2.read(); // get the char + c = cc & 0xff; + if ((c == 0xff) && (lastchar == 0xff)) // 2 ffs in a row + { + indx = 0; + } + else + { + instr[++indx] = c; + } + lastchar = c; + + if (indx >= 16) + indx = 0; // oops overrun + if (indx >= 6) + break; // should have a command.. outta here * + }; + + /* + do { + if (!Serial2.available()) break; + cc = Serial2.read(); // get the char + + c = cc & 0xff; + if ((c == 0xff) && (instr[indx] == 0xff)) // 2 ffs in a row + { + indx = 0; + } else + { + instr[++indx] = c; + } + + if (indx >= 16) indx = 0; // oops overrun + if (indx >= 6) break; // should have a command.. outta here * + } while (1); + */ + + // instr[1] = command + // instr[2] = address + + if (indx == 6) /* we got 6 int8s after 2 ffs so it's a command */ + { + indx = 0; /*so we dont do this twice on same receive*/ + + if (S232) + { + Serial.printf("RX data: %3d, %3d, %3d, %3d,%3d, %3d ", instr[0], instr[1], instr[2], instr[3], instr[4], instr[5], instr[6]); + Serial.printf("SLV CSUM calc: %d sent: %d\n", slav_csum(), instr[6]); + } + + // request for data + if (instr[1] == 10) + { + if (S232) + Serial.printf("Slave Command Received\n"); + if (instr[2] == (100)) /* is it us? */ + if (slav_csum() == instr[6]) /*got a good cs*/ + { + wiFiOK = instr[5]; + if (S232) + Serial.printf("Slave CSUM OK\n"); + delay(80); /*a little settling time for rs485*/ + if (instr[3] != 0) + Serial.printf("\n RX Command %d\n", instr[3]); + + // bug screen commands + if (instr[3] == 1) + rfSendKey(RF_KEY_DN, myCHAN); + if (instr[3] == 2) + rfSendKey(RF_KEY_STOP, myCHAN); + if (instr[3] == 3) + rfSendKey(RF_KEY_UP, myCHAN); + + // door commands + cDOORCLOSE = 0; + cDOOROPEN = 0; + cDOORSTOP = 0; + + if (instr[3] == 4) + cDOORCLOSE = 1; + if (instr[3] == 5) + cDOOROPEN = 1; + if (instr[3] == 6) + cDOORSTOP = 1; + + instr[3] = 0; + + if (getMotorError()) + { + faultNum = 4; + faultAB = 0; + faultData = getMotorError(); + clearMotorError(); + } + + if (motorFault) + { + faultNum = 2; + faultAB = 0; + faultData = motorFault; + motorFault = 0; + } + + c_send((15 << 2), 0, faultData & 0xff, faultNum, faultData >> 8); /*nothing to report*/ + faultNum = faultData = 0; + } + } /*end of cs ok*/ + +#define VERSION 1 + + // ping to us + if (instr[1] == 0) // ping + if (instr[2] == (100)) /* is it to us?? */ + if (slav_csum() == instr[6]) /*checksum ok?*/ + { + if (S232) + Serial.printf("RX Ping Slave# %d\n", instr[2]); + if (S232) + Serial.printf("It's us! CSUM ok! respond!\n"); + delay(50); /*a little settling time for rs485*/ + + c_send(0, 0, 5, VERSION, 0); /*report version*/ + } + } + +} // run_slave + +uint16_t slav_csum(void) +{ + uint16_t sum = 0; + uint16_t i; + for (i = 1; i < 6; sum += instr[i++]) + ; + if ((sum & 255) == 255) + sum = 0; + + return (sum & 255); +}