#include #include #include #include #include #include "freertos/FreeRTOS.h" #include "freertos/task.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 #include "esp_intr_alloc.h" #include "transceiver.h" #include "rxTimer.h" bool disableRx = true; // Controls if trcv is in RX or TX-mode void trcvSendHighLowPulse(uint32_t high, uint32_t low) { if( disableRx == false ) return; gpio_set_level(GPIO_TX_DATA, 1); delayMicroseconds( high ); gpio_set_level(GPIO_TX_DATA, 0); delayMicroseconds( low ); } void initTransceiver() { gpio_set_level(GPIO_ENABLE, 0); gpio_set_level(GPIO_TX_ENABLE, 0); gpio_set_level(GPIO_TX_DATA, 0); gpio_pad_select_gpio(GPIO_ENABLE); gpio_pad_select_gpio(GPIO_TX_ENABLE); gpio_pad_select_gpio(GPIO_TX_DATA); gpio_pad_select_gpio(GPIO_RX_DATA); gpio_set_direction(GPIO_ENABLE, GPIO_MODE_OUTPUT); gpio_set_direction(GPIO_TX_ENABLE, GPIO_MODE_OUTPUT); gpio_set_direction(GPIO_TX_DATA, GPIO_MODE_OUTPUT); gpio_set_direction(GPIO_RX_DATA, GPIO_MODE_INPUT); // ------------------ INIT THE TRANCEIVER ------------------------- // From powerdown mode (pin 4-5-6 low), // 1. Drive high pin 6 (ENABLE) // 2. After 20us drive high pin 5 (RX/TX)200us, hold on 40us // 3. Drive down 20us pin 6 (ENABLE). gpio_set_level(GPIO_ENABLE, 1); delayMicroseconds( 20 ); gpio_set_level(GPIO_TX_ENABLE, 1); delayMicroseconds( 200 ); gpio_set_level(GPIO_TX_ENABLE, 0); delayMicroseconds( 40 ); gpio_set_level(GPIO_ENABLE, 0); delayMicroseconds( 20 ); gpio_set_level(GPIO_ENABLE, 1); delayMicroseconds( 200 ); // ------------------ INIT THE TRANCEIVER ------------------------- ESP_LOGI("TRCV", "Transceiver has been initialized."); } void trcvSwitch2transmit() { disableRx = true; // ------------------ GO TO TRANSMIT STATE ------------------------- gpio_set_level(GPIO_TX_ENABLE, 1); delayMicroseconds( 400 ); // ------------------ GO TO TRANSMIT STATE ------------------------- } void trcvSwitch2receive() { // ------------------ GO TO RECEIVE STATE ------------------------- // From Transmission Mode to Receiver Mode follow the procedure: // Drive down pin 5 (RX/TX), after 40us drive down pin 6 (ENABLE) 20us long. //After 200 us the device is ready for reception. gpio_set_level(GPIO_TX_ENABLE, 0); delayMicroseconds( 40 ); gpio_set_level(GPIO_ENABLE, 0); delayMicroseconds( 20 ); gpio_set_level(GPIO_ENABLE, 1); delayMicroseconds( 200 ); // ------------------ GO TO RECEIVE STATE ------------------------- disableRx = false; }