Fix compiler warnings in language.c and document _SEC_LANG_TABLE macro.

This commit is contained in:
Marek Bel 2018-07-12 17:23:50 +02:00
parent bf0bbb215e
commit 2b5e63eb7f
2 changed files with 44 additions and 31 deletions

View File

@ -63,7 +63,7 @@ uint8_t lang_select(uint8_t lang)
if (lang_check(_SEC_LANG_TABLE)) if (lang_check(_SEC_LANG_TABLE))
if (pgm_read_dword(((uint32_t*)(_SEC_LANG_TABLE + 12))) == pgm_read_dword(((uint32_t*)(_PRI_LANG_SIGNATURE)))) //signature valid if (pgm_read_dword(((uint32_t*)(_SEC_LANG_TABLE + 12))) == pgm_read_dword(((uint32_t*)(_PRI_LANG_SIGNATURE)))) //signature valid
{ {
lang_table = _SEC_LANG_TABLE; // set table pointer lang_table = (lang_table_t*)(_SEC_LANG_TABLE); // set table pointer
lang_selected = lang; // set language id lang_selected = lang; // set language id
} }
} }
@ -138,7 +138,7 @@ uint8_t lang_get_header(uint8_t lang, lang_table_header_t* header, uint32_t* off
if (lang == LANG_ID_SEC) if (lang == LANG_ID_SEC)
{ {
uint16_t ui = _SEC_LANG_TABLE; //table pointer uint16_t ui = _SEC_LANG_TABLE; //table pointer
memcpy_P(header, ui, sizeof(lang_table_header_t)); //read table header from progmem memcpy_P(header, (lang_table_t*)(_SEC_LANG_TABLE), sizeof(lang_table_header_t)); //read table header from progmem
if (offset) *offset = ui; if (offset) *offset = ui;
return (header->magic == LANG_MAGIC)?1:0; //return 1 if magic valid return (header->magic == LANG_MAGIC)?1:0; //return 1 if magic valid
} }
@ -147,7 +147,7 @@ uint8_t lang_get_header(uint8_t lang, lang_table_header_t* header, uint32_t* off
lang--; lang--;
while (1) while (1)
{ {
w25x20cl_rd_data(addr, header, sizeof(lang_table_header_t)); //read table header from xflash w25x20cl_rd_data(addr, (uint8_t*)(header), sizeof(lang_table_header_t)); //read table header from xflash
if (header->magic != LANG_MAGIC) break; //break if not valid if (header->magic != LANG_MAGIC) break; //break if not valid
if (offset) *offset = addr; if (offset) *offset = addr;
if (--lang == 0) return 1; if (--lang == 0) return 1;

View File

@ -1,3 +1,4 @@
/** @file */
//language.h //language.h
#ifndef LANGUAGE_H #ifndef LANGUAGE_H
#define LANGUAGE_H #define LANGUAGE_H
@ -22,11 +23,14 @@
#define STRINGIFY_(n) #n #define STRINGIFY_(n) #n
#define STRINGIFY(n) STRINGIFY_(n) #define STRINGIFY(n) STRINGIFY_(n)
//section progmem0 will be used for localized translated strings /** @def PROGMEM_I2
* @brief section progmem0 will be used for localized translated strings */
#define PROGMEM_I2 __attribute__((section(".progmem0"))) #define PROGMEM_I2 __attribute__((section(".progmem0")))
//section progmem1 will be used for localized strings in english /** @def PROGMEM_I1
* @brief section progmem1 will be used for localized strings in english */
#define PROGMEM_I1 __attribute__((section(".progmem1"))) #define PROGMEM_I1 __attribute__((section(".progmem1")))
//section progmem2 will be used for not localized strings in english /** @def PROGMEM_N1
* @brief section progmem2 will be used for not localized strings in english */
#define PROGMEM_N1 __attribute__((section(".progmem2"))) #define PROGMEM_N1 __attribute__((section(".progmem2")))
#if (LANG_MODE == 0) //primary language only #if (LANG_MODE == 0) //primary language only
@ -43,7 +47,7 @@
#define _N(s) (__extension__({static const char __c[] PROGMEM_N1 = s; &__c[0];})) #define _N(s) (__extension__({static const char __c[] PROGMEM_N1 = s; &__c[0];}))
#define _n(s) _N(s) #define _n(s) _N(s)
//lang_table_header_t structure - (size= 16byte) /** @brief lang_table_header_t structure - (size= 16byte) */
typedef struct typedef struct
{ {
uint32_t magic; //+0 uint32_t magic; //+0
@ -54,67 +58,76 @@ typedef struct
uint32_t signature; //+12 uint32_t signature; //+12
} lang_table_header_t; } lang_table_header_t;
//lang_table_t structure - (size= 16byte + 2*count) /** @brief lang_table_t structure - (size= 16byte + 2*count) */
typedef struct typedef struct
{ {
lang_table_header_t header; lang_table_header_t header;
uint16_t table[]; uint16_t table[];
} lang_table_t; } lang_table_t;
// Language indices into their particular symbol tables. /** @name Language indices into their particular symbol tables.*/
///@{
#define LANG_ID_PRI 0 #define LANG_ID_PRI 0
#define LANG_ID_SEC 1 #define LANG_ID_SEC 1
///@}
// Language is not defined and it shall be selected from the menu. /** @def LANG_ID_FORCE_SELECTION
* @brief Language is not defined and it shall be selected from the menu.*/
#define LANG_ID_FORCE_SELECTION 254 #define LANG_ID_FORCE_SELECTION 254
// Language is not defined on a virgin RAMBo board. /** @def LANG_ID_UNDEFINED
* @brief Language is not defined on a virgin RAMBo board. */
#define LANG_ID_UNDEFINED 255 #define LANG_ID_UNDEFINED 255
// Default language ID, if no language is selected. /** @def LANG_ID_DEFAULT
* @brief Default language ID, if no language is selected. */
#define LANG_ID_DEFAULT LANG_ID_PRI #define LANG_ID_DEFAULT LANG_ID_PRI
// Magic number at begin of lang table. /** @def LANG_MAGIC
* @brief Magic number at begin of lang table. */
#define LANG_MAGIC 0x4bb45aa5 #define LANG_MAGIC 0x4bb45aa5
// Language codes (ISO639-1) /** @name Language codes (ISO639-1)*/
#define LANG_CODE_XX 0x3f3f //'??' ///@{
#define LANG_CODE_EN 0x656e //'en' #define LANG_CODE_XX 0x3f3f //!<'??'
#define LANG_CODE_CZ 0x6373 //'cs' #define LANG_CODE_EN 0x656e //!<'en'
#define LANG_CODE_DE 0x6465 //'de' #define LANG_CODE_CZ 0x6373 //!<'cs'
#define LANG_CODE_ES 0x6573 //'es' #define LANG_CODE_DE 0x6465 //!<'de'
#define LANG_CODE_IT 0x6974 //'it' #define LANG_CODE_ES 0x6573 //!<'es'
#define LANG_CODE_PL 0x706c //'pl' #define LANG_CODE_IT 0x6974 //!<'it'
#define LANG_CODE_PL 0x706c //!<'pl'
///@}
#if defined(__cplusplus) #if defined(__cplusplus)
extern "C" { extern "C" {
#endif //defined(__cplusplus) #endif //defined(__cplusplus)
// Currectly active language selection. /** @brief Currectly active language selection.*/
extern uint8_t lang_selected; extern uint8_t lang_selected;
#if (LANG_MODE != 0) #if (LANG_MODE != 0)
extern const char _SEC_LANG[LANG_SIZE_RESERVED]; extern const char _SEC_LANG[LANG_SIZE_RESERVED];
extern const char* lang_get_translation(const char* s); extern const char* lang_get_translation(const char* s);
/** @def _SEC_LANG_TABLE
* @brief Align table to start of 256 byte page */
#define _SEC_LANG_TABLE ((((uint16_t)&_SEC_LANG) + 0x00ff) & 0xff00) #define _SEC_LANG_TABLE ((((uint16_t)&_SEC_LANG) + 0x00ff) & 0xff00)
//extern const uint32_t _PRI_LANG_SIGNATURE;
#endif //(LANG_MODE != 0) #endif //(LANG_MODE != 0)
//selects language, eeprom is updated in case of success /** @brief selects language, eeprom is updated in case of success */
extern uint8_t lang_select(uint8_t lang); extern uint8_t lang_select(uint8_t lang);
//performs checksum test of secondary language data /** @brief performs checksum test of secondary language data */
extern uint8_t lang_check(uint16_t addr); extern uint8_t lang_check(uint16_t addr);
//returns total number of languages (primary + all in xflash) /** @return total number of languages (primary + all in xflash) */
extern uint8_t lang_get_count(void); extern uint8_t lang_get_count(void);
//reads lang table header and offset in xflash or progmem /** @brief reads lang table header and offset in xflash or progmem */
extern uint8_t lang_get_header(uint8_t lang, lang_table_header_t* header, uint32_t* offset); extern uint8_t lang_get_header(uint8_t lang, lang_table_header_t* header, uint32_t* offset);
//reads lang code from xflash or progmem /** @brief reads lang code from xflash or progmem */
extern uint16_t lang_get_code(uint8_t lang); extern uint16_t lang_get_code(uint8_t lang);
//returns localized language name (text for menu item) /** @return localized language name (text for menu item) */
extern const char* lang_get_name_by_code(uint16_t code); extern const char* lang_get_name_by_code(uint16_t code);
//reset language to "LANG_ID_FORCE_SELECTION", epprom is updated /** @brief reset language to "LANG_ID_FORCE_SELECTION", epprom is updated */
extern void lang_reset(void); extern void lang_reset(void);
//returns 1 if language is selected /** @retval 1 language is selected */
extern uint8_t lang_is_selected(void); extern uint8_t lang_is_selected(void);
#ifdef DEBUG_SEC_LANG #ifdef DEBUG_SEC_LANG