#include "TrackerRxTx.h" #include #include TrackerRxTx::TrackerRxTx() { mSerial=&Serial2; } TrackerRxTx::~TrackerRxTx() { } void TrackerRxTx::Init(uint32_t baud) { #ifdef ARDUINO_WT32_ETH01 mSerial=&Serial2; mSerial->begin(baud,SERIAL_8N1,HWSerial2Eth_rx_pin,HWSerial2Eth_tx_pin); mSerial->setPins(HWSerial2Eth_rx_pin,HWSerial2Eth_tx_pin);//eth board #elif defined ARDUINO_ESP32_DEV mSerial=&Serial2; mSerial->begin(baud,SERIAL_8N1,HWSerial2_rx_pin,HWSerial2_tx_pin); #endif } void TrackerRxTx::TaskTrackerRxTx(void *pvParameters) { log_i("Task started"); TaskCreator *mCreator = (TaskCreator *)pvParameters; TrackerRxTx *obj=&(mCreator->mTracker); MavlinkTransmitter *mTransmiter=&(mCreator->mTransmitter); while (1) { obj->ReadSerial(); obj->SendMavlik(); if(obj->mRedySend) { obj->mRedySend=false; mTransmiter->SendMavlink(obj->mSenBuf,obj->mMsgSendLen); } vTaskDelay(1); } } void TrackerRxTx::SetMavlikBuf(uint8_t *buf_in,int len) { mMutex.Lock(); if((mSendLen+len)<2*MAVLINK_MAX_PACKET_LEN) { memcpy(mBufferOutStream+mSendLen,buf_in,len); mSendLen+=len; mMavlinkNew=true; } else log_i("TrackerTx buf over"); mMutex.Unlock(); } void TrackerRxTx::SendMavlik() { if(mMavlinkNew) { mMutex.Lock(); mSerial->write(mBufferOutStream,mSendLen); mMavlinkNew=false; mSendLen=0; mMutex.Unlock(); } } void TrackerRxTx::ReadSerial() { int len=mSerial->available(); while(len>2*MAVLINK_MAX_PACKET_LEN) { mSerial->read(mBuf,2*MAVLINK_MAX_PACKET_LEN); len=mSerial->available(); } if(len>0) { len=mSerial->read(mBuf,len); mavlink_status_t status; mavlink_message_t msg; for(int i=0;i