Initial commit

This commit is contained in:
Alex Page 2022-07-28 16:38:38 -04:00
commit ff3e80aacc
4 changed files with 95 additions and 0 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/target
/Cargo.lock

10
Cargo.toml Normal file
View file

@ -0,0 +1,10 @@
[package]
name = "qwiic-twist"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
embedded-hal = "0.2.7"
embedded-time = "0.12.1"

48
src/lib.rs Normal file
View file

@ -0,0 +1,48 @@
#![no_std]
mod registers;
use embedded_hal::blocking::i2c::{Read, Write, WriteRead};
use embedded_hal::prelude::*;
use embedded_time::rate::Extensions;
/// 7-bit unshifted default I2C Address
const QWIIC_TWIST_ADDR: u8 = 0x3F;
pub struct QwiicTwist<I2C> {
i2c: I2C,
address: u8,
}
impl<I2C, E> QwiicTwist<I2C>
where
I2C: Read<Error = E> + Write<Error = E> + WriteRead<Error = E>,
{
pub fn new(i2c: I2C, address: u8) -> Self {
Self { i2c, address }
}
fn read_register(address: u8) -> u8 {
todo!()
}
fn read_register_16(address: u8) -> u16 {
todo!()
}
fn write_register(address: u8, value: u8) {
todo!()
}
fn write_register_16(address: u8, value: u16) {
todo!()
}
fn write_register_24(address: u8, value: u32) {
todo!()
}
pub fn read_temperature(&mut self) -> Result<u8, E> {
let mut temp = [0];
self.i2c
.write_read(self.address, &[0x78], &mut temp)
.and(Ok(temp[0]))
}
}

35
src/registers.rs Normal file
View file

@ -0,0 +1,35 @@
/// Map to the various registers on the Twist
const TWIST_ID: u8 = 0x00;
/// - 2 - button clicked
/// - 1 - button pressed
/// - 0 - encoder moved
const TWIST_STATUS: u8 = 0x01;
const TWIST_VERSION: u8 = 0x02;
/// - 1 - button interrupt
/// - 0 - encoder interrupt
const TWIST_ENABLE_INTS: u8 = 0x04;
const TWIST_COUNT: u8 = 0x05;
const TWIST_DIFFERENCE: u8 = 0x07;
/// Milliseconds since the last movement of the knob
const TWIST_LAST_ENCODER_EVENT: u8 = 0x09;
/// Milliseconds since the last press/release
const TWIST_LAST_BUTTON_EVENT: u8 = 0x0B;
const TWIST_RED: u8 = 0x0D;
const TWIST_GREEN: u8 = 0x0E;
const TWIST_BLUE: u8 = 0x0F;
/// Amount to change the red LED for each encoder tick
const TWIST_CONNECT_RED: u8 = 0x10;
/// Amount to change the green LED for each encoder tick
const TWIST_CONNECT_GREEN: u8 = 0x12;
/// Amount to change the blue LED for each encoder tick
const TWIST_CONNECT_BLUE: u8 = 0x14;
const TWIST_TURN_INT_TIMEOUT: u8 = 0x16;
const TWIST_CHANGE_ADDRESS: u8 = 0x18;
const TWIST_LIMIT: u8 = 0x19;