mirror of
https://github.com/Ralim/IronOS.git
synced 2025-02-26 07:53:55 +00:00
Create approx driver for setup
This commit is contained in:
40
workspace/TS100/Core/Drivers/MSA301.cpp
Normal file
40
workspace/TS100/Core/Drivers/MSA301.cpp
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* MSA301.cpp
|
||||||
|
*
|
||||||
|
* Created on: 3 Jan 2021
|
||||||
|
* Author: Ralim
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <MSA301.h>
|
||||||
|
#include "MSA301_defines.h"
|
||||||
|
#define MSA301_I2C_ADDRESS 0x4C
|
||||||
|
bool MSA301::detect() {
|
||||||
|
return FRToSI2C::probe(MSA301_I2C_ADDRESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const FRToSI2C::I2C_REG i2c_registers[] = { //
|
||||||
|
//
|
||||||
|
{ MSA301_REG_ODR, 0b00001000, 1 }, //X/Y/Z enabled @ 250Hz
|
||||||
|
{ MSA301_REG_POWERMODE, 0b0001001, 1 }, // Normal mode
|
||||||
|
{ MSA301_REG_RESRANGE, 0b00000001, 0 }, // 14bit resolution @ 4G range
|
||||||
|
{ MSA301_REG_ORIENT_HY, 0b01000000, 0 }, // 4*62.5mg hyst, no blocking, symmetrical
|
||||||
|
{ MSA301_REG_ORIENT_HY, 0b01000000, 0 }, // 4*62.5mg hyst, no blocking, symmetrical
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
bool MSA301::initalize() {
|
||||||
|
// Enable X/Y/Z
|
||||||
|
// Normal mode
|
||||||
|
// 250Hz filter
|
||||||
|
// 4G range
|
||||||
|
// 14 bit resolution
|
||||||
|
|
||||||
|
return FRToSI2C::writeRegistersBulk(MSA301_I2C_ADDRESS, i2c_registers, sizeof(i2c_registers) / sizeof(i2c_registers[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
Orientation MSA301::getOrientation() {
|
||||||
|
//read MSA301_REG_ORIENT_STATUS
|
||||||
|
}
|
||||||
|
|
||||||
|
void MSA301::getAxisReadings(int16_t &x, int16_t &y, int16_t &z) {
|
||||||
|
}
|
||||||
27
workspace/TS100/Core/Drivers/MSA301.h
Normal file
27
workspace/TS100/Core/Drivers/MSA301.h
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* MSA301.h
|
||||||
|
*
|
||||||
|
* Created on: 3 Jan 2021
|
||||||
|
* Author: Ralim
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DRIVERS_MSA301_H_
|
||||||
|
#define DRIVERS_MSA301_H_
|
||||||
|
#include "I2C_Wrapper.hpp"
|
||||||
|
#include "BSP.h"
|
||||||
|
|
||||||
|
class MSA301 {
|
||||||
|
public:
|
||||||
|
//Returns true if this accelerometer is detected
|
||||||
|
static bool detect();
|
||||||
|
//Init any internal state
|
||||||
|
static bool initalize();
|
||||||
|
// Reads the I2C register and returns the orientation
|
||||||
|
static Orientation getOrientation();
|
||||||
|
//Return the x/y/z axis readings as signed int16's
|
||||||
|
static void getAxisReadings(int16_t &x, int16_t &y, int16_t &z);
|
||||||
|
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* DRIVERS_MSA301_H_ */
|
||||||
34
workspace/TS100/Core/Drivers/MSA301_defines.h
Normal file
34
workspace/TS100/Core/Drivers/MSA301_defines.h
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* MSA301_defines.h
|
||||||
|
*
|
||||||
|
* Created on: 3 Jan 2021
|
||||||
|
* Author: Ralim
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DRIVERS_MSA301_DEFINES_H_
|
||||||
|
#define DRIVERS_MSA301_DEFINES_H_
|
||||||
|
//Definitions from Adafruit <3
|
||||||
|
|
||||||
|
#define MSA301_REG_PARTID 0x01 ///< Register that contains the part ID
|
||||||
|
#define MSA301_REG_OUT_X_L 0x02 ///< Register address for X axis lower byte
|
||||||
|
#define MSA301_REG_OUT_X_H 0x03 ///< Register address for X axis higher byte
|
||||||
|
#define MSA301_REG_OUT_Y_L 0x04 ///< Register address for Y axis lower byte
|
||||||
|
#define MSA301_REG_OUT_Y_H 0x05 ///< Register address for Y axis higher byte
|
||||||
|
#define MSA301_REG_OUT_Z_L 0x06 ///< Register address for Z axis lower byte
|
||||||
|
#define MSA301_REG_OUT_Z_H 0x07 ///< Register address for Z axis higher byte
|
||||||
|
#define MSA301_REG_MOTIONINT 0x09 ///< Register address for motion interrupt
|
||||||
|
#define MSA301_REG_DATAINT 0x0A ///< Register address for data interrupt
|
||||||
|
#define MSA301_REG_CLICKSTATUS 0x0B ///< Register address for click/doubleclick status
|
||||||
|
#define MSA301_REG_RESRANGE 0x0F ///< Register address for resolution range
|
||||||
|
#define MSA301_REG_ODR 0x10 ///< Register address for data rate setting
|
||||||
|
#define MSA301_REG_POWERMODE 0x11 ///< Register address for power mode setting
|
||||||
|
#define MSA301_REG_INTSET0 0x16 ///< Register address for interrupt setting #0
|
||||||
|
#define MSA301_REG_INTSET1 0x17 ///< Register address for interrupt setting #1
|
||||||
|
#define MSA301_REG_INTMAP0 0x19 ///< Register address for interrupt map #0
|
||||||
|
#define MSA301_REG_INTMAP1 0x1A ///< Register address for interrupt map #1
|
||||||
|
#define MSA301_REG_TAPDUR 0x2A ///< Register address for tap duration
|
||||||
|
#define MSA301_REG_TAPTH 0x2B ///< Register address for tap threshold
|
||||||
|
#define MSA301_REG_ORIENT_HY 0x2C ///< Register address for orientation Hysteresis
|
||||||
|
#define MSA301_REG_ORIENT_STATUS 0x0C ///< Register address for orientation hysteresis
|
||||||
|
|
||||||
|
#endif /* DRIVERS_MSA301_DEFINES_H_ */
|
||||||
Reference in New Issue
Block a user