mirror of
https://github.com/google/pebble
synced 2026-10-17 00:34:11 +02:00
119 lines
3.6 KiB
C
119 lines
3.6 KiB
C
/*
|
|
* Copyright 2024 Google LLC
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
#include "applib/accel_service.h"
|
|
|
|
static const int16_t LIS3DH_COUNTS_PER_G = 4096;
|
|
static const int16_t LIS3DH_SAMPLING_RATE_HZ = 50;
|
|
|
|
static const int LIS3DH_MIN_VALUE = -32768;
|
|
static const int LIS3DH_MAX_VALUE = 32767;
|
|
static const uint8_t LIS3DH_WHOAMI_BYTE = 0x33;
|
|
|
|
// Computing AccelSamplingRate * LIS3DH_TIME_LIMIT_MULT / LIS3DH_TIME_LIMIT_DIV
|
|
// yields the correct setting for the TIME_LIMIT register
|
|
static const int LIS3DH_TIME_LIMIT_MULT = 2240;
|
|
static const int LIS3DH_TIME_LIMIT_DIV = 1000;
|
|
// Computing AccelSamplingRate * LIS3DH_TIME_LATENCY_MULT / LIS3DH_TIME_LATENCY_DIV
|
|
// yields the correct setting for the TIME_LIMIT register
|
|
static const int LIS3DH_TIME_LATENCY_MULT = 1280;
|
|
static const int LIS3DH_TIME_LATENCY_DIV = 1000;
|
|
// Computing AccelSamplingRate * LIS3DH_TIME_WINDOW_MULT / LIS3DH_TIME_WINDOW_DIV
|
|
// yields the correct setting for the TIME_WINDOW register
|
|
static const int LIS3DH_TIME_WINDOW_MULT = 5120;
|
|
static const int LIS3DH_TIME_WINDOW_DIV = 1000;
|
|
// Computing AccelScale * LIS3DH_THRESHOLD_MULT / LIS3DH_THRESHOLD_DIV
|
|
// yields the correct setting for the CLICK_THS register
|
|
static const int LIS3DH_THRESHOLD_MULT = 24;
|
|
static const int LIS3DH_THRESHOLD_DIV = 1;
|
|
|
|
typedef enum {
|
|
SELF_TEST_MODE_OFF,
|
|
SELF_TEST_MODE_ONE,
|
|
SELF_TEST_MODE_TWO,
|
|
SELF_TEST_MODE_COUNT
|
|
} SelfTestMode;
|
|
|
|
//! Valid accelerometer scales, in g's
|
|
typedef enum {
|
|
LIS3DH_SCALE_UNKNOWN = 0,
|
|
LIS3DH_SCALE_16G = 16,
|
|
LIS3DH_SCALE_8G = 8,
|
|
LIS3DH_SCALE_4G = 4,
|
|
LIS3DH_SCALE_2G = 2,
|
|
} Lis3dhScale;
|
|
|
|
void lis3dh_init(void);
|
|
|
|
void lis3dh_lock(void);
|
|
void lis3dh_unlock(void);
|
|
void lis3dh_init_mutex(void);
|
|
|
|
void enable_lis3dh_interrupts(void);
|
|
void disable_lis3dh_interrupts(void);
|
|
|
|
bool lis3dh_sanity_check(void);
|
|
|
|
// Poke specific registers
|
|
void lis3dh_disable_click(void);
|
|
void lis3dh_enable_click(void);
|
|
|
|
void lis3dh_disable_fifo(void);
|
|
void lis3dh_enable_fifo(void);
|
|
bool lis3dh_is_fifo_enabled(void);
|
|
|
|
void lis3dh_power_up(void);
|
|
void lis3dh_power_down(void);
|
|
|
|
void lis3dh_set_interrupt_axis(AccelAxisType axis, bool double_click);
|
|
|
|
uint8_t lis3dh_get_interrupt_threshold();
|
|
static const uint8_t LIS3DH_MAX_THRESHOLD = 0x7f;
|
|
void lis3dh_set_interrupt_threshold(uint8_t threshold);
|
|
|
|
uint8_t lis3dh_get_interrupt_time_limit();
|
|
static const uint8_t LIS3DH_MAX_TIME_LIMIT = 0x7f;
|
|
void lis3dh_set_interrupt_time_limit(uint8_t time_limit);
|
|
|
|
uint8_t lis3dh_get_click_latency();
|
|
static const uint8_t LIS3DH_MAX_CLICK_LATENCY = 0xff;
|
|
void lis3dh_set_click_latency(uint8_t latency);
|
|
|
|
uint8_t lis3dh_get_click_window();
|
|
static const uint8_t LIS3DH_MAX_CLICK_WINDOW = 0xff;
|
|
void lis3dh_set_click_window(uint8_t window);
|
|
|
|
bool lis3dh_set_fifo_mode(uint8_t);
|
|
uint8_t lis3dh_get_fifo_mode(void);
|
|
|
|
bool lis3dh_set_fifo_wtm(uint8_t);
|
|
uint8_t lis3dh_get_fifo_wtm(void);
|
|
|
|
|
|
bool lis3dh_enter_self_test_mode(SelfTestMode mode);
|
|
void lis3dh_exit_self_test_mode(void);
|
|
bool lis3dh_self_test(void);
|
|
|
|
bool lis3dh_config_set_defaults();
|
|
|
|
bool lis3dh_read(uint8_t address, uint8_t read_size, uint8_t *buffer);
|
|
bool lis3dh_write(uint8_t address, uint8_t write_size, const uint8_t *buffer);
|