1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <time.h>
- #include <sys/time.h>
- #include "freertos/FreeRTOS.h"
- #include "freertos/task.h"
- #include "freertos/queue.h"
- #include "driver/gpio.h"
- #include "esp_sleep.h"
- #include "esp_log.h"
- #include "driver/uart.h"
- #include "driver/rtc_io.h"
- #include "esp_intr_alloc.h"
- #include "esp_attr.h"
- #include "driver/timer.h"
- #include <stddef.h>
- #include "esp_intr_alloc.h"
- #include "receiver.h"
- #include "rxTimer.h"
- #include "toshiba_ir.h"
- #include "wifi.h"
- #include "mqtt.h"
- #ifdef IR_RECEIVER
- uint32_t dataArr[1000];
- uint32_t dataArrIdx = 0;
- void receiverTask(void *pvParameter)
- {
- ESP_LOGI("RX", "Receiver task starting.");
- uint32_t width;
- while (1) {
- // Here we receive every individual pulse that has been detected by the isr-pulse-rx-function: timer_tg0_isr
- while( xQueueReceive( rxQueue, &width, 100 ) == pdTRUE ) {
- //ESP_LOGI("D", "%u", width); // Debug to show every received pulse as a separate log line
- // Receive the Toshiba IR
- // Send the pulse to the receiver that tries to interpret the pulse
- union ToshibaProtocolU* data = (union ToshibaProtocolU*)nextPulseToshiba_ir(width);
- if( data != NULL ) {
- char mqtt_s[50];
- sprintf(&mqtt_s[0], "%02X%02X%02X%02X%02X%02X%02X%02X",data->raw[0],data->raw[1],data->raw[2],data->raw[3],data->raw[4],data->raw[5],data->raw[6],data->raw[7]);
- sprintf(&mqtt_s[16],"%02X%02X%02X%02X%02X%02X%02X%02X",data->raw[8],data->raw[9],data->raw[10],data->raw[11],data->raw[12],data->raw[13],data->raw[14],data->raw[15]);
- sprintf(&mqtt_s[32],"%02X%02X%02X",data->raw[16],data->raw[17],data->raw[18]);
- ESP_LOGI("TOSHIBA","MQTT: >%s<", mqtt_s);
- #ifdef MQTT_ENABLED
- sendMQTTMessage("hall/ac/ir_cmd_rx", mqtt_s);
- #endif
- ESP_LOGI("TOSHIBA", "Data A: %02X%02X%02X%02X%02X%02X%02X%02X",data->raw[0],data->raw[1],data->raw[2],data->raw[3],data->raw[4],data->raw[5],data->raw[6],data->raw[7]);
- ESP_LOGI("TOSHIBA", "Data B: %02X%02X%02X%02X%02X%02X%02X%02X",data->raw[8],data->raw[9],data->raw[10],data->raw[11],data->raw[12],data->raw[13],data->raw[14],data->raw[15]);
- ESP_LOGI("TOSHIBA", "Data C: %02X%02X%02X",data->raw[16],data->raw[17],data->raw[18]);
- const uint8_t tempBits = data->raw[6] & 0x1F;
- float setTemp = 16.0f + (tempBits>>1);
- if( tempBits & 0x01 ) setTemp += 0.5f;
- //ESP_LOGI("TOSHIBA", "Temp: %.1f", setTemp );
- const uint8_t fan = data->raw[8]>>4;
- const uint8_t power = data->raw[5]&0x01;
- ESP_LOGI("TOSHIBA","Power:%u Temp:%.1f Fan:%u",power,setTemp,fan);
- }
- }
- }
- vTaskDelete(NULL);
- }
- void initReceiver() {
- gpio_pad_select_gpio(GPIO_IR_RX_DATA);
- gpio_set_direction(GPIO_IR_RX_DATA, GPIO_MODE_INPUT);
- gpio_pad_select_gpio(GPIO_IR_TX_DATA);
- gpio_set_direction(GPIO_IR_TX_DATA, GPIO_MODE_OUTPUT);
- gpio_set_level(GPIO_IR_TX_DATA, 0);
- Toshiba_ir_ResetDecoder();
-
- ESP_LOGI("RX", "Receiver has been initialized.");
- xTaskCreatePinnedToCore(&receiverTask, "receiverTask", 8192, NULL, tskIDLE_PRIORITY + 5, NULL, 0);
- }
- #endif
|