123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- use field_offset::offset_of;
- use stm32l4xx_hal::prelude::{
- _embedded_hal_blocking_i2c_Write, _embedded_hal_blocking_i2c_WriteRead,
- };
- use tock_registers::{
- interfaces::{ReadWriteable, Readable, Writeable},
- register_bitfields, register_structs,
- registers::InMemoryRegister,
- };
- const PCA9685_ADDR_1: u8 = 0x41;
- const PCA9685_ADDR_2: u8 = 0x42;
- const PCA9685_ADDR_3: u8 = 0x43;
- register_bitfields![
- u8,
- MODE_1 [
- ALLCALL 0,
- SUB3 1,
- SUB2 2,
- SUB1 3,
- SLEEP 4,
- AI 5,
- EXTCLK 6,
- RESTART 7,
- ],
- MODE_2 [
- OUTNE OFFSET(0) NUMBITS(2) [],
- OUTDRV OFFSET(2) NUMBITS(1) [],
- OCH OFFSET(3) NUMBITS(1) [],
- INVRT OFFSET(4) NUMBITS(1) [],
- ],
- ];
- register_bitfields![
- u32,
- LED_CTRL [
- On OFFSET(0) NUMBITS(12) [],
- On_Full OFFSET(12) NUMBITS(1) [],
- Off OFFSET(16) NUMBITS(12) [],
- Off_Full OFFSET(28) NUMBITS(1) [],
- ],
- ];
- register_structs! {
- Pca9685Registers {
- (0x00 => mode1: InMemoryRegister<u8, MODE_1::Register>),
- (0x01 => mode2: InMemoryRegister<u8, MODE_2::Register>),
- (0x02 => subaddress1: InMemoryRegister<u8>),
- (0x03 => subaddress2: InMemoryRegister<u8>),
- (0x04 => subaddress3: InMemoryRegister<u8>),
- (0x05 => allcalladdr: InMemoryRegister<u8>),
- (0x06 => led: [InMemoryRegister<u32, LED_CTRL::Register>; 16]),
- (0x46 => _reserved),
- (0xFA => all_led: InMemoryRegister<u32, LED_CTRL::Register>),
- (0xFE => prescale: InMemoryRegister<u8>),
- (0xFF => testmode: InMemoryRegister<u8>),
- (0x100 => @END),
- }
- }
- impl Pca9685Registers {
- const fn default() -> Self {
- const ZERO_LED: InMemoryRegister<u32, LED_CTRL::Register> = InMemoryRegister::new(0x00);
- Self {
- mode1: InMemoryRegister::new(0x00),
- mode2: InMemoryRegister::new(0x00),
- subaddress1: InMemoryRegister::new(0x00),
- subaddress2: InMemoryRegister::new(0x00),
- subaddress3: InMemoryRegister::new(0x00),
- allcalladdr: InMemoryRegister::new(0x00),
- led: [ZERO_LED; 16],
- _reserved: [0; 180],
- all_led: InMemoryRegister::new(0x00),
- prescale: InMemoryRegister::new(0x00),
- testmode: InMemoryRegister::new(0x00),
- }
- }
- }
- const MAP_ADDR: usize = 0;
- const MAP_PIN: usize = 1;
- static PCA9685_MAPPING: [[[u8; 2]; 10]; 4] = [
- [
- [PCA9685_ADDR_1, 8], // Tube 0 Digit 0
- [PCA9685_ADDR_1, 9], // Tube 0 Digit 1
- [PCA9685_ADDR_1, 10], // Tube 0 Digit 2
- [PCA9685_ADDR_1, 12], // Tube 0 Digit 3
- [PCA9685_ADDR_1, 15], // Tube 0 Digit 4
- [PCA9685_ADDR_1, 14], // Tube 0 Digit 5
- [PCA9685_ADDR_1, 11], // Tube 0 Digit 6
- [PCA9685_ADDR_1, 0], // Tube 0 Digit 7
- [PCA9685_ADDR_1, 1], // Tube 0 Digit 8
- [PCA9685_ADDR_1, 13], // Tube 0 Digit 9
- ],
- [
- [PCA9685_ADDR_1, 5], // Tube 1 Digit 0
- [PCA9685_ADDR_1, 6], // Tube 1 Digit 1
- [PCA9685_ADDR_1, 7], // Tube 1 Digit 2
- [PCA9685_ADDR_1, 2], // Tube 1 Digit 3
- [PCA9685_ADDR_2, 4], // Tube 1 Digit 4
- [PCA9685_ADDR_2, 1], // Tube 1 Digit 5
- [PCA9685_ADDR_1, 4], // Tube 1 Digit 6
- [PCA9685_ADDR_2, 2], // Tube 1 Digit 7
- [PCA9685_ADDR_2, 3], // Tube 1 Digit 8
- [PCA9685_ADDR_1, 3], // Tube 1 Digit 9
- ],
- [
- [PCA9685_ADDR_3, 8], // Tube 2 Digit 0
- [PCA9685_ADDR_3, 9], // Tube 2 Digit 1
- [PCA9685_ADDR_3, 10], // Tube 2 Digit 2
- [PCA9685_ADDR_3, 12], // Tube 2 Digit 3
- [PCA9685_ADDR_2, 12], // Tube 2 Digit 4
- [PCA9685_ADDR_2, 13], // Tube 2 Digit 5
- [PCA9685_ADDR_3, 11], // Tube 2 Digit 6
- [PCA9685_ADDR_2, 14], // Tube 2 Digit 7
- [PCA9685_ADDR_2, 11], // Tube 2 Digit 8
- [PCA9685_ADDR_3, 13], // Tube 2 Digit 9
- ],
- [
- [PCA9685_ADDR_3, 5], // Tube 3 Digit 0
- [PCA9685_ADDR_3, 6], // Tube 3 Digit 1
- [PCA9685_ADDR_3, 7], // Tube 3 Digit 2
- [PCA9685_ADDR_3, 2], // Tube 3 Digit 3
- [PCA9685_ADDR_3, 14], // Tube 3 Digit 4
- [PCA9685_ADDR_3, 15], // Tube 3 Digit 5
- [PCA9685_ADDR_3, 4], // Tube 3 Digit 6
- [PCA9685_ADDR_3, 1], // Tube 3 Digit 7
- [PCA9685_ADDR_3, 0], // Tube 3 Digit 8
- [PCA9685_ADDR_3, 3], // Tube 3 Digit 9
- ],
- ];
- pub fn init(i2c: &mut impl _embedded_hal_blocking_i2c_Write, ) {
- }
- pub fn set_voltage(percent: f32) {
-
- }
- pub fn set_digit(tube: u32, digit: u32, pwm_start: u32, pwm_end: u32) {
- }
- pub fn set_dot(pwm_start: u32, pwm_end: u32) {
- }
- pub fn enable_output(enabled: bool) {
- }
|