Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Request for RecPro / Houghton RV Air Conditioner Protocol #2009

Open
mrmees opened this issue Jun 29, 2023 · 7 comments
Open

Request for RecPro / Houghton RV Air Conditioner Protocol #2009

mrmees opened this issue Jun 29, 2023 · 7 comments

Comments

@mrmees
Copy link

mrmees commented Jun 29, 2023

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> 
@NiKiZe
Copy link
Collaborator

NiKiZe commented Jun 30, 2023

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

@mrmees
Copy link
Author

mrmees commented Jul 3, 2023

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.

@NiKiZe
Copy link
Collaborator

NiKiZe commented Jul 4, 2023

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.

@mrmees
Copy link
Author

mrmees commented Jul 5, 2023

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
Copy link
Author

mrmees commented Jul 5, 2023

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
Copy link
Author

mrmees commented Jul 12, 2023

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
Copy link
Author

mrmees commented Mar 18, 2024

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants