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
main.cpp@21:23bf4399020d, 2014-11-26 (annotated)
- Committer:
- manumaet
- Date:
- Wed Nov 26 12:10:09 2014 +0000
- Revision:
- 21:23bf4399020d
- Parent:
- 20:257d56530ae1
- Child:
- 22:576ee999b004
first publish, be aware that:; - receiving and sending on the same node is currently broke; - the code is not encapsulated yet
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| manumaet | 0:f50e671ffff7 | 1 | #include "mbed.h" |
| manumaet | 0:f50e671ffff7 | 2 | #include "PC.h" // Serial Port via USB for debugging with Terminal |
| manumaet | 0:f50e671ffff7 | 3 | #include "DW1000.h" |
| manumaet | 0:f50e671ffff7 | 4 | |
| manumaet | 0:f50e671ffff7 | 5 | PC pc(USBTX, USBRX, 921600); // USB UART Terminal |
| manumaet | 7:e634eeafc4d2 | 6 | DW1000 dw(D11, D12, D13, D10, D14); // SPI1 on Nucleo Board (MOSI, MISO, SCLK, CS, IRQ) |
| manumaet | 0:f50e671ffff7 | 7 | |
| manumaet | 15:e1fea7e2aff1 | 8 | const float timeunit = 1/(128*499.2e6); |
| manumaet | 14:8041c9b68406 | 9 | int i=0; |
| manumaet | 17:8afa5f9122da | 10 | char message[1200] = ""; |
| manumaet | 21:23bf4399020d | 11 | uint64_t TX_timestamp = 0; |
| manumaet | 21:23bf4399020d | 12 | uint64_t RX_timestamp = 0; |
| manumaet | 14:8041c9b68406 | 13 | |
| manumaet | 18:bbc7ca7d3a95 | 14 | void callbackRX(int framelength) { |
| manumaet | 21:23bf4399020d | 15 | RX_timestamp = dw.readRegister40(DW1000_RX_TIME, 0); |
| manumaet | 21:23bf4399020d | 16 | if (framelength < 200) { |
| manumaet | 16:96879e1c99f2 | 17 | char* receive = dw.receiveString(); // receive a string |
| manumaet | 16:96879e1c99f2 | 18 | pc.printf("Received: \"%s\" %d ", receive, framelength); |
| manumaet | 21:23bf4399020d | 19 | #if 0 |
| manumaet | 21:23bf4399020d | 20 | pc.printf("Status: %010llX ", dw.getStatus()); |
| manumaet | 21:23bf4399020d | 21 | sprintf(message, "ACK \"%s\"", receive); |
| manumaet | 21:23bf4399020d | 22 | dw.sendString(message); |
| manumaet | 21:23bf4399020d | 23 | wait(0.1); |
| manumaet | 21:23bf4399020d | 24 | #endif |
| manumaet | 16:96879e1c99f2 | 25 | delete[] receive; |
| manumaet | 16:96879e1c99f2 | 26 | } else |
| manumaet | 16:96879e1c99f2 | 27 | pc.printf("Received! %d ", framelength); |
| manumaet | 10:d077bb12d259 | 28 | |
| manumaet | 21:23bf4399020d | 29 | uint64_t difference = RX_timestamp - TX_timestamp; |
| manumaet | 15:e1fea7e2aff1 | 30 | //pc.printf("Timestamp: %lld\r\n", difference); |
| manumaet | 21:23bf4399020d | 31 | pc.printf("Time since TX: %fs\r\n", difference*timeunit); // TODO: gives some wrong values because of timer overflow |
| manumaet | 17:8afa5f9122da | 32 | dw.startRX(); |
| manumaet | 6:d5864a1b9e17 | 33 | } |
| manumaet | 6:d5864a1b9e17 | 34 | |
| manumaet | 18:bbc7ca7d3a95 | 35 | void callbackTX() { |
| manumaet | 21:23bf4399020d | 36 | TX_timestamp = dw.readRegister40(DW1000_TX_TIME, 0); |
| manumaet | 21:23bf4399020d | 37 | char messagecheck[1021]; |
| manumaet | 21:23bf4399020d | 38 | dw.readRegister(DW1000_TX_BUFFER, 0, (uint8_t*)messagecheck, 1021); |
| manumaet | 18:bbc7ca7d3a95 | 39 | if (i < 200) |
| manumaet | 21:23bf4399020d | 40 | pc.printf("%d Sent: \"%s\" %d ", i, messagecheck, strlen(messagecheck)+1); |
| manumaet | 18:bbc7ca7d3a95 | 41 | else |
| manumaet | 21:23bf4399020d | 42 | pc.printf("%d Sent! %d ", i, strlen(messagecheck)+1); |
| manumaet | 18:bbc7ca7d3a95 | 43 | pc.printf("Status: %010llX\r\n", dw.getStatus()); |
| manumaet | 18:bbc7ca7d3a95 | 44 | } |
| manumaet | 18:bbc7ca7d3a95 | 45 | |
| manumaet | 0:f50e671ffff7 | 46 | int main() { |
| manumaet | 20:257d56530ae1 | 47 | pc.printf("DecaWave 0.1\r\nup and running!\r\n"); |
| manumaet | 20:257d56530ae1 | 48 | dw.setEUI(0xFAEDCD01FAEDCD01); // basic methods called to check if we have a working SPI connection |
| manumaet | 4:6240b9c7a033 | 49 | pc.printf("%d DEVICE_ID register: 0x%X\r\n", i, dw.getDeviceID()); |
| manumaet | 4:6240b9c7a033 | 50 | pc.printf("%d EUI register: %016llX\r\n", i, dw.getEUI()); |
| manumaet | 4:6240b9c7a033 | 51 | pc.printf("%d Voltage: %f\r\n", i, dw.getVoltage()); |
| manumaet | 0:f50e671ffff7 | 52 | |
| manumaet | 18:bbc7ca7d3a95 | 53 | dw.callbackRX = &callbackRX; // TODO: must not jump to NULL & setter |
| manumaet | 18:bbc7ca7d3a95 | 54 | dw.callbackTX = &callbackTX; |
| manumaet | 14:8041c9b68406 | 55 | |
| manumaet | 14:8041c9b68406 | 56 | // Receiver initialisation |
| manumaet | 21:23bf4399020d | 57 | dw.writeRegister16(DW1000_SYS_MASK, 0, 0x4000); //| 0x0080); // TODO: RX only good frame 0x4000, RX all frames 0x2000, TX done 0x0080 |
| manumaet | 17:8afa5f9122da | 58 | dw.startRX(); |
| manumaet | 5:111f11c95d27 | 59 | |
| manumaet | 0:f50e671ffff7 | 60 | while(1) { |
| manumaet | 19:e94bc88c1eb0 | 61 | #if 1 |
| manumaet | 21:23bf4399020d | 62 | wait(10); |
| manumaet | 21:23bf4399020d | 63 | sprintf(message, "Hi %d", i); |
| manumaet | 10:d077bb12d259 | 64 | dw.sendString(message); |
| manumaet | 21:23bf4399020d | 65 | wait(0.3); |
| manumaet | 17:8afa5f9122da | 66 | #endif |
| manumaet | 15:e1fea7e2aff1 | 67 | #if 0 |
| manumaet | 21:23bf4399020d | 68 | pc.printf("%d Waiting... %d %d ", i, dw.receiving, dw.sending); |
| manumaet | 19:e94bc88c1eb0 | 69 | pc.printf("Status: %010llX\r\n", dw.getStatus()); |
| manumaet | 15:e1fea7e2aff1 | 70 | wait(5); |
| manumaet | 15:e1fea7e2aff1 | 71 | #endif |
| manumaet | 15:e1fea7e2aff1 | 72 | i++; |
| manumaet | 0:f50e671ffff7 | 73 | } |
| manumaet | 0:f50e671ffff7 | 74 | } |
