Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Arduino.h>
- #include "../../shared/data_types.h"
- #include "IRremoteESP8266/IRremoteESP8266.h"
- #include "gree.h"
- namespace GREE {
- TEMP temp[TEMP_CNT] = {TEMP_16C, TEMP_17C, TEMP_18C, TEMP_19C, TEMP_20C, TEMP_21C, TEMP_22C, TEMP_23C, TEMP_24C, TEMP_25C, TEMP_26C, TEMP_27C, TEMP_28C, TEMP_29C, TEMP_30C};
- void
- send_ac_packet (const packet packet, IRsend &irsend) {
- u32 temp_id = u32_max;
- u32 temp_id_shifted = u32_max;
- for (u32 i = 0; i < TEMP_CNT; ++i) {
- if (temp[i] == packet.bit.temp) {
- temp_id = i;
- break;
- }
- }
- u32 tail = 0b00000000000001000000000000000000;
- u32 shift = SHIFT_INVALID;
- u32 unique_temp_id = UNIQUE_TEMP_INVALID;
- u32 unique_temp_shifted_id = UNIQUE_TEMP_SHIFTED_INVALID;
- switch (packet.bit.mode) {
- case MODE_AUTO: {
- shift = SHIFT_AUTO;
- unique_temp_id = UNIQUE_TEMP_AUTO;
- unique_temp_shifted_id = UNIQUE_TEMP_SHIFTED_AUTO;
- } break;
- case MODE_COOL: {
- shift = SHIFT_COOL;
- unique_temp_id = UNIQUE_TEMP_COOL;
- unique_temp_shifted_id = UNIQUE_TEMP_SHIFTED_COOL;
- } break;
- case MODE_DRY: {
- shift = SHIFT_DRY;
- unique_temp_id = UNIQUE_TEMP_DRY;
- unique_temp_shifted_id = UNIQUE_TEMP_SHIFTED_DRY;
- } break;
- case MODE_FAN: {
- shift = SHIFT_FAN;
- unique_temp_id = UNIQUE_TEMP_FAN;
- unique_temp_shifted_id = UNIQUE_TEMP_SHIFTED_FAN;
- } break;
- case MODE_HEAT: {
- shift = SHIFT_HEAT;
- unique_temp_id = UNIQUE_TEMP_HEAT;
- unique_temp_shifted_id = UNIQUE_TEMP_SHIFTED_HEAT;
- } break;
- default:
- break;
- }
- temp_id_shifted = temp_id + shift;
- if (TEMP_RANGE <= temp_id_shifted) {
- temp_id_shifted = temp_id_shifted - TEMP_RANGE;
- }
- if (packet.bit.swing) {
- tail |= 0b10001000000000000000000000000000;
- ++temp_id_shifted;
- ++unique_temp_id;
- }
- if (unique_temp_id == temp_id) {
- tail |= TEMP_UNIQUE;
- } else if (packet.bit.swing && TEMP_RANGE == temp_id) {
- tail |= temp[unique_temp_shifted_id];
- } else {
- tail |= temp[temp_id_shifted];
- }
- if (!packet.bit.power) {
- tail ^= 0x000001;
- }
- //
- //
- //
- u32 data = packet.storage;
- u32 data_mask = 0x80000000;
- irsend.enableIROut (38);
- delay (10);
- irsend.mark (HDR_MARK);
- irsend.space (HDR_SPACE);
- for (u32 i = 0; i < 22; ++i) {
- if (data & data_mask) {
- irsend.mark (BIT_MARK);
- irsend.space (ONE_SPACE);
- } else {
- irsend.mark (BIT_MARK);
- irsend.space (ZERO_SPACE);
- }
- data_mask >>= 1;
- }
- cu16 fixed_tail = 0b0001000001010010; //13 bits
- u16 fixed_tail_mask = 0b0001000000000000;
- for (u32 i = 0; i < 13; ++i) {
- if (fixed_tail & fixed_tail_mask) {
- irsend.mark (BIT_MARK);
- irsend.space (ONE_SPACE);
- } else {
- irsend.mark (BIT_MARK);
- irsend.space (ZERO_SPACE);
- }
- fixed_tail_mask >>= 1;
- }
- irsend.mark (BIT_MARK);
- irsend.space (TAIL_SPACE);
- u32 tail_mask = 0x80000000; //32 bits
- for (u32 i = 0; i < 32; ++i) {
- if (tail & tail_mask) {
- irsend.mark (BIT_MARK);
- irsend.space (ONE_SPACE);
- } else {
- irsend.mark (BIT_MARK);
- irsend.space (ZERO_SPACE);
- }
- tail_mask >>= 1;
- }
- irsend.mark (BIT_MARK);
- irsend.space (0);
- }
- }; // namespace GREE
- //
- //
- //
Add Comment
Please, Sign In to add comment