From a98a91cf1b923107e9f26df316c1ef2192ff14f7 Mon Sep 17 00:00:00 2001 From: yiancar Date: Mon, 14 May 2018 15:17:24 +0100 Subject: Rgb matrix fixes, I2C library can now retry if it has failed (#2943) * Added Modular keyboards L,R and NUM Created code modules for the 3 modules of the modular keyboard. Original idea by MechboardsUK. Uses i2c implementation similar to lets split * Remove modular from master This is to fix incorrect branching * General fixes for RGB_matrix - Complited speed support for all effects - Fixed raindrop effects to initialized after toggle - Fixed raindrop effects to use all available LEDs - Fixed effect step reverse function - Moved RGB_MATRIX_SOLID_REACTIVE under correct flag * Documentation update for RGBmatrix * More doc updates * I2C library can now retry if it has failed - Replaced the original TWIlib by LFKeyboard's modified version - Allows for an extra argument on TWITransmitData, if blocking is set to 1 function will retry to transmit on failure. Good for noisy boards. * RGB Matrix, use alternative I2C library TWIlib seems to be hanging for me sometimes probably due to ISR routine. I have used i2c_master as a good alternative. Note: this commit is for Wilba6582 to verify before merge * Update rgb_matrix.c * RGB matrix cleanup - Remove TWIlib --- drivers/avr/i2c_master.c | 149 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100755 drivers/avr/i2c_master.c (limited to 'drivers/avr/i2c_master.c') diff --git a/drivers/avr/i2c_master.c b/drivers/avr/i2c_master.c new file mode 100755 index 0000000000..f4a4bb7b0b --- /dev/null +++ b/drivers/avr/i2c_master.c @@ -0,0 +1,149 @@ +/* Library made by: g4lvanix + * Github repository: https://github.com/g4lvanix/I2C-master-lib + */ + +#include +#include + +#include "i2c_master.h" + +#define F_SCL 400000UL // SCL frequency +#define Prescaler 1 +#define TWBR_val ((((F_CPU / F_SCL) / Prescaler) - 16 ) / 2) + +void i2c_init(void) +{ + TWBR = (uint8_t)TWBR_val; +} + +uint8_t i2c_start(uint8_t address) +{ + // reset TWI control register + TWCR = 0; + // transmit START condition + TWCR = (1<