24 dst->
item(WAKEUP_HIGH_US, WAKEUP_LOW_US);
25 dst->
item(HW_SYNC_US, HW_SYNC_US);
26 dst->
item(HW_SYNC_US, HW_SYNC_US);
27 dst->
item(SW_SYNC_HIGH_US, SW_SYNC_LOW_US);
29 uint8_t frame[FRAME_SIZE_IN_BYTES];
31 if (data.control_in_key) {
32 frame[0] = (data.key & 0xF0) | (data.control & 0x0F);
36 frame[1] = (data.control & 0x0F) << 4;
38 frame[2] = data.rolling_code >> 8;
39 frame[3] = data.rolling_code;
40 frame[4] = data.address >> 16;
41 frame[5] = data.address >> 8;
42 frame[6] = data.address;
45 for (uint8_t data_byte : frame) {
46 crc ^= (data_byte >> 4) ^ (data_byte & 0xF);
48 frame[1] |= (crc & 0x0F);
50 for (uint8_t i = 1; i < FRAME_SIZE_IN_BYTES; i++) {
51 frame[i] ^= frame[i - 1];
56 for (uint8_t data_byte : frame) {
57 for (int8_t
y = 7;
y >= 0;
y--) {
58 if (data_byte & (1 <<
y)) {
59 dst->
space(HALF_BIT_US);
60 dst->
mark(HALF_BIT_US);
62 dst->
mark(HALF_BIT_US);
63 dst->
space(HALF_BIT_US);