Basically the code always returns error code. Can someone shed some light on where it could be wrong?
Also, let’s hope this community isn’t totally dead…
int dwt_starttx(uint8 mode)
{
int retval = DWT_SUCCESS ;
uint8 temp = 0x00;
uint16 checkTxOK = 0 ;
if(mode & DWT_RESPONSE_EXPECTED)
{
temp = (uint8)SYS_CTRL_WAIT4RESP ; // Set wait4response bit
dwt_writetodevice(SYS_CTRL_ID,0,1,&temp) ;
dw1000local.wait4resp = 1;
}
if (mode & DWT_START_TX_DELAYED)
{
//uint32 status ;
// Both SYS_CTRL_TXSTRT and SYS_CTRL_TXDLYS to correctly enable TX
temp |= (uint8)(SYS_CTRL_TXDLYS | SYS_CTRL_TXSTRT) ;
dwt_writetodevice(SYS_CTRL_ID,0,1,&temp) ;
checkTxOK = dwt_read16bitoffsetreg(SYS_STATUS_ID,3) ;
//status = dwt_read32bitreg(SYS_STATUS_ID) ; // Read status register
if ((checkTxOK & SYS_STATUS_TXERR) == 0) // Transmit Delayed Send set over Half a Period away or Power Up error (there is enough time to send but not to power up individual blocks).
{
//printf("tx delayed \n");
retval = DWT_SUCCESS ; // All okay
}
else
{
// I am taking DSHP set to Indicate that the TXDLYS was set too late for the specified DX_TIME.
// Remedial Action - (a) cancel delayed send
temp = (uint8)SYS_CTRL_TRXOFF; // This assumes the bit is in the lowest byte
dwt_writetodevice(SYS_CTRL_ID,0,1,&temp) ;
// Note event Delayed TX Time too Late
// Could fall through to start a normal send (below) just sending late.....
// ... instead return and assume return value of 1 will be used to detect and recover from the issue.
// Clear the "auto TX to sleep" bit
dwt_entersleepaftertx(0);
dw1000local.wait4resp = 0;
retval = DWT_ERROR ; // Failed !
}
}
else
{
temp |= (uint8)SYS_CTRL_TXSTRT ;
dwt_writetodevice(SYS_CTRL_ID,0,1,&temp) ;
}
return retval;
}