IRremoteESP8266 icon indicating copy to clipboard operation
IRremoteESP8266 copied to clipboard

Request for RecPro / Houghton RV Air Conditioner Protocol

Open mrmees opened this issue 1 year ago • 7 comments

This is becoming a very popular model of RV air conditioner and I would love to have it integrated into IRremote.

Unit: RP-AC3501-W-KT Remote: HD01-C1

A raw dump is included along with one that has comments regarding the actions being taken.

IR Dump With Comments.txt IR Dump.txt

Edited to Hide Dump - Was not receiving commands appropriately

auto_analyze_raw_data.py output: ``` Found 267 timing entries. Potential Mark Candidates: [9296, 4624, 392] Potential Space Candidates: [20966, 20464, 6662, 4912, 2640, 966, 436] DANGER: Unusual number of mark timings! Guessing encoding type: Looks like it uses space encoding. Yay!

Guessing key value: kHdrMark = 4615 kHdrSpace = 2640 kBitMark = 363 kOneSpace = 903 kZeroSpace = 379 kLdrMark = 9296

kSpaceGap1 = 20966 kSpaceGap2 = 20464 kSpaceGap3 = 6662 kSpaceGap4 = 4912

Decoding protocol based on analysis so far:

kHdrMark+kHdrSpace+0110100001001000001010101110100000000000000000000110010000001100GAP(20464) Bits: 64 Hex: 0x68482AE80000640C (MSB first) 0x3026000017541216 (LSB first) Dec: 7514303154188477452 (MSB first) 3469460563326931478 (LSB first) Bin: 0b0110100001001000001010101110100000000000000000000110010000001100 (MSB first) 0b0011000000100110000000000000000000010111010101000001001000010110 (LSB first) kHdrMark+UNEXPECTED->GAP(6662)kLdrMark+UNEXPECTED->GAP(4912)kBitMark(UNEXPECTED)0000000000000000000101101001111000000000000000000100101000001010GAP(20966) Bits: 64 Hex: 0x0000169E00004A0A (MSB first) 0x5052000079680000 (LSB first) Dec: 24867860662794 (MSB first) 5787688473161367552 (LSB first) Bin: 0b0000000000000000000101101001111000000000000000000100101000001010 (MSB first) 0b0101000001010010000000000000000001111001011010000000000000000000 (LSB first) kHdrMark+ Total Nr. of suspected bits: 128

Generating a VERY rough code outline:

// Copyright 2020 David Conran (crankyoldgit) /// @file /// @brief Support for TBD protocol

// Supports: // Brand: TBD, Model: TODO add device and remote

#include "IRrecv.h" #include "IRsend.h" #include "IRutils.h"

// WARNING: This probably isn't directly usable. It's a guide only.

// See https://github.com/crankyoldgit/IRremoteESP8266/wiki/Adding-support-for-a-new-IR-protocol // for details of how to include this in the library. const uint16_t kHdrMark = 4615; const uint16_t kBitMark = 363; const uint16_t kHdrSpace = 2640; const uint16_t kOneSpace = 903; const uint16_t kZeroSpace = 379; const uint16_t kLdrMark = 9296; const uint16_t kSpaceGap1 = 20966; const uint16_t kSpaceGap2 = 20464; const uint16_t kSpaceGap3 = 6662; const uint16_t kSpaceGap4 = 4912; const uint16_t kFreq = 38000; // Hz. (Guessing the most common frequency.) const uint16_t kBits = 128; // Move to IRremoteESP8266.h const uint16_t kStateLength = 16; // Move to IRremoteESP8266.h const uint16_t kOverhead = 11; // DANGER: More than 64 bits detected. A uint64_t for 'data' won't work!

#if SEND_TBD // Function should be safe up to 64 bits. /// Send a formatted message. /// Status: ALPHA / Untested. /// @param[in] data containing the IR command. /// @param[in] nbits Nr. of bits to send. usually kBits /// @param[in] repeat Nr. of times the message is to be repeated. void IRsend::sendTBD(const uint64_t data, const uint16_t nbits, const uint16_t repeat) { enableIROut(kFreq); for (uint16_t r = 0; r <= repeat; r++) { uint64_t send_data = data; // Header mark(kHdrMark); space(kHdrSpace); // Data Section #1 // e.g. data = 0x68482AE80000640C, nbits = 64 sendData(kBitMark, kOneSpace, kBitMark, kZeroSpace, send_data, 64, true); send_data >>= 64; // Footer mark(kBitMark); space(kSpaceGap); // Header mark(kHdrMark); // Gap space(kSpaceGap); // Leader mark(kLdrMark); // Gap space(kSpaceGap); // Data Section #2 // e.g. data = 0x169E00004A0A, nbits = 64 sendData(kBitMark, kOneSpace, kBitMark, kZeroSpace, send_data, 64, true); send_data >>= 64; // Footer mark(kBitMark); space(kSpaceGap); // Header mark(kHdrMark); space(kDefaultMessageGap); // A 100% made up guess of the gap between messages. } } #endif // SEND_TBD

#if SEND_TBD // Alternative >64bit function to send TBD messages // Function should be safe over 64 bits. /// Send a formatted message. /// Status: ALPHA / Untested. /// @param[in] data An array of bytes containing the IR command. /// It is assumed to be in MSB order for this code. /// e.g. /// @code /// uint8_t data[kStateLength] = {0x68, 0x48, 0x2A, 0xE8, 0x00, 0x00, 0x64, 0x0C, 0x00, 0x00, 0x16, 0x9E, 0x00, 0x00, 0x4A, 0x0A}; /// @endcode /// @param[in] nbytes Nr. of bytes of data in the array. (>=kStateLength) /// @param[in] repeat Nr. of times the message is to be repeated. void IRsend::sendTBD(const uint8_t data[], const uint16_t nbytes, const uint16_t repeat) { for (uint16_t r = 0; r <= repeat; r++) { uint16_t pos = 0; // Data Section #1 // e.g. // bits = 64; bytes = 8; // *(data + pos) = {0x68, 0x48, 0x2A, 0xE8, 0x00, 0x00, 0x64, 0x0C}; sendGeneric(kHdrMark, kHdrSpace, kBitMark, kOneSpace, kBitMark, kZeroSpace, kBitMark, kSpaceGap, data + pos, 8, // Bytes kFreq, true, kNoRepeat, kDutyDefault); pos += 8; // Adjust by how many bytes of data we sent // Data Section #2 // e.g. // bits = 64; bytes = 8; // *(data + pos) = {0x00, 0x00, 0x16, 0x9E, 0x00, 0x00, 0x4A, 0x0A}; sendGeneric(kLdrMark, 0, kBitMark, kOneSpace, kBitMark, kZeroSpace, kBitMark, kSpaceGap, data + pos, 8, // Bytes kFreq, true, kNoRepeat, kDutyDefault); pos += 8; // Adjust by how many bytes of data we sent } } #endif // SEND_TBD

// DANGER: More than 64 bits detected. A uint64_t for 'data' won't work! #if DECODE_TBD // Function should be safe up to 64 bits. /// Decode the supplied message. /// Status: ALPHA / Untested. /// @param[in,out] results Ptr to the data to decode & where to store the decode /// @param[in] offset The starting index to use when attempting to decode the /// raw data. Typically/Defaults to kStartOffset. /// @param[in] nbits The number of data bits to expect. /// @param[in] strict Flag indicating if we should perform strict matching. /// @return A boolean. True if it can decode it, false if it can't. bool IRrecv::decodeTBD(decode_results *results, uint16_t offset, const uint16_t nbits, const bool strict) { if (results->rawlen < 2 * nbits + kOverhead - offset) return false; // Too short a message to match. if (strict && nbits != kBits) return false;

uint64_t data = 0; match_result_t data_result;

// Header if (!matchMark(results->rawbuf[offset++], kHdrMark)) return false; if (!matchSpace(results->rawbuf[offset++], kHdrSpace)) return false;

// Data Section #1 // e.g. data_result.data = 0x68482AE80000640C, nbits = 64 data_result = matchData(&(results->rawbuf[offset]), 64, kBitMark, kOneSpace, kBitMark, kZeroSpace); offset += data_result.used; if (data_result.success == false) return false; // Fail data <<= 64; // Make room for the new bits of data. data |= data_result.data;

// Footer if (!matchMark(results->rawbuf[offset++], kBitMark)) return false; if (!matchSpace(results->rawbuf[offset++], kSpaceGap)) return false;

// Header if (!matchMark(results->rawbuf[offset++], kHdrMark)) return false;

// Gap if (!matchSpace(results->rawbuf[offset++], kSpaceGap)) return false;

// Leader if (!matchMark(results->rawbuf[offset++], kLdrMark)) return false;

// Gap if (!matchSpace(results->rawbuf[offset++], kSpaceGap)) return false;

// Data Section #2 // e.g. data_result.data = 0x169E00004A0A, nbits = 64 data_result = matchData(&(results->rawbuf[offset]), 64, kBitMark, kOneSpace, kBitMark, kZeroSpace); offset += data_result.used; if (data_result.success == false) return false; // Fail data <<= 64; // Make room for the new bits of data. data |= data_result.data;

// Footer if (!matchMark(results->rawbuf[offset++], kBitMark)) return false; if (!matchSpace(results->rawbuf[offset++], kSpaceGap)) return false;

// Header if (!matchMark(results->rawbuf[offset++], kHdrMark)) return false;

// Success results->decode_type = decode_type_t::TBD; results->bits = nbits; results->value = data; results->command = 0; results->address = 0; return true; } #endif // DECODE_TBD

#if DECODE_TBD // Function should be safe over 64 bits. /// Decode the supplied message. /// Status: ALPHA / Untested. /// @param[in,out] results Ptr to the data to decode & where to store the decode /// @param[in] offset The starting index to use when attempting to decode the /// raw data. Typically/Defaults to kStartOffset. /// @param[in] nbits The number of data bits to expect. /// @param[in] strict Flag indicating if we should perform strict matching. /// @return A boolean. True if it can decode it, false if it can't. bool IRrecv::decodeTBD(decode_results *results, uint16_t offset, const uint16_t nbits, const bool strict) { if (results->rawlen < 2 * nbits + kOverhead - offset) return false; // Too short a message to match. if (strict && nbits != kBits) return false;

uint16_t pos = 0; uint16_t used = 0;

// Data Section #1 // e.g. // bits = 64; bytes = 8; // *(results->state + pos) = {0x68, 0x48, 0x2A, 0xE8, 0x00, 0x00, 0x64, 0x0C}; used = matchGeneric(results->rawbuf + offset, results->state + pos, results->rawlen - offset, 64, kHdrMark, kHdrSpace, kBitMark, kOneSpace, kBitMark, kZeroSpace, kBitMark, kSpaceGap, true); if (used == 0) return false; // We failed to find any data. offset += used; // Adjust for how much of the message we read. pos += 8; // Adjust by how many bytes of data we read

// Data Section #2 // e.g. // bits = 64; bytes = 8; // *(results->state + pos) = {0x00, 0x00, 0x16, 0x9E, 0x00, 0x00, 0x4A, 0x0A}; used = matchGeneric(results->rawbuf + offset, results->state + pos, results->rawlen - offset, 64, kLdrMark, 0, kBitMark, kOneSpace, kBitMark, kZeroSpace, kBitMark, kSpaceGap, true); if (used == 0) return false; // We failed to find any data. offset += used; // Adjust for how much of the message we read. pos += 8; // Adjust by how many bytes of data we read

// Success results->decode_type = decode_type_t::TBD; results->bits = nbits; return true; } #endif // DECODE_TBD





</p>
</details> 

mrmees avatar Jun 29 '23 23:06 mrmees

Please start with raw values, from the lowest temperature, to the highest, one step at a time.

NiKiZe avatar Jun 30 '23 10:06 NiKiZe

So I think I've got it pretty well worked out. Spent a really inappropriate amount of time going through the signals and have a good grasp on everything that's happening with the exception of one unmarked button in the remote. The signal is recognized as Carrier-128 protocol, but it does not seem to follow the same breakdown as far as I can tell from reading through the Carrier stuff.

I created a 3 sheet spreadsheet that can be accessed here: https://1drv.ms/x/s!Alz2mRtd8II7itATCDTB9I0j-8cZIg?e=tB9whg

  • Sheet "Data Import" - Raw bit values imported from serial dump / power query.
  • Data Analysis - Visual representation / decoding of data from dump.
  • Byte Breakdown - Byte by byte explanation of analysis results.

I think it's good to go based on my testing. Byte 11 is a little weird, but only when I press an unmarked button on the remote control. It doesn't look like any other manufacturer models use it, so I'm thinking it must be leftover junk from whatever design they stole it from originally. The information bounces all over the place from hex to binary to decimal stored as hex, so it was fn to figure out.

Let me know if there's anything else that would help to get this into the project.

mrmees avatar Jul 03 '23 21:07 mrmees

Yes decoding protocols is a pain :D For that reason there is a FAQ how we go about it.

It is great effort to do what you have done, but we need to go back a bit.

Please post the raw collection of timing data for your full temperature range, the lowest to the highest, one step at a time. It is intended to be posted as text. The code can then be generated from that, including test cases.

This will allow to create basic support for the protocol, and with the most reasonable endiness. After that comes decoding the actual data. - and that depends on how the structure comes out after the previous step.

NiKiZe avatar Jul 04 '23 06:07 NiKiZe

Here is the result of resetting the remote to defaults and going from minimum to maximum temperature (in Celsius).

Timestamp : 000021.528
Library   : v2.8.5

Protocol  : CARRIER_AC128
Code      : 0x16220412101016B000000800000016F0 (128 Bits)
uint16_t rawData[267] = {4574, 2690,  362, 378,  366, 892,  358, 896,  360, 384,  360, 894,  360, 388,  358, 382,  366, 384,  366, 384,  360, 894,  362, 380,  364, 386,  362, 380,  366, 892,  362, 382,  362, 382,  366, 380,  368, 384,  362, 894,  360, 384,  366, 340,  406, 388,  360, 382,  366, 384,  362, 332,  412, 892,  362, 382,  340, 412,  358, 898,  358, 382,  364, 384,  366, 382,  364, 388,  362, 388,  358, 380,  368, 388,  362, 892,  360, 384,  362, 388,  362, 384,  366, 380,  368, 380,  366, 384,  366, 380,  364, 894,  360, 380,  366, 386,  360, 390,  358, 384,  362, 892,  358, 892,  360, 382,  364, 894,  360, 384,  364, 382,  366, 384,  362, 342,  408, 388,  360, 388,  362, 382,  366, 894,  358, 892,  362, 380,  366, 892,  360, 20488,  4582, 6696,  9296, 4912,  358, 384,  364, 386,  358, 386,  368, 384,  362, 388,  358, 388,  362, 382,  366, 388,  360, 388,  360, 388,  360, 388,  386, 344,  376, 390,  358, 388,  360, 388,  358, 388,  360, 388,  360, 386,  364, 382,  362, 896,  360, 388,  358, 390,  360, 384,  338, 412,  360, 390,  358, 388,  360, 390,  358, 388,  358, 388,  362, 388,  332, 414,  360, 388,  358, 388,  362, 388,  360, 388,  360, 388,  336, 410,  362, 388,  360, 384,  340, 410,  360, 388,  360, 386,  364, 388,  364, 382,  362, 386,  360, 388,  360, 388,  358, 388,  360, 384,  362, 892,  362, 892,  360, 386,  362, 890,  366, 384,  358, 388,  360, 390,  358, 388,  360, 388,  360, 388,  360, 388,  360, 892,  360, 892,  358, 896,  358, 894,  358, 20982,  4578};  // CARRIER_AC128
uint8_t state[16] = {0x16, 0x22, 0x04, 0x12, 0x10, 0x10, 0x16, 0xB0, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0xF0};


Timestamp : 000028.527
Library   : v2.8.5

Protocol  : CARRIER_AC128
Code      : 0x16220412101017C000000800000023D0 (128 Bits)
uint16_t rawData[267] = {4582, 2692,  362, 378,  370, 890,  362, 890,  362, 388,  362, 888,  360, 384,  366, 382,  368, 382,  366, 384,  358, 896,  362, 380,  368, 384,  362, 340,  408, 894,  358, 384,  362, 382,  368, 384,  362, 384,  362, 894,  360, 386,  362, 386,  360, 388,  360, 388,  360, 338,  410, 388,  358, 894,  360, 388,  358, 384,  362, 894,  360, 384,  362, 384,  362, 384,  366, 382,  366, 384,  362, 384,  364, 334,  386, 918,  362, 384,  336, 414,  358, 388,  360, 386,  362, 384,  362, 384,  362, 390,  360, 890,  360, 390,  358, 380,  366, 384,  362, 892,  334, 920,  358, 894,  358, 344,  402, 894,  334, 414,  358, 384,  340, 414,  334, 412,  334, 414,  358, 388,  360, 380,  340, 414,  358, 386,  338, 918,  358, 894,  358, 20482,  4580, 6696,  9296, 4912,  356, 390,  334, 412,  358, 390,  338, 410,  360, 388,  360, 382,  366, 380,  366, 384,  338, 412,  360, 388,  360, 388,  360, 386,  364, 388,  360, 388,  358, 388,  360, 390,  356, 392,  360, 386,  334, 412,  360, 894,  358, 392,  358, 388,  358, 390,  358, 390,  358, 386,  362, 388,  358, 388,  360, 386,  360, 390,  358, 390,  360, 388,  358, 388,  360, 388,  360, 388,  360, 390,  360, 388,  358, 388,  362, 388,  358, 388,  358, 390,  358, 388,  360, 390,  358, 390,  358, 390,  358, 388,  362, 390,  356, 390,  356, 390,  358, 894,  358, 896,  356, 390,  358, 390,  356, 388,  358, 898,  358, 390,  356, 392,  358, 388,  358, 390,  356, 392,  356, 390,  356, 900,  354, 390,  356, 896,  356, 896,  358, 20998,  4598};  // CARRIER_AC128
uint8_t state[16] = {0x16, 0x22, 0x04, 0x12, 0x10, 0x10, 0x17, 0xC0, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0xD0};


Timestamp : 000030.527
Library   : v2.8.5

Protocol  : CARRIER_AC128
Code      : 0x16220412101018D000000800000025F0 (128 Bits)
uint16_t rawData[267] = {4576, 2688,  360, 384,  364, 892,  362, 890,  362, 380,  366, 892,  360, 384,  364, 386,  364, 380,  370, 380,  366, 894,  358, 380,  366, 384,  366, 380,  366, 894,  362, 382,  364, 382,  366, 384,  366, 388,  358, 894,  360, 384,  366, 384,  362, 384,  366, 380,  366, 338,  410, 384,  362, 892,  362, 382,  364, 384,  362, 892,  360, 386,  364, 382,  364, 388,  360, 384,  362, 384,  366, 388,  360, 386,  336, 916,  360, 388,  360, 388,  362, 380,  366, 384,  366, 384,  362, 382,  366, 384,  362, 892,  362, 386,  336, 412,  336, 414,  358, 382,  342, 414,  358, 380,  366, 894,  360, 896,  360, 384,  366, 384,  362, 384,  366, 386,  362, 384,  362, 382,  364, 382,  366, 892,  360, 386,  362, 892,  360, 892,  362, 20486,  4556, 6718,  9298, 4912,  360, 386,  360, 390,  362, 384,  362, 384,  362, 388,  360, 390,  360, 382,  366, 384,  366, 388,  358, 388,  362, 388,  358, 388,  362, 388,  358, 388,  360, 390,  360, 388,  360, 388,  360, 388,  360, 388,  358, 894,  358, 390,  360, 388,  360, 388,  358, 388,  358, 390,  360, 388,  358, 390,  336, 412,  360, 388,  358, 390,  358, 388,  362, 386,  338, 412,  362, 386,  362, 386,  356, 390,  362, 388,  360, 388,  362, 388,  358, 388,  360, 388,  360, 388,  362, 388,  360, 388,  358, 390,  360, 388,  360, 386,  360, 388,  360, 894,  358, 388,  360, 894,  358, 388,  360, 386,  360, 896,  360, 388,  358, 390,  358, 390,  358, 388,  362, 388,  358, 388,  360, 892,  362, 890,  362, 894,  358, 894,  360, 21004,  4600};  // CARRIER_AC128
uint8_t state[16] = {0x16, 0x22, 0x04, 0x12, 0x10, 0x10, 0x18, 0xD0, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x25, 0xF0};


Timestamp : 000033.027
Library   : v2.8.5

Protocol  : CARRIER_AC128
Code      : 0x16220412101019E00000080000002710 (128 Bits)
uint16_t rawData[267] = {4554, 2710,  362, 378,  370, 892,  362, 894,  360, 380,  370, 890,  362, 380,  366, 384,  364, 386,  362, 380,  368, 892,  358, 388,  362, 388,  362, 384,  362, 892,  382, 364,  384, 342,  384, 384,  366, 378,  368, 894,  360, 384,  366, 382,  366, 388,  362, 388,  360, 384,  364, 384,  362, 892,  360, 388,  360, 384,  360, 894,  362, 382,  364, 388,  360, 386,  362, 384,  362, 386,  360, 384,  388, 362,  362, 890,  360, 386,  360, 386,  362, 386,  360, 390,  356, 388,  358, 390,  360, 386,  360, 892,  358, 388,  358, 388,  360, 388,  360, 892,  358, 390,  358, 390,  358, 892,  360, 892,  360, 388,  336, 414,  332, 414,  358, 388,  336, 414,  360, 386,  360, 388,  358, 388,  360, 894,  358, 894,  334, 918,  362, 20494,  4578, 6698,  9298, 4912,  360, 388,  358, 390,  358, 390,  362, 386,  360, 388,  360, 390,  360, 388,  360, 390,  360, 388,  358, 388,  360, 390,  356, 392,  360, 388,  358, 392,  356, 390,  358, 388,  358, 392,  356, 390,  358, 388,  358, 898,  354, 392,  358, 390,  356, 390,  358, 390,  358, 390,  356, 396,  356, 390,  356, 414,  336, 390,  356, 392,  356, 394,  356, 414,  334, 394,  354, 392,  356, 414,  334, 394,  354, 414,  332, 414,  334, 394,  356, 392,  354, 416,  334, 414,  332, 414,  332, 416,  334, 414,  332, 416,  334, 414,  334, 414,  334, 918,  334, 918,  334, 920,  334, 414,  334, 414,  332, 922,  332, 414,  334, 414,  332, 418,  332, 416,  330, 416,  330, 416,  330, 924,  330, 418,  330, 416,  332, 416,  332, 21028,  4574};  // CARRIER_AC128
uint8_t state[16] = {0x16, 0x22, 0x04, 0x12, 0x10, 0x10, 0x19, 0xE0, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x27, 0x10};


Timestamp : 000035.025
Library   : v2.8.5

Protocol  : CARRIER_AC128
Code      : 0x16220412101020600000080000002930 (128 Bits)
uint16_t rawData[267] = {4570, 2688,  358, 384,  366, 892,  366, 886,  336, 410,  364, 890,  360, 380,  370, 380,  366, 380,  366, 382,  366, 892,  360, 332,  390, 410,  362, 382,  366, 892,  360, 384,  364, 382,  364, 384,  366, 388,  360, 894,  358, 384,  364, 338,  412, 386,  358, 388,  362, 382,  366, 382,  364, 892,  360, 386,  362, 382,  366, 892,  358, 382,  364, 384,  362, 388,  362, 388,  360, 386,  360, 384,  364, 388,  360, 892,  360, 384,  364, 388,  358, 384,  366, 382,  366, 386,  362, 380,  356, 394,  364, 892,  362, 382,  366, 384,  364, 390,  358, 384,  362, 386,  364, 388,  360, 384,  364, 382,  364, 892,  360, 384,  366, 388,  358, 388,  364, 380,  364, 386,  364, 386,  362, 388,  360, 892,  360, 892,  362, 382,  364, 20486,  4578, 6696,  9300, 4912,  360, 388,  358, 388,  360, 390,  356, 390,  362, 386,  362, 386,  358, 390,  336, 412,  362, 386,  362, 386,  360, 388,  358, 390,  360, 388,  362, 388,  358, 388,  362, 386,  360, 388,  358, 390,  358, 388,  360, 894,  358, 390,  360, 388,  358, 390,  358, 388,  360, 390,  360, 388,  358, 388,  360, 388,  360, 386,  362, 388,  358, 388,  358, 388,  358, 390,  360, 386,  362, 388,  358, 390,  360, 388,  360, 388,  360, 388,  360, 390,  358, 390,  356, 390,  360, 388,  360, 390,  360, 388,  360, 388,  358, 390,  358, 388,  358, 898,  356, 390,  358, 388,  358, 896,  360, 388,  358, 894,  358, 390,  360, 390,  356, 392,  358, 388,  358, 392,  354, 392,  358, 894,  358, 896,  358, 414,  334, 390,  356, 20998,  4600};  // CARRIER_AC128
uint8_t state[16] = {0x16, 0x22, 0x04, 0x12, 0x10, 0x10, 0x20, 0x60, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x29, 0x30};


Timestamp : 000037.026
Library   : v2.8.5

Protocol  : CARRIER_AC128
Code      : 0x162204121010217000000800000031C0 (128 Bits)
uint16_t rawData[267] = {4576, 2692,  358, 380,  366, 892,  360, 892,  362, 380,  366, 894,  360, 390,  358, 384,  364, 380,  368, 382,  366, 892,  362, 382,  364, 384,  362, 382,  366, 894,  362, 378,  370, 384,  362, 380,  366, 380,  370, 892,  360, 386,  362, 380,  366, 382,  368, 382,  364, 386,  364, 382,  366, 892,  360, 384,  366, 378,  368, 892,  360, 336,  412, 380,  366, 384,  364, 338,  410, 384,  366, 380,  364, 384,  366, 892,  360, 382,  366, 382,  366, 388,  362, 378,  368, 384,  364, 384,  364, 380,  366, 894,  358, 384,  366, 380,  368, 378,  366, 892,  360, 384,  366, 380,  366, 380,  364, 384,  366, 888,  366, 380,  366, 380,  366, 384,  366, 382,  366, 382,  364, 388,  360, 892,  360, 892,  362, 890,  362, 384,  362, 20492,  4578, 6700,  9300, 4908,  386, 340,  384, 384,  364, 388,  362, 384,  364, 382,  364, 384,  364, 388,  360, 386,  368, 378,  362, 384,  366, 386,  360, 390,  360, 384,  362, 384,  366, 388,  360, 388,  360, 386,  362, 388,  360, 382,  366, 894,  360, 388,  358, 384,  364, 388,  362, 386,  358, 390,  360, 388,  358, 390,  360, 388,  360, 386,  362, 384,  338, 412,  360, 390,  358, 386,  336, 414,  336, 414,  360, 386,  362, 388,  358, 390,  336, 410,  336, 412,  364, 384,  362, 388,  358, 388,  362, 388,  358, 388,  360, 386,  362, 388,  358, 388,  360, 894,  362, 388,  358, 388,  360, 388,  360, 894,  358, 892,  360, 388,  358, 390,  358, 388,  360, 388,  358, 388,  360, 388,  360, 388,  358, 388,  360, 892,  362, 894,  358, 20998,  4578};  // CARRIER_AC128
uint8_t state[16] = {0x16, 0x22, 0x04, 0x12, 0x10, 0x10, 0x21, 0x70, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x31, 0xC0};


Timestamp : 000039.026
Library   : v2.8.5

Protocol  : CARRIER_AC128
Code      : 0x162204121010228000000800000033E0 (128 Bits)
uint16_t rawData[267] = {4550, 2710,  362, 332,  412, 890,  364, 888,  362, 380,  366, 892,  362, 388,  360, 380,  368, 382,  366, 380,  364, 896,  358, 380,  366, 380,  366, 384,  364, 890,  338, 410,  362, 386,  362, 332,  414, 380,  366, 892,  360, 382,  366, 380,  368, 380,  368, 380,  366, 380,  366, 380,  366, 894,  358, 384,  362, 384,  336, 918,  362, 378,  370, 380,  368, 382,  364, 384,  366, 384,  362, 380,  366, 386,  360, 892,  360, 388,  362, 380,  366, 380,  366, 382,  364, 384,  362, 388,  358, 384,  366, 894,  358, 382,  366, 382,  364, 382,  366, 384,  362, 892,  362, 382,  366, 380,  366, 382,  366, 896,  358, 384,  364, 382,  364, 386,  362, 382,  366, 382,  366, 336,  410, 384,  362, 384,  364, 382,  366, 894,  358, 20494,  4582, 6694,  9298, 4912,  358, 384,  362, 388,  362, 388,  360, 390,  360, 382,  366, 384,  362, 388,  360, 390,  358, 388,  360, 388,  358, 388,  358, 386,  336, 414,  358, 388,  360, 390,  360, 388,  360, 384,  336, 414,  360, 386,  338, 918,  334, 414,  358, 390,  360, 388,  336, 410,  362, 388,  360, 388,  360, 388,  358, 390,  356, 390,  360, 388,  362, 388,  358, 388,  358, 388,  360, 388,  360, 388,  360, 388,  360, 388,  360, 390,  358, 388,  360, 390,  360, 388,  360, 390,  358, 388,  358, 390,  358, 390,  358, 388,  362, 386,  360, 388,  358, 894,  360, 894,  360, 388,  358, 390,  360, 894,  358, 894,  358, 392,  358, 386,  360, 388,  360, 390,  360, 388,  362, 388,  358, 388,  360, 892,  360, 892,  360, 894,  358, 21000,  4578};  // CARRIER_AC128
uint8_t state[16] = {0x16, 0x22, 0x04, 0x12, 0x10, 0x10, 0x22, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x33, 0xE0};


Timestamp : 000041.526
Library   : v2.8.5

Protocol  : CARRIER_AC128
Code      : 0x16220412101023900000080000003610 (128 Bits)
uint16_t rawData[267] = {4572, 2688,  362, 372,  374, 894,  362, 890,  362, 378,  366, 894,  362, 380,  366, 384,  364, 336,  412, 382,  364, 896,  358, 388,  362, 380,  366, 380,  366, 892,  364, 384,  362, 382,  366, 382,  364, 386,  364, 890,  362, 382,  366, 388,  360, 388,  358, 390,  360, 384,  364, 380,  366, 892,  360, 384,  366, 276,  470, 894,  360, 334,  412, 386,  362, 382,  366, 336,  412, 338,  410, 384,  364, 386,  362, 896,  356, 388,  362, 388,  358, 384,  366, 386,  360, 388,  362, 384,  362, 382,  366, 890,  336, 414,  360, 384,  362, 342,  404, 894,  360, 894,  358, 384,  366, 388,  358, 388,  362, 892,  360, 388,  358, 388,  362, 388,  356, 394,  356, 390,  358, 390,  358, 894,  362, 388,  358, 388,  360, 892,  358, 20496,  4578, 6698,  9300, 4912,  360, 388,  358, 388,  360, 386,  362, 388,  358, 388,  358, 388,  360, 390,  356, 390,  360, 386,  360, 388,  360, 386,  360, 390,  358, 388,  332, 414,  358, 392,  354, 392,  358, 388,  358, 390,  356, 388,  358, 894,  358, 390,  358, 386,  386, 362,  360, 388,  358, 390,  358, 388,  358, 388,  358, 392,  356, 390,  358, 388,  358, 388,  358, 392,  358, 388,  358, 390,  356, 390,  358, 388,  358, 390,  356, 392,  358, 390,  356, 392,  354, 392,  356, 392,  356, 390,  356, 390,  358, 392,  356, 390,  358, 388,  358, 390,  356, 392,  356, 896,  356, 896,  356, 390,  356, 918,  334, 920,  334, 392,  356, 392,  358, 414,  332, 414,  332, 414,  334, 414,  332, 922,  332, 412,  336, 414,  336, 412,  334, 21022,  4574};  // CARRIER_AC128
uint8_t state[16] = {0x16, 0x22, 0x04, 0x12, 0x10, 0x10, 0x23, 0x90, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x36, 0x10};


Timestamp : 000043.526
Library   : v2.8.5

Protocol  : CARRIER_AC128
Code      : 0x16220412101024A00000080000003830 (128 Bits)
uint16_t rawData[267] = {4576, 2686,  362, 378,  370, 890,  360, 892,  360, 380,  366, 892,  360, 340,  406, 388,  360, 340,  410, 382,  364, 892,  358, 390,  358, 388,  360, 384,  362, 894,  362, 384,  364, 382,  364, 388,  360, 384,  366, 892,  358, 390,  360, 390,  384, 342,  382, 384,  362, 384,  362, 388,  360, 896,  360, 388,  358, 386,  360, 894,  362, 386,  360, 388,  362, 388,  360, 384,  360, 392,  358, 388,  336, 410,  360, 894,  360, 386,  338, 414,  358, 392,  354, 392,  334, 416,  360, 384,  340, 412,  356, 896,  336, 410,  358, 390,  362, 386,  360, 388,  360, 386,  362, 892,  358, 388,  362, 386,  360, 894,  358, 388,  360, 388,  362, 388,  358, 388,  336, 414,  358, 388,  360, 388,  362, 892,  360, 388,  362, 890,  360, 20492,  4578, 6700,  9300, 4912,  358, 388,  358, 390,  360, 388,  356, 388,  362, 388,  358, 388,  358, 392,  356, 392,  356, 390,  358, 392,  354, 390,  356, 392,  356, 390,  358, 390,  356, 392,  354, 392,  356, 390,  358, 392,  354, 390,  358, 918,  334, 392,  358, 388,  358, 392,  354, 392,  358, 390,  358, 392,  356, 414,  334, 414,  334, 414,  334, 390,  358, 412,  334, 414,  332, 416,  332, 414,  334, 416,  334, 414,  334, 414,  334, 414,  334, 416,  332, 416,  332, 414,  332, 418,  332, 414,  332, 416,  334, 414,  334, 416,  330, 416,  332, 414,  334, 416,  332, 416,  332, 414,  332, 920,  332, 922,  332, 920,  332, 414,  332, 416,  330, 416,  334, 416,  330, 416,  332, 416,  332, 920,  332, 922,  330, 418,  330, 416,  332, 21022,  4570};  // CARRIER_AC128
uint8_t state[16] = {0x16, 0x22, 0x04, 0x12, 0x10, 0x10, 0x24, 0xA0, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x30};


Timestamp : 000045.526
Library   : v2.8.5

Protocol  : CARRIER_AC128
Code      : 0x16220412101025B000000800000040C0 (128 Bits)
uint16_t rawData[267] = {4574, 2688,  360, 380,  366, 892,  362, 888,  362, 380,  366, 894,  362, 380,  364, 382,  366, 382,  364, 382,  366, 892,  362, 380,  366, 334,  412, 388,  360, 892,  360, 338,  412, 384,  362, 338,  408, 388,  360, 892,  360, 380,  368, 386,  358, 384,  366, 382,  366, 384,  362, 384,  362, 892,  360, 386,  364, 382,  362, 896,  358, 382,  366, 378,  368, 388,  360, 384,  364, 384,  362, 388,  360, 382,  362, 892,  360, 386,  362, 388,  362, 382,  364, 386,  362, 388,  360, 384,  366, 386,  358, 894,  362, 384,  360, 386,  362, 384,  362, 892,  360, 384,  362, 896,  358, 384,  362, 388,  360, 892,  360, 384,  336, 414,  358, 390,  356, 390,  358, 388,  336, 412,  356, 894,  336, 918,  360, 388,  358, 892,  360, 20482,  4582, 6700,  9298, 4910,  362, 388,  360, 388,  360, 388,  358, 390,  360, 390,  358, 388,  360, 390,  358, 388,  358, 388,  360, 388,  360, 388,  362, 388,  358, 390,  360, 388,  358, 388,  358, 390,  358, 392,  356, 392,  358, 388,  358, 896,  358, 390,  358, 390,  358, 394,  356, 388,  358, 390,  358, 390,  358, 390,  358, 392,  356, 390,  358, 390,  358, 390,  356, 390,  358, 392,  358, 388,  358, 392,  356, 392,  358, 392,  354, 392,  358, 390,  356, 416,  332, 390,  358, 390,  358, 392,  354, 392,  356, 416,  332, 392,  354, 392,  358, 414,  336, 412,  334, 414,  332, 394,  356, 414,  334, 414,  336, 414,  332, 920,  334, 416,  332, 414,  334, 416,  332, 414,  332, 414,  336, 414,  334, 412,  334, 922,  332, 918,  334, 21024,  4574};  // CARRIER_AC128
uint8_t state[16] = {0x16, 0x22, 0x04, 0x12, 0x10, 0x10, 0x25, 0xB0, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0xC0};


Timestamp : 000048.027
Library   : v2.8.5

Protocol  : CARRIER_AC128
Code      : 0x16220412101026C000000800000042E0 (128 Bits)
uint16_t rawData[267] = {4578, 2688,  362, 384,  362, 894,  360, 892,  362, 380,  366, 894,  362, 380,  366, 382,  366, 384,  366, 380,  366, 894,  358, 340,  388, 410,  358, 380,  368, 894,  334, 412,  360, 386,  362, 382,  342, 410,  362, 890,  362, 384,  364, 390,  360, 386,  362, 332,  388, 412,  360, 380,  370, 890,  362, 388,  362, 338,  410, 890,  360, 382,  366, 380,  368, 384,  364, 384,  364, 384,  364, 388,  362, 382,  338, 920,  362, 384,  362, 384,  366, 338,  410, 384,  362, 384,  366, 336,  410, 380,  366, 896,  360, 384,  362, 384,  362, 388,  362, 382,  366, 892,  360, 892,  362, 384,  362, 380,  366, 896,  358, 384,  364, 338,  410, 388,  360, 388,  360, 388,  362, 382,  364, 340,  408, 384,  362, 894,  358, 896,  362, 20490,  4580, 6698,  9300, 4908,  362, 388,  334, 414,  358, 384,  366, 384,  362, 390,  334, 414,  332, 414,  336, 412,  336, 414,  334, 412,  364, 382,  338, 412,  338, 412,  358, 388,  362, 388,  336, 410,  360, 388,  360, 388,  360, 388,  360, 894,  360, 386,  360, 388,  362, 386,  362, 388,  358, 388,  362, 388,  360, 388,  360, 388,  360, 390,  360, 384,  364, 386,  362, 388,  358, 388,  358, 390,  360, 388,  360, 388,  360, 386,  362, 388,  358, 388,  360, 388,  360, 390,  356, 390,  360, 388,  360, 388,  358, 388,  360, 388,  360, 388,  362, 388,  358, 388,  360, 892,  358, 390,  360, 388,  360, 388,  358, 388,  358, 896,  358, 388,  358, 390,  358, 390,  358, 388,  362, 390,  358, 388,  358, 894,  358, 894,  358, 896,  358, 21000,  4604};  // CARRIER_AC128
uint8_t state[16] = {0x16, 0x22, 0x04, 0x12, 0x10, 0x10, 0x26, 0xC0, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x42, 0xE0};


Timestamp : 000050.527
Library   : v2.8.5

Protocol  : CARRIER_AC128
Code      : 0x16220412101027D00000080000004510 (128 Bits)
uint16_t rawData[267] = {4580, 2686,  360, 380,  366, 892,  360, 892,  360, 384,  362, 894,  362, 380,  366, 380,  368, 380,  362, 340,  384, 914,  362, 382,  364, 384,  366, 380,  366, 892,  360, 384,  366, 388,  334, 412,  360, 386,  364, 892,  360, 390,  360, 384,  364, 382,  366, 384,  366, 380,  370, 380,  362, 896,  360, 388,  358, 386,  366, 892,  358, 384,  362, 384,  364, 386,  362, 384,  366, 386,  334, 414,  386, 336,  388, 892,  360, 382,  366, 384,  362, 334,  414, 384,  364, 384,  364, 384,  364, 380,  364, 896,  358, 386,  362, 388,  362, 384,  362, 894,  362, 890,  360, 894,  360, 384,  364, 384,  364, 894,  358, 384,  366, 384,  362, 384,  364, 388,  360, 382,  366, 388,  360, 892,  360, 386,  362, 894,  360, 894,  360, 20492,  4580, 6696,  9298, 4908,  362, 386,  336, 412,  360, 388,  336, 414,  360, 388,  360, 380,  368, 388,  360, 388,  362, 388,  360, 386,  358, 354,  396, 388,  360, 390,  362, 386,  358, 392,  358, 390,  358, 390,  358, 388,  358, 384,  362, 896,  358, 390,  358, 390,  360, 388,  358, 388,  360, 390,  358, 388,  334, 414,  358, 390,  358, 388,  358, 388,  360, 390,  358, 388,  358, 390,  360, 386,  360, 388,  360, 388,  360, 388,  360, 390,  356, 392,  358, 388,  362, 388,  360, 388,  358, 388,  360, 388,  360, 386,  362, 388,  358, 388,  360, 390,  358, 894,  358, 388,  358, 898,  358, 390,  358, 416,  332, 388,  358, 898,  354, 390,  360, 390,  358, 392,  356, 392,  356, 390,  356, 922,  334, 390,  356, 392,  356, 390,  358, 21000,  4600};  // CARRIER_AC128
uint8_t state[16] = {0x16, 0x22, 0x04, 0x12, 0x10, 0x10, 0x27, 0xD0, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x45, 0x10};


Timestamp : 000053.526
Library   : v2.8.5

Protocol  : CARRIER_AC128
Code      : 0x16220412101028E00000080000004840 (128 Bits)
uint16_t rawData[267] = {4576, 2696,  360, 384,  364, 892,  358, 896,  362, 388,  360, 892,  362, 384,  360, 386,  366, 380,  368, 380,  366, 894,  334, 412,  360, 384,  366, 380,  366, 894,  364, 380,  362, 394,  358, 382,  364, 382,  366, 892,  360, 384,  364, 382,  368, 388,  358, 386,  360, 384,  366, 384,  360, 896,  362, 382,  366, 382,  366, 894,  358, 388,  360, 390,  358, 382,  366, 384,  364, 386,  362, 342,  406, 380,  366, 892,  362, 386,  362, 388,  362, 384,  364, 384,  366, 382,  366, 386,  362, 382,  364, 894,  360, 388,  360, 386,  390, 334,  386, 384,  364, 388,  362, 382,  364, 894,  358, 334,  414, 896,  362, 334,  412, 336,  412, 390,  358, 382,  366, 384,  362, 386,  360, 296,  456, 892,  360, 894,  358, 896,  358, 20492,  4580, 6700,  9300, 4910,  336, 412,  362, 386,  356, 388,  338, 412,  334, 414,  360, 388,  336, 410,  358, 390,  336, 410,  362, 388,  358, 388,  358, 390,  334, 410,  364, 382,  364, 386,  362, 388,  360, 384,  366, 336,  410, 388,  360, 894,  360, 388,  358, 388,  360, 386,  362, 388,  360, 388,  360, 388,  358, 392,  358, 388,  358, 388,  360, 390,  358, 388,  362, 384,  360, 388,  360, 390,  360, 388,  358, 388,  360, 386,  362, 388,  362, 388,  360, 388,  360, 388,  360, 388,  360, 390,  360, 388,  360, 388,  358, 388,  362, 388,  358, 388,  360, 388,  358, 388,  360, 388,  360, 894,  358, 388,  358, 392,  358, 894,  358, 390,  358, 388,  358, 392,  356, 390,  358, 392,  358, 388,  358, 388,  360, 896,  356, 390,  358, 21000,  4600};  // CARRIER_AC128
uint8_t state[16] = {0x16, 0x22, 0x04, 0x12, 0x10, 0x10, 0x28, 0xE0, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x48, 0x40};


Timestamp : 000055.528
Library   : v2.8.5

Protocol  : CARRIER_AC128
Code      : 0x16220412101029F000000800000050D0 (128 Bits)
uint16_t rawData[267] = {4574, 2688,  362, 380,  366, 892,  360, 894,  358, 384,  338, 918,  360, 386,  360, 386,  336, 414,  358, 388,  358, 894,  358, 386,  364, 390,  332, 412,  336, 920,  334, 416,  334, 414,  334, 414,  336, 414,  360, 894,  358, 386,  338, 416,  330, 416,  332, 414,  334, 414,  358, 382,  370, 890,  336, 414,  358, 384,  364, 890,  360, 390,  334, 414,  336, 410,  336, 412,  336, 412,  360, 388,  358, 388,  334, 918,  360, 390,  360, 388,  358, 386,  338, 412,  358, 388,  362, 386,  360, 388,  360, 894,  358, 386,  360, 390,  360, 388,  334, 918,  358, 390,  360, 386,  360, 894,  358, 388,  358, 896,  358, 388,  360, 388,  358, 390,  358, 388,  362, 388,  358, 388,  360, 892,  362, 890,  362, 894,  358, 894,  358, 20474,  4576, 6694,  9314, 4886,  356, 390,  358, 392,  358, 390,  356, 392,  358, 390,  356, 414,  336, 414,  332, 392,  354, 416,  334, 414,  332, 392,  356, 416,  334, 414,  332, 414,  334, 414,  334, 412,  332, 416,  334, 414,  332, 412,  334, 920,  336, 414,  332, 414,  334, 414,  332, 416,  334, 412,  334, 414,  332, 416,  332, 414,  332, 416,  332, 416,  334, 414,  334, 414,  332, 418,  332, 414,  332, 418,  328, 418,  332, 414,  332, 416,  330, 416,  332, 416,  330, 416,  332, 418,  330, 416,  332, 416,  332, 416,  332, 416,  330, 418,  332, 416,  328, 420,  332, 416,  330, 418,  332, 416,  328, 922,  330, 418,  330, 924,  330, 418,  328, 420,  330, 416,  330, 418,  328, 418,  328, 926,  328, 418,  328, 926,  328, 922,  328, 21010,  4566};  // CARRIER_AC128
uint8_t state[16] = {0x16, 0x22, 0x04, 0x12, 0x10, 0x10, 0x29, 0xF0, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0xD0};


Timestamp : 000058.028
Library   : v2.8.5

Protocol  : CARRIER_AC128
Code      : 0x162204121010307000000800000052F0 (128 Bits)
uint16_t rawData[267] = {4578, 2692,  358, 336,  412, 892,  362, 894,  358, 382,  366, 892,  334, 414,  358, 384,  338, 412,  364, 378,  366, 892,  360, 386,  364, 382,  362, 386,  364, 892,  358, 386,  362, 386,  360, 386,  338, 414,  358, 894,  358, 384,  362, 384,  368, 384,  362, 344,  406, 386,  358, 386,  342, 914,  360, 384,  338, 414,  358, 894,  360, 384,  364, 382,  364, 388,  338, 412,  356, 388,  362, 392,  358, 384,  362, 894,  358, 388,  358, 386,  336, 392,  380, 386,  338, 414,  334, 412,  340, 410,  358, 894,  356, 390,  336, 414,  334, 414,  332, 416,  332, 414,  360, 388,  334, 414,  356, 896,  356, 896,  334, 414,  334, 412,  360, 388,  336, 390,  358, 412,  336, 410,  338, 916,  360, 894,  362, 894,  360, 388,  336, 20510,  4582, 6696,  9296, 4912,  362, 384,  338, 412,  362, 390,  330, 414,  360, 388,  362, 388,  334, 414,  358, 390,  358, 390,  356, 392,  358, 390,  356, 390,  358, 390,  362, 386,  358, 392,  360, 388,  358, 388,  362, 388,  358, 386,  360, 896,  358, 388,  362, 384,  362, 388,  362, 386,  358, 392,  360, 386,  360, 390,  360, 388,  358, 392,  356, 388,  362, 388,  358, 390,  356, 390,  358, 390,  358, 390,  358, 388,  358, 392,  358, 388,  358, 390,  358, 388,  358, 392,  356, 390,  356, 390,  358, 392,  358, 392,  356, 390,  356, 392,  356, 392,  354, 390,  356, 898,  358, 390,  356, 390,  356, 896,  358, 388,  360, 896,  358, 388,  358, 390,  358, 392,  354, 392,  356, 390,  358, 896,  356, 918,  332, 896,  356, 922,  332, 21002,  4596};  // CARRIER_AC128
uint8_t state[16] = {0x16, 0x22, 0x04, 0x12, 0x10, 0x10, 0x30, 0x70, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x52, 0xF0};


Timestamp : 000061.027
Library   : v2.8.5

Protocol  : CARRIER_AC128
Code      : 0x16220412101030700000080000005520 (128 Bits)
uint16_t rawData[267] = {4578, 2688,  360, 386,  360, 892,  362, 890,  360, 382,  366, 892,  360, 384,  340, 412,  360, 384,  364, 382,  362, 896,  358, 384,  362, 340,  408, 386,  362, 896,  356, 390,  360, 384,  340, 412,  358, 388,  360, 894,  362, 388,  360, 384,  338, 412,  336, 414,  360, 384,  364, 384,  334, 920,  360, 382,  340, 412,  336, 918,  334, 412,  362, 382,  366, 386,  362, 384,  360, 386,  364, 386,  360, 338,  410, 894,  358, 388,  360, 386,  362, 388,  336, 410,  360, 388,  360, 388,  336, 410,  360, 892,  360, 388,  362, 386,  360, 388,  356, 392,  358, 390,  360, 388,  358, 388,  358, 894,  360, 896,  358, 390,  362, 386,  360, 388,  358, 390,  362, 386,  358, 390,  362, 892,  358, 894,  358, 894,  358, 388,  360, 20490,  4578, 6704,  9294, 4914,  358, 390,  356, 392,  358, 388,  358, 416,  332, 394,  356, 390,  358, 392,  356, 392,  356, 392,  356, 414,  332, 392,  356, 412,  336, 392,  356, 390,  358, 392,  356, 394,  356, 390,  356, 414,  334, 392,  356, 898,  354, 414,  334, 412,  334, 416,  334, 392,  354, 416,  334, 412,  334, 416,  334, 392,  354, 416,  332, 416,  334, 412,  334, 414,  334, 414,  332, 414,  334, 416,  332, 414,  332, 416,  334, 412,  334, 414,  332, 416,  332, 416,  332, 416,  330, 416,  332, 418,  330, 416,  332, 418,  330, 416,  334, 414,  332, 922,  330, 416,  330, 922,  332, 416,  332, 920,  330, 418,  332, 922,  330, 418,  328, 418,  330, 418,  330, 418,  328, 420,  330, 416,  332, 922,  328, 418,  328, 420,  328, 21028,  4572};  // CARRIER_AC128
uint8_t state[16] = {0x16, 0x22, 0x04, 0x12, 0x10, 0x10, 0x30, 0x70, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x55, 0x20};

mrmees avatar Jul 05 '23 18:07 mrmees

Created a bit map of the information that is hopefully a little easier to read than the other sheet.

https://docs.google.com/spreadsheets/d/1LJzJOy8rIhit1_dYZVBFdrprVubOtzBqAdxtzQidcsw/edit?usp=sharing

mrmees avatar Jul 05 '23 19:07 mrmees

Yes decoding protocols is a pain :D For that reason there is a FAQ how we go about it.

It is great effort to do what you have done, but we need to go back a bit.

Please post the raw collection of timing data for your full temperature range, the lowest to the highest, one step at a time. It is intended to be posted as text. The code can then be generated from that, including test cases.

This will allow to create basic support for the protocol, and with the most reasonable endiness. After that comes decoding the actual data. - and that depends on how the structure comes out after the previous step.

Anything else I can do to help out here? Think I've provided everything that was requested. Thanks!

mrmees avatar Jul 12 '23 16:07 mrmees

Checking in again. Would really like to get this put in this year before the hot weather starts.

mrmees avatar Mar 18 '24 15:03 mrmees