Skip to content
Snippets Groups Projects
Commit 45f2c96f authored by Colin Wulf's avatar Colin Wulf
Browse files

dw1000: added transmitFrame and writeFrameIntoBuffer

parent e1189da1
No related branches found
No related tags found
No related merge requests found
......@@ -144,6 +144,8 @@ int dw1000_init(uint16_t config, BaseType_t (*sendCallback)(),
BaseType_t (*receiveCallback)(uint32_t bufferLength, uint8_t ts_valid));
int dw1000_configure(dwt_config_t *config, uint8_t use_otpconfigvalues);
int dw1000_sendFrame(uint8_t *payload, uint16_t len);
int dw1000_writeFrameIntoBuffer(uint16_t txBufferOffset, uint8_t *payload, uint16_t len);
int dw1000_transmitFrame(uint16_t txBufferOffset, uint16_t len);
int dw_1000_receiveFrameFromIsr(uint8_t * buffer, uint32_t length);
void dw1000_extiCallback(void);
void vTaskGlobalTimeIncrement(void *pvParameters);
......
......@@ -15,6 +15,8 @@
volatile uint32_t global_time = 0;
uint16_t maximum_message_length = 1024; //Fixme: put right message length
int dw1000_init(uint16_t config, BaseType_t (*sendCallback)(),
BaseType_t (*receiveCallback)(uint32_t bufferlength, uint8_t ts_valid)) {
......@@ -349,44 +351,43 @@ int dw1000_configure(dwt_config_t *config, uint8_t use_otpconfigvalues) {
return 0;
}
uint16_t txBufferOffset = 0;
// sends a frame and blocks until finished
int dw1000_sendFrame(uint8_t *payload, uint16_t len) {
//Write payload to the buffer with no offset
int ret = dw1000_writeFrameIntoBuffer(0, payload, len);
if(ret != DW1000_RET_OK){
return ret;
}
//Invoke transmission
return dw1000_transmitFrame(0,len);
}
int dw1000_writeFrameIntoBuffer(uint16_t txBufferOffset, uint8_t *payload, uint16_t len){
if ((len + 2) > maximum_message_length){
// Message + CRC is longer than the allowed msg length (usually 127, but decawave
return DW1000_RET_MSG_TO_LONG;
}
if ((txBufferOffset + len + 2) > 1024){
return -1; //FIXME: ERRORCODE
return DW1000_RET_TX_BUFFER_OVERFLOW;
}
//Write payload
//Write payload into tx buffer
dw1000Hal_writeRegister(TX_BUFFER_ID + txBufferOffset, payload, len);
return DW1000_RET_OK;
}
int dw1000_transmitFrame(uint16_t txBufferOffset, uint16_t len){
//Set length and offset
uint32_t reg32 = dw1000local.txFCTRL | len+2 | (txBufferOffset << 22);
dw1000Hal_writeSubRegister(TX_FCTRL_ID, 0, (uint8_t *) &reg32, TX_FCTRL_LEN-1);
txBufferOffset += len + 2;
txBufferOffset = 0; //FIXME: Löschen, wenn anständige Offsetbehandlung.
// /* WITHOUT THE NEXT PART: SECOND TIME NO SENDING POSSIBLE, BUT CAN'T BE FOUND IN ORIGINAL DRIVER */
// uint32_t sys_ctrl = 0;
// dw1000Hal_readRegister(SYS_CTRL_ID, (uint8_t *)&sys_ctrl, 4);
// //trace_printf("sys_ctrl: %x\n", sys_ctrl);
// sys_ctrl |= SYS_CTRL_TRXOFF;// Immediately cancel all RX and TX operations, bring radio to IDLE state
//// trace_printf("sys_ctrl: %x\n", sys_ctrl);
// dw1000Hal_writeRegister(SYS_CTRL_ID, (uint8_t *)&sys_ctrl, 4);
// sys_ctrl = 0;
dw1000Util_forceTrxOff();
/* WITHOUT THE NEXT PART: SECOND TIME NO SENDING POSSIBLE, BUT CAN'T BE FOUND IN ORIGINAL DRIVER */
dw1000Util_forceTrxOff();
uint8_t temp = (uint8_t) SYS_CTRL_TXSTRT;
dw1000Hal_writeRegister(SYS_CTRL_ID, (uint8_t *)&temp,1);
return 0;
return DW1000_RET_OK;
}
void vTaskGlobalTimeIncrement(void *pvParameters) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment