#include "esp32_comm.h" #include "QDebug" #define DEV_GPIO2 "/dev/gpiochip2" #define LINES_NUM_OUT 1 #define LINE_OFFSET0_OUT 8 //PC08 static int lines_offsets_out[LINES_NUM_OUT] = {LINE_OFFSET0_OUT}; static char ble_name[12] = {'B','L','E','-','C','1','9','P','-','0','0','1'}; static unsigned char ble_need_set = 1; //1~3--need set ; 4--normal state; 0--error ESP32_Comm::ESP32_Comm(const char *dev, Remote_Ctrl *rctl) { remoteCtrl = rctl; workThread = remoteCtrl->workThread; int ret = this->OpenDev(dev); if (-1 == ret) qDebug("Can't Open Port %s!!!\n", dev); else qDebug("Open Port %s OK!\n", dev); this->SetDevAttr(115200,8,1,'N'); fd = this->FD; esp32_powerPin = new Gpio_Driver(DEV_GPIO2); esp32_powerPin->Gpio_Init(lines_offsets_out, LINES_NUM_OUT); } ESP32_Comm::~ESP32_Comm() { } void ESP32_Comm::setESP32_PowerON(bool on) { esp32_powerPin->Gpio_SetLevel(0,(!on)); if(on){ qDebug("set ESP32 Power ON."); } else{ qDebug("set ESP32 Power OFF."); } } bool ESP32_Comm::setESP32_Name(void) { bool set_ok = true; char rx_data[12] = {0}; int ret = Tx_Rx_Data_ESP32(ble_name, 12, rx_data, 12); if(0 == ret){ for(int n=0;n<12;n++){ if(ble_name[n] != rx_data[n]){ set_ok = false; break; } } } else{ set_ok = false; } return set_ok; } void ESP32_Comm::handleRxData(void *data) { FRAME_DATA *recvframe = (FRAME_DATA *)data; FRAME_DATA sendata; memset(&sendata,0x00,sizeof(sendata)); if(remoteCtrl->processRxData(recvframe,&sendata,2)){ quint8 *txdata = (quint8 *)(&sendata); /* tmp = txdata[3]; txdata[3] = txdata[0]; txdata[0] = tmp; tmp = txdata[2]; txdata[2] = txdata[1]; txdata[1] = tmp; sendata.CRC = CRC16::CalCRC16(&sendata,sendata.Len); */ /* qDebug("------- write data ---------"); for(int n=0;nsysParamXml.dev_addr; ble_name[9] = devAddr/100 + '0'; ble_name[10] = devAddr%100/10 + '0'; ble_name[11] = devAddr%10 + '0'; ble_need_set = 1; quint8 rx_data[1024] = {0}; while(1){ if(ble_need_set>=1 && ble_need_set<=3){ setESP32_PowerON(false); sleep(1); setESP32_PowerON(true); sleep(10); qDebug("start to set BLE name..."); for(int t=0;t<3;t++){ if(setESP32_Name()){ qDebug("set BLE name OK..."); ble_need_set = 4; break; } else{ sleep(1); } } if(ble_need_set<3){ ble_need_set++; } else if(ble_need_set != 4){ ble_need_set = 0; } } else if(4 == ble_need_set){ int rxlen = ReadData_ESP32(rx_data,100); if(rxlen > 0){ //测试模式 //qDebug("rxlen=%d: rx0=0x%X,rx1=0x%X",rxlen,rx_data[0],rx_data[1]); //rx_data[rxlen-1] = rx_data[rxlen-1]+1; //WriteDev(rx_data, rxlen); quint8 contype = workThread->remoteState.conn_type; if(contype != 1){ //not net,can not work at the same time handleRxData(rx_data); } } else{ //char txdata[] = "Hello,I am C19P..."; //WriteDev(txdata, sizeof(txdata)); //msleep(2000); } quint8 addr = workThread->sysParamXml.dev_addr; if(devAddr != addr){ devAddr = addr; ble_name[9] = devAddr/100 + '0'; ble_name[10] = devAddr%100/10 + '0'; ble_name[11] = devAddr%10 + '0'; ble_need_set = 1; } } else{ msleep(500); } msleep(50); } }