@@ -168,8 +168,13 @@ enum class CmtStatus : uint8_t {
168168#define CMT2300A_MASK_PKT_OK_FLG 0x01
169169
170170class Cmt2300a {
171+ private: /* types*/
172+ static constexpr uint8_t CmtTimeoutMs = 40 ;
173+
171174 public:
172- Cmt2300a () {}
175+ Cmt2300a ()
176+ : lastMillis {0 }
177+ {}
173178
174179 void setup (uint8_t pinSclk, uint8_t pinSdio, uint8_t pinCsb, uint8_t pinFcsb) {
175180 mSpi .init (pinSdio, pinSclk, pinCsb, pinFcsb);
@@ -182,6 +187,7 @@ class Cmt2300a {
182187 if (CMT2300A_MASK_TX_DONE_FLG == mSpi .readReg (CMT2300A_CUS_INT_CLR1)) {
183188 if (cmtSwitchStatus (CMT2300A_GO_STBY, CMT2300A_STA_STBY)) {
184189 mTxPending = false ;
190+ lastMillis = 0 ;
185191 goRx ();
186192 }
187193 }
@@ -226,9 +232,6 @@ class Cmt2300a {
226232 }
227233
228234 CmtStatus getRx (uint8_t buf[], uint8_t *rxLen, uint8_t maxlen, int8_t *rssi) {
229- if (mTxPending )
230- return CmtStatus::ERR_TX_PENDING;
231-
232235 if (0x1b != (mSpi .readReg (CMT2300A_CUS_INT_FLAG) & 0x1b ))
233236 return CmtStatus::FIFO_EMPTY;
234237
@@ -252,8 +255,19 @@ class Cmt2300a {
252255 }
253256
254257 CmtStatus tx (uint8_t buf[], uint8_t len) {
255- if (mTxPending )
256- return CmtStatus::ERR_TX_PENDING;
258+ if (mTxPending ) {
259+ if (CmtTimeoutMs < (millis () - lastMillis)) {
260+ DPRINT (DBG_ERROR, " CMT, last TX timeout: " );
261+ DBGPRINT (String (millis () - lastMillis));
262+ DBGPRINTLN (" ms" );
263+ }
264+
265+ while (mTxPending && (CmtTimeoutMs > (millis () - lastMillis))) {
266+ vTaskDelay (10 );
267+ }
268+ mTxPending = false ;
269+ goRx ();
270+ }
257271
258272 if (mInRxMode ) {
259273 mInRxMode = false ;
@@ -284,6 +298,7 @@ class Cmt2300a {
284298
285299 if (!cmtSwitchStatus (CMT2300A_GO_TX, CMT2300A_STA_TX))
286300 return CmtStatus::ERR_SWITCH_STATE;
301+ lastMillis = millis ();
287302
288303 // wait for tx done
289304 mTxPending = true ;
@@ -560,6 +575,8 @@ class Cmt2300a {
560575 uint8_t mCusIntFlag = 0 ;
561576 uint8_t mRqstCh = 0 , mCurCh = 0 ;
562577 RegionCfg mRegionCfg = RegionCfg::EUROPE;
578+
579+ uint32_t lastMillis;
563580};
564581
565582#endif /* __CMT2300A_H__*/
0 commit comments