Minor updates the QMC5883L driver, implemented the softreset function for the BMP280 sensor and wrote the driver for the CST816D touch screen ic.
This commit is contained in:
parent
facbd92bf5
commit
6187537a78
@ -4,7 +4,7 @@
|
|||||||
#include "wm_osal.h"
|
#include "wm_osal.h"
|
||||||
#include "FreeRTOS.h"
|
#include "FreeRTOS.h"
|
||||||
|
|
||||||
typedef struct
|
typedef struct BMP280_calibration_data
|
||||||
{
|
{
|
||||||
uint16_t dig_T1;
|
uint16_t dig_T1;
|
||||||
int16_t dig_T2;
|
int16_t dig_T2;
|
||||||
@ -19,9 +19,9 @@ typedef struct
|
|||||||
int16_t dig_P8;
|
int16_t dig_P8;
|
||||||
int16_t dig_P9;
|
int16_t dig_P9;
|
||||||
|
|
||||||
} BMP280_calibration_data;
|
} BMP280_calibration_data_t;
|
||||||
|
|
||||||
static BMP280_calibration_data _calibration_data = {0};
|
static BMP280_calibration_data_t _calibration_data = {0};
|
||||||
static BMP280_Mode_e _mode;
|
static BMP280_Mode_e _mode;
|
||||||
static int32_t t_fine = 0;
|
static int32_t t_fine = 0;
|
||||||
|
|
||||||
@ -141,5 +141,5 @@ float BMP280_get_temperature(void)
|
|||||||
|
|
||||||
bool BMP280_software_reset(void)
|
bool BMP280_software_reset(void)
|
||||||
{
|
{
|
||||||
return false;
|
return i2c_write_reg(BMP280_I2C_ADDR, BMP280_RESET, BMP280_RESET_CODE);
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
/* Device ID */
|
/* Device ID */
|
||||||
#define BMP280_ID 0x58
|
#define BMP280_ID 0x58
|
||||||
|
|
||||||
|
#define BMP280_RESET_CODE 0xB6
|
||||||
|
|
||||||
/* Device registers list */
|
/* Device registers list */
|
||||||
#define BMP280_TEMP_XLSB 0xFC
|
#define BMP280_TEMP_XLSB 0xFC
|
||||||
#define BMP280_TEMP_LSB 0xFB
|
#define BMP280_TEMP_LSB 0xFB
|
||||||
@ -37,14 +39,14 @@
|
|||||||
/* Field masks */
|
/* Field masks */
|
||||||
|
|
||||||
/* Configuration enumerations */
|
/* Configuration enumerations */
|
||||||
typedef enum
|
typedef enum BMP280_Mode
|
||||||
{
|
{
|
||||||
BMP280_Sleep = 0,
|
BMP280_Sleep = 0,
|
||||||
BMP280_Forced = 1,
|
BMP280_Forced = 1,
|
||||||
BMP280_Normal = 3,
|
BMP280_Normal = 3,
|
||||||
} BMP280_Mode_e;
|
} BMP280_Mode_e;
|
||||||
|
|
||||||
typedef enum
|
typedef enum BMP280_Oversampling
|
||||||
{
|
{
|
||||||
BMP280_Oversampling_Skipped = 0,
|
BMP280_Oversampling_Skipped = 0,
|
||||||
BMP280_Oversampling_x1 = 1,
|
BMP280_Oversampling_x1 = 1,
|
||||||
@ -54,7 +56,7 @@ typedef enum
|
|||||||
BMP280_Oversampling_x16 = 5,
|
BMP280_Oversampling_x16 = 5,
|
||||||
} BMP280_Oversampling_e;
|
} BMP280_Oversampling_e;
|
||||||
|
|
||||||
typedef enum
|
typedef enum BMP280_Filter
|
||||||
{
|
{
|
||||||
BMP280_Filter_OFF = 0,
|
BMP280_Filter_OFF = 0,
|
||||||
BMP280_Filter_x2 = 1,
|
BMP280_Filter_x2 = 1,
|
||||||
@ -63,7 +65,7 @@ typedef enum
|
|||||||
BMP280_Filter_x16 = 4,
|
BMP280_Filter_x16 = 4,
|
||||||
} BMP280_Filter_e;
|
} BMP280_Filter_e;
|
||||||
|
|
||||||
typedef enum
|
typedef enum BMP280_Standby_Duration
|
||||||
{
|
{
|
||||||
BMP280_Standby_0_5MS = 0,
|
BMP280_Standby_0_5MS = 0,
|
||||||
BMP280_Standby_62_5MS = 1,
|
BMP280_Standby_62_5MS = 1,
|
||||||
@ -75,8 +77,6 @@ typedef enum
|
|||||||
BMP280_Standby_4000MS = 7,
|
BMP280_Standby_4000MS = 7,
|
||||||
} BMP280_Standby_Duration_e;
|
} BMP280_Standby_Duration_e;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool BMP280_init(void);
|
bool BMP280_init(void);
|
||||||
|
|
||||||
bool BMP280_configure(BMP280_Mode_e mode, BMP280_Oversampling_e temperature_oversampling, BMP280_Oversampling_e pressure_oversampling, BMP280_Filter_e filter, BMP280_Standby_Duration_e standby_duration);
|
bool BMP280_configure(BMP280_Mode_e mode, BMP280_Oversampling_e temperature_oversampling, BMP280_Oversampling_e pressure_oversampling, BMP280_Filter_e filter, BMP280_Standby_Duration_e standby_duration);
|
||||||
@ -85,6 +85,8 @@ bool BMP280_trigger_measurement(void);
|
|||||||
|
|
||||||
float BMP280_get_temperature(void);
|
float BMP280_get_temperature(void);
|
||||||
|
|
||||||
|
float BMP280_get_pressure(void);
|
||||||
|
|
||||||
bool BMP280_software_reset(void);
|
bool BMP280_software_reset(void);
|
||||||
|
|
||||||
#endif //BMP280_H
|
#endif //BMP280_H
|
24
src/W800 SDK v1.00.08/app/app_drivers/i2c/CST816D.c
Normal file
24
src/W800 SDK v1.00.08/app/app_drivers/i2c/CST816D.c
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#include "i2c.h"
|
||||||
|
#include "CST816D.h"
|
||||||
|
|
||||||
|
bool CST816D_read_touch_event(CST816D_Touch_Data_t * const touch_data)
|
||||||
|
{
|
||||||
|
if(!touch_data) return false;
|
||||||
|
|
||||||
|
uint8_t data[7];
|
||||||
|
// Let's do an auto inc read of 7 bytes
|
||||||
|
if(i2c_read(CST816D_I2C_ADDR, CST816D_00, data, sizeof data))
|
||||||
|
{
|
||||||
|
touch_data->touch_x = ((data[3] & 0x0F) << 8) | data[4];
|
||||||
|
touch_data->touch_y = ((data[5] & 0x0F) << 8) | data[6];
|
||||||
|
touch_data->id = data[5] >> 4;
|
||||||
|
touch_data->touch_points = data[2] & 0x0F;
|
||||||
|
touch_data->gesture = data[1];
|
||||||
|
touch_data->event = data[3] >> 6;
|
||||||
|
touch_data->isValid = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
touch_data->isValid = false;
|
||||||
|
return false;
|
||||||
|
}
|
@ -1 +0,0 @@
|
|||||||
|
|
59
src/W800 SDK v1.00.08/app/app_drivers/i2c/CST816D.h
Normal file
59
src/W800 SDK v1.00.08/app/app_drivers/i2c/CST816D.h
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
#ifndef CST816D_H
|
||||||
|
#define CST816D_H
|
||||||
|
|
||||||
|
/* Device i2c address */
|
||||||
|
#define CST816D_I2C_ADDR 0x15
|
||||||
|
|
||||||
|
/* Device registers list */
|
||||||
|
|
||||||
|
#define CST816D_00 0x00
|
||||||
|
#define CST816D_GESTURE 0x01
|
||||||
|
#define CST816D_TOUCH_POINTS 0x02
|
||||||
|
#define CST816D_TOUCH_X_MSB 0x03
|
||||||
|
#define CST816D_TOUCH_X_LSB 0x04
|
||||||
|
#define CST816D_TOUCH_Y_MSB_AND_ID 0x05
|
||||||
|
#define CST816D_TOUCH_Y_LSB 0x06
|
||||||
|
|
||||||
|
typedef enum CST816D_Gesture
|
||||||
|
{
|
||||||
|
CST816D_Gesture_None = 0,
|
||||||
|
CST816D_Gesture_Swipe_Down,
|
||||||
|
CST816D_Gesture_Swipe_Up,
|
||||||
|
CST816D_Gesture_Swipe_Left,
|
||||||
|
CST816D_Gesture_Swipe_Right,
|
||||||
|
CST816D_Gesture_Tap,
|
||||||
|
CST816D_Gesture_Double_Tap = 11,
|
||||||
|
CST816D_Gesture_Long_Press,
|
||||||
|
} __attribute__((packed)) CST816D_Gesture_e;
|
||||||
|
|
||||||
|
typedef enum CST816D_Event
|
||||||
|
{
|
||||||
|
CST816D_Event_Touch_Down = 0,
|
||||||
|
CST816D_Event_Released,
|
||||||
|
CST816D_Event_Pressed,
|
||||||
|
} __attribute__((packed)) CST816D_Event_e;
|
||||||
|
|
||||||
|
typedef struct CST816D_Touch_Data
|
||||||
|
{
|
||||||
|
uint16_t touch_x;
|
||||||
|
uint16_t touch_y;
|
||||||
|
uint8_t id : 4;
|
||||||
|
uint8_t touch_points : 4;
|
||||||
|
CST816D_Gesture_e gesture;
|
||||||
|
bool isValid : 1;
|
||||||
|
CST816D_Event_e event : 2;
|
||||||
|
} CST816D_Touch_Data_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Reads the incoming touch event data which contains the x and y
|
||||||
|
* position of the touch as well as various other information.
|
||||||
|
* /!\ This function has to be called in the IRQ ISR because
|
||||||
|
* the chip can only be read during a short time after the it triggered the interrupt !
|
||||||
|
*
|
||||||
|
* @param touch_data a pointer to a user allocated structure of type CST816D_Touch_Data_t
|
||||||
|
* @return true on success, ie successfully read the data from the chip
|
||||||
|
* @return false otherwise
|
||||||
|
*/
|
||||||
|
bool CST816D_read_touch_event(CST816D_Touch_Data_t * const touch_data);
|
||||||
|
|
||||||
|
#endif //CST816D_H
|
@ -1,6 +0,0 @@
|
|||||||
#ifndef CST816D_H
|
|
||||||
#define CST816D_H
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif //CST816D_H
|
|
@ -19,13 +19,13 @@
|
|||||||
#define QMC5883L_DOR_BIT 0x04
|
#define QMC5883L_DOR_BIT 0x04
|
||||||
|
|
||||||
/* Configuration enumerations */
|
/* Configuration enumerations */
|
||||||
typedef enum
|
typedef enum QMC5883L_Mode_Control
|
||||||
{
|
{
|
||||||
Standby = 0,
|
Standby = 0,
|
||||||
Continuous = 1,
|
Continuous = 1,
|
||||||
} QMC5883L_Mode_Control_e;
|
} QMC5883L_Mode_Control_e;
|
||||||
|
|
||||||
typedef enum
|
typedef enum QMC5883L_Output_Data_Rate
|
||||||
{
|
{
|
||||||
ODR_10HZ = 0,
|
ODR_10HZ = 0,
|
||||||
ODR_50HZ = 1,
|
ODR_50HZ = 1,
|
||||||
@ -33,13 +33,13 @@ typedef enum
|
|||||||
ODR_200HZ = 3,
|
ODR_200HZ = 3,
|
||||||
} QMC5883L_Output_Data_Rate_e;
|
} QMC5883L_Output_Data_Rate_e;
|
||||||
|
|
||||||
typedef enum
|
typedef enum QMC5883L_Full_Scale
|
||||||
{
|
{
|
||||||
FS_2G = 0,
|
FS_2G = 0,
|
||||||
FS_8G = 1,
|
FS_8G = 1,
|
||||||
} QMC5883L_Full_Scale_e;
|
} QMC5883L_Full_Scale_e;
|
||||||
|
|
||||||
typedef enum
|
typedef enum QMC5883L_Over_Sample_Ratio
|
||||||
{
|
{
|
||||||
OSR_512 = 0,
|
OSR_512 = 0,
|
||||||
OSR_256 = 1,
|
OSR_256 = 1,
|
||||||
@ -48,14 +48,14 @@ typedef enum
|
|||||||
} QMC5883L_Over_Sample_Ratio_e;
|
} QMC5883L_Over_Sample_Ratio_e;
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct QMC5883L_MData
|
||||||
{
|
{
|
||||||
int16_t MFieldX;
|
int16_t MFieldX;
|
||||||
int16_t MFieldY;
|
int16_t MFieldY;
|
||||||
int16_t MFieldZ;
|
int16_t MFieldZ;
|
||||||
} QMC5883L_MData_t;
|
} QMC5883L_MData_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct QMC5883L_MData_calibrated
|
||||||
{
|
{
|
||||||
int16_t MFieldX;
|
int16_t MFieldX;
|
||||||
int16_t MFieldY;
|
int16_t MFieldY;
|
||||||
|
Loading…
Reference in New Issue
Block a user