Sample Code
Windows Driver Samples/ SpbAccelerometer Sample Driver (UMDF Version 1)/ C++/ Adxl345.h/
/*++ // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A // PARTICULAR PURPOSE. Copyright (C) Microsoft Corporation, All Rights Reserved Module Name: Accelerometer.h Abstract: This module contains the constant definitions for the accelerometer's register interface and default property values. --*/ #ifndef _ADXL345_H_ #define _ADXL345_H_ #pragma once // // Register interface // #define ADXL345_DEVID 0x00 #define ADXL345_THRESH_TAP 0x1D #define ADXL345_OFFSET_X 0x1E #define ADXL345_OFFSET_Y 0x1F #define ADXL345_OFFSET_Z 0x20 #define ADXL345_DURATION_TAP 0x21 #define ADXL345_LATENT_TAP 0x22 #define ADXL345_WINDOW_TAP 0x23 #define ADXL345_THRESH_ACT 0x24 #define ADXL345_THRESH_INACT 0x25 #define ADXL345_TIME_INACT 0x26 #define ADXL345_ACT_INACT_CTL 0x27 #define ADXL345_THRESH_FF 0x28 #define ADXL345_TIME_FF 0x29 #define ADXL345_TAP_AXES 0x2A #define ADXL345_ACT_TAP_STATUS 0x2B #define ADXL345_BW_RATE 0x2C #define ADXL345_POWER_CTL 0x2D #define ADXL345_INT_ENABLE 0x2E #define ADXL345_INT_MAP 0x2F #define ADXL345_INT_SOURCE 0x30 #define ADXL345_DATA_FORMAT 0x31 #define ADXL345_DATA_X0 0x32 #define ADXL345_DATA_X1 0x33 #define ADXL345_DATA_Y0 0x34 #define ADXL345_DATA_Y1 0x35 #define ADXL345_DATA_Z0 0x36 #define ADXL345_DATA_Z1 0x37 #define ADXL345_FIFO_CTL 0x38 #define ADXL345_FIFO_STATUS 0x39 // ACT_INACT_CTL register bits #define ADXL345_ACT_INACT_CTL_ACT_ACDC 0x80 #define ADXL345_ACT_INACT_CTL_ACT_X 0x40 #define ADXL345_ACT_INACT_CTL_ACT_Y 0x20 #define ADXL345_ACT_INACT_CTL_ACT_Z 0x10 #define ADXL345_ACT_INACT_CTL_INACT_ACDC 0x08 #define ADXL345_ACT_INACT_CTL_INACT_X 0x04 #define ADXL345_ACT_INACT_CTL_INACT_Y 0x02 #define ADXL345_ACT_INACT_CTL_INACT_Z 0x01 // POWER_CTL register bits #define ADXL345_POWER_CTL_STANDBY 0x00 #define ADXL345_POWER_CTL_MEASURE 0x08 // INT_ENABLE | MAP | SOURCE register bits #define ADXL345_INT_DATA_READY 0x80 #define ADXL345_INT_SINGLE_TAP 0x40 #define ADXL345_INT_DOUBLE_TAP 0x20 #define ADXL345_INT_ACTIVITY 0x10 #define ADXL345_INT_INACTIVITY 0x08 #define ADXL345_INT_FREEFALL 0x04 #define ADXL345_INT_WATERMARK 0x02 #define ADXL345_INT_OVERRUN 0x01 // DATA_FORMAT register bits #define ADXL345_DATA_FORMAT_FULL_RES 0x08 #define ADXL345_DATA_FORMAT_JUSTIFY_RIGHT 0x00 #define ADXL345_DATA_FORMAT_JUSTIFY_LEFT 0x04 #define ADXL345_DATA_FORMAT_RANGE_MASK 0x03 #define ADXL345_DATA_FORMAT_RANGE_2G 0x00 #define ADXL345_DATA_FORMAT_RANGE_4G 0x01 #define ADXL345_DATA_FORMAT_RANGE_8G 0x02 #define ADXL345_DATA_FORMAT_RANGE_16G 0x03 // DATA register bits // the data report includes adjacent // data registers, for a total of 6 bytes #define ADXL345_DATA_REPORT_SIZE_BYTES 6 // FIFO_CTL register bits #define ADXL345_FIFO_CTL_MODE_MASK 0xC0 #define ADXL345_FIFO_CTL_MODE_BYPASS 0x00 #define ADXL345_FIFO_CTL_MODE_FIFO 0x40 #define ADXL345_FIFO_CTL_MODE_STREAM 0x80 #define ADXL345_FIFO_CTL_MODE_TRIGGER 0xC0 // // Bus address // const unsigned short SENSOR_ACCELEROMETER_BUS_ADDRESS[] = L"1D"; // // Default property values // typedef struct _DATA_RATE { ULONG DataRateInterval; BYTE RateCode; } DATA_RATE, *PDATA_RATE; const unsigned short SENSOR_ACCELEROMETER_NAME[] = L"Accelerometer"; const unsigned short SENSOR_ACCELEROMETER_DESCRIPTION[] = L"Accelerometer Sensor"; const unsigned short SENSOR_ACCELEROMETER_ID[] = L"ADXL345"; const unsigned short SENSOR_ACCELEROMETER_MANUFACTURER[] = L"Analog Devices"; const unsigned short SENSOR_ACCELEROMETER_MODEL[] = L"ADXL345"; const unsigned short SENSOR_ACCELEROMETER_SERIAL_NUMBER[] = L"0123456789=0123456789"; const DOUBLE ACCELEROMETER_MIN_ACCELERATION_G = -16.0; const DOUBLE ACCELEROMETER_MAX_ACCELERATION_G = 16.0; const DOUBLE ACCELEROMETER_RESOLUTION_ACCELERATION_G = 0.004; const ULONG ACCELEROMETER_MIN_REPORT_INTERVAL = 10; const ULONG DEFAULT_ACCELEROMETER_CURRENT_REPORT_INTERVAL = 100; const ULONG CURRENT_REPORT_INTERVAL_NOT_SET = 0; const DATA_RATE ACCELEROMETER_SUPPORTED_DATA_RATES[] = {{160, 0x06}, {80, 0x07}, {40, 0x08}, {20, 0x09}, {10, 0x0A}}; const ULONG ACCELEROMETER_SUPPORTED_DATA_RATES_COUNT = (sizeof (ACCELEROMETER_SUPPORTED_DATA_RATES) / sizeof(DATA_RATE)); static DATA_RATE _GetDataRateFromReportInterval( _In_ ULONG ReportInterval) { DATA_RATE dataRate = ACCELEROMETER_SUPPORTED_DATA_RATES[0]; // Return the rate that is just less than the desired report interval for (ULONG i = 0; i < ACCELEROMETER_SUPPORTED_DATA_RATES_COUNT; i++) { dataRate = ACCELEROMETER_SUPPORTED_DATA_RATES[i]; if (dataRate.DataRateInterval <= ReportInterval) { break; } } return dataRate; } const DOUBLE ACCELEROMETER_CHANGE_SENSITIVITY_RESOLUTION = 0.0625; const DOUBLE ACCELEROMETER_MIN_CHANGE_SENSITIVITY = 0.0625; const DOUBLE ACCELEROMETER_MAX_CHANGE_SENSITIVITY = 16.0; const DOUBLE DEFAULT_ACCELEROMETER_CHANGE_SENSITIVITY = 0.0625; const DOUBLE CHANGE_SENSITIVITY_NOT_SET = -1.0; #endif // _ADXL345_H_
Our Services
-
What our customers say about us?
Read our customer testimonials to find out why our clients keep returning for their projects.
View Testimonials