From 72fd49b1468d6bbfa59e1c6334866d7aa34f31c1 Mon Sep 17 00:00:00 2001 From: yiancar Date: Wed, 18 Jul 2018 19:55:57 +0300 Subject: DC01 keyboard addition (#3428) * DC01 initial commit - Addition of directories - Left readme * Initial commit of left half * Initial files for right half * arrow * i2c adjustments * I2C slave and DC01 refractoring - Cleaned up state machine of I2C slave driver - Modified DC01 left to use already pressent I2C master driver - Modified DC01 matrixes * Fixed tabs to spaces * Addition of Numpad * Add keymaps - Orthopad keymap for numpad module - Numpad keymap for numpad module - ISO, ANSI and HHKB version of keymap for right module * Minor matrix.c fixes * Update Readmes --- drivers/avr/i2c_slave.c | 134 ++++++++++++++++++------------------------------ 1 file changed, 51 insertions(+), 83 deletions(-) (limited to 'drivers/avr/i2c_slave.c') diff --git a/drivers/avr/i2c_slave.c b/drivers/avr/i2c_slave.c index 3edf85b12b..27696ca01a 100755 --- a/drivers/avr/i2c_slave.c +++ b/drivers/avr/i2c_slave.c @@ -5,96 +5,64 @@ #include #include #include +#include #include "i2c_slave.h" void i2c_init(uint8_t address){ - // load address into TWI address register - TWAR = (address << 1); - // set the TWCR to enable address matching and enable TWI, clear TWINT, enable TWI interrupt - TWCR = (1<= RX_BUFFER_SIZE){ // address out of bounds dont ack + ack = 0; + buffer_address = 0; + } + slave_has_register_set = true; // address has been receaved now fill in buffer + } else { + rxbuffer[buffer_address] = TWDR; + buffer_address++; + } + break; + + case TW_ST_SLA_ACK: + case TW_ST_DATA_ACK: + // This device is a slave transmitter and master has requested data + TWDR = txbuffer[buffer_address]; + buffer_address++; + break; + + case TW_BUS_ERROR: + // We got an error, reset i2c + TWCR = 0; + default: + break; + } + + // Reset i2c state mahcine to be ready for next interrupt + TWCR |= (1 << TWIE) | (1 << TWINT) | (ack << TWEA) | (1 << TWEN); +} \ No newline at end of file -- cgit v1.2.3