From 8ba5fe4b82ab603651484ec735223bf83ddc40df Mon Sep 17 00:00:00 2001
From: Philipp Claves <pclaves@web.de>
Date: Sun, 6 Nov 2011 00:35:10 +0100
Subject: [PATCH] Control: Add speed i2c switching to keystore code for eeprom
 access.

---
 Control/keystore.c | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/Control/keystore.c b/Control/keystore.c
index 8b12945..126dc2e 100644
--- a/Control/keystore.c
+++ b/Control/keystore.c
@@ -201,10 +201,11 @@ uint8_t keystore_enable_slot(uint16_t index){
 uint8_t keystore_read_slot_status(uint16_t index){
 	uint8_t key_status = KEYSLOT_ERROR;
 	uint8_t ret;
-	ret = i2c_master_read(KEY_MAIN_EEPROM, EEPROM_TABLE_OFFSET + index, &key_status, 1);
+	i2c_master_set_speed(I2C_BITRATE_REG_1M);
+	ret = i2c_master_read(KEY_MAIN_EEPROM, EEPROM_TABLE_OFFSET + index, sizeof(uint16_t), &key_status, sizeof(uint8_t));
 	if (ret != I2C_SUCCESS) {
 		printf_P(PSTR("Key status read error %02x, retry...\n"), ret);
-		ret = i2c_master_read(KEY_MAIN_EEPROM, EEPROM_TABLE_OFFSET + index , &key_status, 1);
+		ret = i2c_master_read(KEY_MAIN_EEPROM, EEPROM_TABLE_OFFSET + index, sizeof(uint16_t), &key_status, sizeof(uint8_t));
 		if (ret != I2C_SUCCESS) printf_P(PSTR("Key status read error %02x (fatal)\n"), ret);
 	}
 	return (ret == I2C_SUCCESS) ? key_status : KEYSLOT_ERROR;
@@ -214,10 +215,11 @@ uint8_t keystore_write_slot_status(uint16_t index, uint8_t key_status){
 	uint8_t ret;
 	EEPROM_WRITE_PROTECT_PORT &= ~EEPROM_WRITE_PROTECT_MAIN;
 	
-	ret = i2c_master_write(KEY_MAIN_EEPROM, EEPROM_TABLE_OFFSET + index, &key_status, 1);
+	i2c_master_set_speed(I2C_BITRATE_REG_1M);
+	ret = i2c_master_write(KEY_MAIN_EEPROM, EEPROM_TABLE_OFFSET + index, sizeof(uint16_t), &key_status, sizeof(uint8_t));
 	if (ret != 0) {
 		printf_P(PSTR("Key status write error %02x, retry...\n"), ret);
-		ret = i2c_master_write(KEY_MAIN_EEPROM, EEPROM_TABLE_OFFSET + index , &key_status, 1);
+		ret = i2c_master_write(KEY_MAIN_EEPROM, EEPROM_TABLE_OFFSET + index, sizeof(uint16_t), &key_status, 1);
 		if (ret != I2C_SUCCESS) printf_P(PSTR("Key status write error %02x (fatal)\n"), ret);
 	}
 	
@@ -228,10 +230,11 @@ uint8_t keystore_write_slot_status(uint16_t index, uint8_t key_status){
 
 uint8_t keystore_read_key(uint16_t index, KEY key){
 	uint8_t ret;
-	ret = i2c_master_read(KEY_MAIN_EEPROM, EEPROM_KEY_OFFSET + (index * sizeof(KEY)), key, sizeof(KEY));
+	i2c_master_set_speed(I2C_BITRATE_REG_1M);
+	ret = i2c_master_read(KEY_MAIN_EEPROM, EEPROM_KEY_OFFSET + (index * sizeof(KEY)), sizeof(uint16_t), key, sizeof(KEY));
 	if (ret != I2C_SUCCESS) {
 		printf_P(PSTR("Key read error %02x, retry...\n"), ret);
-		ret = i2c_master_read(KEY_MAIN_EEPROM, EEPROM_KEY_OFFSET + (index * sizeof(KEY)), key, sizeof(KEY));
+		ret = i2c_master_read(KEY_MAIN_EEPROM, EEPROM_KEY_OFFSET + (index * sizeof(KEY)), sizeof(uint16_t), key, sizeof(KEY));
 		if (ret != I2C_SUCCESS) printf_P(PSTR("Key read error %02x (fatal)\n"), ret);
 	}
 	return (ret == I2C_SUCCESS);
@@ -241,10 +244,11 @@ uint8_t keystore_write_key(uint16_t index, KEY key){
 	uint8_t ret;
 	EEPROM_WRITE_PROTECT_PORT &= ~EEPROM_WRITE_PROTECT_MAIN;
 	
-	ret = i2c_master_write(KEY_MAIN_EEPROM, EEPROM_KEY_OFFSET + (index * sizeof(KEY)), key, sizeof(KEY));
+	i2c_master_set_speed(I2C_BITRATE_REG_1M);
+	ret = i2c_master_write(KEY_MAIN_EEPROM, EEPROM_KEY_OFFSET + (index * sizeof(KEY)), sizeof(uint16_t), key, sizeof(KEY));
 	if (ret != I2C_SUCCESS) {
 		printf_P(PSTR("Key write error %02x, retry...\n"), ret);
-		ret = i2c_master_write(KEY_MAIN_EEPROM, EEPROM_KEY_OFFSET + (index * sizeof(KEY)), key, sizeof(KEY));
+		ret = i2c_master_write(KEY_MAIN_EEPROM, EEPROM_KEY_OFFSET + (index * sizeof(KEY)), sizeof(uint16_t), key, sizeof(KEY));
 		if (ret != I2C_SUCCESS) printf_P(PSTR("Key write error %02x (fatal)\n"), ret);
 	}
 	
-- 
GitLab