New ML support - lang codes
+script tunning
This commit is contained in:
parent
7ab53af604
commit
53d9d8bd8a
5 changed files with 67 additions and 18 deletions
|
@ -1309,6 +1309,10 @@ void setup()
|
|||
lcd_mylang();
|
||||
}
|
||||
lang_select(lang_selected);
|
||||
|
||||
uint16_t sec_lang_code=lang_get_code(1);
|
||||
printf_P(_n("SEC_LANG_CODE=0x%04x (%c%c)\n"), sec_lang_code, sec_lang_code >> 8, sec_lang_code & 0xff);
|
||||
|
||||
#ifdef DEBUG_SEC_LANG
|
||||
lang_print_sec_lang(uartout);
|
||||
#endif //DEBUG_SEC_LANG
|
||||
|
|
|
@ -13,18 +13,21 @@ uint8_t lang_selected = 0;
|
|||
const char _SEC_LANG[LANG_SIZE_RESERVED] PROGMEM_I2 = "_SEC_LANG";
|
||||
#endif //(LANG_MODE == 0)
|
||||
|
||||
//lang_table_t structure - 16byte header
|
||||
//lang_table_header_t structure - (size= 16byte)
|
||||
typedef struct
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint32_t magic; //+0
|
||||
uint16_t size; //+4
|
||||
uint16_t count; //+6
|
||||
uint16_t checksum; //+8
|
||||
uint16_t reserved0; //+10
|
||||
uint32_t reserved1; //+12
|
||||
} header;
|
||||
uint32_t magic; //+0
|
||||
uint16_t size; //+4
|
||||
uint16_t count; //+6
|
||||
uint16_t checksum; //+8
|
||||
uint16_t code; //+10
|
||||
uint32_t reserved1; //+12
|
||||
} lang_table_header_t;
|
||||
|
||||
//lang_table_t structure - (size= 16byte + 2*count)
|
||||
typedef struct
|
||||
{
|
||||
lang_table_header_t header;
|
||||
uint16_t table[];
|
||||
} lang_table_t;
|
||||
|
||||
|
@ -88,14 +91,34 @@ uint8_t lang_get_count()
|
|||
ui += 0x00ff; //add 1 page
|
||||
ui &= 0xff00; //align to page
|
||||
lang_table_t* _lang_table = ui; //table pointer
|
||||
if (pgm_read_dword(((uint32_t*)(_lang_table + 0))) == 0x4bb45aa5) return 2;
|
||||
if (pgm_read_dword(((uint32_t*)(_lang_table + 0))) == LANG_MAGIC) return 2;
|
||||
return 1;
|
||||
}
|
||||
|
||||
const char* lang_get_name(uint8_t lang)
|
||||
{
|
||||
if (lang == 0) return MSG_LANGUAGE_NAME + 2;
|
||||
return lang_get_sec_lang_str(MSG_LANGUAGE_NAME);
|
||||
if (lang == LANG_ID_UNDEFINED) lang = lang_selected;
|
||||
if (lang == LANG_ID_PRI) return MSG_LANGUAGE_NAME + 2;
|
||||
if (lang == LANG_ID_SEC)
|
||||
{
|
||||
uint16_t ui = ((((uint16_t)&_SEC_LANG) + 0x00ff) & 0xff00); //table pointer
|
||||
if (pgm_read_dword(((uint32_t*)(ui + 0))) == LANG_MAGIC) //magic num is OK
|
||||
return lang_get_sec_lang_str(MSG_LANGUAGE_NAME);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint16_t lang_get_code(uint8_t lang)
|
||||
{
|
||||
if (lang == LANG_ID_UNDEFINED) lang = lang_selected;
|
||||
if (lang == LANG_ID_PRI) return LANG_CODE_EN;
|
||||
if (lang == LANG_ID_SEC)
|
||||
{
|
||||
uint16_t ui = ((((uint16_t)&_SEC_LANG) + 0x00ff) & 0xff00); //table pointer
|
||||
if (pgm_read_dword(((uint32_t*)(ui + 0))) == LANG_MAGIC) //magic num is OK
|
||||
return pgm_read_word(((uint16_t*)(ui + 10))); //read language code
|
||||
}
|
||||
return LANG_CODE_XX;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_SEC_LANG
|
||||
|
@ -111,13 +134,13 @@ uint16_t lang_print_sec_lang(FILE* out)
|
|||
uint16_t _lt_chsum = pgm_read_word(((uint16_t*)(ptr_lang_table0 + 8)));
|
||||
uint16_t _lt_resv0 = pgm_read_word(((uint16_t*)(ptr_lang_table0 + 10)));
|
||||
uint32_t _lt_resv1 = pgm_read_dword(((uint32_t*)(ptr_lang_table0 + 12)));
|
||||
printf_P(_n(" _lt_magic = 0x%08lx %S\n"), _lt_magic, (_lt_magic==0x4bb45aa5)?_n("OK"):_n("NA"));
|
||||
printf_P(_n(" _lt_magic = 0x%08lx %S\n"), _lt_magic, (_lt_magic==LANG_MAGIC)?_n("OK"):_n("NA"));
|
||||
printf_P(_n(" _lt_size = 0x%04x (%d)\n"), _lt_size, _lt_size);
|
||||
printf_P(_n(" _lt_count = 0x%04x (%d)\n"), _lt_count, _lt_count);
|
||||
printf_P(_n(" _lt_chsum = 0x%04x\n"), _lt_chsum);
|
||||
printf_P(_n(" _lt_resv0 = 0x%04x\n"), _lt_resv0);
|
||||
printf_P(_n(" _lt_resv1 = 0x%08lx\n"), _lt_resv1);
|
||||
if (_lt_magic != 0x4bb45aa5) return 0;
|
||||
if (_lt_magic != LANG_MAGIC) return 0;
|
||||
puts_P(_n(" strings:\n"));
|
||||
uint16_t ui = ((((uint16_t)&_SEC_LANG) + 0x00ff) & 0xff00); //table pointer
|
||||
for (ui = 0; ui < _lt_count; ui++)
|
||||
|
|
|
@ -51,6 +51,7 @@
|
|||
|
||||
// Language is not defined and it shall be selected from the menu.
|
||||
#define LANG_ID_FORCE_SELECTION 254
|
||||
|
||||
// Language is not defined on a virgin RAMBo board.
|
||||
#define LANG_ID_UNDEFINED 255
|
||||
|
||||
|
@ -60,6 +61,17 @@
|
|||
// Number of languages available in the language table.
|
||||
#define LANG_NUM 2
|
||||
|
||||
// Magic number at begin of lang table.
|
||||
#define LANG_MAGIC 0x4bb45aa5
|
||||
|
||||
// Language codes (ISO639-1)
|
||||
#define LANG_CODE_XX 0x3f3f //'??'
|
||||
#define LANG_CODE_EN 0x656e //'en'
|
||||
#define LANG_CODE_CZ 0x6373 //'cs'
|
||||
#define LANG_CODE_DE 0x6465 //'de'
|
||||
#define LANG_CODE_ES 0x6573 //'es'
|
||||
#define LANG_CODE_IT 0x6974 //'it'
|
||||
#define LANG_CODE_PL 0x706c //'pl'
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C" {
|
||||
|
@ -78,6 +90,7 @@ extern const char* lang_get_sec_lang_str_by_id(uint16_t id);
|
|||
extern const char* lang_select(uint8_t lang);
|
||||
extern uint8_t lang_get_count();
|
||||
extern const char* lang_get_name(uint8_t lang);
|
||||
extern uint16_t lang_get_code(uint8_t lang);
|
||||
|
||||
#ifdef DEBUG_SEC_LANG
|
||||
extern uint16_t lang_print_sec_lang(FILE* out);
|
||||
|
|
|
@ -87,9 +87,18 @@ lt_data_size=$(wc -c lang_$LANG.dat | cut -f1 -d' ')
|
|||
lt_offs_size=$((2 * $lt_count))
|
||||
lt_size=$((16 + $lt_offs_size + $lt_data_size))
|
||||
lt_chsum=1
|
||||
lt_resv0='\xff\xff'
|
||||
lt_code='\xff\xff'
|
||||
lt_resv1='\xff\xff\xff\xff'
|
||||
|
||||
case "$LANG" in
|
||||
*en*) lt_code='\x6e\x65' ;;
|
||||
*cz*) lt_code='\x73\x63' ;;
|
||||
*de*) lt_code='\x65\x64' ;;
|
||||
*es*) lt_code='\x73\x65' ;;
|
||||
*it*) lt_code='\x74\x69' ;;
|
||||
*pl*) lt_code='\x6c\x70' ;;
|
||||
esac
|
||||
|
||||
#generate lang_xx.ofs (secondary language text data offset table)
|
||||
echo -n " generating lang_$LANG.ofs..." >&2
|
||||
cat lang_$LANG.txt | sed "s/\\\\x[0-9a-f][0-9a-f]/\./g;s/\\\\[0-7][0-7][0-7]/\./g" |\
|
||||
|
@ -114,7 +123,7 @@ echo -n " writing header (16 bytes)..." >&2
|
|||
dd of=lang_$LANG.bin bs=1 count=2 seek=6 conv=notrunc 2>/dev/null
|
||||
/bin/echo -n -e $(echo -n "$lt_chsum" | awk "$awk_ui16") |\
|
||||
dd of=lang_$LANG.bin bs=1 count=2 seek=8 conv=notrunc 2>/dev/null
|
||||
/bin/echo -n -e "$lt_resv0" |\
|
||||
/bin/echo -n -e "$lt_code" |\
|
||||
dd of=lang_$LANG.bin bs=1 count=2 seek=10 conv=notrunc 2>/dev/null
|
||||
/bin/echo -n -e "$lt_resv1" |\
|
||||
dd of=lang_$LANG.bin bs=1 count=4 seek=12 conv=notrunc 2>/dev/null
|
||||
|
|
|
@ -29,8 +29,8 @@ lang_name=$(\
|
|||
*en*) echo "English" ;;
|
||||
*cz*) echo "Czech" ;;
|
||||
*de*) echo "German" ;;
|
||||
*it*) echo "Italian" ;;
|
||||
*es*) echo "Spanish" ;;
|
||||
*it*) echo "Italian" ;;
|
||||
*pl*) echo "Polish" ;;
|
||||
esac)
|
||||
|
||||
|
|
Loading…
Reference in a new issue