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(); |
} |