UBL able to generate mesh and save and load it on 32-bit platforms (#8015)
* Get UBL Mesh Generation, Mesh Save & Mesh Load working with 32-Bit platforms * clean up read_data() and write_data() for non-LPC1768 HAL's * Get read_data() and write_data() return codes consistent All HAL's read_data() and write_data() return false if they succeed. * Get read_data() and write_data() return codes to be consistent Make read_data() and write_data() return true if an error happens. * Say UBL is now checked out on machine types in default Configuration.h file.
This commit is contained in:
@ -28,17 +28,17 @@ bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
|
||||
if (eeprom_read_byte(p) != v) {
|
||||
SERIAL_ECHO_START();
|
||||
SERIAL_ECHOLNPGM(MSG_ERR_EEPROM_WRITE);
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
crc16(crc, &v, 1);
|
||||
pos++;
|
||||
value++;
|
||||
};
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
|
||||
bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
|
||||
do {
|
||||
uint8_t c = eeprom_read_byte((unsigned char*)pos);
|
||||
*value = c;
|
||||
@ -46,6 +46,7 @@ void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
|
||||
pos++;
|
||||
value++;
|
||||
} while (--size);
|
||||
return false; // always assume success for AVR's
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -28,17 +28,17 @@ bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
|
||||
if (eeprom_read_byte(p) != v) {
|
||||
SERIAL_ECHO_START();
|
||||
SERIAL_ECHOLNPGM(MSG_ERR_EEPROM_WRITE);
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
crc16(crc, &v, 1);
|
||||
pos++;
|
||||
value++;
|
||||
};
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
|
||||
bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
|
||||
do {
|
||||
uint8_t c = eeprom_read_byte((unsigned char*)pos);
|
||||
*value = c;
|
||||
@ -46,6 +46,7 @@ void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
|
||||
pos++;
|
||||
value++;
|
||||
} while (--size);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -34,7 +34,7 @@ bool access_start() {
|
||||
|
||||
if (res == FR_OK) {
|
||||
f_lseek(&eeprom_file, file_size);
|
||||
while (file_size < E2END && res == FR_OK) {
|
||||
while (file_size <= E2END && res == FR_OK) {
|
||||
res = f_write(&eeprom_file, &eeprom_zero, 1, &bytes_written);
|
||||
file_size++;
|
||||
}
|
||||
@ -53,21 +53,92 @@ bool access_finish() {
|
||||
return true;
|
||||
}
|
||||
|
||||
// File function return codes for type FRESULT This goes away soon. But it is helpful right now to see
|
||||
// the different errors the read_data() and write_data() functions are seeing.
|
||||
//
|
||||
//typedef enum {
|
||||
// FR_OK = 0, /* (0) Succeeded */
|
||||
// FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */
|
||||
// FR_INT_ERR, /* (2) Assertion failed */
|
||||
// FR_NOT_READY, /* (3) The physical drive cannot work */
|
||||
// FR_NO_FILE, /* (4) Could not find the file */
|
||||
// FR_NO_PATH, /* (5) Could not find the path */
|
||||
// FR_INVALID_NAME, /* (6) The path name format is invalid */
|
||||
// FR_DENIED, /* (7) Access denied due to prohibited access or directory full */
|
||||
// FR_EXIST, /* (8) Access denied due to prohibited access */
|
||||
// FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */
|
||||
// FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
|
||||
// FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
|
||||
// FR_NOT_ENABLED, /* (12) The volume has no work area */
|
||||
// FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */
|
||||
// FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any problem */
|
||||
// FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
|
||||
// FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
|
||||
// FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
|
||||
// FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > FF_FS_LOCK */
|
||||
// FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
|
||||
//} FRESULT;
|
||||
|
||||
bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
|
||||
FRESULT s;
|
||||
UINT bytes_written = 0;
|
||||
f_lseek(&eeprom_file, pos);
|
||||
f_write(&eeprom_file, (void *)value, size, &bytes_written);
|
||||
s = f_lseek(&eeprom_file, pos);
|
||||
if ( s ) {
|
||||
SERIAL_PROTOCOLPAIR(" write_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
||||
SERIAL_PROTOCOLPAIR(",", (int) value); // right now to see errors that are happening in the
|
||||
SERIAL_PROTOCOLPAIR(",", (int) size); // read_data() and write_data() functions
|
||||
SERIAL_PROTOCOL("...)\n");
|
||||
SERIAL_PROTOCOLPAIR(" f_lseek()=", (int) s);
|
||||
SERIAL_PROTOCOL("\n");
|
||||
return s;
|
||||
}
|
||||
s = f_write(&eeprom_file, (void *)value, size, &bytes_written);
|
||||
if ( s ) {
|
||||
SERIAL_PROTOCOLPAIR(" write_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
||||
SERIAL_PROTOCOLPAIR(",", (int) value); // right now to see errors that are happening in the
|
||||
SERIAL_PROTOCOLPAIR(",", (int) size); // read_data() and write_data() functions
|
||||
SERIAL_PROTOCOL("...)\n");
|
||||
SERIAL_PROTOCOLPAIR(" f_write()=", (int) s);
|
||||
SERIAL_PROTOCOL("\n");
|
||||
SERIAL_PROTOCOLPAIR(" size=", (int) size);
|
||||
SERIAL_PROTOCOLPAIR("\n bytes_written=", (int) bytes_written);
|
||||
SERIAL_PROTOCOL("\n");
|
||||
return s;
|
||||
}
|
||||
crc16(crc, value, size);
|
||||
pos = pos + size;
|
||||
return (bytes_written == size);
|
||||
return (bytes_written != size); // return true for any error
|
||||
}
|
||||
|
||||
void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
|
||||
bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
|
||||
UINT bytes_read = 0;
|
||||
f_lseek(&eeprom_file, pos);
|
||||
f_read(&eeprom_file, (void *)value, size, &bytes_read);
|
||||
FRESULT s;
|
||||
s = f_lseek(&eeprom_file, pos);
|
||||
if ( s ) {
|
||||
SERIAL_PROTOCOLPAIR(" read_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
||||
SERIAL_PROTOCOLPAIR(",", (int) value); // right now to see errors that are happening in the
|
||||
SERIAL_PROTOCOLPAIR(",", (int) size); // read_data() and write_data() functions
|
||||
SERIAL_PROTOCOL("...)\n");
|
||||
SERIAL_PROTOCOLPAIR(" f_lseek()=", (int) s);
|
||||
SERIAL_PROTOCOL("\n");
|
||||
return true;
|
||||
}
|
||||
s = f_read(&eeprom_file, (void *)value, size, &bytes_read);
|
||||
if ( s ) {
|
||||
SERIAL_PROTOCOLPAIR(" read_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
||||
SERIAL_PROTOCOLPAIR(",", (int) value); // right now to see errors that are happening in the
|
||||
SERIAL_PROTOCOLPAIR(",", (int) size); // read_data() and write_data() functions
|
||||
SERIAL_PROTOCOL("...)\n");
|
||||
SERIAL_PROTOCOLPAIR(" f_write()=", (int) s);
|
||||
SERIAL_PROTOCOL("\n");
|
||||
SERIAL_PROTOCOLPAIR(" size=", (int) size);
|
||||
SERIAL_PROTOCOLPAIR("\n bytes_read=", (int) bytes_read);
|
||||
SERIAL_PROTOCOL("\n");
|
||||
return true;
|
||||
}
|
||||
crc16(crc, value, size);
|
||||
pos = pos + size;
|
||||
return bytes_read != size; // return true for any error
|
||||
}
|
||||
|
||||
} // PersistentStore
|
||||
|
@ -78,15 +78,16 @@ bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
|
||||
}
|
||||
crc16(crc, value, size);
|
||||
pos += size;
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
|
||||
bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
|
||||
for (int i = 0; i < size; i++) {
|
||||
value[i] = HAL_STM32F1_eeprom_content [pos + i];
|
||||
}
|
||||
crc16(crc, value, size);
|
||||
pos += size;
|
||||
return false;
|
||||
}
|
||||
|
||||
} // PersistentStore::
|
||||
|
@ -28,17 +28,17 @@ bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
|
||||
if (eeprom_read_byte(p) != v) {
|
||||
SERIAL_ECHO_START();
|
||||
SERIAL_ECHOLNPGM(MSG_ERR_EEPROM_WRITE);
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
crc16(crc, &v, 1);
|
||||
pos++;
|
||||
value++;
|
||||
};
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
|
||||
bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
|
||||
do {
|
||||
uint8_t c = eeprom_read_byte((unsigned char*)pos);
|
||||
*value = c;
|
||||
@ -46,6 +46,7 @@ void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
|
||||
pos++;
|
||||
value++;
|
||||
} while (--size);
|
||||
return false;
|
||||
}
|
||||
|
||||
} // PersistentStore
|
||||
|
@ -10,7 +10,7 @@ namespace PersistentStore {
|
||||
bool access_start();
|
||||
bool access_finish();
|
||||
bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc);
|
||||
void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc);
|
||||
bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc);
|
||||
|
||||
} // PersistentStore
|
||||
} // HAL
|
||||
|
Reference in New Issue
Block a user