MBED driver for Max1471.

Revision:
0:99e9397112f0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MAX1471.h	Fri Oct 04 15:15:06 2019 +0300
@@ -0,0 +1,454 @@
+/*
+ * MAX1471.h
+ *
+ *  Created on: Dec 17, 2018
+ *      Author: Erman.Komurcu
+ */
+
+#ifndef MAX1471_MAX1471_H_
+#define MAX1471_MAX1471_H_
+
+#include "mbed.h"
+#include "rtos.h"
+#include "MAX1471_regs.h"
+
+
+class MAX1471
+{
+private:
+	max1471_reg_map_t *reg;
+	SPI *spi_handler;
+	DigitalOut *ssel;
+	DigitalOut *bLED;
+	DigitalIn *dio;
+
+	int spi_mode;
+	int modulation; /*!< Current modulation mode */
+	float oscFrequency; /*!< Extern oscillator frequency */
+
+
+public:
+
+    typedef enum {
+        PWR_CFG_ADDR		= 0x00,
+        CFG_ADDR       		= 0x01,
+        CTRL_ADDR       	= 0x02,
+        OSC_FREQ_ADDR       = 0x03,
+        OFF_TMR_UP_ADDR 	= 0x04,
+        OFF_TMR_DWN_ADDR	= 0x05,
+        CPU_REC_ADDR    	= 0x06,
+        RF_ST_UP_ADDR   	= 0x07,
+        RF_ST_DWN_ADDR  	= 0x08,
+        STAT_ADDR       	= 0x09,
+        AGC_DWL_TMR_ADDR	= 0x0A,
+    } register_address_t;
+
+    typedef enum {
+        ASK = 0,
+		FSK,
+		BOTH
+    } modulation_type_t;
+
+
+	//Constructors
+
+	MAX1471(DigitalOut *cs);
+
+
+    /* PUBLIC FUNCTION DECLARATIONS */
+
+    /**
+    * @brief Read from a register.
+    *
+    * @param[in] reg Address of a register to be read.
+    * @param[out] value Pointer to save result value.
+    * @param[in] len Size of result to be read.
+    *
+    * @returns 0 on success, negative error code on failure.
+    */
+    int read_register(uint8_t reg, uint8_t *value, uint8_t len);
+
+    /**
+    * @brief Write to a register.
+    *
+    * @param[in] reg Address of a register to be written.
+    * @param[out] value Pointer of value to be written to register.
+    * @param[in] len Size of result to be written.
+    *
+    * @returns 0 on success, negative error code on failure.
+    */
+    int write_register(uint8_t reg, const uint8_t *value, uint8_t len);
+
+    /**
+    * @brief Write to a register.
+    *
+    * @param[in] reg Address of a register to be written.
+    * @param[out] value Value to be written to register.
+    * @param[in] len Size of result to be written.
+    *
+    * @returns 0 on success, negative error code on failure.
+    */
+    int write_register(uint8_t reg, const uint8_t value, uint8_t len);
+    /**
+    * @brief Set 3-Wire or 4-Wire SPI
+    *
+    * @param[in] type Type of SPI interface
+    * 				  0 -> 3-Wire SPI interface (default)
+    * 				  1 -> 4-Wire SPI interface (DOUT_FSK) enabled
+    * 				  2 -> 4-Wire SPI interface (DOUT_ASK) enabled
+    *
+    * @returns 0 on success, negative error code on failure.
+    */
+    int set_spi_type(uint8_t type);
+
+    /**
+    * @brief ASK peak detector management
+    *
+    * @param[in] enable Requested status of ASK Peak Detector
+    *
+    * @returns 0 on success, negative error code on failure.
+    */
+    int ASKPeakDetectorEnable(bool enable);
+
+    /**
+    * @brief FSK peak detector management
+    *
+    * @param[in] enable Requested status of FSK Peak Detector
+    *
+    * @returns 0 on success, negative error code on failure.
+    */
+    int FSKPeakDetectorEnable(bool enable);
+
+    /**
+      * @brief ASK base band receiver management
+      *
+      * @param[in] enable Requested status of ASK base band receiver
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int ASKBaseBandReceiverEnable(bool enable);
+
+    /**
+      * @brief FSK base band receiver management
+      *
+      * @param[in] enable Requested status of FSK base band receiver
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int FSKBaseBandReceiverEnable(bool enable);
+
+    /**
+      * @brief RF Mixer on/off management
+      *
+      * @param[in] enable Requested status of RF mixer
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int RFMixerEnable(bool enable);
+
+    /**
+      * @brief Automatic gain controller on/off management
+      *
+      * @param[in] enable Requested status of AGC
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int AGCEnable(bool enable);
+
+    /**
+      * @brief Low noise amplifier on/off management
+      *
+      * @param[in] enable Requested status of LNA
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int LNAEnable(bool enable);
+
+    /**
+      * @brief 4-wire SPI MISO pin assignment to FSK data pin
+      *
+      * @param[in] enable Requested status of DOUT as FSK data pin
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int SetFDATAasDOUTPin(bool enable);
+
+    /**
+      * @brief 4-wire SPI MISO pin assignment to ASK data pin
+      *
+      * @param[in] enable Requested status of DOUT as ASK data pin
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int SetADATAasDOUTPin(bool enable);
+
+    /**
+      * @brief Long FSK calibration on/off management
+      *
+      * @param[in] enable Requested status of longer FSK calibration mode
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int LongerFSKCalibrationEnable(bool enable);
+
+    /**
+      * @brief Discontinuous receive mode on/off management
+      *
+      * @param[in] enable Requested status of discontinuous receive mode
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int DRXEnable(bool enable);
+
+    /**
+      * @brief LNA's low or high gain mode selection
+      *
+      * @param[in] isHighGain Requested gain mode is high gain or low gain
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int LNAGainState(bool isHighGain);
+
+    /**
+      * @brief FSK Calibration starter
+      *
+      * @param[in] enable Start or stop FSK calibration
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int FSKCalibrationDone(bool enable);
+
+    /**
+      * @brief Get AGC Dwell timer value
+      *
+      * @param[out] valuePtr Pointer to AGC Dwell timer value
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int GetAGCDwellTimer( unsigned char *valuePtr );
+
+    /**
+       * @brief Set AGC Dwell timer value
+       *
+       * @param[in] value Desired value of AGC Dwell timer
+       *
+       * @returns 0 on success, negative error code on failure.
+       */
+    int SetAGCDwellTimer( unsigned char value );
+
+    /**
+      * @brief Poll timer calibration starter
+      *
+      * @param[in] enable Start or stop poll timer calibration
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int PollTimerCalibrationEnable(bool enable);
+
+    /**
+      * @brief Track mode for ASK peak detector on/off control
+      *
+      * @param[in] enable Enable/disable track mode of ASK peak detector
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int ASKPeakDetectorTrackEnable(bool enable);
+
+    /**
+      * @brief Track mode for FSK peak detector on/off control
+      *
+      * @param[in] enable Enable/disable track mode of FSK peak detector
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int FSKPeakDetectorTrackEnable(bool enable);
+
+    /**
+      * @brief Locks AGC's current state
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int LockAGCCurrentState();
+
+    /**
+      * @brief Gets calibration status of poll timer calibration
+      *
+      * @param[out] valuePtr Pointer to current status of poll timer calibration
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int GetPollTimerCalibrationDoneStatus( unsigned char *valuePtr );
+
+    /**
+      * @brief Gets calibration status of FSK calibration
+      *
+      * @param[out] valuePtr Pointer to current status of FSK calibration
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int GetFSKCalibrationDoneStatus( unsigned char *valuePtr );
+
+    /**
+      * @brief Gets clock alive status
+      *
+      * @param[out] valuePtr Pointer to clock alive status
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int GetClockAliveStatus( unsigned char *valuePtr );
+
+    /**
+      * @brief Gets AGC's current status
+      *
+      * @param[out] valuePtr Pointer to AGC's current status
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int GetAGCStatus( unsigned char *valuePtr );
+
+    /**
+      * @brief Get whether PLL is locked or not
+      *
+      * @param[out] valuePtr Pointer to PLL's current status
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int GetPLLLockStatus( unsigned char *valuePtr );
+
+    /**
+      * @brief Get off timer prescale value
+      *
+      * @param[out] valuePtr Pointer to off timer prescale value
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int GetOffTimerPrescale( unsigned char *valuePtr );
+
+    /**
+      * @brief Set off timer prescale value
+      *
+      * @param[in] value Desired value of off timer prescale
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int SetOffTimerPrescale( unsigned char value );
+
+    /**
+      * @brief Set rf settle timer value
+      *
+      * @param[in] value Desired value of off timer rf settle timer
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int SetRFSettleTimer( unsigned short int value );
+
+    /**
+      * @brief Get rf settle timer value
+      *
+      * @param[out] valuePtr Pointer to rf settle timer value
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int GetRFSettleTimer( unsigned short int *valuePtr );
+
+    /**
+      * @brief Set off timer value
+      *
+      * @param[in] value Desired value of off timer
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int SetOFFTimer( unsigned short int value );
+
+    /**
+      * @brief Get off timer value
+      *
+      * @param[out] valuePtr Pointer to off timer value
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int GetOFFTimer( unsigned short int *valuePtr );
+
+    /**
+      * @brief Set CPU recovery timer value
+      *
+      * @param[in] value Desired value of CPU recovery timer
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int SetCPURecoveryTimer( unsigned char value );
+
+    /**
+      * @brief Get CPU recovery timer value
+      *
+      * @param[out] valuePtr Pointer to CPU recovery timer value
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int GetCPURecoveryTimer( unsigned char *valuePtr );
+
+    /**
+      * @brief Set RF oscillator frequency
+      *
+      * @param[in] value Desired frequency
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int SetRFOscillatorFreq( float frequency );
+
+    /**
+      * @brief Get RF oscillator frequency
+      *
+      * @param[out] freqPtr Pointer to RF oscillator frequency
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int GetRFOscillatorFreq( float *freqPtr );
+
+    /**
+    * @brief Reset the chip
+    *
+    * @returns 0 on success, negative error code on failure.
+    */
+    int reset();
+
+    /**
+    * @brief NOP command
+    *
+    * @returns 0 on success, negative error code on failure.
+    */
+    int nop();
+
+    /**
+    * @brief Initialize the chip
+    *
+    * @returns 0 on success, negative error code on failure.
+    */
+    int InitMAX1471();
+
+    int PrepMAX1471RX();
+
+    int PrepMAX1471RX( modulation_type_t modType );
+
+    int PrepMAX1471RX_DRX();
+
+    /**
+      * @brief Prepare MAX1471's sleep mode
+      *
+      * @param[in] enable Sleep mode enable/disable
+      *
+      * @returns 0 on success, negative error code on failure.
+      */
+    int PrepMAX1471Sleep(bool enable);
+
+};
+extern const uint32_t pmu_program_sample_data_in[];
+extern const uint32_t pmu_program_stop_buff1_filling[];
+extern const uint32_t pmu_program_stop_buff0_filling[];
+extern const uint32_t pmu_program_start_buff1_filling[];
+extern const uint32_t pmu_program_save_current_data_to_buffer0[];
+extern const uint32_t pmu_program_save_current_data_to_buffer1[];
+extern const uint32_t pmu_program_sample_0[];
+extern const uint32_t pmu_program_sample_1[];
+
+#endif /* MAX1471_MAX1471_H_ */