Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of DecaWave by
Diff: DW1000/DW1000.cpp
- Revision:
- 26:a65c6f26c458
- Parent:
- 25:d58b0595b300
- Child:
- 28:a830131560e8
--- a/DW1000/DW1000.cpp Thu Nov 27 17:51:54 2014 +0000 +++ b/DW1000/DW1000.cpp Thu Nov 27 19:19:35 2014 +0000 @@ -1,8 +1,7 @@ #include "DW1000.h" DW1000::DW1000(PinName MOSI, PinName MISO, PinName SCLK, PinName CS, PinName IRQ) : irq(IRQ), spi(MOSI, MISO, SCLK), cs(CS) { - callbackRX = NULL; // TODO: setter - callbackTX = NULL; + setCallbacks(NULL, NULL); deselect(); // Chip must be deselected first spi.format(8,0); // Setup the spi for standard 8 bit data and SPI-Mode 0 (GPIO5, GPIO6 open circuit or ground on DW1000) @@ -13,11 +12,16 @@ // Configuration TODO: make method for that writeRegister8(DW1000_SYS_CFG, 3, 0x20); // enable auto reenabling receiver after error - writeRegister8(DW1000_SYS_CFG, 2, 0x03); // enable 1024 byte frames TODO: doesn't work!! + writeRegister8(DW1000_SYS_CFG, 2, 0x03); // enable 1024 byte frames irq.rise(this, &DW1000::ISR); // attach Interrupt handler to rising edge } +void DW1000::setCallbacks(void (*callbackRX)(int framelength), void (*callbackTX)()) { + DW1000::callbackRX = callbackRX; + DW1000::callbackTX = callbackTX; +} + uint32_t DW1000::getDeviceID() { uint32_t result; readRegister(DW1000_DEV_ID, 0, (uint8_t*)&result, 4); @@ -50,6 +54,18 @@ return readRegister40(DW1000_SYS_STATUS, 0); } +void DW1000::setInterrupt(bool RX, bool TX) { + writeRegister16(DW1000_SYS_MASK, 0, RX*0x4000 | TX*0x0080); // RX good frame 0x4000, TX done 0x0080 +} + +uint64_t DW1000::getRXTimestamp() { + return readRegister40(DW1000_RX_TIME, 0); +} + +uint64_t DW1000::getTXTimestamp() { + return readRegister40(DW1000_TX_TIME, 0); +} + void DW1000::sendString(char* message) { sendFrame((uint8_t*)message, strlen(message)+1); } @@ -74,7 +90,6 @@ } void DW1000::startRX() { - //while(sending); // block until sending finished TODO: the right way?? writeRegister8(DW1000_SYS_CTRL, 0x01, 0x01); // start listening for preamble by setting the RXENAB bit }