This is a class which contains function to interface with the MLX75320
Revision 13:ccf4ab73c33d, committed 2016-05-17
- Comitter:
- TNU
- Date:
- Tue May 17 18:54:04 2016 +0000
- Parent:
- 12:d1767e2bd3a8
- Commit message:
- Added documentation
Changed in this revision
LidarSpi.cpp | Show annotated file Show diff for this revision Revisions of this file |
LidarSpi.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/LidarSpi.cpp Fri Apr 29 13:39:19 2016 +0000 +++ b/LidarSpi.cpp Tue May 17 18:54:04 2016 +0000 @@ -8,7 +8,7 @@ #include <inttypes.h> #define SPIFREQ 8000 - +//Set DEBUG to 1 to enable debug printf over Serial interface #ifndef DEBUG #define DEBUG 0 #define debug_print(pntPc, ...) \ @@ -348,7 +348,7 @@ return 0; } -int LidarSpi::GetEchoes(Echo *ech, uint16_t maxN, uint16_t mode) +int LidarSpi::GetEchoes(Echo *ech, uint16_t maxN) { trigger.write(0); int res, a, b; @@ -489,7 +489,7 @@ } -int LidarSpi::GetEchoes(Echo *ech, uint16_t maxN, uint16_t mode, Serial* pc) +int LidarSpi::GetEchoes(Echo *ech, uint16_t maxN, Serial* pc) { trigger.write(0); int res, a, b; @@ -700,7 +700,7 @@ -int LidarSpi::GetTrace ( uint16_t *buf, uint16_t maxN, uint16_t nSam, uint16_t idx, Serial* pc){ +int LidarSpi::GetTrace ( uint16_t *buf, uint16_t maxN,Serial* pc){ trigger.write(0); int res, a, b; uint32_t cnt;
--- a/LidarSpi.h Fri Apr 29 13:39:19 2016 +0000 +++ b/LidarSpi.h Tue May 17 18:54:04 2016 +0000 @@ -5,7 +5,10 @@ #include "typeDef.h" #include "FunctionPointer.h" - +/** LidarSpi class + * This class defines methods and structs to interface with the MLX75320 lidar sensing product + * + */ class LidarSpi { @@ -36,6 +39,8 @@ // Used on header ADDR field to request all channels and as idx argument of GetTrace function static const uint16_t ADDR_ALLCH= 0x1F; + + // Structure for the processed data returned by the sensor struct Echo { uint32_t mDistance; @@ -121,6 +126,7 @@ REG_MAX = 0xFFFF // Number of registers } eASICREG; + //Internal type used by low level functions: SPI packet type enum PackType { PACK_RREG = 0, ///< Read register request @@ -133,7 +139,7 @@ PACK_RDATA_RESP_L, ///< Read data response long PACK_WDATA_L, ///< Write data long }; - + //Internal type used by low level functions: SPI status status type enum StatusType { STAT_OK = 0, @@ -143,7 +149,7 @@ STAT_SEQ_NB, STAT_TIMEOUT, }; - + //Internal type used by low level functions: SPI firmware packet type enum FirmType { FW_OTP = 0, @@ -155,32 +161,133 @@ }; + +/*===================================================================================================================================== +//===================================================================================================================================== + _____ _ _ _ __ _ _ + | __ \ | | | (_) / _| | | (_) + | |__) | _| |__ | |_ ___ | |_ _ _ _ __ ___| |_ _ ___ _ __ ___ + | ___/ | | | '_ \| | |/ __| | _| | | | '_ \ / __| __| |/ _ \| '_ \/ __| + | | | |_| | |_) | | | (__ | | | |_| | | | | (__| |_| | (_) | | | \__ \ + |_| \__,_|_.__/|_|_|\___| |_| \__,_|_| |_|\___|\__|_|\___/|_| |_|___/ + +//===================================================================================================================================== +//====================================================================================================================================*/ + + + /** Constructor + * @param: pin names for mosi, miso, clk, chipselect, dataready, reset, trigger and sample*/ LidarSpi(PinName mosi, PinName miso, PinName clk, PinName chipSelect, PinName dr, PinName rs, PinName tr, PinName smpl); + + /** SpiSetting + * Change frequency and SPI mode(clock phase and polarity) + * @param: frequency in Hz, mode ranging from 0 to 3, pointer to Serial interface for debugging + * @return: 0 on success */ int SpiSetting(long freq, int mode, Serial* pc); + + /** ReadReg + * Read register at address + * @param: register address, pointer to variable to register valueresult + * @return: 0 on success */ + int ReadReg ( uint32_t reg, uint32_t *val); + + /** WriteReg + * Write register to address + * @param: register address, value to write + * @return: 0 on success */ + int WriteReg ( uint32_t reg, uint32_t val); + + + /** GetEchoes + * Perform measurement and read processed data + * @param: pointer to Echo structure array to store measurement, structure array size (must be >=64) + * @return: 0 on success */ + int GetEchoes ( Echo *ech, uint16_t maxN); + + /** GetEchoes + * Perform measurement and read processed data + * @param: pointer to Echo structure array to store measurement, structure array size (must be >=64), pointer to serial interface for debugging + * @return: 0 on success */ + int GetEchoes ( Echo *ech, uint16_t maxN, Serial* pc); + + /** GetTrace + * Perform measurement and read raw trace buffer + * @param: pointer to int array to store trace buffer, structure array size (must be >=9472*2), pointer to serial interface for debugging + * @return: 0 on success */ + int GetTrace ( uint16_t *buf, uint16_t maxN, Serial* pc); + + /** LoadPatch + * Load patch stored on mbed Flash memory in MLX75320 and enable patch + * @param: path of patch.hex location, , pointer to serial interface for debugging + * @return: 0 on success */ + int LoadPatch (const char *patch, Serial *pc); + + /** SetTrace + * Set a variety of registers according to the preset values for a raw data measurement + * @return: 0 on success */ + int setTrace(void); + + /** SetTrace + * Set a variety of registers according to the preset values for a processed data measurement + * @return: 0 on success */ + int setEcho(void); + + /** SetLed + * Set a variety of registers according to the preset values to either fire or don't fire the LEDs during a measurement + * @param: True to enable LEDs, False to disable */ + int setLed(bool state); + + +/*===================================================================================================================================== +//===================================================================================================================================== + _____ _ _ _ _ _ __ _ _ + |_ _| | | | | | | | | (_) / _| | | (_) + | | _ __ | |_ ___ _ __ _ __ __ _| | ___ _ __ __| | ___| |__ _ _ __ _ __ _ _ _ __ __ _ | |_ _ _ _ __ ___| |_ _ ___ _ __ ___ + | | | '_ \| __/ _ \ '__| '_ \ / _` | | / _ \| '__| / _` |/ _ \ '_ \| | | |/ _` |/ _` | | '_ \ / _` | | _| | | | '_ \ / __| __| |/ _ \| '_ \/ __| + _| |_| | | | || __/ | | | | | (_| | | | (_) | | | (_| | __/ |_) | |_| | (_| | (_| | | | | | (_| | | | | |_| | | | | (__| |_| | (_) | | | \__ \ + |_____|_| |_|\__\___|_| |_| |_|\__,_|_| \___/|_| \__,_|\___|_.__/ \__,_|\__, |\__, |_|_| |_|\__, | |_| \__,_|_| |_|\___|\__|_|\___/|_| |_|___/ + __/ | __/ | __/ | + |___/ |___/ |___/ +//===================================================================================================================================== +//====================================================================================================================================*/ + + + + /** ReadReg (overloaded) + * Read register at address + * @param: register address, pointer to variable to register valueresult, pointer to serial interface for debugging + * @return: 0 on success */ + int ReadReg(uint32_t reg, uint32_t *val, Serial* pc); + + /** WriteReg + * Write register to address + * @param: register address, value to write, pointer to serial interface for debugging + * @return: 0 on success */ + int WriteReg ( uint32_t reg, uint32_t val, Serial* pc); + + /** GetTraceOne + * Perform measurement and read raw trace buffer, this method only reads back a single SPI packet + * @param: pointer to int array to store trace buffer, structure array size (must be >=9472*2), pointer to serial interface for debugging + * @return: 0 on success */ + int GetTraceOne ( uint16_t *buf, uint16_t maxN, uint16_t nSam, uint16_t idx,int index , Serial* pc); + + /** Trigger + * Change pin to high or low to use as trigger point for oscilloscope + * @param: 1 or 0 to set voltage level */ + void Trigger(int level); + + + int PrintAllReg (uint16_t * regs, uint32_t * val, uint16_t size); + int TxPacket(uint8_t* rData, uint16_t *rSz, uint8_t *tData, uint16_t tSz); int TxPacketWord(uint8_t* rData, uint16_t *rSz, uint8_t *tData, uint16_t tSz); int TxPacket(uint8_t* rData, uint16_t *rSz, uint8_t *tData, uint16_t tSz, Serial* pc); int TxPacketSlow(uint8_t* rData, uint16_t *rSz, uint8_t *tData, uint16_t tSz, uint16_t usDelay); int BasicRead(); int BasicTransfer(uint8_t* rData, uint16_t rSz, uint8_t *wData, uint16_t wSz, const event_callback_t callback); - - int ReadReg ( uint32_t reg, uint32_t *val); - int ReadReg(uint32_t reg, uint32_t *val, Serial* pc); - int WriteReg ( uint32_t reg, uint32_t val); int WriteRegSpeed ( uint32_t reg, uint32_t val, uint16_t usDelay); - int WriteReg ( uint32_t reg, uint32_t val, Serial* pc); int WriteRegSpeed ( uint32_t reg, uint32_t val, uint16_t usDelay, Serial* pc); - //int GetRegNfo ( uint16_t reg, const RegInfo **nfo); - int GetEchoes ( Echo *ech, uint16_t maxN, uint16_t mode); - int GetEchoes ( Echo *ech, uint16_t maxN, uint16_t mode, Serial* pc); - int GetTrace ( uint16_t *buf, uint16_t maxN, uint16_t nSam, uint16_t idx, Serial* pc); - int GetTraceOne ( uint16_t *buf, uint16_t maxN, uint16_t nSam, uint16_t idx,int index , Serial* pc); - int LoadPatch (const char *patch, Serial *pc); - int setTrace(void); - int setEcho(void); - int PrintAllReg (uint16_t * regs, uint32_t * val, uint16_t size); - int setLed(bool state); - void Trigger(int level); + //int SetConfig ( int configNum); //int SetAcqCfg ( uint16_t set, uint16_t led, uint16_t accLog, uint16_t ovrLog); //int Acquire ( uchar ab, uchar evGain, uchar evCh, uchar odGain, uchar odCh);