Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 1963 → Rev 1964

/branches/dongfang_FC_rewrite/eeprom.c
108,17 → 108,30
return result;
}
 
void writeChecksummedBlock(uint8_t revisionNumber, uint8_t* data, uint16_t length, uint16_t offset) {
uint8_t checksum = calculateChecksum(data+1, length-1);
data[0] = checksum;
data[1] = revisionNumber;
eeprom_write_block(data, &EEPromArray[offset], length);
// offset is where the checksum is stored, offset+1 is the revision number, and offset+2... are the data.
// length is the length of the pure data not including checksum and revision number.
void writeChecksummedBlock(uint8_t revisionNumber, uint8_t* data, uint16_t offset, uint16_t length) {
uint8_t checksum = calculateChecksum(data, length);
eeprom_write_byte(&EEPromArray[offset], checksum);
eeprom_write_byte(&EEPromArray[offset+1], revisionNumber);
eeprom_write_block(data, &EEPromArray[offset+2], length);
}
 
uint8_t readChecksummedBlock(uint8_t revisionNumber, uint8_t* target, uint16_t length, uint16_t offset) {
eeprom_read_block(target, &EEPromArray[offset], length);
uint8_t checksum = calculateChecksum(target+1, length-1);
return (checksum != target[0] || revisionNumber != target[1]);
// offset is where the checksum is stored, offset+1 is the revision number, and offset+2... are the data.
// length is the length of the pure data not including checksum and revision number.
uint8_t readChecksummedBlock(uint8_t revisionNumber, uint8_t* target, uint16_t offset, uint16_t length) {
uint8_t checksumRead = eeprom_read_byte(&EEPromArray[offset]);
uint8_t revisionNumberRead = eeprom_read_byte(&EEPromArray[offset+1]);
eeprom_read_block(target, &EEPromArray[offset+2], length);
uint8_t checksumCalculated = calculateChecksum(target, length);
uint8_t checksumError = (checksumRead != checksumCalculated);
uint8_t revisionMismatch = (revisionNumber != revisionNumberRead);
if (checksumError && revisionMismatch) printf("\n\rEEPROM checksum error and revision mismatch, ");
else if (checksumError) printf("\n\rEEPROM checksum error, ");
else if (revisionMismatch) printf("\n\rEEPROM revision mismatch, ");
return (checksumError || revisionMismatch);
}
 
/***************************************************/
126,9 → 139,9
/***************************************************/
// setnumber [1..5]
uint8_t paramSet_readFromEEProm(uint8_t setnumber) {
uint16_t offset = EEPROM_ADR_PARAMSET_BEGIN + (setnumber-1)*sizeof(paramset_t);
uint16_t offset = EEPROM_ADR_PARAMSET_BEGIN + (setnumber-1)*(sizeof(paramset_t)+2);
output_init(); // what's that doing here??
return readChecksummedBlock(EEPARAM_REVISION, (uint8_t*)&staticParams, sizeof(paramset_t), offset);
return readChecksummedBlock(EEPARAM_REVISION, (uint8_t*)&staticParams, offset, sizeof(paramset_t));
}
 
/***************************************************/
135,8 → 148,8
/* Write Parameter Set to EEPROM */
/***************************************************/
void paramSet_writeToEEProm(uint8_t setnumber) {
uint16_t offset = EEPROM_ADR_PARAMSET_BEGIN + (setnumber-1)*sizeof(paramset_t);
writeChecksummedBlock(EEPARAM_REVISION, (uint8_t*)&staticParams, sizeof(paramset_t), offset);
uint16_t offset = EEPROM_ADR_PARAMSET_BEGIN + (setnumber-1)*(sizeof(paramset_t)+2);
writeChecksummedBlock(EEPARAM_REVISION, (uint8_t*)&staticParams, offset, sizeof(paramset_t));
// set this parameter set to active set
setActiveParamSet(setnumber);
output_init(); // what's that doing here??
147,9 → 160,9
// parameter version check
if (setnumber<1 ||setnumber>5 || paramSet_readFromEEProm(setnumber)) {
// if version check faild
printf("\n\rInit Parameter in EEPROM");
for (uint8_t i=6; i>0; i--) {
paramSet_default(i); // Fill staticParams Structure to default parameter set 1 (Sport)
printf("writing default parameter sets");
for (uint8_t i=5; i>0; i--) {
paramSet_default(i);
paramSet_writeToEEProm(i);
}
// default-Setting is parameter set 3
156,7 → 169,7
setActiveParamSet(1);
}
printf("\n\rUsing Parameter Set %d", getActiveParamSet());
printf("\n\r\rUsing Parameter Set %d", getActiveParamSet());
}
 
/***************************************************/
173,7 → 186,7
void mixerMatrix_readOrDefault(void) {
// load mixer table
if (mixerMatrix_readFromEEProm()) {
printf("\n\rGenerating default mixerMatrix");
printf("writing default mixerMatrix");
mixerMatrix_default(); // Quadro
mixerMatrix_writeToEEProm();
}
184,8 → 197,8
requiredMotors++;
}
printf("\n\rMixer-Config: '%s' (%u Motors)",mixerMatrix.name, requiredMotors);
printf("\n\r==============================");
printf("\n\r\rMixer-Config: '%s' (%u Motors)",mixerMatrix.name, requiredMotors);
printf("\n\r\r==============================");
}
 
/***************************************************/
200,8 → 213,8
}
 
void channelMap_readOrDefault(void) {
if (!channelMap_readFromEEProm()) {
printf("\n\rGenerating default channel map");
if (channelMap_readFromEEProm()) {
printf("writing default channel map");
channelMap_default();
channelMap_writeToEEProm();
}