init
Dependencies: aconno_I2C Lis2dh12 WatchdogTimer
MM2WayRanging.h
- Committer:
- pathfindr
- Date:
- 2020-02-17
- Revision:
- 58:8d4a354816b1
File content as of revision 58:8d4a354816b1:
#ifndef MM2WAYRANGING_H #define MM2WAYRANGING_H #include "mbed.h" #include "DW1000.h" #define TIMEUNITS_TO_US (1/(128*499.2)) // conversion between the decawave timeunits (ca 15.65ps) to microseconds. #define US_TO_TIMEUNITS (128*499.2) // conversion between microseconds to the decawave timeunits (ca 15.65ps). #define MMRANGING_2POWER40 1099511627776 // decimal value of 2^40 to correct timeroverflow between timestamps //Predefined delay for the critical answers in the ranging algorithm //HAS TO BE BIGGER THAN THE PROCESSING TIME OF THE FRAME ON THE NODE #define ANSWER_DELAY_US 2500 //2500 works for 110kbps, 900 for 6.8Mbps #define ANSWER_DELAY_TIMEUNITS ANSWER_DELAY_US * (128*499.2) class MM2WayRanging { public: MM2WayRanging(DW1000& DW); bool beacon_requestRanging(); void anchor_standbyToRange(); bool isBeacon; uint8_t address; // Identifies the nodes as source and destination in rangingframes bool overflow; // TRUE if counter overflows while ranging private: DW1000& dw; Timer LocalTimer; bool waitForFrameTX(float time_before); bool waitForFrameRX(float time_before); void callbackRX(); void callbackTX(); void beacon_ready_Send(); void anchor_to_beacon_Send(uint8_t destination); void beacon_to_anchor_response_Send(uint8_t destination, uint64_t rxTimestamp); //void correctReceiverTimestamps(uint8_t source); //void correctSenderTimestamps(uint8_t source); enum FrameType{ BEACON_READY=1, ANCHOR_TO_BEACON_PING, BEACON_TO_ANCHOR_RESPONSE }; //the packed attribute makes sure the types only use their respective size in memory (8 bit for uint8_t), otherwise they would always use 32 bit //IT IS A GCC SPECIFIC DIRECTIVE struct __attribute__((packed, aligned(1))) RangingFrame { uint8_t source; uint8_t destination; uint8_t type; }; RangingFrame rangingFrame; // buffer in class for sending a frame (not made locally because then we can recall in the interrupt what was sent) RangingFrame receivedFrame; uint64_t RxTimestamp; uint64_t rangingTxTimestamp[5]; uint64_t rangingRxTimestamp[5]; uint64_t rangingTOF[5]; float rangingDistance[5]; }; #endif