#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;n<FRAMEHEAD;n++){
|
qDebug("0x%X",txdata[n]);
|
}
|
*/
|
|
WriteDev((char *)txdata, sendata.Len);
|
}
|
}
|
|
void ESP32_Comm::run()
|
{
|
msleep(1000);
|
|
quint8 devAddr = workThread->sysParamXml.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);
|
}
|
}
|