Add BMA423 accelerometer code
This commit is contained in:
		
							parent
							
								
									46af1b07ae
								
							
						
					
					
						commit
						6609a3ab13
					
				
					 9 changed files with 9822 additions and 0 deletions
				
			
		
							
								
								
									
										120
									
								
								src/Watchy.cpp
									
										
									
									
									
								
							
							
						
						
									
										120
									
								
								src/Watchy.cpp
									
										
									
									
									
								
							| 
						 | 
					@ -4,6 +4,8 @@ WatchyDisplayBase Watchy::m_displayBase;
 | 
				
			||||||
WatchyDisplay Watchy::m_display(Watchy::m_displayBase);
 | 
					WatchyDisplay Watchy::m_display(Watchy::m_displayBase);
 | 
				
			||||||
WatchyRTC Watchy::m_RTC;
 | 
					WatchyRTC Watchy::m_RTC;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RTC_DATA_ATTR BMA423 Watchy::m_sensor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RTC_DATA_ATTR bool g_displayFullInit = true;
 | 
					RTC_DATA_ATTR bool g_displayFullInit = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Watchy::Watchy()
 | 
					Watchy::Watchy()
 | 
				
			||||||
| 
						 | 
					@ -40,6 +42,7 @@ void Watchy::Init()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					      BmaConfig();
 | 
				
			||||||
      ConnectWiFi();
 | 
					      ConnectWiFi();
 | 
				
			||||||
      SyncNTPTime();
 | 
					      SyncNTPTime();
 | 
				
			||||||
      DisconnectWiFi();
 | 
					      DisconnectWiFi();
 | 
				
			||||||
| 
						 | 
					@ -151,3 +154,120 @@ void Watchy::SetBusyCallback()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  m_display.epd2.setBusyCallback(DisplayBusyCallback);
 | 
					  m_display.epd2.setBusyCallback(DisplayBusyCallback);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint16_t Watchy::ReadRegister(uint8_t address, uint8_t reg, uint8_t *data, uint16_t len)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  Wire.beginTransmission(address);
 | 
				
			||||||
 | 
					  Wire.write(reg);
 | 
				
			||||||
 | 
					  Wire.endTransmission();
 | 
				
			||||||
 | 
					  Wire.requestFrom((uint8_t)address, (uint8_t)len);
 | 
				
			||||||
 | 
					  uint8_t i = 0;
 | 
				
			||||||
 | 
					  while (Wire.available()) {
 | 
				
			||||||
 | 
					    data[i++] = Wire.read();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint16_t Watchy::WriteRegister(uint8_t address, uint8_t reg, uint8_t *data, uint16_t len)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  Wire.beginTransmission(address);
 | 
				
			||||||
 | 
					  Wire.write(reg);
 | 
				
			||||||
 | 
					  Wire.write(data, len);
 | 
				
			||||||
 | 
					  return (0 != Wire.endTransmission());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Watchy::BmaConfig()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if (m_sensor.begin(ReadRegister, WriteRegister, delay) == false) {
 | 
				
			||||||
 | 
					    // fail to init BMA
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Accel parameter structure
 | 
				
			||||||
 | 
					  Acfg cfg;
 | 
				
			||||||
 | 
					  /*!
 | 
				
			||||||
 | 
					      Output data rate in Hz, Optional parameters:
 | 
				
			||||||
 | 
					          - BMA4_OUTPUT_DATA_RATE_0_78HZ
 | 
				
			||||||
 | 
					          - BMA4_OUTPUT_DATA_RATE_1_56HZ
 | 
				
			||||||
 | 
					          - BMA4_OUTPUT_DATA_RATE_3_12HZ
 | 
				
			||||||
 | 
					          - BMA4_OUTPUT_DATA_RATE_6_25HZ
 | 
				
			||||||
 | 
					          - BMA4_OUTPUT_DATA_RATE_12_5HZ
 | 
				
			||||||
 | 
					          - BMA4_OUTPUT_DATA_RATE_25HZ
 | 
				
			||||||
 | 
					          - BMA4_OUTPUT_DATA_RATE_50HZ
 | 
				
			||||||
 | 
					          - BMA4_OUTPUT_DATA_RATE_100HZ
 | 
				
			||||||
 | 
					          - BMA4_OUTPUT_DATA_RATE_200HZ
 | 
				
			||||||
 | 
					          - BMA4_OUTPUT_DATA_RATE_400HZ
 | 
				
			||||||
 | 
					          - BMA4_OUTPUT_DATA_RATE_800HZ
 | 
				
			||||||
 | 
					          - BMA4_OUTPUT_DATA_RATE_1600HZ
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
 | 
					  cfg.odr = BMA4_OUTPUT_DATA_RATE_100HZ;
 | 
				
			||||||
 | 
					  /*!
 | 
				
			||||||
 | 
					      G-range, Optional parameters:
 | 
				
			||||||
 | 
					          - BMA4_ACCEL_RANGE_2G
 | 
				
			||||||
 | 
					          - BMA4_ACCEL_RANGE_4G
 | 
				
			||||||
 | 
					          - BMA4_ACCEL_RANGE_8G
 | 
				
			||||||
 | 
					          - BMA4_ACCEL_RANGE_16G
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
 | 
					  cfg.range = BMA4_ACCEL_RANGE_2G;
 | 
				
			||||||
 | 
					  /*!
 | 
				
			||||||
 | 
					      Bandwidth parameter, determines filter configuration, Optional parameters:
 | 
				
			||||||
 | 
					          - BMA4_ACCEL_OSR4_AVG1
 | 
				
			||||||
 | 
					          - BMA4_ACCEL_OSR2_AVG2
 | 
				
			||||||
 | 
					          - BMA4_ACCEL_NORMAL_AVG4
 | 
				
			||||||
 | 
					          - BMA4_ACCEL_CIC_AVG8
 | 
				
			||||||
 | 
					          - BMA4_ACCEL_RES_AVG16
 | 
				
			||||||
 | 
					          - BMA4_ACCEL_RES_AVG32
 | 
				
			||||||
 | 
					          - BMA4_ACCEL_RES_AVG64
 | 
				
			||||||
 | 
					          - BMA4_ACCEL_RES_AVG128
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
 | 
					  cfg.bandwidth = BMA4_ACCEL_NORMAL_AVG4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*! Filter performance mode , Optional parameters:
 | 
				
			||||||
 | 
					      - BMA4_CIC_AVG_MODE
 | 
				
			||||||
 | 
					      - BMA4_CONTINUOUS_MODE
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
 | 
					  cfg.perf_mode = BMA4_CONTINUOUS_MODE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Configure the BMA423 accelerometer
 | 
				
			||||||
 | 
					  m_sensor.setAccelConfig(cfg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Enable BMA423 accelerometer
 | 
				
			||||||
 | 
					  // Warning : Need to use feature, you must first enable the accelerometer
 | 
				
			||||||
 | 
					  // Warning : Need to use feature, you must first enable the accelerometer
 | 
				
			||||||
 | 
					  m_sensor.enableAccel();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  struct bma4_int_pin_config config;
 | 
				
			||||||
 | 
					  config.edge_ctrl = BMA4_LEVEL_TRIGGER;
 | 
				
			||||||
 | 
					  config.lvl       = BMA4_ACTIVE_HIGH;
 | 
				
			||||||
 | 
					  config.od        = BMA4_PUSH_PULL;
 | 
				
			||||||
 | 
					  config.output_en = BMA4_OUTPUT_ENABLE;
 | 
				
			||||||
 | 
					  config.input_en  = BMA4_INPUT_DISABLE;
 | 
				
			||||||
 | 
					  // The correct trigger interrupt needs to be configured as needed
 | 
				
			||||||
 | 
					  m_sensor.setINTPinConfig(config, BMA4_INTR1_MAP);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  struct bma423_axes_remap remap_data;
 | 
				
			||||||
 | 
					  remap_data.x_axis      = 1;
 | 
				
			||||||
 | 
					  remap_data.x_axis_sign = 0xFF;
 | 
				
			||||||
 | 
					  remap_data.y_axis      = 0;
 | 
				
			||||||
 | 
					  remap_data.y_axis_sign = 0xFF;
 | 
				
			||||||
 | 
					  remap_data.z_axis      = 2;
 | 
				
			||||||
 | 
					  remap_data.z_axis_sign = 0xFF;
 | 
				
			||||||
 | 
					  // Need to raise the wrist function, need to set the correct axis
 | 
				
			||||||
 | 
					  m_sensor.setRemapAxes(&remap_data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Enable BMA423 isStepCounter feature
 | 
				
			||||||
 | 
					  m_sensor.enableFeature(BMA423_STEP_CNTR, true);
 | 
				
			||||||
 | 
					  // Enable BMA423 isTilt feature
 | 
				
			||||||
 | 
					  m_sensor.enableFeature(BMA423_TILT, true);
 | 
				
			||||||
 | 
					  // Enable BMA423 isDoubleClick feature
 | 
				
			||||||
 | 
					  m_sensor.enableFeature(BMA423_WAKEUP, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Reset steps
 | 
				
			||||||
 | 
					  m_sensor.resetStepCounter();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Turn on feature interrupt
 | 
				
			||||||
 | 
					  m_sensor.enableStepCountInterrupt();
 | 
				
			||||||
 | 
					  m_sensor.enableTiltInterrupt();
 | 
				
			||||||
 | 
					  // It corresponds to isDoubleClick interrupt
 | 
				
			||||||
 | 
					  m_sensor.enableWakeupInterrupt();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@
 | 
				
			||||||
#include <WiFi.h>
 | 
					#include <WiFi.h>
 | 
				
			||||||
#include <WiFiUdp.h>
 | 
					#include <WiFiUdp.h>
 | 
				
			||||||
#include <NTPClient.h>
 | 
					#include <NTPClient.h>
 | 
				
			||||||
 | 
					#include "bma.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Watchy
 | 
					class Watchy
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -34,4 +35,11 @@ protected:
 | 
				
			||||||
  static WatchyDisplayBase m_displayBase;
 | 
					  static WatchyDisplayBase m_displayBase;
 | 
				
			||||||
  static WatchyDisplay m_display;
 | 
					  static WatchyDisplay m_display;
 | 
				
			||||||
  static WatchyRTC m_RTC;
 | 
					  static WatchyRTC m_RTC;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static RTC_DATA_ATTR BMA423 m_sensor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					  void BmaConfig();
 | 
				
			||||||
 | 
					  static uint16_t ReadRegister(uint8_t address, uint8_t reg, uint8_t *data, uint16_t len);
 | 
				
			||||||
 | 
					  static uint16_t WriteRegister(uint8_t address, uint8_t reg, uint8_t *data, uint16_t len);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
							
								
								
									
										283
									
								
								src/bma.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										283
									
								
								src/bma.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,283 @@
 | 
				
			||||||
 | 
					#include "bma.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DEBUGPORT Serial
 | 
				
			||||||
 | 
					#ifdef DEBUGPORT
 | 
				
			||||||
 | 
					#define DEBUG(...) DEBUGPORT.printf(__VA_ARGS__)
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#define DEBUG(...)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BMA423::BMA423() {
 | 
				
			||||||
 | 
					  __readRegisterFptr   = nullptr;
 | 
				
			||||||
 | 
					  __writeRegisterFptr  = nullptr;
 | 
				
			||||||
 | 
					  __delayCallBlackFptr = nullptr;
 | 
				
			||||||
 | 
					  __init               = false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BMA423::~BMA423() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::begin(bma4_com_fptr_t readCallBlack,
 | 
				
			||||||
 | 
					                   bma4_com_fptr_t writeCallBlack,
 | 
				
			||||||
 | 
					                   bma4_delay_fptr_t delayCallBlack, uint8_t address) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (__init || readCallBlack == nullptr || writeCallBlack == nullptr ||
 | 
				
			||||||
 | 
					      delayCallBlack == nullptr) {
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  __readRegisterFptr   = readCallBlack;
 | 
				
			||||||
 | 
					  __writeRegisterFptr  = writeCallBlack;
 | 
				
			||||||
 | 
					  __delayCallBlackFptr = delayCallBlack;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  __devFptr.dev_addr       = address;
 | 
				
			||||||
 | 
					  __devFptr.interface      = BMA4_I2C_INTERFACE;
 | 
				
			||||||
 | 
					  __devFptr.bus_read       = readCallBlack;
 | 
				
			||||||
 | 
					  __devFptr.bus_write      = writeCallBlack;
 | 
				
			||||||
 | 
					  __devFptr.delay          = delayCallBlack;
 | 
				
			||||||
 | 
					  __devFptr.read_write_len = 8;
 | 
				
			||||||
 | 
					  __devFptr.resolution     = 12;
 | 
				
			||||||
 | 
					  __devFptr.feature_len    = BMA423_FEATURE_SIZE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  softReset();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  __delayCallBlackFptr(20);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (bma423_init(&__devFptr) != BMA4_OK) {
 | 
				
			||||||
 | 
					    DEBUG("BMA423 FAIL\n");
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (bma423_write_config_file(&__devFptr) != BMA4_OK) {
 | 
				
			||||||
 | 
					    DEBUG("BMA423 Write Config FAIL\n");
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  __init = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  struct bma4_int_pin_config config;
 | 
				
			||||||
 | 
					  config.edge_ctrl = BMA4_LEVEL_TRIGGER;
 | 
				
			||||||
 | 
					  config.lvl       = BMA4_ACTIVE_HIGH;
 | 
				
			||||||
 | 
					  config.od        = BMA4_PUSH_PULL;
 | 
				
			||||||
 | 
					  config.output_en = BMA4_OUTPUT_ENABLE;
 | 
				
			||||||
 | 
					  config.input_en  = BMA4_INPUT_DISABLE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (bma4_set_int_pin_config(&config, BMA4_INTR1_MAP, &__devFptr) != BMA4_OK) {
 | 
				
			||||||
 | 
					    DEBUG("BMA423 SET INT FAIL\n");
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void BMA423::softReset() {
 | 
				
			||||||
 | 
					  uint8_t reg = BMA4_RESET_ADDR;
 | 
				
			||||||
 | 
					  __writeRegisterFptr(BMA4_I2C_ADDR_PRIMARY, BMA4_RESET_SET_MASK, ®, 1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void BMA423::shutDown() {
 | 
				
			||||||
 | 
					  bma4_set_advance_power_save(BMA4_DISABLE, &__devFptr);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void BMA423::wakeUp() { bma4_set_advance_power_save(BMA4_ENABLE, &__devFptr); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint16_t BMA423::getErrorCode() {
 | 
				
			||||||
 | 
					  struct bma4_err_reg err;
 | 
				
			||||||
 | 
					  uint16_t rslt = bma4_get_error_status(&err, &__devFptr);
 | 
				
			||||||
 | 
					  return rslt;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint16_t BMA423::getStatus() {
 | 
				
			||||||
 | 
					  uint8_t status;
 | 
				
			||||||
 | 
					  bma4_get_status(&status, &__devFptr);
 | 
				
			||||||
 | 
					  return status;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint32_t BMA423::getSensorTime() {
 | 
				
			||||||
 | 
					  uint32_t ms;
 | 
				
			||||||
 | 
					  bma4_get_sensor_time(&ms, &__devFptr);
 | 
				
			||||||
 | 
					  return ms;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::selfTest() {
 | 
				
			||||||
 | 
					  return (BMA4_OK ==
 | 
				
			||||||
 | 
					          bma4_selftest_config(BMA4_ACCEL_SELFTEST_ENABLE_MSK, &__devFptr));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint8_t BMA423::getDirection() {
 | 
				
			||||||
 | 
					  Accel acc;
 | 
				
			||||||
 | 
					  if (bma4_read_accel_xyz(&acc, &__devFptr) != BMA4_OK) {
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  uint16_t absX = abs(acc.x);
 | 
				
			||||||
 | 
					  uint16_t absY = abs(acc.y);
 | 
				
			||||||
 | 
					  uint16_t absZ = abs(acc.z);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ((absZ > absX) && (absZ > absY)) {
 | 
				
			||||||
 | 
					    if (acc.z > 0) {
 | 
				
			||||||
 | 
					      return DIRECTION_DISP_DOWN;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      return DIRECTION_DISP_UP;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  } else if ((absY > absX) && (absY > absZ)) {
 | 
				
			||||||
 | 
					    if (acc.y > 0) {
 | 
				
			||||||
 | 
					      return DIRECTION_RIGHT_EDGE;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      return DIRECTION_LEFT_EDGE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    if (acc.x < 0) {
 | 
				
			||||||
 | 
					      return DIRECTION_BOTTOM_EDGE;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      return DIRECTION_TOP_EDGE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					float BMA423::readTemperature() {
 | 
				
			||||||
 | 
					  int32_t data = 0;
 | 
				
			||||||
 | 
					  bma4_get_temperature(&data, BMA4_DEG, &__devFptr);
 | 
				
			||||||
 | 
					  float res = (float)data / (float)BMA4_SCALE_TEMP;
 | 
				
			||||||
 | 
					  /* 0x80 - temp read from the register and 23 is the ambient temp added.
 | 
				
			||||||
 | 
					   * If the temp read from register is 0x80, it means no valid
 | 
				
			||||||
 | 
					   * information is available */
 | 
				
			||||||
 | 
					  if (((data - 23) / BMA4_SCALE_TEMP) == 0x80) {
 | 
				
			||||||
 | 
					    res = 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return res;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					float BMA423::readTemperatureF() {
 | 
				
			||||||
 | 
					  float temp = readTemperature();
 | 
				
			||||||
 | 
					  if (temp != 0) {
 | 
				
			||||||
 | 
					    temp = temp * 1.8 + 32.0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return (temp);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::getAccel(Accel &acc) {
 | 
				
			||||||
 | 
					  memset(&acc, 0, sizeof(acc));
 | 
				
			||||||
 | 
					  if (bma4_read_accel_xyz(&acc, &__devFptr) != BMA4_OK) {
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::getAccelEnable() {
 | 
				
			||||||
 | 
					  uint8_t en;
 | 
				
			||||||
 | 
					  bma4_get_accel_enable(&en, &__devFptr);
 | 
				
			||||||
 | 
					  return (en & BMA4_ACCEL_ENABLE_POS) == BMA4_ACCEL_ENABLE_POS;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::disableAccel() { return enableAccel(false); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::enableAccel(bool en) {
 | 
				
			||||||
 | 
					  return (BMA4_OK ==
 | 
				
			||||||
 | 
					          bma4_set_accel_enable(en ? BMA4_ENABLE : BMA4_DISABLE, &__devFptr));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::setAccelConfig(Acfg &cfg) {
 | 
				
			||||||
 | 
					  return (BMA4_OK == bma4_set_accel_config(&cfg, &__devFptr));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::getAccelConfig(Acfg &cfg) {
 | 
				
			||||||
 | 
					  return (BMA4_OK == bma4_get_accel_config(&cfg, &__devFptr));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::setRemapAxes(struct bma423_axes_remap *remap_data) {
 | 
				
			||||||
 | 
					  return (BMA4_OK == bma423_set_remap_axes(remap_data, &__devFptr));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::resetStepCounter() {
 | 
				
			||||||
 | 
					  return BMA4_OK == bma423_reset_step_counter(&__devFptr);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint32_t BMA423::getCounter() {
 | 
				
			||||||
 | 
					  uint32_t stepCount;
 | 
				
			||||||
 | 
					  if (bma423_step_counter_output(&stepCount, &__devFptr) == BMA4_OK) {
 | 
				
			||||||
 | 
					    return stepCount;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::setINTPinConfig(struct bma4_int_pin_config config,
 | 
				
			||||||
 | 
					                             uint8_t pinMap) {
 | 
				
			||||||
 | 
					  return BMA4_OK == bma4_set_int_pin_config(&config, pinMap, &__devFptr);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::getINT() {
 | 
				
			||||||
 | 
					  return bma423_read_int_status(&__IRQ_MASK, &__devFptr) == BMA4_OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint8_t BMA423::getIRQMASK() { return __IRQ_MASK; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::disableIRQ(uint16_t int_map) {
 | 
				
			||||||
 | 
					  return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, int_map, BMA4_DISABLE,
 | 
				
			||||||
 | 
					                                          &__devFptr));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::enableIRQ(uint16_t int_map) {
 | 
				
			||||||
 | 
					  return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, int_map, BMA4_ENABLE,
 | 
				
			||||||
 | 
					                                          &__devFptr));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::enableFeature(uint8_t feature, uint8_t enable) {
 | 
				
			||||||
 | 
					  if ((feature & BMA423_STEP_CNTR) == BMA423_STEP_CNTR) {
 | 
				
			||||||
 | 
					    bma423_step_detector_enable(enable ? BMA4_ENABLE : BMA4_DISABLE,
 | 
				
			||||||
 | 
					                                &__devFptr);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return (BMA4_OK == bma423_feature_enable(feature, enable, &__devFptr));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::isStepCounter() {
 | 
				
			||||||
 | 
					  return (bool)(BMA423_STEP_CNTR_INT & __IRQ_MASK);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::isDoubleClick() { return (bool)(BMA423_WAKEUP_INT & __IRQ_MASK); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::isTilt() { return (bool)(BMA423_TILT_INT & __IRQ_MASK); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::isActivity() { return (bool)(BMA423_ACTIVITY_INT & __IRQ_MASK); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::isAnyNoMotion() {
 | 
				
			||||||
 | 
					  return (bool)(BMA423_ANY_NO_MOTION_INT & __IRQ_MASK);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::enableStepCountInterrupt(bool en) {
 | 
				
			||||||
 | 
					  return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, BMA423_STEP_CNTR_INT,
 | 
				
			||||||
 | 
					                                          en, &__devFptr));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::enableTiltInterrupt(bool en) {
 | 
				
			||||||
 | 
					  return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, BMA423_TILT_INT, en,
 | 
				
			||||||
 | 
					                                          &__devFptr));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::enableWakeupInterrupt(bool en) {
 | 
				
			||||||
 | 
					  return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, BMA423_WAKEUP_INT, en,
 | 
				
			||||||
 | 
					                                          &__devFptr));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::enableAnyNoMotionInterrupt(bool en) {
 | 
				
			||||||
 | 
					  return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP,
 | 
				
			||||||
 | 
					                                          BMA423_ANY_NO_MOTION_INT, en,
 | 
				
			||||||
 | 
					                                          &__devFptr));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BMA423::enableActivityInterrupt(bool en) {
 | 
				
			||||||
 | 
					  return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, BMA423_ACTIVITY_INT,
 | 
				
			||||||
 | 
					                                          en, &__devFptr));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const char *BMA423::getActivity() {
 | 
				
			||||||
 | 
					  uint8_t activity;
 | 
				
			||||||
 | 
					  bma423_activity_output(&activity, &__devFptr);
 | 
				
			||||||
 | 
					  if (activity & BMA423_USER_STATIONARY) {
 | 
				
			||||||
 | 
					    return "BMA423_USER_STATIONARY";
 | 
				
			||||||
 | 
					  } else if (activity & BMA423_USER_WALKING) {
 | 
				
			||||||
 | 
					    return "BMA423_USER_WALKING";
 | 
				
			||||||
 | 
					  } else if (activity & BMA423_USER_RUNNING) {
 | 
				
			||||||
 | 
					    return "BMA423_USER_RUNNING";
 | 
				
			||||||
 | 
					  } else if (activity & BMA423_STATE_INVALID) {
 | 
				
			||||||
 | 
					    return "BMA423_STATE_INVALID";
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return "None";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										87
									
								
								src/bma.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								src/bma.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,87 @@
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef ARDUINO
 | 
				
			||||||
 | 
					#include <Arduino.h>
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "bma423.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum {
 | 
				
			||||||
 | 
					  DIRECTION_TOP_EDGE    = 0,
 | 
				
			||||||
 | 
					  DIRECTION_BOTTOM_EDGE = 1,
 | 
				
			||||||
 | 
					  DIRECTION_LEFT_EDGE   = 2,
 | 
				
			||||||
 | 
					  DIRECTION_RIGHT_EDGE  = 3,
 | 
				
			||||||
 | 
					  DIRECTION_DISP_UP     = 4,
 | 
				
			||||||
 | 
					  DIRECTION_DISP_DOWN   = 5
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct bma4_accel Accel;
 | 
				
			||||||
 | 
					typedef struct bma4_accel_config Acfg;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class BMA423 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					  BMA423();
 | 
				
			||||||
 | 
					  ~BMA423();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  bool begin(bma4_com_fptr_t readCallBlack, bma4_com_fptr_t writeCallBlack,
 | 
				
			||||||
 | 
					             bma4_delay_fptr_t delayCallBlack,
 | 
				
			||||||
 | 
					             uint8_t address = BMA4_I2C_ADDR_PRIMARY);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void softReset();
 | 
				
			||||||
 | 
					  void shutDown();
 | 
				
			||||||
 | 
					  void wakeUp();
 | 
				
			||||||
 | 
					  bool selfTest();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  uint8_t getDirection();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  bool setAccelConfig(Acfg &cfg);
 | 
				
			||||||
 | 
					  bool getAccelConfig(Acfg &cfg);
 | 
				
			||||||
 | 
					  bool getAccel(Accel &acc);
 | 
				
			||||||
 | 
					  bool getAccelEnable();
 | 
				
			||||||
 | 
					  bool disableAccel();
 | 
				
			||||||
 | 
					  bool enableAccel(bool en = true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  bool setINTPinConfig(struct bma4_int_pin_config config, uint8_t pinMap);
 | 
				
			||||||
 | 
					  bool getINT();
 | 
				
			||||||
 | 
					  uint8_t getIRQMASK();
 | 
				
			||||||
 | 
					  bool disableIRQ(uint16_t int_map = BMA423_STEP_CNTR_INT);
 | 
				
			||||||
 | 
					  bool enableIRQ(uint16_t int_map = BMA423_STEP_CNTR_INT);
 | 
				
			||||||
 | 
					  bool isStepCounter();
 | 
				
			||||||
 | 
					  bool isDoubleClick();
 | 
				
			||||||
 | 
					  bool isTilt();
 | 
				
			||||||
 | 
					  bool isActivity();
 | 
				
			||||||
 | 
					  bool isAnyNoMotion();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  bool resetStepCounter();
 | 
				
			||||||
 | 
					  uint32_t getCounter();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  float readTemperature();
 | 
				
			||||||
 | 
					  float readTemperatureF();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  uint16_t getErrorCode();
 | 
				
			||||||
 | 
					  uint16_t getStatus();
 | 
				
			||||||
 | 
					  uint32_t getSensorTime();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const char *getActivity();
 | 
				
			||||||
 | 
					  bool setRemapAxes(struct bma423_axes_remap *remap_data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  bool enableFeature(uint8_t feature, uint8_t enable);
 | 
				
			||||||
 | 
					  bool enableStepCountInterrupt(bool en = true);
 | 
				
			||||||
 | 
					  bool enableTiltInterrupt(bool en = true);
 | 
				
			||||||
 | 
					  bool enableWakeupInterrupt(bool en = true);
 | 
				
			||||||
 | 
					  bool enableAnyNoMotionInterrupt(bool en = true);
 | 
				
			||||||
 | 
					  bool enableActivityInterrupt(bool en = true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					  bma4_com_fptr_t __readRegisterFptr;
 | 
				
			||||||
 | 
					  bma4_com_fptr_t __writeRegisterFptr;
 | 
				
			||||||
 | 
					  bma4_delay_fptr_t __delayCallBlackFptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  uint8_t __address;
 | 
				
			||||||
 | 
					  uint16_t __IRQ_MASK;
 | 
				
			||||||
 | 
					  bool __init;
 | 
				
			||||||
 | 
					  struct bma4_dev __devFptr;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										4238
									
								
								src/bma4.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4238
									
								
								src/bma4.c
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										1601
									
								
								src/bma4.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1601
									
								
								src/bma4.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										1713
									
								
								src/bma423.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1713
									
								
								src/bma423.c
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										815
									
								
								src/bma423.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										815
									
								
								src/bma423.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,815 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 ****************************************************************************
 | 
				
			||||||
 | 
					 * Copyright (C) 2017 - 2018 Bosch Sensortec GmbH
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * File : bma423.h
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Date: 12 Oct 2017
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Revision : 1.1.4 $
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Usage: Sensor Driver for BMA423 sensor
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 ****************************************************************************
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Disclaimer
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Common:
 | 
				
			||||||
 | 
					 * Bosch Sensortec products are developed for the consumer goods industry.
 | 
				
			||||||
 | 
					 * They may only be used within the parameters of the respective valid
 | 
				
			||||||
 | 
					 * product data sheet.  Bosch Sensortec products are provided with the
 | 
				
			||||||
 | 
					 * express understanding that there is no warranty of fitness for a
 | 
				
			||||||
 | 
					 * particular purpose.They are not fit for use in life-sustaining,
 | 
				
			||||||
 | 
					 * safety or security sensitive systems or any system or device
 | 
				
			||||||
 | 
					 * that may lead to bodily harm or property damage if the system
 | 
				
			||||||
 | 
					 * or device malfunctions. In addition,Bosch Sensortec products are
 | 
				
			||||||
 | 
					 * not fit for use in products which interact with motor vehicle systems.
 | 
				
			||||||
 | 
					 * The resale and or use of products are at the purchasers own risk and
 | 
				
			||||||
 | 
					 * his own responsibility. The examination of fitness for the intended use
 | 
				
			||||||
 | 
					 * is the sole responsibility of the Purchaser.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The purchaser shall indemnify Bosch Sensortec from all third party
 | 
				
			||||||
 | 
					 * claims, including any claims for incidental, or consequential damages,
 | 
				
			||||||
 | 
					 * arising from any product use not covered by the parameters of
 | 
				
			||||||
 | 
					 * the respective valid product data sheet or not approved by
 | 
				
			||||||
 | 
					 * Bosch Sensortec and reimburse Bosch Sensortec for all costs in
 | 
				
			||||||
 | 
					 * connection with such claims.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The purchaser must monitor the market for the purchased products,
 | 
				
			||||||
 | 
					 * particularly with regard to product safety and inform Bosch Sensortec
 | 
				
			||||||
 | 
					 * without delay of all security relevant incidents.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Engineering Samples are marked with an asterisk (*) or (e).
 | 
				
			||||||
 | 
					 * Samples may vary from the valid technical specifications of the product
 | 
				
			||||||
 | 
					 * series. They are therefore not intended or fit for resale to third
 | 
				
			||||||
 | 
					 * parties or for use in end products. Their sole purpose is internal
 | 
				
			||||||
 | 
					 * client testing. The testing of an engineering sample may in no way
 | 
				
			||||||
 | 
					 * replace the testing of a product series. Bosch Sensortec assumes
 | 
				
			||||||
 | 
					 * no liability for the use of engineering samples.
 | 
				
			||||||
 | 
					 * By accepting the engineering samples, the Purchaser agrees to indemnify
 | 
				
			||||||
 | 
					 * Bosch Sensortec from all claims arising from the use of engineering
 | 
				
			||||||
 | 
					 * samples.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Special:
 | 
				
			||||||
 | 
					 * This software module (hereinafter called "Software") and any information
 | 
				
			||||||
 | 
					 * on application-sheets (hereinafter called "Information") is provided
 | 
				
			||||||
 | 
					 * free of charge for the sole purpose to support your application work.
 | 
				
			||||||
 | 
					 * The Software and Information is subject to the following
 | 
				
			||||||
 | 
					 * terms and conditions:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The Software is specifically designed for the exclusive use for
 | 
				
			||||||
 | 
					 * Bosch Sensortec products by personnel who have special experience
 | 
				
			||||||
 | 
					 * and training. Do not use this Software if you do not have the
 | 
				
			||||||
 | 
					 * proper experience or training.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This Software package is provided `` as is `` and without any expressed
 | 
				
			||||||
 | 
					 * or implied warranties,including without limitation, the implied warranties
 | 
				
			||||||
 | 
					 * of merchantability and fitness for a particular purpose.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Bosch Sensortec and their representatives and agents deny any liability
 | 
				
			||||||
 | 
					 * for the functional impairment
 | 
				
			||||||
 | 
					 * of this Software in terms of fitness, performance and safety.
 | 
				
			||||||
 | 
					 * Bosch Sensortec and their representatives and agents shall not be liable
 | 
				
			||||||
 | 
					 * for any direct or indirect damages or injury, except as
 | 
				
			||||||
 | 
					 * otherwise stipulated in mandatory applicable law.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The Information provided is believed to be accurate and reliable.
 | 
				
			||||||
 | 
					 * Bosch Sensortec assumes no responsibility for the consequences of use
 | 
				
			||||||
 | 
					 * of such Information nor for any infringement of patents or
 | 
				
			||||||
 | 
					 * other rights of third parties which may result from its use.
 | 
				
			||||||
 | 
					 * No license is granted by implication or otherwise under any patent or
 | 
				
			||||||
 | 
					 * patent rights of Bosch. Specifications mentioned in the Information are
 | 
				
			||||||
 | 
					 * subject to change without notice.
 | 
				
			||||||
 | 
					 **************************************************************************/
 | 
				
			||||||
 | 
					/*! \file bma423.h
 | 
				
			||||||
 | 
					    \brief Sensor Driver for BMA423 sensor */
 | 
				
			||||||
 | 
					#ifndef BMA423_H
 | 
				
			||||||
 | 
					#define BMA423_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef __cplusplus
 | 
				
			||||||
 | 
					extern "C" {
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#include "bma4.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Chip ID of BMA423 sensor */
 | 
				
			||||||
 | 
					#define BMA423_CHIP_ID UINT8_C(0x13)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Sensor feature size */
 | 
				
			||||||
 | 
					#define BMA423_FEATURE_SIZE     UINT8_C(64)
 | 
				
			||||||
 | 
					#define BMA423_ANYMOTION_EN_LEN UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA423_RD_WR_MIN_LEN    UINT8_C(2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Feature offset address */
 | 
				
			||||||
 | 
					#define BMA423_ANY_NO_MOTION_OFFSET   UINT8_C(0x00)
 | 
				
			||||||
 | 
					#define BMA423_STEP_CNTR_OFFSET       UINT8_C(0x36)
 | 
				
			||||||
 | 
					#define BMA423_STEP_CNTR_PARAM_OFFSET UINT8_C(0x04)
 | 
				
			||||||
 | 
					#define BMA423_WAKEUP_OFFSET          UINT8_C(0x38)
 | 
				
			||||||
 | 
					#define BMA423_TILT_OFFSET            UINT8_C(0x3A)
 | 
				
			||||||
 | 
					#define BMA423_CONFIG_ID_OFFSET       UINT8_C(0x3C)
 | 
				
			||||||
 | 
					#define BMA423_AXES_REMAP_OFFSET      UINT8_C(0x3E)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**************************************************************/
 | 
				
			||||||
 | 
					/**\name	Remap Axes */
 | 
				
			||||||
 | 
					/**************************************************************/
 | 
				
			||||||
 | 
					#define BMA423_X_AXIS_MASK      UINT8_C(0x03)
 | 
				
			||||||
 | 
					#define BMA423_X_AXIS_SIGN_MASK UINT8_C(0x04)
 | 
				
			||||||
 | 
					#define BMA423_Y_AXIS_MASK      UINT8_C(0x18)
 | 
				
			||||||
 | 
					#define BMA423_Y_AXIS_SIGN_MASK UINT8_C(0x20)
 | 
				
			||||||
 | 
					#define BMA423_Z_AXIS_MASK      UINT8_C(0xC0)
 | 
				
			||||||
 | 
					#define BMA423_Z_AXIS_SIGN_MASK UINT8_C(0x01)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**************************************************************/
 | 
				
			||||||
 | 
					/**\name	Step Counter & Detector */
 | 
				
			||||||
 | 
					/**************************************************************/
 | 
				
			||||||
 | 
					/**\name Step counter enable macros */
 | 
				
			||||||
 | 
					#define BMA423_STEP_CNTR_EN_POS UINT8_C(4)
 | 
				
			||||||
 | 
					#define BMA423_STEP_CNTR_EN_MSK UINT8_C(0x10)
 | 
				
			||||||
 | 
					#define BMA423_ACTIVITY_EN_MSK  UINT8_C(0x20)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Step counter watermark macros */
 | 
				
			||||||
 | 
					#define BMA423_STEP_CNTR_WM_MSK UINT16_C(0x03FF)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Step counter reset macros */
 | 
				
			||||||
 | 
					#define BMA423_STEP_CNTR_RST_POS UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA423_STEP_CNTR_RST_MSK UINT8_C(0x04)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Step detector enable macros */
 | 
				
			||||||
 | 
					#define BMA423_STEP_DETECTOR_EN_POS UINT8_C(3)
 | 
				
			||||||
 | 
					#define BMA423_STEP_DETECTOR_EN_MSK UINT8_C(0x08)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Tilt enable macros */
 | 
				
			||||||
 | 
					#define BMA423_TILT_EN_MSK UINT8_C(0x01)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Step count output length*/
 | 
				
			||||||
 | 
					#define BMA423_STEP_CNTR_DATA_SIZE UINT16_C(4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Wakeup enable macros */
 | 
				
			||||||
 | 
					#define BMA423_WAKEUP_EN_MSK UINT8_C(0x01)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Wake up sensitivity macros */
 | 
				
			||||||
 | 
					#define BMA423_WAKEUP_SENS_POS UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA423_WAKEUP_SENS_MSK UINT8_C(0x0E)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Tap selection macro */
 | 
				
			||||||
 | 
					#define BMA423_TAP_SEL_POS UINT8_C(4)
 | 
				
			||||||
 | 
					#define BMA423_TAP_SEL_MSK UINT8_C(0x10)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**************************************************************/
 | 
				
			||||||
 | 
					/**\name	Any Motion */
 | 
				
			||||||
 | 
					/**************************************************************/
 | 
				
			||||||
 | 
					/**\name Any motion threshold macros */
 | 
				
			||||||
 | 
					#define BMA423_ANY_NO_MOTION_THRES_POS UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA423_ANY_NO_MOTION_THRES_MSK UINT16_C(0x07FF)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Any motion selection macros */
 | 
				
			||||||
 | 
					#define BMA423_ANY_NO_MOTION_SEL_POS UINT8_C(3)
 | 
				
			||||||
 | 
					#define BMA423_ANY_NO_MOTION_SEL_MSK UINT8_C(0x08)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Any motion enable macros */
 | 
				
			||||||
 | 
					#define BMA423_ANY_NO_MOTION_AXIS_EN_POS UINT8_C(5)
 | 
				
			||||||
 | 
					#define BMA423_ANY_NO_MOTION_AXIS_EN_MSK UINT8_C(0xE0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Any motion duration macros */
 | 
				
			||||||
 | 
					#define BMA423_ANY_NO_MOTION_DUR_MSK UINT16_C(0x1FFF)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**************************************************************/
 | 
				
			||||||
 | 
					/**\name	User macros */
 | 
				
			||||||
 | 
					/**************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Anymotion/Nomotion axis enable macros */
 | 
				
			||||||
 | 
					#define BMA423_X_AXIS_EN    UINT8_C(0x01)
 | 
				
			||||||
 | 
					#define BMA423_Y_AXIS_EN    UINT8_C(0x02)
 | 
				
			||||||
 | 
					#define BMA423_Z_AXIS_EN    UINT8_C(0x04)
 | 
				
			||||||
 | 
					#define BMA423_ALL_AXIS_EN  UINT8_C(0x07)
 | 
				
			||||||
 | 
					#define BMA423_ALL_AXIS_DIS UINT8_C(0x00)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Feature enable macros for the sensor */
 | 
				
			||||||
 | 
					#define BMA423_STEP_CNTR UINT8_C(0x01)
 | 
				
			||||||
 | 
					/**\name Below macros are mutually exclusive */
 | 
				
			||||||
 | 
					#define BMA423_ANY_MOTION UINT8_C(0x02)
 | 
				
			||||||
 | 
					#define BMA423_NO_MOTION  UINT8_C(0x04)
 | 
				
			||||||
 | 
					#define BMA423_ACTIVITY   UINT8_C(0x08)
 | 
				
			||||||
 | 
					#define BMA423_TILT       UINT8_C(0x10)
 | 
				
			||||||
 | 
					#define BMA423_WAKEUP     UINT8_C(0x20)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Interrupt status macros */
 | 
				
			||||||
 | 
					#define BMA423_STEP_CNTR_INT     UINT8_C(0x02)
 | 
				
			||||||
 | 
					#define BMA423_ACTIVITY_INT      UINT8_C(0x04)
 | 
				
			||||||
 | 
					#define BMA423_TILT_INT          UINT8_C(0x08)
 | 
				
			||||||
 | 
					#define BMA423_WAKEUP_INT        UINT8_C(0x20)
 | 
				
			||||||
 | 
					#define BMA423_ANY_NO_MOTION_INT UINT8_C(0x40)
 | 
				
			||||||
 | 
					#define BMA423_ERROR_INT         UINT8_C(0x80)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Activity recognition macros */
 | 
				
			||||||
 | 
					#define BMA423_USER_STATIONARY UINT8_C(0x00)
 | 
				
			||||||
 | 
					#define BMA423_USER_WALKING    UINT8_C(0x01)
 | 
				
			||||||
 | 
					#define BMA423_USER_RUNNING    UINT8_C(0x02)
 | 
				
			||||||
 | 
					#define BMA423_STATE_INVALID   UINT8_C(0x03)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Configuration selection macros */
 | 
				
			||||||
 | 
					#define BMA423_PHONE_CONFIG UINT8_C(0x00)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_CONFIG UINT8_C(0x01)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Step counter parameter setting(1-25) for phone */
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_1  UINT16_C(0x132)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_2  UINT16_C(0x78E6)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_3  UINT16_C(0x84)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_4  UINT16_C(0x6C9C)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_5  UINT8_C(0x07)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_6  UINT16_C(0x7564)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_7  UINT16_C(0x7EAA)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_8  UINT16_C(0x55F)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_9  UINT16_C(0xABE)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_10 UINT16_C(0x55F)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_11 UINT16_C(0xE896)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_12 UINT16_C(0x41EF)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_13 UINT8_C(0x01)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_14 UINT8_C(0x0C)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_15 UINT8_C(0x0C)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_16 UINT8_C(0x4A)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_17 UINT8_C(0xA0)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_18 UINT8_C(0x00)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_19 UINT8_C(0x0C)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_20 UINT16_C(0x3CF0)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_21 UINT16_C(0x100)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_22 UINT8_C(0x00)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_23 UINT8_C(0x00)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_24 UINT8_C(0x00)
 | 
				
			||||||
 | 
					#define BMA423_PHONE_SC_PARAM_25 UINT8_C(0x00)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Step counter parameter setting(1-25) for wrist (Default) */
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_1  UINT16_C(0x12D)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_2  UINT16_C(0x7BD4)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_3  UINT16_C(0x13B)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_4  UINT16_C(0x7ADB)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_5  UINT8_C(0x04)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_6  UINT16_C(0x7B3F)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_7  UINT16_C(0x6CCD)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_8  UINT16_C(0x4C3)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_9  UINT16_C(0x985)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_10 UINT16_C(0x4C3)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_11 UINT16_C(0xE6EC)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_12 UINT16_C(0x460C)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_13 UINT8_C(0x01)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_14 UINT8_C(0x27)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_15 UINT8_C(0x19)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_16 UINT8_C(0x96)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_17 UINT8_C(0xA0)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_18 UINT8_C(0x01)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_19 UINT8_C(0x0C)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_20 UINT16_C(0x3CF0)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_21 UINT16_C(0x100)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_22 UINT8_C(0x01)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_23 UINT8_C(0x03)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_24 UINT8_C(0x01)
 | 
				
			||||||
 | 
					#define BMA423_WRIST_SC_PARAM_25 UINT8_C(0x0E)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * @brief Any motion configuration
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct bma423_anymotion_config {
 | 
				
			||||||
 | 
					  /*! Expressed in 50 Hz samples (20 ms) */
 | 
				
			||||||
 | 
					  uint16_t duration;
 | 
				
			||||||
 | 
					  /*! Threshold value for Any-motion / No-motion detection in
 | 
				
			||||||
 | 
					  5.11g format */
 | 
				
			||||||
 | 
					  uint16_t threshold;
 | 
				
			||||||
 | 
					  /*! Indicates if No-motion or Any-motion is selected */
 | 
				
			||||||
 | 
					  uint8_t nomotion_sel;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * @brief Axes remapping configuration
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct bma423_axes_remap {
 | 
				
			||||||
 | 
					  uint8_t x_axis;
 | 
				
			||||||
 | 
					  uint8_t x_axis_sign;
 | 
				
			||||||
 | 
					  uint8_t y_axis;
 | 
				
			||||||
 | 
					  uint8_t y_axis_sign;
 | 
				
			||||||
 | 
					  uint8_t z_axis;
 | 
				
			||||||
 | 
					  uint8_t z_axis_sign;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * @brief Step counter param settings
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct bma423_stepcounter_settings {
 | 
				
			||||||
 | 
					  /*! Step Counter param 1 */
 | 
				
			||||||
 | 
					  uint16_t param1;
 | 
				
			||||||
 | 
					  /*! Step Counter param 2 */
 | 
				
			||||||
 | 
					  uint16_t param2;
 | 
				
			||||||
 | 
					  /*! Step Counter param 3 */
 | 
				
			||||||
 | 
					  uint16_t param3;
 | 
				
			||||||
 | 
					  /*! Step Counter param 4 */
 | 
				
			||||||
 | 
					  uint16_t param4;
 | 
				
			||||||
 | 
					  /*! Step Counter param 5 */
 | 
				
			||||||
 | 
					  uint16_t param5;
 | 
				
			||||||
 | 
					  /*! Step Counter param 6 */
 | 
				
			||||||
 | 
					  uint16_t param6;
 | 
				
			||||||
 | 
					  /*! Step Counter param 7 */
 | 
				
			||||||
 | 
					  uint16_t param7;
 | 
				
			||||||
 | 
					  /*! Step Counter param 8 */
 | 
				
			||||||
 | 
					  uint16_t param8;
 | 
				
			||||||
 | 
					  /*! Step Counter param 9 */
 | 
				
			||||||
 | 
					  uint16_t param9;
 | 
				
			||||||
 | 
					  /*! Step Counter param 10 */
 | 
				
			||||||
 | 
					  uint16_t param10;
 | 
				
			||||||
 | 
					  /*! Step Counter param 11 */
 | 
				
			||||||
 | 
					  uint16_t param11;
 | 
				
			||||||
 | 
					  /*! Step Counter param 12 */
 | 
				
			||||||
 | 
					  uint16_t param12;
 | 
				
			||||||
 | 
					  /*! Step Counter param 13 */
 | 
				
			||||||
 | 
					  uint16_t param13;
 | 
				
			||||||
 | 
					  /*! Step Counter param 14 */
 | 
				
			||||||
 | 
					  uint16_t param14;
 | 
				
			||||||
 | 
					  /*! Step Counter param 15 */
 | 
				
			||||||
 | 
					  uint16_t param15;
 | 
				
			||||||
 | 
					  /*! Step Counter param 16 */
 | 
				
			||||||
 | 
					  uint16_t param16;
 | 
				
			||||||
 | 
					  /*! Step Counter param 17 */
 | 
				
			||||||
 | 
					  uint16_t param17;
 | 
				
			||||||
 | 
					  /*! Step Counter param 18 */
 | 
				
			||||||
 | 
					  uint16_t param18;
 | 
				
			||||||
 | 
					  /*! Step Counter param 19 */
 | 
				
			||||||
 | 
					  uint16_t param19;
 | 
				
			||||||
 | 
					  /*! Step Counter param 20 */
 | 
				
			||||||
 | 
					  uint16_t param20;
 | 
				
			||||||
 | 
					  /*! Step Counter param 21 */
 | 
				
			||||||
 | 
					  uint16_t param21;
 | 
				
			||||||
 | 
					  /*! Step Counter param 22 */
 | 
				
			||||||
 | 
					  uint16_t param22;
 | 
				
			||||||
 | 
					  /*! Step Counter param 23 */
 | 
				
			||||||
 | 
					  uint16_t param23;
 | 
				
			||||||
 | 
					  /*! Step Counter param 24 */
 | 
				
			||||||
 | 
					  uint16_t param24;
 | 
				
			||||||
 | 
					  /*! Step Counter param 25 */
 | 
				
			||||||
 | 
					  uint16_t param25;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API is the entry point.
 | 
				
			||||||
 | 
					 *	Call this API before using all other APIs.
 | 
				
			||||||
 | 
					 *	This API reads the chip-id of the sensor and sets the resolution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[in,out] dev : Structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_init(struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API is used to upload the config file to enable
 | 
				
			||||||
 | 
					 *	the features of the sensor.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_write_config_file(struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API is used to get the configuration id of the sensor.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[out] config_id : Pointer variable used to store
 | 
				
			||||||
 | 
					 *	the configuration id.
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_get_config_id(uint16_t *config_id, struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API sets/unsets the user provided interrupt to either
 | 
				
			||||||
 | 
					 *	interrupt pin1 or pin2 in the sensor.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[in] int_line: Variable to select either interrupt pin1 or pin2.
 | 
				
			||||||
 | 
					 *  int_line    |   Macros
 | 
				
			||||||
 | 
					 *  ------------|-------------------
 | 
				
			||||||
 | 
					 *		0       | BMA4_INTR1_MAP
 | 
				
			||||||
 | 
					 *		1       | BMA4_INTR2_MAP
 | 
				
			||||||
 | 
					 *	@param[in] int_map : Variable to specify the interrupts.
 | 
				
			||||||
 | 
					 *	@param[in] enable : Variable to specify mapping or unmapping of
 | 
				
			||||||
 | 
					 *	interrupts.
 | 
				
			||||||
 | 
					 *	enable		|	Macros
 | 
				
			||||||
 | 
					 *  --------------------|-------------------
 | 
				
			||||||
 | 
					 *	0x00		|  BMA4_DISABLE
 | 
				
			||||||
 | 
					 *	0x01		|  BMA4_ENABLE
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@note Below macros specify the interrupts.
 | 
				
			||||||
 | 
					 *	Feature Interrupts
 | 
				
			||||||
 | 
					 *	  - BMA423_STEP_CNTR_INT
 | 
				
			||||||
 | 
					 *	  - BMA423_ACTIVITY_INT
 | 
				
			||||||
 | 
					 *	  - BMA423_TILT_INT
 | 
				
			||||||
 | 
					 *	  - BMA423_WAKEUP_INT
 | 
				
			||||||
 | 
					 *	  - BMA423_ANY_NO_MOTION_INT
 | 
				
			||||||
 | 
					 *	  - BMA423_ERROR_INT
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	Hardware Interrupts
 | 
				
			||||||
 | 
					 *	  - BMA4_FIFO_FULL_INT
 | 
				
			||||||
 | 
					 *	  - BMA4_FIFO_WM_INT
 | 
				
			||||||
 | 
					 *	  - BMA4_DATA_RDY_INT
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_map_interrupt(uint8_t int_line, uint16_t int_map,
 | 
				
			||||||
 | 
					                              uint8_t enable, struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API reads the bma423 interrupt status from the sensor.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[out] int_status : Variable to store the interrupt status
 | 
				
			||||||
 | 
					 *	read from the sensor.
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@note Below macros are used to check the interrupt status.
 | 
				
			||||||
 | 
					 *	Feature Interrupts
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	  - BMA423_STEP_CNTR_INT
 | 
				
			||||||
 | 
					 *	  - BMA423_ACTIVITY_INT
 | 
				
			||||||
 | 
					 *	  - BMA423_TILT_INT
 | 
				
			||||||
 | 
					 *	  - BMA423_WAKEUP_INT
 | 
				
			||||||
 | 
					 *	  - BMA423_ANY_NO_MOTION_INT
 | 
				
			||||||
 | 
					 *	  - BMA423_ERROR_INT
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	Hardware Interrupts
 | 
				
			||||||
 | 
					 *	  - BMA4_FIFO_FULL_INT
 | 
				
			||||||
 | 
					 *	  - BMA4_FIFO_WM_INT
 | 
				
			||||||
 | 
					 *	  - BMA4_MAG_DATA_RDY_INT
 | 
				
			||||||
 | 
					 *	  - BMA4_ACCEL_DATA_RDY_INT
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_read_int_status(uint16_t *int_status, struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API enables/disables the features of the sensor.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[in] feature : Variable to specify the features
 | 
				
			||||||
 | 
					 *	which are to be set in bma423 sensor.
 | 
				
			||||||
 | 
					 *	@param[in] enable : Variable which specifies whether to enable or
 | 
				
			||||||
 | 
					 *	disable the features in the bma423 sensor
 | 
				
			||||||
 | 
					 *	enable		|	Macros
 | 
				
			||||||
 | 
					 *  --------------------|-------------------
 | 
				
			||||||
 | 
					 *	0x00		|  BMA4_DISABLE
 | 
				
			||||||
 | 
					 *	0x01		|  BMA4_ENABLE
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@note User should use the below macros to enable or disable the
 | 
				
			||||||
 | 
					 *	features of bma423 sensor
 | 
				
			||||||
 | 
					 *	  - BMA423_STEP_CNTR
 | 
				
			||||||
 | 
					 *	  - BMA423_ANY_MOTION (or) BMA423_NO_MOTION
 | 
				
			||||||
 | 
					 *	  - BMA423_ACTIVITY
 | 
				
			||||||
 | 
					 *	  - BMA423_WAKEUP
 | 
				
			||||||
 | 
					 *	  - BMA423_TILT
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_feature_enable(uint8_t feature, uint8_t enable,
 | 
				
			||||||
 | 
					                               struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API performs x, y and z axis remapping in the sensor.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[in] remap_data : Pointer to store axes remapping data.
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_set_remap_axes(const struct bma423_axes_remap *remap_data,
 | 
				
			||||||
 | 
					                               struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API reads the x, y and z axis remap data from the sensor.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[out] remap_data : Pointer to store axis remap data which is read
 | 
				
			||||||
 | 
					 *	from the bma423 sensor.
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_get_remap_axes(struct bma423_axes_remap *remap_data,
 | 
				
			||||||
 | 
					                               struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API sets the watermark level for step counter
 | 
				
			||||||
 | 
					 *	interrupt in the sensor.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[in] step_counter_wm : Variable which specifies watermark level
 | 
				
			||||||
 | 
					 *	count
 | 
				
			||||||
 | 
					 *	@note Valid values are from 1 to 1023
 | 
				
			||||||
 | 
					 *	@note Value 0 is used for step detector interrupt
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_step_counter_set_watermark(uint16_t step_counter_wm,
 | 
				
			||||||
 | 
					                                           struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API gets the water mark level set for step counter interrupt
 | 
				
			||||||
 | 
					 *	in the sensor
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[out] step_counter_wm : Pointer variable which stores
 | 
				
			||||||
 | 
					 *	the water mark level read from the sensor.
 | 
				
			||||||
 | 
					 *	@note valid values are from 1 to 1023
 | 
				
			||||||
 | 
					 *	@note value 0 is used for step detector interrupt
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_step_counter_get_watermark(uint16_t *step_counter_wm,
 | 
				
			||||||
 | 
					                                           struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API resets the counted steps of step counter.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[in] dev : structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_reset_step_counter(struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API gets the number of counted steps of the step counter
 | 
				
			||||||
 | 
					 *	feature from the sensor.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  @param[out] step_count : Pointer variable which stores counted steps
 | 
				
			||||||
 | 
					 *	read from the sensor.
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_step_counter_output(uint32_t *step_count, struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *  @brief This API gets the output for activity feature.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  @param[out] activity : Pointer variable which stores activity output
 | 
				
			||||||
 | 
					 *  read from the sensor.
 | 
				
			||||||
 | 
					 *       activity |   State
 | 
				
			||||||
 | 
					 *  --------------|------------------------
 | 
				
			||||||
 | 
					 *        0x00    | BMA423_USER_STATIONARY
 | 
				
			||||||
 | 
					 *        0x01    | BMA423_USER_WALKING
 | 
				
			||||||
 | 
					 *        0x02    | BMA423_USER_RUNNING
 | 
				
			||||||
 | 
					 *        0x03    | BMA423_STATE_INVALID
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  @param[in] dev : Structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *  @return Result of API execution status
 | 
				
			||||||
 | 
					 *  @retval 0 -> Success
 | 
				
			||||||
 | 
					 *  @retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_activity_output(uint8_t *activity, struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *  @brief This API select the platform configuration wrist(default) or phone.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  @param[in] platform : Variable to select wrist/phone
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *     platform  |   Macros
 | 
				
			||||||
 | 
					 *  -------------|------------------------
 | 
				
			||||||
 | 
					 *        0x00   | BMA423_PHONE_CONFIG
 | 
				
			||||||
 | 
					 *        0x01   | BMA423_WRIST_CONFIG
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  @param[in] dev : Structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *  @return Result of API execution status
 | 
				
			||||||
 | 
					 *  @retval 0 -> Success
 | 
				
			||||||
 | 
					 *  @retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_select_platform(uint8_t platform, struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API gets the parameter1 to parameter7 settings of the
 | 
				
			||||||
 | 
					 *	step counter feature.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[out] setting : Pointer to structure variable which stores the
 | 
				
			||||||
 | 
					 *	parameter1 to parameter7 read from the sensor.
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t
 | 
				
			||||||
 | 
					bma423_stepcounter_get_parameter(struct bma423_stepcounter_settings *setting,
 | 
				
			||||||
 | 
					                                 struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API sets the parameter1 to parameter7 settings of the
 | 
				
			||||||
 | 
					 *	step counter feature in the sensor.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[in] setting : Pointer to structure variable which stores the
 | 
				
			||||||
 | 
					 *	parameter1 to parameter7 settings read from the sensor.
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_stepcounter_set_parameter(
 | 
				
			||||||
 | 
					    const struct bma423_stepcounter_settings *setting, struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API enables or disables the step detector feature in the
 | 
				
			||||||
 | 
					 *	sensor.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[in] enable : Variable used to enable or disable step detector
 | 
				
			||||||
 | 
					 *	enable		|	Macros
 | 
				
			||||||
 | 
					 *  --------------------|-------------------
 | 
				
			||||||
 | 
					 *	0x00		|  BMA4_DISABLE
 | 
				
			||||||
 | 
					 *	0x01		|  BMA4_ENABLE
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_step_detector_enable(uint8_t enable, struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API enables the any motion feature according to the axis
 | 
				
			||||||
 | 
					 *	set by the user in the sensor.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[in] axis : Variable to specify the axis of the any motion feature
 | 
				
			||||||
 | 
					 *	to be enabled in the sensor.
 | 
				
			||||||
 | 
					 *  Value    |  Axis
 | 
				
			||||||
 | 
					 *  ---------|-------------------------
 | 
				
			||||||
 | 
					 *  0x00     |  BMA423_ALL_AXIS_DIS
 | 
				
			||||||
 | 
					 *  0x01     |  BMA423_X_AXIS_EN
 | 
				
			||||||
 | 
					 *  0x02     |  BMA423_Y_AXIS_EN
 | 
				
			||||||
 | 
					 *  0x04     |  BMA423_Z_AXIS_EN
 | 
				
			||||||
 | 
					 *  0x07     |  BMA423_ALL_AXIS_EN
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_anymotion_enable_axis(uint8_t axis, struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!	@brief	This API sets the configuration of Any motion feature in
 | 
				
			||||||
 | 
					 *	the sensor.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[in]	any_motion : Pointer to structure variable to specify
 | 
				
			||||||
 | 
					 *	the any motion feature settings.
 | 
				
			||||||
 | 
					 *	Structure members are provided in the table below
 | 
				
			||||||
 | 
					 *@verbatim
 | 
				
			||||||
 | 
					 * -------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 *         Structure parameters    |        Description
 | 
				
			||||||
 | 
					 * --------------------------------|----------------------------------------
 | 
				
			||||||
 | 
					 *                                 |        Defines the number of
 | 
				
			||||||
 | 
					 *                                 |        consecutive data points for
 | 
				
			||||||
 | 
					 *                                 |        which the threshold condition
 | 
				
			||||||
 | 
					 *         duration                |        must be respected, for interrupt
 | 
				
			||||||
 | 
					 *                                 |        assertion. It is expressed in
 | 
				
			||||||
 | 
					 *                                 |        50 Hz samples (20 ms).
 | 
				
			||||||
 | 
					 *                                 |        Range is 0 to 163sec.
 | 
				
			||||||
 | 
					 *                                 |        Default value is 5 = 100ms.
 | 
				
			||||||
 | 
					 * --------------------------------|----------------------------------------
 | 
				
			||||||
 | 
					 *                                 |        Slope threshold value for
 | 
				
			||||||
 | 
					 *                                 |        Any-motion / No-motion detection
 | 
				
			||||||
 | 
					 *         threshold               |        in 5.11g format.
 | 
				
			||||||
 | 
					 *                                 |        Range is 0 to 1g.
 | 
				
			||||||
 | 
					 *                                 |        Default value is 0xAA = 83mg.
 | 
				
			||||||
 | 
					 * --------------------------------|----------------------------------------
 | 
				
			||||||
 | 
					 *                                 |        Indicates if No motion (1) or
 | 
				
			||||||
 | 
					 *         nomotion_sel            |        Any-motion (0) is selected;
 | 
				
			||||||
 | 
					 *                                 |        default value is 0 Any-motion.
 | 
				
			||||||
 | 
					 * -------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 *@endverbatim
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t
 | 
				
			||||||
 | 
					bma423_set_any_motion_config(const struct bma423_anymotion_config *any_motion,
 | 
				
			||||||
 | 
					                             struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!	@brief	This API gets the configuration of any motion feature from
 | 
				
			||||||
 | 
					 *	the sensor.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[out]	any_motion : Pointer to structure variable used to store
 | 
				
			||||||
 | 
					 *	the any motion feature settings read from the sensor.
 | 
				
			||||||
 | 
					 *	Structure members are provided in the table below
 | 
				
			||||||
 | 
					 *@verbatim
 | 
				
			||||||
 | 
					 * -------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 *         Structure parameters    |        Description
 | 
				
			||||||
 | 
					 * --------------------------------|----------------------------------------
 | 
				
			||||||
 | 
					 *                                 |        Defines the number of
 | 
				
			||||||
 | 
					 *                                 |        consecutive data points for
 | 
				
			||||||
 | 
					 *                                 |        which the threshold condition
 | 
				
			||||||
 | 
					 *         duration                |        must be respected, for interrupt
 | 
				
			||||||
 | 
					 *                                 |        assertion. It is expressed in
 | 
				
			||||||
 | 
					 *                                 |        50 Hz samples (20 ms).
 | 
				
			||||||
 | 
					 *                                 |        Range is 0 to 163sec.
 | 
				
			||||||
 | 
					 *                                 |        Default value is 5 = 100ms.
 | 
				
			||||||
 | 
					 * --------------------------------|----------------------------------------
 | 
				
			||||||
 | 
					 *                                 |        Slope threshold value for
 | 
				
			||||||
 | 
					 *                                 |        Any-motion / No-motion detection
 | 
				
			||||||
 | 
					 *         threshold               |        in 5.11g format.
 | 
				
			||||||
 | 
					 *                                 |        Range is 0 to 1g.
 | 
				
			||||||
 | 
					 *                                 |        Default value is 0xAA = 83mg.
 | 
				
			||||||
 | 
					 * --------------------------------|----------------------------------------
 | 
				
			||||||
 | 
					 *                                 |        Indicates if No motion (1) or
 | 
				
			||||||
 | 
					 *         nomotion_sel            |        Any-motion (0) is selected;
 | 
				
			||||||
 | 
					 *                                 |        default value is 0 Any-motion.
 | 
				
			||||||
 | 
					 * -------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 *@endverbatim
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t
 | 
				
			||||||
 | 
					bma423_get_any_motion_config(struct bma423_anymotion_config *any_motion,
 | 
				
			||||||
 | 
					                             struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API sets the sensitivity of wake up feature in the sensor
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[in] sensitivity : Variable used to specify the sensitivity of the
 | 
				
			||||||
 | 
					 *	Wake up feature.
 | 
				
			||||||
 | 
					 *	Value	|  Sensitivity
 | 
				
			||||||
 | 
					 *	--------|-------------------------
 | 
				
			||||||
 | 
					 *	0x00	|  MOST SENSITIVE
 | 
				
			||||||
 | 
					 *	0x07	|  LEAST SENSITIVE
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_wakeup_set_sensitivity(uint8_t sensitivity,
 | 
				
			||||||
 | 
					                                       struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API gets the sensitivity of wake up feature in the sensor
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param[out] sensitivity : Pointer variable which stores the sensitivity
 | 
				
			||||||
 | 
					 *	value read from the sensor.
 | 
				
			||||||
 | 
					 *	Value	|  Sensitivity
 | 
				
			||||||
 | 
					 *	--------|-------------------------
 | 
				
			||||||
 | 
					 *	0x00	|  MOST SENSITIVE
 | 
				
			||||||
 | 
					 *	0x07	|  LEAST SENSITIVE
 | 
				
			||||||
 | 
					 *	@param[in] dev : Structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return Result of API execution status
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any non zero value -> Fail
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_wakeup_get_sensitivity(uint8_t *sensitivity,
 | 
				
			||||||
 | 
					                                       struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *	@brief This API is used to select single/double tap
 | 
				
			||||||
 | 
					 *	feature in the sensor
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param tap_select : Variable used to specify the single or
 | 
				
			||||||
 | 
					 *	double tap selection in the sensor
 | 
				
			||||||
 | 
					 *      tap_select  |  description
 | 
				
			||||||
 | 
					 *      ------------|------------------------
 | 
				
			||||||
 | 
					 *      0x00        |  Double tap selected
 | 
				
			||||||
 | 
					 *      0x01        |  single tap selected
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@param dev : Structure instance of bma4_dev
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	@return results of stream_transfer operation
 | 
				
			||||||
 | 
					 *	@retval 0 -> Success
 | 
				
			||||||
 | 
					 *	@retval Any positive value mentioned in ERROR CODES -> Fail
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t bma423_tap_selection(const uint8_t tap_select, struct bma4_dev *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef __cplusplus
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif /*End of CPP guard */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /*End of header guard macro */
 | 
				
			||||||
							
								
								
									
										957
									
								
								src/bma4_defs.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										957
									
								
								src/bma4_defs.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,957 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 ****************************************************************************
 | 
				
			||||||
 | 
					 * Copyright (C) 2017 - 2018 Bosch Sensortec GmbH
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * File : bma4_defs.h
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Date: 12 Oct 2017
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Revision: 2.1.9 $
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Usage: Sensor Driver for BMA4 family of sensors
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 ****************************************************************************
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Disclaimer
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Common:
 | 
				
			||||||
 | 
					 * Bosch Sensortec products are developed for the consumer goods industry.
 | 
				
			||||||
 | 
					 * They may only be used within the parameters of the respective valid
 | 
				
			||||||
 | 
					 * product data sheet.  Bosch Sensortec products are provided with the
 | 
				
			||||||
 | 
					 * express understanding that there is no warranty of fitness for a
 | 
				
			||||||
 | 
					 * particular purpose.They are not fit for use in life-sustaining,
 | 
				
			||||||
 | 
					 * safety or security sensitive systems or any system or device
 | 
				
			||||||
 | 
					 * that may lead to bodily harm or property damage if the system
 | 
				
			||||||
 | 
					 * or device malfunctions. In addition,Bosch Sensortec products are
 | 
				
			||||||
 | 
					 * not fit for use in products which interact with motor vehicle systems.
 | 
				
			||||||
 | 
					 * The resale and or use of products are at the purchasers own risk and
 | 
				
			||||||
 | 
					 * his own responsibility. The examination of fitness for the intended use
 | 
				
			||||||
 | 
					 * is the sole responsibility of the Purchaser.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The purchaser shall indemnify Bosch Sensortec from all third party
 | 
				
			||||||
 | 
					 * claims, including any claims for incidental, or consequential damages,
 | 
				
			||||||
 | 
					 * arising from any product use not covered by the parameters of
 | 
				
			||||||
 | 
					 * the respective valid product data sheet or not approved by
 | 
				
			||||||
 | 
					 * Bosch Sensortec and reimburse Bosch Sensortec for all costs in
 | 
				
			||||||
 | 
					 * connection with such claims.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The purchaser must monitor the market for the purchased products,
 | 
				
			||||||
 | 
					 * particularly with regard to product safety and inform Bosch Sensortec
 | 
				
			||||||
 | 
					 * without delay of all security relevant incidents.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Engineering Samples are marked with an asterisk (*) or (e).
 | 
				
			||||||
 | 
					 * Samples may vary from the valid technical specifications of the product
 | 
				
			||||||
 | 
					 * series. They are therefore not intended or fit for resale to third
 | 
				
			||||||
 | 
					 * parties or for use in end products. Their sole purpose is internal
 | 
				
			||||||
 | 
					 * client testing. The testing of an engineering sample may in no way
 | 
				
			||||||
 | 
					 * replace the testing of a product series. Bosch Sensortec assumes
 | 
				
			||||||
 | 
					 * no liability for the use of engineering samples.
 | 
				
			||||||
 | 
					 * By accepting the engineering samples, the Purchaser agrees to indemnify
 | 
				
			||||||
 | 
					 * Bosch Sensortec from all claims arising from the use of engineering
 | 
				
			||||||
 | 
					 * samples.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Special:
 | 
				
			||||||
 | 
					 * This software module (hereinafter called "Software") and any information
 | 
				
			||||||
 | 
					 * on application-sheets (hereinafter called "Information") is provided
 | 
				
			||||||
 | 
					 * free of charge for the sole purpose to support your application work.
 | 
				
			||||||
 | 
					 * The Software and Information is subject to the following
 | 
				
			||||||
 | 
					 * terms and conditions:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The Software is specifically designed for the exclusive use for
 | 
				
			||||||
 | 
					 * Bosch Sensortec products by personnel who have special experience
 | 
				
			||||||
 | 
					 * and training. Do not use this Software if you do not have the
 | 
				
			||||||
 | 
					 * proper experience or training.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This Software package is provided `` as is `` and without any expressed
 | 
				
			||||||
 | 
					 * or implied warranties,including without limitation, the implied warranties
 | 
				
			||||||
 | 
					 * of merchantability and fitness for a particular purpose.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Bosch Sensortec and their representatives and agents deny any liability
 | 
				
			||||||
 | 
					 * for the functional impairment
 | 
				
			||||||
 | 
					 * of this Software in terms of fitness, performance and safety.
 | 
				
			||||||
 | 
					 * Bosch Sensortec and their representatives and agents shall not be liable
 | 
				
			||||||
 | 
					 * for any direct or indirect damages or injury, except as
 | 
				
			||||||
 | 
					 * otherwise stipulated in mandatory applicable law.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The Information provided is believed to be accurate and reliable.
 | 
				
			||||||
 | 
					 * Bosch Sensortec assumes no responsibility for the consequences of use
 | 
				
			||||||
 | 
					 * of such Information nor for any infringement of patents or
 | 
				
			||||||
 | 
					 * other rights of third parties which may result from its use.
 | 
				
			||||||
 | 
					 * No license is granted by implication or otherwise under any patent or
 | 
				
			||||||
 | 
					 * patent rights of Bosch. Specifications mentioned in the Information are
 | 
				
			||||||
 | 
					 * subject to change without notice.
 | 
				
			||||||
 | 
					 **************************************************************************/
 | 
				
			||||||
 | 
					/*! \file bma4_defs.h
 | 
				
			||||||
 | 
					    \brief Sensor Driver for BMA4 family of sensors */
 | 
				
			||||||
 | 
					#ifndef BMA4_DEFS_H__
 | 
				
			||||||
 | 
					#define BMA4_DEFS_H__
 | 
				
			||||||
 | 
					/*********************************************************************/
 | 
				
			||||||
 | 
					/**\ header files */
 | 
				
			||||||
 | 
					#ifdef __KERNEL__
 | 
				
			||||||
 | 
					#include <linux/types.h>
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#include <math.h>
 | 
				
			||||||
 | 
					#include <stddef.h>
 | 
				
			||||||
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*********************************************************************/
 | 
				
			||||||
 | 
					/* macro definitions */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					#if (LONG_MAX) > 0x7fffffff
 | 
				
			||||||
 | 
					#define __have_long64   1
 | 
				
			||||||
 | 
					#elif (LONG_MAX) == 0x7fffffff
 | 
				
			||||||
 | 
					#define __have_long32   1
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if !defined(UINT8_C)
 | 
				
			||||||
 | 
					#define INT8_C(x) x
 | 
				
			||||||
 | 
					#if (INT_MAX) > 0x7f
 | 
				
			||||||
 | 
					#define UINT8_C(x) x
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#define UINT8_C(x) x##U
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if !defined(UINT16_C)
 | 
				
			||||||
 | 
					#define INT16_C(x) x
 | 
				
			||||||
 | 
					#if (INT_MAX) > 0x7fff
 | 
				
			||||||
 | 
					#define UINT16_C(x) x
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#define UINT16_C(x) x##U
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if !defined(INT32_C) && !defined(UINT32_C)
 | 
				
			||||||
 | 
					#if __have_long32
 | 
				
			||||||
 | 
					#define INT32_C(x)  x##L
 | 
				
			||||||
 | 
					#define UINT32_C(x) x##UL
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#define INT32_C(x)  x
 | 
				
			||||||
 | 
					#define UINT32_C(x) x##U
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if !defined(INT64_C) && !defined(UINT64_C)
 | 
				
			||||||
 | 
					#if __have_long64
 | 
				
			||||||
 | 
					#define INT64_C(x)  x##L
 | 
				
			||||||
 | 
					#define UINT64_C(x) x##UL
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#define INT64_C(x)  x##LL
 | 
				
			||||||
 | 
					#define UINT64_C(x) x##ULL
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name CHIP ID ADDRESS*/
 | 
				
			||||||
 | 
					#define BMA4_CHIP_ID_ADDR UINT8_C(0x00)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name RESET REGISTER */
 | 
				
			||||||
 | 
					#define BMA4_RESET_ADDR     UINT8_C(0xB6)
 | 
				
			||||||
 | 
					#define BMA4_RESET_SET_MASK UINT8_C(0x7E)
 | 
				
			||||||
 | 
					/**\name ERROR STATUS*/
 | 
				
			||||||
 | 
					#define BMA4_ERROR_ADDR UINT8_C(0X02)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name STATUS REGISTER FOR SENSOR STATUS FLAG*/
 | 
				
			||||||
 | 
					#define BMA4_STATUS_ADDR UINT8_C(0X03)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name AUX/ACCEL DATA BASE ADDRESS REGISTERS*/
 | 
				
			||||||
 | 
					#define BMA4_DATA_0_ADDR UINT8_C(0X0A)
 | 
				
			||||||
 | 
					#define BMA4_DATA_8_ADDR UINT8_C(0X12)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name SENSOR TIME REGISTERS*/
 | 
				
			||||||
 | 
					#define BMA4_SENSORTIME_0_ADDR UINT8_C(0X18)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name INTERRUPT/FEATURE STATUS REGISTERS*/
 | 
				
			||||||
 | 
					#define BMA4_INT_STAT_0_ADDR UINT8_C(0X1C)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name INTERRUPT/FEATURE STATUS REGISTERS*/
 | 
				
			||||||
 | 
					#define BMA4_INT_STAT_1_ADDR UINT8_C(0X1D)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name TEMPERATURE REGISTERS*/
 | 
				
			||||||
 | 
					#define BMA4_TEMPERATURE_ADDR UINT8_C(0X22)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name FIFO REGISTERS*/
 | 
				
			||||||
 | 
					#define BMA4_FIFO_LENGTH_0_ADDR UINT8_C(0X24)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_DATA_ADDR     UINT8_C(0X26)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name ACCEL CONFIG REGISTERS*/
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_CONFIG_ADDR UINT8_C(0X40)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name ACCEL RANGE ADDRESS*/
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_RANGE_ADDR UINT8_C(0X41)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name AUX CONFIG REGISTERS*/
 | 
				
			||||||
 | 
					#define BMA4_AUX_CONFIG_ADDR UINT8_C(0X44)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name FIFO DOWN SAMPLING REGISTER ADDRESS FOR ACCEL*/
 | 
				
			||||||
 | 
					#define BMA4_FIFO_DOWN_ADDR UINT8_C(0X45)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name FIFO WATERMARK REGISTER ADDRESS*/
 | 
				
			||||||
 | 
					#define BMA4_FIFO_WTM_0_ADDR UINT8_C(0X46)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name FIFO CONFIG REGISTERS*/
 | 
				
			||||||
 | 
					#define BMA4_FIFO_CONFIG_0_ADDR UINT8_C(0X48)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_CONFIG_1_ADDR UINT8_C(0X49)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name MAG INTERFACE REGISTERS*/
 | 
				
			||||||
 | 
					#define BMA4_AUX_DEV_ID_ADDR  UINT8_C(0X4B)
 | 
				
			||||||
 | 
					#define BMA4_AUX_IF_CONF_ADDR UINT8_C(0X4C)
 | 
				
			||||||
 | 
					#define BMA4_AUX_RD_ADDR      UINT8_C(0X4D)
 | 
				
			||||||
 | 
					#define BMA4_AUX_WR_ADDR      UINT8_C(0X4E)
 | 
				
			||||||
 | 
					#define BMA4_AUX_WR_DATA_ADDR UINT8_C(0X4F)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name INTERRUPT ENABLE REGISTERS*/
 | 
				
			||||||
 | 
					#define BMA4_INT1_IO_CTRL_ADDR UINT8_C(0X53)
 | 
				
			||||||
 | 
					#define BMA4_INT2_IO_CTRL_ADDR UINT8_C(0X54)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name LATCH DURATION REGISTERS*/
 | 
				
			||||||
 | 
					#define BMA4_INTR_LATCH_ADDR UINT8_C(0X55)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name MAP INTERRUPT 1 and 2 REGISTERS*/
 | 
				
			||||||
 | 
					#define BMA4_INT_MAP_1_ADDR    UINT8_C(0X56)
 | 
				
			||||||
 | 
					#define BMA4_INT_MAP_2_ADDR    UINT8_C(0X57)
 | 
				
			||||||
 | 
					#define BMA4_INT_MAP_DATA_ADDR UINT8_C(0x58)
 | 
				
			||||||
 | 
					#define BMA4_INIT_CTRL_ADDR    UINT8_C(0x59)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name FEATURE CONFIG RELATED */
 | 
				
			||||||
 | 
					#define BMA4_RESERVED_REG_5B_ADDR UINT8_C(0x5B)
 | 
				
			||||||
 | 
					#define BMA4_RESERVED_REG_5C_ADDR UINT8_C(0x5C)
 | 
				
			||||||
 | 
					#define BMA4_FEATURE_CONFIG_ADDR  UINT8_C(0x5E)
 | 
				
			||||||
 | 
					#define BMA4_INTERNAL_ERROR       UINT8_C(0x5F)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name SERIAL INTERFACE SETTINGS REGISTER*/
 | 
				
			||||||
 | 
					#define BMA4_IF_CONFIG_ADDR UINT8_C(0X6B)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name SELF_TEST REGISTER*/
 | 
				
			||||||
 | 
					#define BMA4_ACC_SELF_TEST_ADDR UINT8_C(0X6D)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name SPI,I2C SELECTION REGISTER*/
 | 
				
			||||||
 | 
					#define BMA4_NV_CONFIG_ADDR UINT8_C(0x70)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name ACCEL OFFSET REGISTERS*/
 | 
				
			||||||
 | 
					#define BMA4_OFFSET_0_ADDR UINT8_C(0X71)
 | 
				
			||||||
 | 
					#define BMA4_OFFSET_1_ADDR UINT8_C(0X72)
 | 
				
			||||||
 | 
					#define BMA4_OFFSET_2_ADDR UINT8_C(0X73)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name POWER_CTRL REGISTER*/
 | 
				
			||||||
 | 
					#define BMA4_POWER_CONF_ADDR UINT8_C(0x7C)
 | 
				
			||||||
 | 
					#define BMA4_POWER_CTRL_ADDR UINT8_C(0x7D)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name COMMAND REGISTER*/
 | 
				
			||||||
 | 
					#define BMA4_CMD_ADDR UINT8_C(0X7E)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name GPIO REGISTERS*/
 | 
				
			||||||
 | 
					#define BMA4_STEP_CNT_OUT_0_ADDR  UINT8_C(0x1E)
 | 
				
			||||||
 | 
					#define BMA4_HIGH_G_OUT_ADDR      UINT8_C(0x1F)
 | 
				
			||||||
 | 
					#define BMA4_ACTIVITY_OUT_ADDR    UINT8_C(0x27)
 | 
				
			||||||
 | 
					#define BMA4_ORIENTATION_OUT_ADDR UINT8_C(0x28)
 | 
				
			||||||
 | 
					#define BMA4_INTERNAL_STAT        UINT8_C(0x2A)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * @brief Block size for config write */
 | 
				
			||||||
 | 
					#define BMA4_BLOCK_SIZE UINT8_C(32)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name I2C slave address */
 | 
				
			||||||
 | 
					#define BMA4_I2C_ADDR_PRIMARY   UINT8_C(0x18)
 | 
				
			||||||
 | 
					#define BMA4_I2C_ADDR_SECONDARY UINT8_C(0x19)
 | 
				
			||||||
 | 
					#define BMA4_I2C_BMM150_ADDR    UINT8_C(0x10)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Interface selection macro */
 | 
				
			||||||
 | 
					#define BMA4_SPI_INTERFACE UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_I2C_INTERFACE UINT8_C(2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Interface selection macro */
 | 
				
			||||||
 | 
					#define BMA4_SPI_WR_MASK UINT8_C(0x7F)
 | 
				
			||||||
 | 
					#define BMA4_SPI_RD_MASK UINT8_C(0x80)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Chip ID macros */
 | 
				
			||||||
 | 
					#define BMA4_CHIP_ID_MIN UINT8_C(0x10)
 | 
				
			||||||
 | 
					#define BMA4_CHIP_ID_MAX UINT8_C(0x15)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Auxiliary sensor selection macro */
 | 
				
			||||||
 | 
					#define BMM150_SENSOR         UINT8_C(1)
 | 
				
			||||||
 | 
					#define AKM9916_SENSOR        UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA4_ASIC_INITIALIZED UINT8_C(0x01)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Auxiliary sensor chip id macros */
 | 
				
			||||||
 | 
					#define BMM150_CHIP_ID UINT8_C(0x32)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name Auxiliary sensor other macros */
 | 
				
			||||||
 | 
					#define BMM150_POWER_CONTROL_REG UINT8_C(0x4B)
 | 
				
			||||||
 | 
					#define BMM150_POWER_MODE_REG    UINT8_C(0x4C)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    CONSTANTS */
 | 
				
			||||||
 | 
					#define BMA4_FIFO_CONFIG_LENGTH  UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_CONFIG_LENGTH UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_WM_LENGTH      UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA4_CONFIG_STREAM_SIZE  UINT16_C(6144)
 | 
				
			||||||
 | 
					#define BMA4_NON_LATCH_MODE      UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA4_LATCH_MODE          UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_OPEN_DRAIN          UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_PUSH_PULL           UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA4_ACTIVE_HIGH         UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_ACTIVE_LOW          UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA4_EDGE_TRIGGER        UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_LEVEL_TRIGGER       UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA4_OUTPUT_ENABLE       UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_OUTPUT_DISABLE      UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA4_INPUT_ENABLE        UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_INPUT_DISABLE       UINT8_C(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name ACCEL RANGE CHECK*/
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_RANGE_2G  UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_RANGE_4G  UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_RANGE_8G  UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_RANGE_16G UINT8_C(3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name  CONDITION CHECK FOR READING AND WRTING DATA*/
 | 
				
			||||||
 | 
					#define BMA4_MAX_VALUE_FIFO_FILTER   UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_MAX_VALUE_SPI3          UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_MAX_VALUE_SELFTEST_AMP  UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_MAX_IF_MODE             UINT8_C(3)
 | 
				
			||||||
 | 
					#define BMA4_MAX_VALUE_SELFTEST_SIGN UINT8_C(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name BUS READ AND WRITE LENGTH FOR MAG & ACCEL*/
 | 
				
			||||||
 | 
					#define BMA4_MAG_TRIM_DATA_SIZE   UINT8_C(16)
 | 
				
			||||||
 | 
					#define BMA4_MAG_XYZ_DATA_LENGTH  UINT8_C(6)
 | 
				
			||||||
 | 
					#define BMA4_MAG_XYZR_DATA_LENGTH UINT8_C(8)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_DATA_LENGTH    UINT8_C(6)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_DATA_LENGTH     UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA4_TEMP_DATA_SIZE       UINT8_C(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name TEMPERATURE CONSTANT */
 | 
				
			||||||
 | 
					#define BMA4_OFFSET_TEMP UINT8_C(23)
 | 
				
			||||||
 | 
					#define BMA4_DEG         UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_FAHREN      UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA4_KELVIN      UINT8_C(3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name DELAY DEFINITION IN MSEC*/
 | 
				
			||||||
 | 
					#define BMA4_AUX_IF_DELAY         UINT8_C(5)
 | 
				
			||||||
 | 
					#define BMA4_BMM150_WAKEUP_DELAY1 UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA4_BMM150_WAKEUP_DELAY2 UINT8_C(3)
 | 
				
			||||||
 | 
					#define BMA4_BMM150_WAKEUP_DELAY3 UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_GEN_READ_WRITE_DELAY UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_AUX_COM_DELAY        UINT8_C(10)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    ARRAY PARAMETER DEFINITIONS*/
 | 
				
			||||||
 | 
					#define BMA4_SENSOR_TIME_MSB_BYTE  UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA4_SENSOR_TIME_XLSB_BYTE UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_SENSOR_TIME_LSB_BYTE  UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA4_MAG_X_LSB_BYTE        UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA4_MAG_X_MSB_BYTE        UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_MAG_Y_LSB_BYTE        UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA4_MAG_Y_MSB_BYTE        UINT8_C(3)
 | 
				
			||||||
 | 
					#define BMA4_MAG_Z_LSB_BYTE        UINT8_C(4)
 | 
				
			||||||
 | 
					#define BMA4_MAG_Z_MSB_BYTE        UINT8_C(5)
 | 
				
			||||||
 | 
					#define BMA4_MAG_R_LSB_BYTE        UINT8_C(6)
 | 
				
			||||||
 | 
					#define BMA4_MAG_R_MSB_BYTE        UINT8_C(7)
 | 
				
			||||||
 | 
					#define BMA4_TEMP_BYTE             UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_LENGTH_MSB_BYTE  UINT8_C(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    ERROR CODES */
 | 
				
			||||||
 | 
					#define BMA4_OK                     UINT16_C(0)
 | 
				
			||||||
 | 
					#define BMA4_E_NULL_PTR             UINT16_C(1)
 | 
				
			||||||
 | 
					#define BMA4_E_OUT_OF_RANGE         UINT16_C(1 << 1)
 | 
				
			||||||
 | 
					#define BMA4_E_INVALID_SENSOR       UINT16_C(1 << 2)
 | 
				
			||||||
 | 
					#define BMA4_E_CONFIG_STREAM_ERROR  UINT16_C(1 << 3)
 | 
				
			||||||
 | 
					#define BMA4_E_SELF_TEST_FAIL       UINT16_C(1 << 4)
 | 
				
			||||||
 | 
					#define BMA4_E_FOC_FAIL             UINT16_C(1 << 5)
 | 
				
			||||||
 | 
					#define BMA4_E_FAIL                 UINT16_C(1 << 6)
 | 
				
			||||||
 | 
					#define BMA4_E_INT_LINE_INVALID     UINT16_C(1 << 7)
 | 
				
			||||||
 | 
					#define BMA4_E_RD_WR_LENGTH_INVALID UINT16_C(1 << 8)
 | 
				
			||||||
 | 
					#define BMA4_E_AUX_CONFIG_FAIL      UINT16_C(1 << 9)
 | 
				
			||||||
 | 
					#define BMA4_E_SC_FIFO_HEADER_ERR   UINT16_C(1 << 10)
 | 
				
			||||||
 | 
					#define BMA4_E_SC_FIFO_CONFIG_ERR   UINT16_C(1 << 11)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    UTILITY MACROS  */
 | 
				
			||||||
 | 
					#define BMA4_SET_LOW_BYTE   UINT16_C(0x00FF)
 | 
				
			||||||
 | 
					#define BMA4_SET_HIGH_BYTE  UINT16_C(0xFF00)
 | 
				
			||||||
 | 
					#define BMA4_SET_LOW_NIBBLE UINT8_C(0x0F)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    FOC RELATED MACROS  */
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_CONFIG_FOC UINT8_C(0xB7)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Macros used for Self test */
 | 
				
			||||||
 | 
					/* Self-test: Resulting minimum difference signal in mg for BMA42x */
 | 
				
			||||||
 | 
					#define BMA42X_ST_ACC_X_AXIS_SIGNAL_DIFF UINT16_C(400)
 | 
				
			||||||
 | 
					#define BMA42X_ST_ACC_Y_AXIS_SIGNAL_DIFF UINT16_C(800)
 | 
				
			||||||
 | 
					#define BMA42X_ST_ACC_Z_AXIS_SIGNAL_DIFF UINT16_C(400)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Self-test: Resulting minimum difference signal in mg for BMA45x */
 | 
				
			||||||
 | 
					#define BMA45X_ST_ACC_X_AXIS_SIGNAL_DIFF UINT16_C(1800)
 | 
				
			||||||
 | 
					#define BMA45X_ST_ACC_Y_AXIS_SIGNAL_DIFF UINT16_C(1800)
 | 
				
			||||||
 | 
					#define BMA45X_ST_ACC_Z_AXIS_SIGNAL_DIFF UINT16_C(1800)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name BOOLEAN TYPES*/
 | 
				
			||||||
 | 
					#ifndef TRUE
 | 
				
			||||||
 | 
					#define TRUE UINT8_C(0x01)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef FALSE
 | 
				
			||||||
 | 
					#define FALSE UINT8_C(0x00)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef NULL
 | 
				
			||||||
 | 
					#define NULL UINT8_C(0x00)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    ERROR STATUS POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_FATAL_ERR_MSK UINT8_C(0x01)
 | 
				
			||||||
 | 
					#define BMA4_CMD_ERR_POS   UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_CMD_ERR_MSK   UINT8_C(0x02)
 | 
				
			||||||
 | 
					#define BMA4_ERR_CODE_POS  UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA4_ERR_CODE_MSK  UINT8_C(0x1C)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_ERR_POS  UINT8_C(6)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_ERR_MSK  UINT8_C(0x40)
 | 
				
			||||||
 | 
					#define BMA4_AUX_ERR_POS   UINT8_C(7)
 | 
				
			||||||
 | 
					#define BMA4_AUX_ERR_MSK   UINT8_C(0x80)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    Maximum number of bytes to be read from the sensor */
 | 
				
			||||||
 | 
					#define BMA4_MAX_BUFFER_SIZE UINT8_C(81)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    NV_CONFIG POSITION AND MASK*/
 | 
				
			||||||
 | 
					/* NV_CONF Description - Reg Addr --> (0x70), Bit --> 3 */
 | 
				
			||||||
 | 
					#define BMA4_NV_ACCEL_OFFSET_POS UINT8_C(3)
 | 
				
			||||||
 | 
					#define BMA4_NV_ACCEL_OFFSET_MSK UINT8_C(0x08)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    MAG DATA XYZ POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_DATA_MAG_X_LSB_POS UINT8_C(3)
 | 
				
			||||||
 | 
					#define BMA4_DATA_MAG_X_LSB_MSK UINT8_C(0xF8)
 | 
				
			||||||
 | 
					#define BMA4_DATA_MAG_Y_LSB_POS UINT8_C(3)
 | 
				
			||||||
 | 
					#define BMA4_DATA_MAG_Y_LSB_MSK UINT8_C(0xF8)
 | 
				
			||||||
 | 
					#define BMA4_DATA_MAG_Z_LSB_POS UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_DATA_MAG_Z_LSB_MSK UINT8_C(0xFE)
 | 
				
			||||||
 | 
					#define BMA4_DATA_MAG_R_LSB_POS UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA4_DATA_MAG_R_LSB_MSK UINT8_C(0xFC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name ACCEL DATA READY POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_STAT_DATA_RDY_ACCEL_POS UINT8_C(7)
 | 
				
			||||||
 | 
					#define BMA4_STAT_DATA_RDY_ACCEL_MSK UINT8_C(0x80)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name MAG DATA READY POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_STAT_DATA_RDY_MAG_POS UINT8_C(5)
 | 
				
			||||||
 | 
					#define BMA4_STAT_DATA_RDY_MAG_MSK UINT8_C(0x20)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name ADVANCE POWER SAVE POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_ADVANCE_POWER_SAVE_MSK UINT8_C(0x01)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name ACCELEROMETER ENABLE POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_ENABLE_POS UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_ENABLE_MSK UINT8_C(0x04)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name MAGNETOMETER ENABLE POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_MAG_ENABLE_MSK UINT8_C(0x01)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    ACCEL CONFIGURATION POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_ODR_MSK      UINT8_C(0x0F)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_BW_POS       UINT8_C(4)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_BW_MSK       UINT8_C(0x70)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_RANGE_MSK    UINT8_C(0x03)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_PERFMODE_POS UINT8_C(7)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_PERFMODE_MSK UINT8_C(0x80)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    MAG CONFIGURATION POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_MAG_CONFIG_OFFSET_POS UINT8_C(4)
 | 
				
			||||||
 | 
					#define BMA4_MAG_CONFIG_OFFSET_LEN UINT8_C(4)
 | 
				
			||||||
 | 
					#define BMA4_MAG_CONFIG_OFFSET_MSK UINT8_C(0xF0)
 | 
				
			||||||
 | 
					#define BMA4_MAG_CONFIG_OFFSET_REG (BMA4_AUX_CONFIG_ADDR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name FIFO SELF WAKE UP POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_FIFO_SELF_WAKE_UP_POS UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_SELF_WAKE_UP_MSK UINT8_C(0x02)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    FIFO BYTE COUNTER POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_FIFO_BYTE_COUNTER_MSB_MSK UINT8_C(0x3F)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    FIFO DATA POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_FIFO_DATA_POS UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_DATA_MSK UINT8_C(0xFF)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    FIFO FILTER FOR ACCEL  POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_FIFO_DOWN_ACCEL_POS   UINT8_C(4)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_DOWN_ACCEL_MSK   UINT8_C(0x70)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_FILTER_ACCEL_POS UINT8_C(7)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_FILTER_ACCEL_MSK UINT8_C(0x80)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    FIFO HEADER DATA DEFINITIONS    */
 | 
				
			||||||
 | 
					#define FIFO_HEAD_A             UINT8_C(0x84)
 | 
				
			||||||
 | 
					#define FIFO_HEAD_M             UINT8_C(0x90)
 | 
				
			||||||
 | 
					#define FIFO_HEAD_M_A           UINT8_C(0x94)
 | 
				
			||||||
 | 
					#define FIFO_HEAD_SENSOR_TIME   UINT8_C(0x44)
 | 
				
			||||||
 | 
					#define FIFO_HEAD_INPUT_CONFIG  UINT8_C(0x48)
 | 
				
			||||||
 | 
					#define FIFO_HEAD_SKIP_FRAME    UINT8_C(0x40)
 | 
				
			||||||
 | 
					#define FIFO_HEAD_OVER_READ_MSB UINT8_C(0x80)
 | 
				
			||||||
 | 
					#define FIFO_HEAD_SAMPLE_DROP   UINT8_C(0x50)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    FIFO HEADERLESS MODE DATA ENABLE DEFINITIONS   */
 | 
				
			||||||
 | 
					#define BMA4_FIFO_M_A_ENABLE UINT8_C(0x60)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_A_ENABLE   UINT8_C(0x40)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_M_ENABLE   UINT8_C(0x20)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    FIFO CONFIGURATION SELECTION    */
 | 
				
			||||||
 | 
					#define BMA4_FIFO_STOP_ON_FULL  UINT8_C(0x01)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_TIME          UINT8_C(0x02)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_TAG_INTR2     UINT8_C(0x04)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_TAG_INTR1     UINT8_C(0x08)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_HEADER        UINT8_C(0x10)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_MAG           UINT8_C(0x20)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_ACCEL         UINT8_C(0x40)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_ALL           UINT8_C(0x7F)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_CONFIG_0_MASK UINT8_C(0x03)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_CONFIG_1_MASK UINT8_C(0xFC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    FIFO FRAME COUNT DEFINITION     */
 | 
				
			||||||
 | 
					#define FIFO_LSB_CONFIG_CHECK   UINT8_C(0x00)
 | 
				
			||||||
 | 
					#define FIFO_MSB_CONFIG_CHECK   UINT8_C(0x80)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_TAG_INTR_MASK UINT8_C(0xFC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    FIFO DROPPED FRAME DEFINITION     */
 | 
				
			||||||
 | 
					#define AUX_FIFO_DROP       UINT8_C(0x04)
 | 
				
			||||||
 | 
					#define ACCEL_AUX_FIFO_DROP UINT8_C(0x05)
 | 
				
			||||||
 | 
					#define ACCEL_FIFO_DROP     UINT8_C(0x01)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name FIFO MAG DEFINITION*/
 | 
				
			||||||
 | 
					#define BMA4_MA_FIFO_A_X_LSB UINT8_C(8)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name FIFO sensor time length definitions*/
 | 
				
			||||||
 | 
					#define BMA4_SENSOR_TIME_LENGTH UINT8_C(3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name FIFO LENGTH DEFINITION*/
 | 
				
			||||||
 | 
					#define BMA4_FIFO_A_LENGTH  UINT8_C(6)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_M_LENGTH  UINT8_C(8)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_MA_LENGTH UINT8_C(14)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    MAG I2C ADDRESS SELECTION POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_I2C_DEVICE_ADDR_POS UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_I2C_DEVICE_ADDR_MSK UINT8_C(0xFE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name MAG CONFIGURATION FOR SECONDARY INTERFACE POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_MAG_BURST_MSK         UINT8_C(0x03)
 | 
				
			||||||
 | 
					#define BMA4_MAG_MANUAL_ENABLE_POS UINT8_C(7)
 | 
				
			||||||
 | 
					#define BMA4_MAG_MANUAL_ENABLE_MSK UINT8_C(0x80)
 | 
				
			||||||
 | 
					#define BMA4_READ_ADDR_MSK         UINT8_C(0xFF)
 | 
				
			||||||
 | 
					#define BMA4_WRITE_ADDR_MSK        UINT8_C(0xFF)
 | 
				
			||||||
 | 
					#define BMA4_WRITE_DATA_MSK        UINT8_C(0xFF)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    OUTPUT TYPE ENABLE POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_INT_EDGE_CTRL_MASK  UINT8_C(0x01)
 | 
				
			||||||
 | 
					#define BMA4_INT_EDGE_CTRL_POS   UINT8_C(0x00)
 | 
				
			||||||
 | 
					#define BMA4_INT_LEVEL_MASK      UINT8_C(0x02)
 | 
				
			||||||
 | 
					#define BMA4_INT_LEVEL_POS       UINT8_C(0x01)
 | 
				
			||||||
 | 
					#define BMA4_INT_OPEN_DRAIN_MASK UINT8_C(0x04)
 | 
				
			||||||
 | 
					#define BMA4_INT_OPEN_DRAIN_POS  UINT8_C(0x02)
 | 
				
			||||||
 | 
					#define BMA4_INT_OUTPUT_EN_MASK  UINT8_C(0x08)
 | 
				
			||||||
 | 
					#define BMA4_INT_OUTPUT_EN_POS   UINT8_C(0x03)
 | 
				
			||||||
 | 
					#define BMA4_INT_INPUT_EN_MASK   UINT8_C(0x10)
 | 
				
			||||||
 | 
					#define BMA4_INT_INPUT_EN_POS    UINT8_C(0x04)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    IF CONFIG POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_CONFIG_SPI3_MSK       UINT8_C(0x01)
 | 
				
			||||||
 | 
					#define BMA4_IF_CONFIG_IF_MODE_POS UINT8_C(4)
 | 
				
			||||||
 | 
					#define BMA4_IF_CONFIG_IF_MODE_MSK UINT8_C(0x10)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    ACCEL SELF TEST POSITION AND MASK*/
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_SELFTEST_ENABLE_MSK UINT8_C(0x01)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_SELFTEST_SIGN_POS   UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_SELFTEST_SIGN_MSK   UINT8_C(0x04)
 | 
				
			||||||
 | 
					#define BMA4_SELFTEST_AMP_POS          UINT8_C(3)
 | 
				
			||||||
 | 
					#define BMA4_SELFTEST_AMP_MSK          UINT8_C(0x08)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    ACCEL ODR          */
 | 
				
			||||||
 | 
					#define BMA4_OUTPUT_DATA_RATE_0_78HZ UINT8_C(0x01)
 | 
				
			||||||
 | 
					#define BMA4_OUTPUT_DATA_RATE_1_56HZ UINT8_C(0x02)
 | 
				
			||||||
 | 
					#define BMA4_OUTPUT_DATA_RATE_3_12HZ UINT8_C(0x03)
 | 
				
			||||||
 | 
					#define BMA4_OUTPUT_DATA_RATE_6_25HZ UINT8_C(0x04)
 | 
				
			||||||
 | 
					#define BMA4_OUTPUT_DATA_RATE_12_5HZ UINT8_C(0x05)
 | 
				
			||||||
 | 
					#define BMA4_OUTPUT_DATA_RATE_25HZ   UINT8_C(0x06)
 | 
				
			||||||
 | 
					#define BMA4_OUTPUT_DATA_RATE_50HZ   UINT8_C(0x07)
 | 
				
			||||||
 | 
					#define BMA4_OUTPUT_DATA_RATE_100HZ  UINT8_C(0x08)
 | 
				
			||||||
 | 
					#define BMA4_OUTPUT_DATA_RATE_200HZ  UINT8_C(0x09)
 | 
				
			||||||
 | 
					#define BMA4_OUTPUT_DATA_RATE_400HZ  UINT8_C(0x0A)
 | 
				
			||||||
 | 
					#define BMA4_OUTPUT_DATA_RATE_800HZ  UINT8_C(0x0B)
 | 
				
			||||||
 | 
					#define BMA4_OUTPUT_DATA_RATE_1600HZ UINT8_C(0x0C)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    ACCEL BANDWIDTH PARAMETER         */
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_OSR4_AVG1   UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_OSR2_AVG2   UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_NORMAL_AVG4 UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_CIC_AVG8    UINT8_C(3)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_RES_AVG16   UINT8_C(4)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_RES_AVG32   UINT8_C(5)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_RES_AVG64   UINT8_C(6)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_RES_AVG128  UINT8_C(7)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    ACCEL PERFMODE PARAMETER         */
 | 
				
			||||||
 | 
					#define BMA4_CIC_AVG_MODE    UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA4_CONTINUOUS_MODE UINT8_C(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    MAG OFFSET         */
 | 
				
			||||||
 | 
					#define BMA4_MAG_OFFSET_MAX UINT8_C(0x00)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    ENABLE/DISABLE SELECTIONS        */
 | 
				
			||||||
 | 
					#define BMA4_X_AXIS UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA4_Y_AXIS UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_Z_AXIS UINT8_C(2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name SELF TEST*/
 | 
				
			||||||
 | 
					#define BMA4_SELFTEST_PASS UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA4_SELFTEST_FAIL UINT8_C(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name INTERRUPT MAPS    */
 | 
				
			||||||
 | 
					#define BMA4_INTR1_MAP UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA4_INTR2_MAP UINT8_C(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    INTERRUPT MASKS        */
 | 
				
			||||||
 | 
					#define BMA4_FIFO_FULL_INT      UINT16_C(0x0100)
 | 
				
			||||||
 | 
					#define BMA4_FIFO_WM_INT        UINT16_C(0x0200)
 | 
				
			||||||
 | 
					#define BMA4_DATA_RDY_INT       UINT16_C(0x0400)
 | 
				
			||||||
 | 
					#define BMA4_MAG_DATA_RDY_INT   UINT16_C(0x2000)
 | 
				
			||||||
 | 
					#define BMA4_ACCEL_DATA_RDY_INT UINT16_C(0x8000)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    AKM POWER MODE SELECTION     */
 | 
				
			||||||
 | 
					#define AKM_POWER_DOWN_MODE  UINT8_C(0)
 | 
				
			||||||
 | 
					#define AKM_SINGLE_MEAS_MODE UINT8_C(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    SECONDARY_MAG POWER MODE SELECTION    */
 | 
				
			||||||
 | 
					#define BMA4_MAG_FORCE_MODE   UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA4_MAG_SUSPEND_MODE UINT8_C(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    MAG POWER MODE SELECTION    */
 | 
				
			||||||
 | 
					#define FORCE_MODE   UINT8_C(0)
 | 
				
			||||||
 | 
					#define SUSPEND_MODE UINT8_C(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    ACCEL POWER MODE    */
 | 
				
			||||||
 | 
					#define ACCEL_MODE_NORMAL UINT8_C(0x11)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    MAG POWER MODE    */
 | 
				
			||||||
 | 
					#define MAG_MODE_SUSPEND UINT8_C(0x18)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    ENABLE/DISABLE BIT VALUES    */
 | 
				
			||||||
 | 
					#define BMA4_ENABLE  UINT8_C(0x01)
 | 
				
			||||||
 | 
					#define BMA4_DISABLE UINT8_C(0x00)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    DEFINITION USED FOR DIFFERENT WRITE   */
 | 
				
			||||||
 | 
					#define BMA4_MANUAL_DISABLE     UINT8_C(0x00)
 | 
				
			||||||
 | 
					#define BMA4_MANUAL_ENABLE      UINT8_C(0x01)
 | 
				
			||||||
 | 
					#define BMA4_ENABLE_MAG_IF_MODE UINT8_C(0x01)
 | 
				
			||||||
 | 
					#define BMA4_MAG_DATA_READ_REG  UINT8_C(0x0A)
 | 
				
			||||||
 | 
					#define BMA4_BMM_POWER_MODE_REG UINT8_C(0x06)
 | 
				
			||||||
 | 
					#define BMA4_SEC_IF_NULL        UINT8_C(0)
 | 
				
			||||||
 | 
					#define BMA4_SEC_IF_BMM150      UINT8_C(1)
 | 
				
			||||||
 | 
					#define BMA4_SEC_IF_AKM09916    UINT8_C(2)
 | 
				
			||||||
 | 
					#define BMA4_ENABLE_AUX_IF_MODE UINT8_C(0x01)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    SENSOR RESOLUTION   */
 | 
				
			||||||
 | 
					#define BMA4_12_BIT_RESOLUTION UINT8_C(12)
 | 
				
			||||||
 | 
					#define BMA4_14_BIT_RESOLUTION UINT8_C(14)
 | 
				
			||||||
 | 
					#define BMA4_16_BIT_RESOLUTION UINT8_C(16)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    MULTIPLIER */
 | 
				
			||||||
 | 
					/*! for handling micro-g values */
 | 
				
			||||||
 | 
					#define BMA4XY_MULTIPLIER UINT32_C(1000000)
 | 
				
			||||||
 | 
					/*! for handling float temperature values */
 | 
				
			||||||
 | 
					#define BMA4_SCALE_TEMP INT32_C(1000)
 | 
				
			||||||
 | 
					/* BMA4_FAHREN_SCALED = 1.8 * 1000 */
 | 
				
			||||||
 | 
					#define BMA4_FAHREN_SCALED INT32_C(1800)
 | 
				
			||||||
 | 
					/* BMA4_KELVIN_SCALED = 273.15 * 1000 */
 | 
				
			||||||
 | 
					#define BMA4_KELVIN_SCALED INT32_C(273150)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    MAP BURST READ LENGTHS  */
 | 
				
			||||||
 | 
					#define BMA4_AUX_READ_LEN_0 0
 | 
				
			||||||
 | 
					#define BMA4_AUX_READ_LEN_1 1
 | 
				
			||||||
 | 
					#define BMA4_AUX_READ_LEN_2 2
 | 
				
			||||||
 | 
					#define BMA4_AUX_READ_LEN_3 3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef ABS
 | 
				
			||||||
 | 
					#define ABS(a) ((a) > 0 ? (a) : -(a)) /*!< Absolute value */
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    BIT SLICE GET AND SET FUNCTIONS */
 | 
				
			||||||
 | 
					#define BMA4_GET_BITSLICE(regvar, bitname)                                     \
 | 
				
			||||||
 | 
					  ((regvar & bitname##_MSK) >> bitname##_POS)
 | 
				
			||||||
 | 
					#define BMA4_SET_BITSLICE(regvar, bitname, val)                                \
 | 
				
			||||||
 | 
					  ((regvar & ~bitname##_MSK) | ((val << bitname##_POS) & bitname##_MSK))
 | 
				
			||||||
 | 
					#define BMA4_GET_DIFF(x, y) ((x) - (y))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define BMA4_GET_LSB(var) (uint8_t)(var & BMA4_SET_LOW_BYTE)
 | 
				
			||||||
 | 
					#define BMA4_GET_MSB(var) (uint8_t)((var & BMA4_SET_HIGH_BYTE) >> 8)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define BMA4_SET_BIT_VAL_0(reg_data, bitname) (reg_data & ~(bitname##_MSK))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define BMA4_SET_BITS_POS_0(reg_data, bitname, data)                           \
 | 
				
			||||||
 | 
					  ((reg_data & ~(bitname##_MSK)) | (data & bitname##_MSK))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define BMA4_GET_BITS_POS_0(reg_data, bitname) (reg_data & (bitname##_MSK))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    TYPEDEF DEFINITIONS */
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * @brief Bus communication function pointer which should be mapped to
 | 
				
			||||||
 | 
					 * the platform specific read and write functions of the user
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					typedef uint16_t (*bma4_com_fptr_t)(uint8_t dev_addr, uint8_t reg_addr,
 | 
				
			||||||
 | 
					                                    uint8_t *read_data, uint16_t len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*! delay function pointer */
 | 
				
			||||||
 | 
					typedef void (*bma4_delay_fptr_t)(uint32_t);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/******************************************************************************/
 | 
				
			||||||
 | 
					/*!  @name         Enum Declarations                                  */
 | 
				
			||||||
 | 
					/******************************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!  @name Enum to define BMA4 variants */
 | 
				
			||||||
 | 
					enum bma4_variant { BMA42X_VARIANT = 1, BMA45X_VARIANT };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**\name    STRUCTURE DEFINITIONS*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *  @brief
 | 
				
			||||||
 | 
					 *  This structure holds asic info. for feature configuration.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct bma4_asic_data {
 | 
				
			||||||
 | 
					  /* Feature config start addr (0-3 bits)*/
 | 
				
			||||||
 | 
					  uint8_t asic_lsb;
 | 
				
			||||||
 | 
					  /* Feature config start addr (4-11 bits)*/
 | 
				
			||||||
 | 
					  uint8_t asic_msb;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * @brief Auxiliary configuration structure for user settings
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct bma4_aux_config {
 | 
				
			||||||
 | 
					  /*! Device address of auxiliary sensor */
 | 
				
			||||||
 | 
					  uint8_t aux_dev_addr;
 | 
				
			||||||
 | 
					  /*! To enable manual or auto mode */
 | 
				
			||||||
 | 
					  uint8_t manual_enable;
 | 
				
			||||||
 | 
					  /*! No of bytes to be read at a time */
 | 
				
			||||||
 | 
					  uint8_t burst_read_length;
 | 
				
			||||||
 | 
					  /*! Variable to set the auxiliary interface */
 | 
				
			||||||
 | 
					  uint8_t if_mode;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *  @brief
 | 
				
			||||||
 | 
					 *  This structure holds all relevant information about BMA4
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct bma4_dev {
 | 
				
			||||||
 | 
					  /*! Chip id of BMA4 */
 | 
				
			||||||
 | 
					  uint8_t chip_id;
 | 
				
			||||||
 | 
					  /*! Chip id of auxiliary sensor */
 | 
				
			||||||
 | 
					  uint8_t aux_chip_id;
 | 
				
			||||||
 | 
					  /*! Device address of BMA4 */
 | 
				
			||||||
 | 
					  uint8_t dev_addr;
 | 
				
			||||||
 | 
					  /*! Interface detail */
 | 
				
			||||||
 | 
					  uint8_t interface;
 | 
				
			||||||
 | 
					  /*! Auxiliary sensor information */
 | 
				
			||||||
 | 
					  uint8_t aux_sensor;
 | 
				
			||||||
 | 
					  /*! Decide SPI or I2C read mechanism */
 | 
				
			||||||
 | 
					  uint8_t dummy_byte;
 | 
				
			||||||
 | 
					  /*! Resolution for FOC */
 | 
				
			||||||
 | 
					  uint8_t resolution;
 | 
				
			||||||
 | 
					  /*! Define the BMA4 variant BMA42X or BMA45X */
 | 
				
			||||||
 | 
					  enum bma4_variant variant;
 | 
				
			||||||
 | 
					  /*  ! Used to check mag manual/auto mode status
 | 
				
			||||||
 | 
					      int8_t mag_manual_enable;*/
 | 
				
			||||||
 | 
					  /*! FIFO related configurations */
 | 
				
			||||||
 | 
					  struct bma4_fifo_frame *fifo;
 | 
				
			||||||
 | 
					  /*! Config stream data buffer address will be assigned*/
 | 
				
			||||||
 | 
					  const uint8_t *config_file_ptr;
 | 
				
			||||||
 | 
					  /*! Max read/write length (maximum supported length is 32).
 | 
				
			||||||
 | 
					      To be set by the user */
 | 
				
			||||||
 | 
					  uint8_t read_write_len;
 | 
				
			||||||
 | 
					  /*! Feature len */
 | 
				
			||||||
 | 
					  uint8_t feature_len;
 | 
				
			||||||
 | 
					  /*! Contains asic information */
 | 
				
			||||||
 | 
					  struct bma4_asic_data asic_data;
 | 
				
			||||||
 | 
					  /*! Contains aux configuration settings */
 | 
				
			||||||
 | 
					  struct bma4_aux_config aux_config;
 | 
				
			||||||
 | 
					  /*! Bus read function pointer */
 | 
				
			||||||
 | 
					  bma4_com_fptr_t bus_read;
 | 
				
			||||||
 | 
					  /*! Bus write function pointer */
 | 
				
			||||||
 | 
					  bma4_com_fptr_t bus_write;
 | 
				
			||||||
 | 
					  /*! delay(in ms) function pointer */
 | 
				
			||||||
 | 
					  bma4_delay_fptr_t delay;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *  @brief This structure holds the information for usage of
 | 
				
			||||||
 | 
					 *  FIFO by the user.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct bma4_fifo_frame {
 | 
				
			||||||
 | 
					  /*! Data buffer of user defined length is to be mapped here */
 | 
				
			||||||
 | 
					  uint8_t *data;
 | 
				
			||||||
 | 
					  /*! Number of bytes of FIFO to be read as specified by the user */
 | 
				
			||||||
 | 
					  uint16_t length;
 | 
				
			||||||
 | 
					  /*! Enabling of the FIFO header to stream in header mode */
 | 
				
			||||||
 | 
					  uint8_t fifo_header_enable;
 | 
				
			||||||
 | 
					  /*! Streaming of the Accelerometer, Auxiliary
 | 
				
			||||||
 | 
					   *  sensor data or both in FIFO */
 | 
				
			||||||
 | 
					  uint8_t fifo_data_enable;
 | 
				
			||||||
 | 
					  /*! Will be equal to length when no more frames are there to parse */
 | 
				
			||||||
 | 
					  uint16_t accel_byte_start_idx;
 | 
				
			||||||
 | 
					  /*! Will be equal to length when no more frames are there to parse */
 | 
				
			||||||
 | 
					  uint16_t mag_byte_start_idx;
 | 
				
			||||||
 | 
					  /*! Will be equal to length when no more frames are there to parse */
 | 
				
			||||||
 | 
					  uint16_t sc_frame_byte_start_idx;
 | 
				
			||||||
 | 
					  /*! Value of FIFO sensor time time */
 | 
				
			||||||
 | 
					  uint32_t sensor_time;
 | 
				
			||||||
 | 
					  /*! Value of Skipped frame counts */
 | 
				
			||||||
 | 
					  uint8_t skipped_frame_count;
 | 
				
			||||||
 | 
					  /*! Value of accel dropped frame count */
 | 
				
			||||||
 | 
					  uint8_t accel_dropped_frame_count;
 | 
				
			||||||
 | 
					  /*! Value of mag dropped frame count */
 | 
				
			||||||
 | 
					  uint8_t mag_dropped_frame_count;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 *  @brief Error Status structure
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct bma4_err_reg {
 | 
				
			||||||
 | 
					  /*! Indicates fatal error */
 | 
				
			||||||
 | 
					  uint8_t fatal_err;
 | 
				
			||||||
 | 
					  /*! Indicates command error */
 | 
				
			||||||
 | 
					  uint8_t cmd_err;
 | 
				
			||||||
 | 
					  /*! Indicates error code */
 | 
				
			||||||
 | 
					  uint8_t err_code;
 | 
				
			||||||
 | 
					  /*! Indicates fifo error */
 | 
				
			||||||
 | 
					  uint8_t fifo_err;
 | 
				
			||||||
 | 
					  /*! Indicates mag error */
 | 
				
			||||||
 | 
					  uint8_t aux_err;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * @brief Asic Status structure
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct bma4_asic_status {
 | 
				
			||||||
 | 
					  /*! Asic is in sleep/halt state */
 | 
				
			||||||
 | 
					  uint8_t sleep;
 | 
				
			||||||
 | 
					  /*! Dedicated interrupt is set again before previous interrupt
 | 
				
			||||||
 | 
					  was acknowledged */
 | 
				
			||||||
 | 
					  uint8_t irq_ovrn;
 | 
				
			||||||
 | 
					  /*! Watchcell event detected (asic stopped) */
 | 
				
			||||||
 | 
					  uint8_t wc_event;
 | 
				
			||||||
 | 
					  /*! Stream transfer has started and transactions are ongoing */
 | 
				
			||||||
 | 
					  uint8_t stream_transfer_active;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * @brief Interrupt Pin Configuration structure
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct bma4_int_pin_config {
 | 
				
			||||||
 | 
					  /*! Trigger condition of interrupt pin */
 | 
				
			||||||
 | 
					  uint8_t edge_ctrl;
 | 
				
			||||||
 | 
					  /*! Level of interrupt pin */
 | 
				
			||||||
 | 
					  uint8_t lvl;
 | 
				
			||||||
 | 
					  /*! Behaviour of interrupt pin to open drain */
 | 
				
			||||||
 | 
					  uint8_t od;
 | 
				
			||||||
 | 
					  /*! Output enable for interrupt pin */
 | 
				
			||||||
 | 
					  uint8_t output_en;
 | 
				
			||||||
 | 
					  /*! Input enable for interrupt pin */
 | 
				
			||||||
 | 
					  uint8_t input_en;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * @brief Accelerometer configuration structure */
 | 
				
			||||||
 | 
					struct bma4_accel_config {
 | 
				
			||||||
 | 
					  /*! Output data rate in Hz */
 | 
				
			||||||
 | 
					  uint8_t odr;
 | 
				
			||||||
 | 
					  /*! Bandwidth parameter, determines filter configuration */
 | 
				
			||||||
 | 
					  uint8_t bandwidth;
 | 
				
			||||||
 | 
					  /*! Filter performance mode */
 | 
				
			||||||
 | 
					  uint8_t perf_mode;
 | 
				
			||||||
 | 
					  /*! G-range */
 | 
				
			||||||
 | 
					  uint8_t range;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * @brief Auxiliary magnetometer configuration structure
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct bma4_aux_mag_config {
 | 
				
			||||||
 | 
					  /*! Poll rate for the sensor attached to the Magnetometer interface */
 | 
				
			||||||
 | 
					  uint8_t odr;
 | 
				
			||||||
 | 
					  /*! Trigger-readout offset in units of 2.5 ms.
 | 
				
			||||||
 | 
					  If set to zero, the offset is maximum, i.e. after readout a trigger
 | 
				
			||||||
 | 
					  is issued immediately */
 | 
				
			||||||
 | 
					  uint8_t offset;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * @brief ASIC Config structure
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct bma4_asic_config {
 | 
				
			||||||
 | 
					  /*! Enable/Disable ASIC Wake Up */
 | 
				
			||||||
 | 
					  uint8_t asic_en;
 | 
				
			||||||
 | 
					  /*! Configure stream_transfer/FIFO mode */
 | 
				
			||||||
 | 
					  uint8_t fifo_mode_en;
 | 
				
			||||||
 | 
					  /*! Mapping of instance RAM1 */
 | 
				
			||||||
 | 
					  uint8_t mem_conf_ram1;
 | 
				
			||||||
 | 
					  /*! Mapping of instance RAM2 */
 | 
				
			||||||
 | 
					  uint8_t mem_conf_ram2;
 | 
				
			||||||
 | 
					  /*! Mapping of instance RAM3 */
 | 
				
			||||||
 | 
					  uint8_t mem_conf_ram3;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * @brief bmm150 or akm09916
 | 
				
			||||||
 | 
					 *  magnetometer values structure
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct bma4_mag {
 | 
				
			||||||
 | 
					  /*! BMM150 and AKM09916 X raw data */
 | 
				
			||||||
 | 
					  int32_t x;
 | 
				
			||||||
 | 
					  /*! BMM150 and AKM09916 Y raw data */
 | 
				
			||||||
 | 
					  int32_t y;
 | 
				
			||||||
 | 
					  /*! BMM150 and AKM09916 Z raw data */
 | 
				
			||||||
 | 
					  int32_t z;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * @brief bmm150 xyz data structure
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct bma4_mag_xyzr {
 | 
				
			||||||
 | 
					  /*! BMM150 X raw data */
 | 
				
			||||||
 | 
					  int16_t x;
 | 
				
			||||||
 | 
					  /*! BMM150 Y raw data */
 | 
				
			||||||
 | 
					  int16_t y;
 | 
				
			||||||
 | 
					  /*! BMM150 Z raw data */
 | 
				
			||||||
 | 
					  int16_t z;
 | 
				
			||||||
 | 
					  /*! BMM150 R raw data */
 | 
				
			||||||
 | 
					  uint16_t r;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * @brief Accel xyz data structure
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct bma4_accel {
 | 
				
			||||||
 | 
					  /*! Accel X data */
 | 
				
			||||||
 | 
					  int16_t x;
 | 
				
			||||||
 | 
					  /*! Accel Y data */
 | 
				
			||||||
 | 
					  int16_t y;
 | 
				
			||||||
 | 
					  /*! Accel Z data */
 | 
				
			||||||
 | 
					  int16_t z;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * @brief FIFO mag data structure
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct bma4_mag_fifo_data {
 | 
				
			||||||
 | 
					  /*! The value of mag x LSB data */
 | 
				
			||||||
 | 
					  uint8_t mag_x_lsb;
 | 
				
			||||||
 | 
					  /*! The value of mag x MSB data */
 | 
				
			||||||
 | 
					  uint8_t mag_x_msb;
 | 
				
			||||||
 | 
					  /*! The value of mag y LSB data */
 | 
				
			||||||
 | 
					  uint8_t mag_y_lsb;
 | 
				
			||||||
 | 
					  /*! The value of mag y MSB data */
 | 
				
			||||||
 | 
					  uint8_t mag_y_msb;
 | 
				
			||||||
 | 
					  /*! The value of mag z LSB data */
 | 
				
			||||||
 | 
					  uint8_t mag_z_lsb;
 | 
				
			||||||
 | 
					  /*! The value of mag z MSB data */
 | 
				
			||||||
 | 
					  uint8_t mag_z_msb;
 | 
				
			||||||
 | 
					  /*! The value of mag r for BMM150 Y2 for YAMAHA LSB data */
 | 
				
			||||||
 | 
					  uint8_t mag_r_y2_lsb;
 | 
				
			||||||
 | 
					  /*! The value of mag r for BMM150 Y2 for YAMAHA MSB data */
 | 
				
			||||||
 | 
					  uint8_t mag_r_y2_msb;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					/* End of __BMA4_H__ */
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue