Implemented blocking write method in CMT2300 driver and use it in sendEsbPacket.
This commit is contained in:
parent
6331210b94
commit
5b648b63ac
@ -25,6 +25,41 @@ bool CMT2300A::isChipConnected()
|
|||||||
return CMT2300A_IsExist();
|
return CMT2300A_IsExist();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CMT2300A::write(const uint8_t* buf, uint8_t len)
|
||||||
|
{
|
||||||
|
CMT2300A_GoStby();
|
||||||
|
CMT2300A_ClearInterruptFlags();
|
||||||
|
|
||||||
|
/* Must clear FIFO after enable SPI to read or write the FIFO */
|
||||||
|
CMT2300A_EnableWriteFifo();
|
||||||
|
CMT2300A_ClearTxFifo();
|
||||||
|
|
||||||
|
CMT2300A_WriteReg(CMT2300A_CUS_PKT15, len); // set Tx length
|
||||||
|
/* The length need be smaller than 32 */
|
||||||
|
CMT2300A_WriteFifo(buf, len);
|
||||||
|
|
||||||
|
if (!(CMT2300A_ReadReg(CMT2300A_CUS_FIFO_FLAG) & CMT2300A_MASK_TX_FIFO_NMTY_FLG)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!CMT2300A_GoTx()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t timer = millis();
|
||||||
|
|
||||||
|
while (!(CMT2300A_MASK_TX_DONE_FLG & CMT2300A_ReadReg(CMT2300A_CUS_INT_CLR1))) {
|
||||||
|
if (millis() - timer > 95) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CMT2300A_ClearInterruptFlags();
|
||||||
|
CMT2300A_GoSleep();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool CMT2300A::setPALevel(int8_t level)
|
bool CMT2300A::setPALevel(int8_t level)
|
||||||
{
|
{
|
||||||
uint16_t Tx_dBm_word;
|
uint16_t Tx_dBm_word;
|
||||||
|
|||||||
@ -19,6 +19,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool isChipConnected();
|
bool isChipConnected();
|
||||||
|
|
||||||
|
bool write(const uint8_t* buf, uint8_t len);
|
||||||
|
|
||||||
bool setPALevel(int8_t level);
|
bool setPALevel(int8_t level);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@ -485,11 +485,15 @@ void HoymilesRadio_CMT::sendEsbPacket(CommandAbstract* cmd)
|
|||||||
cmd->getCommandName().c_str(), cmtChToFreq(cmtCurrentCh).c_str());
|
cmd->getCommandName().c_str(), cmtChToFreq(cmtCurrentCh).c_str());
|
||||||
cmd->dumpDataPayload(Hoymiles.getMessageOutput());
|
cmd->dumpDataPayload(Hoymiles.getMessageOutput());
|
||||||
|
|
||||||
|
// Still here for to handle CMD56 correctly (inverter serial etc.)
|
||||||
memcpy(cmtTxBuffer, cmd->getDataPayload(), cmd->getDataSize());
|
memcpy(cmtTxBuffer, cmd->getDataPayload(), cmd->getDataSize());
|
||||||
cmtTxLength = cmd->getDataSize();
|
|
||||||
_txTimeout.set(100);
|
|
||||||
|
|
||||||
cmtNextState = CMT_STATE_TX_START;
|
if (_radio->write(cmd->getDataPayload(), cmd->getDataSize())) {
|
||||||
|
_packetSent = false; // still bad hack, to be removed
|
||||||
|
cmtNextState = CMT_STATE_RX_START;
|
||||||
|
} else {
|
||||||
|
Hoymiles.getMessageOutput()->println("TX SPI Timeout");
|
||||||
|
}
|
||||||
|
|
||||||
_busyFlag = true;
|
_busyFlag = true;
|
||||||
_rxTimeout.set(cmd->getTimeout());
|
_rxTimeout.set(cmd->getTimeout());
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user