diff --git a/src/Makefile b/src/Makefile index 61ff5b4c9..de5c5e8d1 100644 --- a/src/Makefile +++ b/src/Makefile @@ -490,7 +490,7 @@ endif ifeq ($(PCB), X9D) # X9D radio OPT = 2 - CPPDEFS += -DPCBX9D -DCPUARM -DEEPROM_VARIANT=0 -DAUDIO -DPXX -DDSM2 -DDSM2_PPM + CPPDEFS += -DPCBX9D -DCPUARM -DEEPROM_VARIANT=0 -DAUDIO -DPXX EXTRAINCDIRS += CoOS/kernel CoOS/portable EXTRAINCDIRS += x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Include BOARDSRC = x9d/board_x9d.cpp diff --git a/src/eeprom_avr.cpp b/src/eeprom_avr.cpp index 4fcb011b5..a0f46dbb5 100644 --- a/src/eeprom_avr.cpp +++ b/src/eeprom_avr.cpp @@ -970,3 +970,25 @@ void eeCheck(bool immediately) } } +#if defined(CPUARM) +bool eeCopyModel(uint8_t dst, uint8_t src) +{ + if (theFile.copy(FILE_MODEL(dst), FILE_MODEL(src))) { + memcpy(modelNames[dst], modelNames[src], sizeof(g_model.name)); + return true; + } + else { + return false; + } +} + +void eeSwapModels(uint8_t id1, uint8_t id2) +{ + EFile::swap(FILE_MODEL(id1), FILE_MODEL(id2)); + + char tmp[sizeof(g_model.name)]; + memcpy(tmp, modelNames[id1], sizeof(g_model.name)); + memcpy(modelNames[id1], modelNames[id2], sizeof(g_model.name)); + memcpy(modelNames[id2], tmp, sizeof(g_model.name)); +} +#endif diff --git a/src/eeprom_avr.h b/src/eeprom_avr.h index f8bf505cf..7f24871a2 100644 --- a/src/eeprom_avr.h +++ b/src/eeprom_avr.h @@ -238,8 +238,14 @@ inline void eeFlush() { theFile.flush(); } uint16_t evalChkSum(); #define eeDeleteModel(x) EFile::rm(FILE_MODEL(x)) + +#if defined(CPUARM) +bool eeCopyModel(uint8_t dst, uint8_t src); +void eeSwapModels(uint8_t id1, uint8_t id2); +#else #define eeCopyModel(dst, src) theFile.copy(FILE_MODEL(dst), FILE_MODEL(src)) #define eeSwapModels(id1, id2) EFile::swap(FILE_MODEL(id1), FILE_MODEL(id2)) +#endif #if defined(SDCARD) const pm_char * eeBackupModel(uint8_t i_fileSrc); diff --git a/src/general_menus.cpp b/src/general_menus.cpp index dfb94c8f9..5d4e3e0b8 100644 --- a/src/general_menus.cpp +++ b/src/general_menus.cpp @@ -162,7 +162,7 @@ void menuGeneralSetup(uint8_t event) } #endif - MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) LABEL(SOUND), 0, 0, IF_AUDIO(0) IF_VOICE(0) IF_HAPTIC(LABEL(HAPTIC)) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) IF_PCBSKY9X(0) IF_9X(0) LABEL(ALARMS), 0, IF_PCBSKY9X(0) IF_CPUARM(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) 0, LABEL(TIMER_EVENTS), 0, 0, LABEL(BACKLIGHT), 0, 0, 0, IF_SPLASH(0) IF_FRSKY(0) IF_FRSKY(0) 0, LABEL(TX_MODE), IF_PCBX9D(0) 1/*to force edit mode*/}); + MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) LABEL(SOUND), 0, 0, IF_AUDIO(0) IF_VOICE(0) IF_HAPTIC(LABEL(HAPTIC)) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) IF_PCBSKY9X(0) IF_9X(0) LABEL(ALARMS), 0, IF_PCBSKY9X(0) IF_CPUARM(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) 0, LABEL(TIMER_EVENTS), 0, 0, LABEL(BACKLIGHT), 0, 0, 0, IF_SPLASH(0) IF_FRSKY(0) IF_FRSKY(0) 0, LABEL(TX_MODE), CASE_PCBX9D(0) 1/*to force edit mode*/}); uint8_t sub = m_posVert - 1; diff --git a/src/gtests.cpp b/src/gtests.cpp index d048b9f3c..a2847cef2 100644 --- a/src/gtests.cpp +++ b/src/gtests.cpp @@ -298,7 +298,7 @@ TEST(Phases, nullFadeOut_posFadeIn) g_model.phaseData[1].swtch = DSW(SW_ID1); g_model.phaseData[1].fadeIn = 15; perMain(); - setSwitch(DSW(SW_ID1)); + simuSetSwitch(3, 0); perMain(); } @@ -315,7 +315,7 @@ TEST(Mixer, Cascaded3Channels) g_model.mixData[2].destCh = 2; g_model.mixData[2].srcRaw = MIXSRC_ID1; g_model.mixData[2].weight = 100; - setSwitch(DSW(SW_ID1)); + simuSetSwitch(3, 0); perOut(e_perout_mode_normal, 0); EXPECT_EQ(chans[0], 102400); EXPECT_EQ(chans[1], 102400); @@ -332,7 +332,7 @@ TEST(Mixer, CascadedOrderedChannels) g_model.mixData[1].destCh = 1; g_model.mixData[1].srcRaw = MIXSRC_CH1; g_model.mixData[1].weight = 100; - setSwitch(DSW(SW_ID1)); + simuSetSwitch(3, 0); perOut(e_perout_mode_normal, 0); EXPECT_EQ(chans[0], 102400); EXPECT_EQ(chans[1], 102400); @@ -357,35 +357,21 @@ TEST(Mixer, Cascaded5Channels) g_model.mixData[4].destCh = 4; g_model.mixData[4].srcRaw = MIXSRC_ID1; g_model.mixData[4].weight = 100; - int32_t lastVal = 0; for (uint8_t i=0; i<10; i++) { - setSwitch(DSW(SW_ID1)); - doMixerCalculations(); - EXPECT_EQ(chans[0], lastVal); - EXPECT_EQ(chans[1], lastVal); - EXPECT_EQ(chans[2], 102400); - EXPECT_EQ(chans[3], 102400); - EXPECT_EQ(chans[4], 102400); + simuSetSwitch(3, 0); doMixerCalculations(); EXPECT_EQ(chans[0], 102400); EXPECT_EQ(chans[1], 102400); EXPECT_EQ(chans[2], 102400); EXPECT_EQ(chans[3], 102400); EXPECT_EQ(chans[4], 102400); - setSwitch(DSW(SW_ID0)); - doMixerCalculations(); - EXPECT_EQ(chans[0], 102400); - EXPECT_EQ(chans[1], 102400); - EXPECT_EQ(chans[2], -102400); - EXPECT_EQ(chans[3], -102400); - EXPECT_EQ(chans[4], -102400); + simuSetSwitch(3, -1); doMixerCalculations(); EXPECT_EQ(chans[0], -102400); EXPECT_EQ(chans[1], -102400); EXPECT_EQ(chans[2], -102400); EXPECT_EQ(chans[3], -102400); EXPECT_EQ(chans[4], -102400); - lastVal = -102400; } } diff --git a/src/menus.cpp b/src/menus.cpp index ca1d09604..aec36c31c 100644 --- a/src/menus.cpp +++ b/src/menus.cpp @@ -76,7 +76,7 @@ void displayScrollbar(xcoord_t x, uint8_t y, uint8_t h, uint16_t offset, uint16_ } #endif -#if defined(ROTARY_ENCODER_NAVIGATION) +#if defined(PCBX9D) || defined(ROTARY_ENCODER_NAVIGATION) int8_t scrollRE; int16_t p1valdiff; int8_t lastCursorMove; @@ -128,7 +128,7 @@ int16_t checkIncDec(uint8_t event, int16_t val, int16_t i_min, int16_t i_max, ui newval = !val; } -#if defined(ROTARY_ENCODER_NAVIGATION) || defined(NAVIGATION_POT1) +#if defined(PCBX9D) || defined(ROTARY_ENCODER_NAVIGATION) || defined(NAVIGATION_POT1) //change values based on P1 newval -= p1valdiff; p1valdiff = 0; @@ -287,21 +287,20 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t uint8_t maxcol = MAXCOL(l_posVert); -#if defined(ROTARY_ENCODER_NAVIGATION) - #if defined(PCBX9D) - if (!(s_warning || s_menu_count || s_editMode<0)) + if (!(s_warning || s_menu_count/* || s_editMode<0*/)) CHECK_ROTARY_ENCODER(event); -#else +#elif defined(ROTARY_ENCODER_NAVIGATION) if (!(s_warning || s_menu_count)) CHECK_ROTARY_ENCODER(event); -#endif if (l_posVert < 0 && (event==EVT_KEY_BREAK(RE_NAV_ENTER) || event==EVT_KEY_BREAK(KEY_MENU))) { popMenu(); return false; } +#endif +#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBX9D) if (IS_RE_NAVIGATION_ENABLE() && event==EVT_KEY_BREAK(RE_NAV_ENTER) && s_editMode != EDIT_MODIFY_STRING) { scrollRE = 0; if (s_editMode++ > 0) s_editMode = 0; @@ -342,6 +341,29 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t if (menuTab) { uint8_t attr = 0; +#if defined(PCBX9D) + int8_t cc = curr; + switch(event) { + case EVT_KEY_LONG(KEY_PAGE): + if (curr > 0) + cc = curr - 1; + else + cc = menuTabSize-1; + killEvents(event); + break; + + case EVT_KEY_BREAK(KEY_PAGE): + if (curr < (menuTabSize-1)) + cc = curr + 1; + else + cc = 0; + break; + } + if (cc != curr) { + chainMenu((MenuFuncP)pgm_read_adr(&menuTab[cc])); + return false; + } +#else if (l_posVert==0 && !s_noScroll) { attr = INVERS; @@ -377,6 +399,7 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t attr = INVERS|BLINK; #endif } +#endif s_noScroll = 0; displayScreenIndex(curr, menuTabSize, attr); @@ -404,9 +427,14 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t l_posHorz = limit((int8_t)0, (int8_t)(l_posHorz - scrollLR), (int8_t)maxcol); } -#if defined(ROTARY_ENCODER_NAVIGATION) +#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBX9D) lastCursorMove = 0; - while (!s_editMode && scrollRE) { +#if defined(PCBX9D) + // TODO remove that + while (s_editMode<=0 && scrollRE) { +#else + while (s_editMode==0 && scrollRE) { +#endif if (scrollRE > 0) { --scrollRE; maxcol = MAXCOL(l_posVert); @@ -421,7 +449,7 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t } else { #if defined(PCBX9D) - l_posVert = 0; + l_posVert = (menuTab ? 1 : 0); l_posHorz = 0; #else --l_posHorz; @@ -438,7 +466,7 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t --l_posVert; } while(MAXCOL(l_posVert) == (uint8_t)-1); #if defined(PCBX9D) - if (l_posVert < (menuTab ? 0 : -1)) { + if (l_posVert < (menuTab ? 1 : 0)) { l_posVert = maxrow; l_posHorz = MAXCOL(l_posVert); } @@ -466,7 +494,11 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t switch(event) { case EVT_ENTRY: +#if defined(PCBX9D) + l_posVert = (menuTab ? 1 : 0); +#else l_posVert = 0; +#endif l_posHorz = 0; #if defined(ROTARY_ENCODER_NAVIGATION) if (menuTab) { @@ -475,7 +507,7 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t } // no break #else - s_editMode = -1; + s_editMode = -1; // TODO why not 0? break; #endif #if defined(ROTARY_ENCODER_NAVIGATION) @@ -501,7 +533,7 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t s_editMode = 0; break; } - if (l_posVert==0 || !menuTab) { + if (IF_PCBX9D() || l_posVert==0 || !menuTab) { popMenu(); // beeps itself return false; } @@ -690,7 +722,7 @@ int8_t switchMenuItem(uint8_t x, uint8_t y, int8_t value, LcdFlags attr, uint8_t int8_t gvarMenuItem(uint8_t x, uint8_t y, int8_t value, int8_t min, int8_t max, LcdFlags attr, uint8_t event) { bool invers = attr&INVERS; - if (invers && event == EVT_KEY_LONG(KEY_MENU)) { + if (invers && event == EVT_KEY_LONG(KEY_ENTER)) { s_editMode = !s_editMode; value = ((value >= 126 || value <= -126) ? GET_GVAR(value, min, max, s_perout_flight_phase) : 126); eeDirty(EE_MODEL); diff --git a/src/menus.h b/src/menus.h index 4c7c3e4b5..db316539c 100644 --- a/src/menus.h +++ b/src/menus.h @@ -91,7 +91,7 @@ void drawPotsBars(); void doMainScreenGraphics(); void menuMainView(uint8_t event); void menuGeneralDiagAna(uint8_t event); -#ifdef FRSKY +#if defined(FRSKY) void menuTelemetryFrsky(uint8_t event); #endif void menuGeneralSetup(uint8_t event); @@ -102,29 +102,29 @@ void menuModelCustomFunctions(uint8_t event); void menuStatisticsView(uint8_t event); void menuStatisticsDebug(uint8_t event); -#if defined(ROTARY_ENCODER_NAVIGATION) -extern int8_t scrollRE; -extern int16_t p1valdiff; -extern int8_t lastCursorMove; +#if defined(PCBX9D) || defined(ROTARY_ENCODER_NAVIGATION) + extern int8_t scrollRE; + extern int16_t p1valdiff; // TODO 0 in case of PCBX9D? + extern int8_t lastCursorMove; #elif defined(NAVIGATION_POT1) -extern int16_t p1valdiff; + extern int16_t p1valdiff; #else -#define p1valdiff 0 + #define p1valdiff 0 #endif #if defined(PCBX9D) || defined(PCBACT) -#define IS_RE_NAVIGATION_ENABLE() true -#define NAVIGATION_RE_IDX() 0 -#define IS_RE_NAVIGATION_EVT_TYPE(event, type) (event==type(KEY_ENTER)) -#define IS_RE_NAVIGATION_EVT(event) (EVT_KEY_MASK(event)==KEY_ENTER) + #define IS_RE_NAVIGATION_ENABLE() true + #define NAVIGATION_RE_IDX() 0 + #define IS_RE_NAVIGATION_EVT_TYPE(event, type) (event==type(KEY_ENTER)) + #define IS_RE_NAVIGATION_EVT(event) (EVT_KEY_MASK(event)==KEY_ENTER) #elif defined(ROTARY_ENCODERS) -#define NAVIGATION_RE_IDX() (g_eeGeneral.reNavigation - 1) -#define IS_RE_NAVIGATION_ENABLE() g_eeGeneral.reNavigation -#define IS_RE_NAVIGATION_EVT_TYPE(event, type) (g_eeGeneral.reNavigation && event==type(BTN_REa + g_eeGeneral.reNavigation - 1)) -#define IS_RE_NAVIGATION_EVT(event) (g_eeGeneral.reNavigation && EVT_KEY_MASK(event)==(BTN_REa + g_eeGeneral.reNavigation - 1)) + #define NAVIGATION_RE_IDX() (g_eeGeneral.reNavigation - 1) + #define IS_RE_NAVIGATION_ENABLE() g_eeGeneral.reNavigation + #define IS_RE_NAVIGATION_EVT_TYPE(event, type) (g_eeGeneral.reNavigation && event==type(BTN_REa + g_eeGeneral.reNavigation - 1)) + #define IS_RE_NAVIGATION_EVT(event) (g_eeGeneral.reNavigation && EVT_KEY_MASK(event)==(BTN_REa + g_eeGeneral.reNavigation - 1)) #else -#define IS_RE_NAVIGATION_EVT_TYPE(event, type) (0) -#define IS_RE_NAVIGATION_EVT(event) (0) + #define IS_RE_NAVIGATION_EVT_TYPE(event, type) (0) + #define IS_RE_NAVIGATION_EVT(event) (0) #endif extern int8_t checkIncDec_Ret; // global helper vars @@ -275,7 +275,7 @@ void menuChannelsMonitor(uint8_t event); #define LABEL(...) (uint8_t)-1 -#if defined(ROTARY_ENCODERS) +#if defined(ROTARY_ENCODERS) || defined(PCBX9D) #define CURSOR_MOVED_LEFT(event) (EVT_KEY_MASK(event) == KEY_LEFT || lastCursorMove < 0) #define CURSOR_MOVED_RIGHT(event) (EVT_KEY_MASK(event) == KEY_RIGHT || lastCursorMove > 0) #define REPEAT_LAST_CURSOR_MOVE() if (lastCursorMove) lastCursorMove *= 2; else m_posHorz = 0 diff --git a/src/model_menus.cpp b/src/model_menus.cpp index 3248b1ff4..6083e9c85 100644 --- a/src/model_menus.cpp +++ b/src/model_menus.cpp @@ -241,15 +241,8 @@ void menuModelSelect(uint8_t event) #endif uint8_t _event_ = (IS_RE_NAVIGATION_EVT(event) ? 0 : event); - if (s_copyMode - /* TODO how is it possible? || !eeModelExists(g_eeGeneral.currModel)*/ -#if defined(PCBX9D) || defined(PCBACT) - || s_editMode >= 0 -#endif - ) { - if ((event & 0x1f) == KEY_EXIT) - _event_ -= KEY_EXIT; - } + if (s_copyMode && (event & 0x1f) == KEY_EXIT) + _event_ -= KEY_EXIT; int8_t oldSub = m_posVert; if (!check_submenu_simple(_event_, MAX_MODELS-1)) return; @@ -303,12 +296,6 @@ void menuModelSelect(uint8_t event) sub = m_posVert = (s_copyMode == MOVE_MODE || s_copySrcRow<0) ? (MAX_MODELS+sub+s_copyTgtOfs) % MAX_MODELS : s_copySrcRow; s_copyMode = 0; } -#if defined(PCBX9D) || defined(PCBACT) - else { - m_posVert = sub = g_eeGeneral.currModel; - s_editMode = -1; - } -#endif break; #if defined(ROTARY_ENCODERS) case EVT_KEY_BREAK(BTN_REa): @@ -324,12 +311,6 @@ void menuModelSelect(uint8_t event) #endif case EVT_KEY_LONG(KEY_ENTER): case EVT_KEY_BREAK(KEY_ENTER): -#if defined(PCBX9D) || defined(PCBACT) - if (s_editMode < 0) { - s_editMode = 0; - break; - } -#endif s_editMode = 0; if (s_copyMode && (s_copyTgtOfs || s_copySrcRow>=0)) { displayPopup(s_copyMode==COPY_MODE ? STR_COPYINGMODEL : STR_MOVINGMODEL); @@ -399,7 +380,18 @@ void menuModelSelect(uint8_t event) } break; -#if !defined(PCBX9D) && !defined(PCBACT) +#if defined(PCBX9D) + // TODO merge with lines below + case EVT_KEY_BREAK(KEY_PAGE): + case EVT_KEY_LONG(KEY_PAGE): + if (sub == g_eeGeneral.currModel) { + chainMenu(event == EVT_KEY_BREAK(KEY_PAGE) ? menuModelSetup : menuTabModel[DIM(menuTabModel)-1]); + killEvents(event); + return; + } + AUDIO_WARNING2(); + break; +#else case EVT_KEY_FIRST(KEY_LEFT): case EVT_KEY_FIRST(KEY_RIGHT): if (sub == g_eeGeneral.currModel) { @@ -412,12 +404,6 @@ void menuModelSelect(uint8_t event) case EVT_KEY_FIRST(KEY_MOVE_UP): case EVT_KEY_FIRST(KEY_MOVE_DOWN): -#if defined(PCBX9D) || defined(PCBACT) - if (s_editMode == -1) { - chainMenu(event == EVT_KEY_FIRST(KEY_RIGHT) ? menuModelSetup : menuTabModel[DIM(menuTabModel)-1]); - return; - } -#endif if (s_copyMode) { int8_t next_ofs = (event == EVT_KEY_FIRST(KEY_MOVE_UP) ? s_copyTgtOfs+1 : s_copyTgtOfs-1); if (next_ofs == MAX_MODELS || next_ofs == -MAX_MODELS) @@ -585,7 +571,7 @@ void editName(uint8_t x, uint8_t y, char *name, uint8_t size, uint8_t event, uin } switch (event) { -#if defined(ROTARY_ENCODER_NAVIGATION) +#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBX9D) #if defined(PCBX9D) || defined(PCBACT) case EVT_KEY_BREAK(KEY_ENTER): #else @@ -611,7 +597,7 @@ void editName(uint8_t x, uint8_t y, char *name, uint8_t size, uint8_t event, uin if (cur0) md2->noExpo = !checkIncDecModel(event, !md2->noExpo, 0, 1); } else if (attr) { - m_posHorz = 0; + REPEAT_LAST_CURSOR_MOVE(); } break; } @@ -2343,7 +2329,8 @@ void menuModelExposAll(uint8_t event) void menuModelMixAll(uint8_t event) { -#if defined(PCBX9D) +#if 0 + // TODO if (event == EVT_KEY_LONG(KEY_PAGE)) { pushMenu(menuChannelsMonitor); killEvents(event); diff --git a/src/open9x.cpp b/src/open9x.cpp index 0b44264b7..8323a3de4 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -1217,7 +1217,11 @@ void backlightOn() inline void Splash() { lcd_clear(); +#if defined(PCBX9D) + lcd_bmp(0, 0, splash_lbm); +#else lcd_img(0, 0, splash_lbm, 0, 0); +#endif lcdRefresh(); } diff --git a/src/open9x.h b/src/open9x.h index 620e33502..44c368059 100644 --- a/src/open9x.h +++ b/src/open9x.h @@ -53,9 +53,11 @@ #endif #if defined(PCBX9D) -#define IF_PCBX9D(x) x, +#define IF_PCBX9D() true +#define CASE_PCBX9D(x) x, #else -#define IF_PCBX9D(x) +#define IF_PCBX9D() false +#define CASE_PCBX9D(x) #endif #if defined(CPUARM) @@ -148,7 +150,7 @@ #define IF_GVARS(x) #endif -#if defined(PCBX9D) || defined(PCBACT) || ROTARY_ENCODERS > 0 +#if defined(PCBACT) || ROTARY_ENCODERS > 0 #define ROTARY_ENCODER_NAVIGATION #endif @@ -1233,6 +1235,8 @@ char * strcat_zchar(char * dest, char * name, uint8_t size, const char *defaultN #define ZLEN(s) zlen(s, sizeof(s)) #endif +// TODO perhaps better in menus.h ? + #if defined(PCBX9D) || defined(PCBACT) #define KEY_MOVE_UP KEY_PLUS #define KEY_MOVE_DOWN KEY_MINUS diff --git a/src/pulses_arm.cpp b/src/pulses_arm.cpp index 9675dc8f1..a093d9dca 100644 --- a/src/pulses_arm.cpp +++ b/src/pulses_arm.cpp @@ -38,11 +38,17 @@ uint8_t s_pulses_paused = 0; uint8_t s_current_protocol = 255; uint8_t pxxFlag = 0 ; -uint16_t Pulses[18] = { 2000, 2200, 2400, 2600, 2800, 3000, 3200, 3400, 9000, 0, 0, 0,0,0,0,0,0, 0 } ; -volatile uint32_t Pulses_index = 0 ; // Modified in interrupt routine +uint16_t ppmStream[20] = { 2000, 2200, 2400, 2600, 2800, 3000, 3200, 3400, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ; +#if defined(PCBSKY9X) +volatile uint32_t Pulses_index = 0 ; // Modified in interrupt routine uint8_t Bit_pulses[64] ; // Likely more than we need uint8_t *Pulses2MHzptr ; +#else +uint16_t pxxStream[400] ; // Transisitions +uint16_t *pxxStreamPtr ; +uint16_t PxxValue ; +#endif // DSM2 control bits #define DSM2_CHANS 6 @@ -57,33 +63,34 @@ uint8_t Serial_bit_count; uint8_t Serial_byte_count ; void setupPulses(); -void setupPulsesPPM(); void setupPulsesDsm2(uint8_t chns); void setupPulsesPXX(); void startPulses() { + // TODO a single call to setupPulses() should be ok! +#if defined(PCBSKY9X) init_main_ppm(3000, 1) ; // Default for now, initial period 1.5 mS, output on +#else + init_main_ppm(); +#endif } void setupPulsesPPM() // Don't enable interrupts through here { -#if !defined(PCBX9D) && !defined(PCBACT) +#if defined(PCBSKY9X) register Pwm *pwmptr = PWM; #endif - // Now set up pulses - int16_t PPM_range = g_model.extendedLimits ? 640 * 2 : 512 * 2; //range of 0.7..1.7msec + uint32_t numCh = 8 + g_model.ppmNCH * 2; //Channels *2 - //Total frame length = 22.5msec - //each pulse is 0.7..1.7ms long with a 0.3ms stop tail - //The pulse ISR is 2mhz that's why everything is multiplied by 2 - uint16_t *ptr; - ptr = Pulses; - uint32_t p = 8 + g_model.ppmNCH * 2; //Channels *2 + // Total frame length = 22.5msec + // each pulse is 0.7..1.7ms long with a 0.3ms stop tail + // The pulse ISR is 2mhz that's why everything is multiplied by 2 + uint16_t * ptr = ppmStream; -#if !defined(PCBX9D) && !defined(PCBACT) +#if defined(PCBSKY9X) pwmptr->PWM_CH_NUM[3].PWM_CDTYUPD = (g_model.ppmDelay * 50 + 300) * 2; //Stoplen *2 if (g_model.pulsePol) pwmptr->PWM_CH_NUM[3].PWM_CMR |= 0x00000200 ; // CPOL @@ -93,28 +100,18 @@ void setupPulsesPPM() // Don't enable interrupts through here uint32_t rest = 22500u * 2; //Minimum Framelen=22.5 ms rest += (int32_t(g_model.ppmFrameLength)) * 1000; - for (uint32_t i = 0; i < p; i++) { //NUM_CHNOUT + for (uint32_t i = 0; i < numCh; i++) { //NUM_CHNOUT int16_t v = limit((int16_t)-PPM_range, g_chans512[i], (int16_t)PPM_range) + 2*PPM_CH_CENTER(i); - rest -= (v); + rest -= v; *ptr++ = v; /* as Pat MacKenzie suggests */ } *ptr = rest; *(ptr + 1) = 0; -} -void put_serial_bit( uint8_t bit ) -{ - Serial_byte >>= 1 ; - if ( bit & 1 ) - { - Serial_byte |= 0x80 ; - } - if ( ++Serial_bit_count >= 8 ) - { - *Pulses2MHzptr++ = Serial_byte ; - Serial_bit_count = 0 ; - Serial_byte_count += 1 ; - } +#if defined(PCBX9D) + TIM1->CCR2 = rest - 1000 ; // Update time + TIM1->CCR1 = (g_model.ppmDelay*50+300)*2 ; +#endif } const uint16_t CRCTable[]= @@ -163,6 +160,22 @@ void crc( uint8_t data ) PcmCrc=(PcmCrc>>8)^(CRCTable[(PcmCrc^data) & 0xFF]); } +#if defined(PCBSKY9X) +void put_serial_bit( uint8_t bit ) +{ + Serial_byte >>= 1 ; + if ( bit & 1 ) + { + Serial_byte |= 0x80 ; + } + if ( ++Serial_bit_count >= 8 ) + { + *Pulses2MHzptr++ = Serial_byte ; + Serial_bit_count = 0 ; + Serial_byte_count += 1 ; + } +} + // 8uS/bit 01 = 0, 001 = 1 void putPcmPart( uint8_t value ) { @@ -181,6 +194,23 @@ void putPcmFlush() put_serial_bit( 1 ) ; // Line idle level } } +#else +void putPcmPart( uint8_t value ) +{ + PxxValue += 18 ; // Output 1 for this time + *pxxStreamPtr++ = PxxValue ; + PxxValue += 14 ; + if ( value ) { + PxxValue += 16 ; + } + *pxxStreamPtr++ = PxxValue ; // Output 0 for this time +} + +void putPcmFlush() +{ + *pxxStreamPtr++ = 18010 ; // Past the 18000 of the ARR +} +#endif void putPcmBit( uint8_t bit ) { @@ -202,14 +232,11 @@ void putPcmBit( uint8_t bit ) void putPcmByte( uint8_t byte ) { - uint8_t i ; + crc(byte); - crc( byte ) ; - - for ( i = 0 ; i < 8 ; i += 1 ) - { - putPcmBit( byte & 0x80 ) ; - byte <<= 1 ; + for (uint8_t i=0; i<8; i++) { + putPcmBit(byte & 0x80); + byte <<= 1; } } @@ -229,23 +256,27 @@ void putPcmHead() void setupPulsesPXX() { - uint8_t i ; uint16_t chan ; uint16_t chan_1 ; +#if defined(PCBSKY9X) Serial_byte = 0 ; Serial_bit_count = 0 ; Serial_byte_count = 0 ; Pulses2MHzptr = Bit_pulses ; +#else + pxxStreamPtr = pxxStream ; + PxxValue = 0 ; +#endif + PcmCrc = 0 ; PcmOnesCount = 0 ; putPcmHead( ) ; // sync byte - putPcmByte( g_model.ppmNCH ) ; // putPcmByte( g_model.rxnum ) ; // + putPcmByte( g_model.ppmNCH ) ; // TODO should be RX NUM ??? putPcmByte( g_model.rxnum ) ; // putPcmByte( pxxFlag ) ; // First byte of flags putPcmByte( 0 ) ; // Second byte of flags pxxFlag = 0; // reset flag after send - for ( i = 0 ; i < 8 ; i += 2 ) // First 8 channels only - { // Next 8 channels would have 2048 added + for (uint32_t i=0; i<8; i+=2) { // First 8 channels only // Next 8 channels would have 2048 added chan = g_chans512[i] *3 / 4 + 2250 ; chan_1 = g_chans512[i+1] *3 / 4 + 2250 ; // if ( chan > 2047 ) @@ -267,6 +298,7 @@ void setupPulsesPXX() putPcmFlush() ; } +#if defined(DSM2) #define BITLEN_DSM2 (8*2) //125000 Baud => 8uS per bit void sendByteDsm2(uint8_t b) //max 10changes 0 10 10 10 10 1 { @@ -312,11 +344,7 @@ void setupPulsesDsm2(uint8_t chns) break; } } -#if defined(PCBX9D) || defined(PCBACT) - // TODO -#else if ((dsmDat[0] & BIND_BIT) && (!switchState(SW_TRN))) dsmDat[0] &= ~BIND_BIT; // clear bind bit if trainer not pulled -#endif // TODO find a way to do that, FUNC SWITCH: if ((!(dsmDat[0] & BIND_BIT)) && getSwitch(MAX_DRSWITCH-1, 0, 0)) dsmDat[0] |= RANGECHECK_BIT; // range check function // else dsmDat[0] &= ~RANGECHECK_BIT; @@ -337,8 +365,9 @@ void setupPulsesDsm2(uint8_t chns) put_serial_bit( 1 ) ; // 16 extra stop bits } } +#endif -#if !defined(SIMU) && !defined(PCBX9D) +#if defined(PCBSKY9X) && !defined(SIMU) extern "C" void PWM_IRQHandler(void) { register Pwm *pwmptr; @@ -397,8 +426,8 @@ extern "C" void PWM_IRQHandler(void) break; default: - pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = Pulses[Pulses_index++]; // Period in half uS - if (Pulses[Pulses_index] == 0) { + pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = ppmStream[Pulses_index++]; // Period in half uS + if (ppmStream[Pulses_index] == 0) { Pulses_index = 0; setupPulses(); } @@ -421,11 +450,13 @@ void setupPulses() switch (s_current_protocol) { // stop existing protocol hardware case PROTO_PXX: - disable_ssc(); + disable_pxx(); break; +#if defined(DSM2) case PROTO_DSM2: disable_ssc(); break; +#endif default: disable_main_ppm(); break; @@ -433,6 +464,16 @@ void setupPulses() s_current_protocol = required_protocol; +#if defined(PCBX9D) + switch (required_protocol) { + case PROTO_PXX: + init_pxx(); + break; + default: + init_main_ppm(); + break; + } +#elif defined(PCBSKY9X) switch (required_protocol) { // Start new protocol hardware here case PROTO_PXX: init_main_ppm(5000, 0); // Initial period 2.5 mS, output off @@ -449,6 +490,7 @@ void setupPulses() init_main_ppm(3000, 1); // Initial period 1.5 mS, output on break; } +#endif } // Set up output data here @@ -456,9 +498,11 @@ void setupPulses() case PROTO_PXX: setupPulsesPXX(); break; +#if defined(DSM2) case PROTO_DSM2: setupPulsesDsm2(6); break; +#endif default: setupPulsesPPM(); // Don't enable interrupts through here break ; diff --git a/src/pulses_arm.h b/src/pulses_arm.h index 07810ae82..fb2b16bc6 100644 --- a/src/pulses_arm.h +++ b/src/pulses_arm.h @@ -43,11 +43,4 @@ inline bool pulsesStarted() { return s_current_protocol != 255; } inline void pausePulses() { s_pulses_paused = true; } inline void resumePulses() { s_pulses_paused = false; } -void init_main_ppm(uint32_t period, uint32_t out_enable); -void disable_main_ppm(); - -void init_ssc(); -void disable_ssc(); - #endif -/*eof*/ diff --git a/src/sky9x/board_sky9x.h b/src/sky9x/board_sky9x.h index b8a9e7d23..0534b16cf 100644 --- a/src/sky9x/board_sky9x.h +++ b/src/sky9x/board_sky9x.h @@ -156,6 +156,13 @@ extern uint16_t sessionTimer; void setSticksGain(uint8_t gains); +// Pulses driver +void init_main_ppm(uint32_t period, uint32_t out_enable); +void disable_main_ppm(); +void init_ssc(); +void disable_ssc(); +#define disable_pxx() disable_ssc() + // SD driver #if !defined(SIMU) #define sdPoll10ms() diff --git a/src/splash_X9D.lbm b/src/splash_X9D.lbm index 1af62ae7d..ae06c63ac 100644 --- a/src/splash_X9D.lbm +++ b/src/splash_X9D.lbm @@ -1,9 +1,9 @@ 212,64, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, -0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xe3,0x03,0x03,0x03,0x03,0x1f,0xff,0xff,0xff,0x7f,0x3f,0x0f,0x07,0x03,0x03,0x83,0xe3,0xf3,0xfb,0xff,0x7f,0x1f,0x0f,0x07,0x07,0x83,0x83,0xc3,0xc3,0xc3,0x03,0x07,0x07,0x0f,0x1f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x03,0x03,0x03,0x03,0x83,0x83,0x83,0x83,0x83,0x03,0x07,0x07,0x07,0x0f,0x1f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x0f,0x07,0x03,0x01,0x81,0xe0,0xe0,0xf0,0xf0,0xf0,0xe0,0xc0,0x01,0x01,0x03,0x07,0x0f,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x80,0xe3,0xe1,0xf1,0xf0,0xf0,0xc0,0x00,0x00,0x01,0x03,0x0f,0xff,0xff,0xff,0x3f,0x0f,0x07,0x03,0x03,0x81,0xe0,0xe0,0xf0,0xf0,0xf0,0xe0,0xe0,0x01,0x01,0x03,0x07,0x1f,0xff,0xff,0xff,0xff,0x7f,0x03,0x00,0x00,0x00,0x00,0xc0,0xe3,0xf1,0xf0,0xf0,0x40,0x00,0x00,0x00,0x01,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x60,0x00,0x00,0x00,0x03,0x00,0x80,0xe0,0xf0,0xf8,0xfe,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x3c,0xff,0xff,0xff,0xff,0x3f,0x0f,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x3f,0x01,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x3e,0x7f,0xff,0xff,0xff,0x7f,0x7f,0x3f,0x07,0x00,0x00,0x00,0x80,0xf0,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x3c,0xff,0xff,0xff,0x7f,0x7f,0x3f,0x07,0x00,0x00,0x00,0xc0,0xf8,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x30,0x70,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x70,0x70,0xf0,0xf0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x3f,0x1f,0x0f,0x07,0x03,0x00,0xc0,0xe0,0xf0,0xe0,0x00,0x00,0x00,0x03,0x1f,0x7f,0xff,0xff,0xff,0xff,0xff,0x7f,0x7f,0xfc,0xf8,0xf8,0xf0,0xf0,0xf0,0x70,0x30,0x18,0x08,0x00,0x00,0x80,0xe0,0xf8,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x70,0x7f,0x7f,0x7f,0x7f,0x3f,0x1f,0x1f,0x07,0x00,0x00,0x80,0xc0,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf8,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf8,0xf8,0xfc,0xfe,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0xf8,0xf8,0xf8,0xf8,0xf0,0xf0,0xf0,0xf0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf8,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf8,0xf8,0xfc,0xff,0xff,0xff,0xff,0xf1,0xf0,0xf0,0xf0,0xf0,0xfc,0xff,0xff,0xff,0xff,0xff,0xf0,0xf0,0xf0,0xf0,0xf0,0xfc,0xf7,0xf3,0xf1,0xf0,0xf0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xf0,0xf0,0xf0,0xf0,0xf3,0xff,0xff,0xff,0xf8,0xf8,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf8,0xf8,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf8,0xf8,0xfc,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x18,0x18,0x18,0x18,0x18,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff,0x18,0xe0,0x00,0xff, +0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0x7f,0xff,0x00,0xff,0x7f,0x7f,0x00,0xff,0xff,0xff,0x80,0x7f,0x7f,0xff,0x80,0x7f,0x7f,0xff,0x80,0x7f,0x7f,0xff,0x80,0x7f,0x7f,0x7f,0x00,0xff,0x7f,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff, +0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0xff,0xff,0x00,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x3f,0xbf,0x40,0xff,0x7f,0x7f,0x40,0x3f,0x1f,0x1f,0x20,0x1f,0x1f,0x1f,0x10,0x0f,0x07,0x0f,0x00,0x0f,0x07,0x07,0x08,0x07,0x03,0x07,0x00,0x07,0x03,0x07,0x04,0x03,0x07,0x07,0x00,0x03,0x07,0x03,0x80,0x03,0x03,0x83,0x80,0x03,0x03,0x83,0x80,0x03,0x07,0x03,0x80,0x03,0x07,0x07,0x00,0x03,0x03,0x07,0x04,0x03,0x07,0x03,0x00,0x07,0x07,0x07,0x08,0x07,0x07,0x0f,0x00,0x0f,0x1f,0x1f,0x10,0x0f,0x1f,0x1f,0x20,0x1f,0x7f,0x7f,0x40,0x3f,0x7f,0xff,0x00,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x03,0xff,0xfc,0x03,0x03,0x03,0x00,0x03,0x03,0x03,0x00,0x03,0x03,0x03,0x00,0x03,0x03,0x03,0x00,0x03,0x03,0x03,0x00,0x03,0x03,0x43,0xc0,0x83,0x03,0x43,0xc0,0x83,0xc3,0x83,0x40,0x83,0x43,0x03,0x80,0x83,0x07,0x07,0x80,0x03,0x07,0x07,0x00,0x03,0x03,0x07,0x04,0x03,0x0f,0x07,0x00,0x07,0x07,0x07,0x00,0x0f,0x3f,0x0f,0x00,0x1f,0x3f,0xbf,0x80,0x7f,0x7f,0x7f,0x80,0xff,0xff,0xff,0x00,0xff,0x03,0x03,0x00,0x03,0x03,0x03,0x00,0x03,0x03,0x03,0x00,0x03,0x03,0x03,0x00,0x03,0x03,0x03,0x00,0x03,0x43,0x83,0x80,0x03,0x43,0x43,0x80,0x83,0xc3,0xc3,0x00,0x83,0x43,0x43,0x80,0x83,0x43,0x43,0x80,0x83,0x43,0x43,0x80,0x83,0x43,0x43,0x80,0x83,0x7f,0x7f,0x80,0xff,0x3f,0x3f,0xc0,0xff,0x7f,0x7f,0x80,0xff,0x03,0xff,0xfc,0x03,0x03,0x03,0x00,0x03,0x03,0x03,0x00,0x03,0x03,0x03,0x00,0x03,0x03,0x03,0x00,0x03,0x03,0x03,0x00,0x03,0x07,0x07,0x04,0x03,0x17,0x1f,0x00,0x0f,0x1f,0x3f,0x20,0x1f,0x7f,0xbf,0x00,0x7f,0xff,0xff,0x00,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x03,0x03,0x00,0x03,0x03,0x03,0x00,0x03,0x03,0x03,0x00,0x03,0x03,0x03,0x00,0x03,0x03,0x03,0x00,0x03,0x03,0xff,0xfc,0x03,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x03,0xff,0x00,0xff,0xff,0xfb,0xf8,0x07,0xf7,0xff,0xf0,0x0f,0xdf,0xdf,0xc0,0x3f,0xbf,0xbf,0x80,0x7f,0xff,0x7f,0x00,0xff,0x7f,0x7f,0x80,0xff,0x7d,0x7f,0x80,0xff,0x7d,0x7d,0x84,0xf9,0x61,0x71,0x88,0xf1,0x51,0x41,0x80,0xe1,0xc1,0x81,0x40,0x81,0x81,0x01,0x00,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x01,0x03,0x03,0x00,0x01,0x0b,0x03,0x00,0x07,0x0f,0x1f,0x10,0x0f,0x3f,0x3f,0x40,0x3f,0xff,0x7f,0x00,0xff,0xff,0xff,0x00,0xff,0x3f,0x7f,0x40,0x3f,0x3f,0x1f,0x10,0x0f,0x0b,0x0f,0x00,0x07,0x03,0x01,0x02,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x01,0x41,0xc1,0x00,0x81,0x41,0x61,0xa0,0xc1,0x69,0x79,0x80,0xf1,0x79,0x7d,0x84,0xf9,0x7f,0x7d,0x80,0xff,0x7f,0xff,0x80,0x7f,0x0f,0x3f,0x20,0x1f,0x0f,0x17,0x00,0x0f,0x07,0x03,0x00,0x07,0x01,0x07,0x00,0x03,0x01,0x03,0x02,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x80,0x00,0x40,0x40,0x80,0x80,0x40,0x40,0xc0,0x80,0x40,0x40,0x80,0xc0,0x40,0x40,0x80,0xc0,0x40,0x00,0x80,0xc0,0x00,0x40,0xc0,0x80,0x80,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x01,0x03,0x03,0x00,0x01,0x01,0x03,0x00,0x03,0x07,0x03,0x00,0x07,0x1f,0x07,0x00,0x0f,0x1f,0x3f,0x20,0x1f,0x7f,0xff,0x80,0x7f,0xff,0xff,0x00,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x80,0x00,0x00,0x00,0x80,0x81,0x81,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0x01,0x00,0x01,0x01,0x00,0x01,0x01,0x03,0x02,0x01,0x01,0x03,0x00,0x03,0x07,0x07,0x04,0x03,0x07,0x07,0x08,0x07,0x0f,0x0f,0x10,0x0f,0x1f,0x1f,0x20,0x1f,0x7f,0x7f,0x40,0x3f,0xff,0xff,0x00,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0xbf,0xbf,0x40,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x3f,0x3f,0xc0,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff,0x7f,0x7f,0x80,0xff, +0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0xbc,0xb6,0xcd,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xc4,0xb0,0x78,0x80,0x02,0xfe,0xfc,0x80,0x00,0xff,0xfe,0x81,0x01,0xfe,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0xc0,0x00,0xff,0xff,0x81,0x01,0xfe,0xff,0x80,0x00,0xff,0xfe,0x80,0x02,0xfe,0xfc,0xc4,0xc4,0xb0,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x3c,0xb6,0xcd,0x03,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x1f,0x00,0x00,0x1f,0x1f,0x00,0x00,0x1f,0x1f,0x00,0x00,0x0f,0x1f,0x00,0x01,0x06,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x40,0x00,0xc0,0x80,0xaf,0x37,0xd8,0xe0,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x07,0x07,0x00,0x08,0x08,0x07,0x07,0x08,0x08,0x07,0x07,0x08,0x08,0x07,0x07,0x08,0x08,0x07,0x07,0x08,0x08,0x07,0x07,0xf8,0xf0,0x0f,0x07,0x80,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x00,0xf8,0xf0,0x80,0x30,0xc0,0xe0,0x80,0x40,0xc0,0x80,0x00,0x00,0x80,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x01,0x03,0x0c,0x0c,0x03,0x07,0x00,0x10,0x1f,0x0f,0x00,0x60,0x1f,0x3f,0x00,0x80,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0xfc,0xff,0x00,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xfe,0xff,0xfe,0x01,0xfa,0xfa,0xf9,0x07,0xf4,0xf4,0xf3,0x0f,0xf0,0xe0,0xef,0x1f,0xc0,0x60,0x5f,0xbf,0x80,0x00,0xff,0xff,0x80,0x00,0xfe,0xff,0x86,0x04,0xfa,0xfc,0x8c,0x00,0xf0,0xf8,0xb0,0x20,0xd0,0xe0,0x80,0x60,0x80,0xc0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x80,0xc0,0xa0,0x20,0xd0,0xe0,0x80,0x00,0xf0,0xf8,0x82,0x06,0xf8,0xfc,0x80,0x01,0xff,0xfe,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x62,0xa0,0x41,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2d,0x12,0x12,0x0c,0x40,0x00,0x7f,0x3f,0x80,0x80,0x7f,0x7f,0x00,0x00,0x7f,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x80,0x7f,0xff,0x00,0x80,0xff,0x7f,0x00,0x40,0x3f,0x7f,0x00,0x21,0x3f,0x1e,0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xd0,0x61,0x80,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xfe,0xff,0x82,0x02,0xfc,0xfe,0x84,0x00,0xf8,0xfc,0x88,0x38,0xd0,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x06,0x06,0x0d,0x03,0xe0,0x20,0x1f,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff,0x80,0x00,0xff,0xff, +0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3e,0xc0,0xfe,0xff,0x3c,0xc8,0xf4,0xf8,0x28,0xc0,0xe0,0xf0,0x20,0xc0,0xe0,0xc0,0x40,0xc0,0xc0,0x80,0x80,0x80,0x00,0x80,0x81,0x80,0x00,0x00,0x03,0x00,0x03,0x01,0x03,0x00,0x07,0x03,0x07,0x04,0x03,0x07,0x07,0x00,0x0f,0x07,0x0f,0x08,0x0f,0x07,0x0f,0x08,0x0f,0x07,0x07,0x00,0x0f,0x07,0x07,0x04,0x03,0x07,0x03,0x00,0x07,0x03,0x03,0x00,0x03,0x01,0x81,0x80,0x00,0x00,0x80,0x80,0x00,0x80,0x40,0xc0,0xc0,0x80,0x20,0xc0,0xe0,0xc0,0x20,0xc0,0xe0,0xf0,0x3c,0xc8,0xf4,0xf8,0x3e,0xc0,0xfe,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0xc2,0xfe,0xfc,0x3e,0xc2,0xfe,0xfc,0x3e,0xc2,0xfe,0xfc,0x1e,0xe2,0xfe,0xfc,0x3e,0xc2,0xfe,0xfc,0x3e,0xc0,0xfc,0xfe,0x3e,0xc0,0xfe,0xfe,0x3e,0xc1,0xff,0xfe,0x3e,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x1f,0xe0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x0f,0x0f,0x00,0x1f,0x10,0x0f,0x0f,0x1f,0x10,0x0f,0x0f,0x1f,0x10,0x0f,0x0f,0x1f,0x10,0x0f,0x0f,0x1f,0x10,0x0f,0x0f,0x1f,0x10,0x0f,0x0f,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3e,0xc0,0xff,0xff,0x3c,0xc0,0xfc,0xfe,0x30,0xc4,0xfc,0xf8,0x30,0xd8,0xe0,0xf0,0x20,0xe0,0xe0,0xc0,0xc0,0x40,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x0f,0x0f,0xf0,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0x7f,0x7f,0x7f,0x80,0xff,0x3f,0xbf,0xc0,0x3f,0xff,0xdf,0xe0,0x27,0xc7,0xf7,0xf8,0x3b,0xc7,0xfb,0xfc,0x3e,0xc2,0xfc,0xff,0x1e,0xe0,0xff,0xff,0x3f,0x40,0x7f,0xff,0x1f,0x00,0x7f,0x3f,0x2f,0x10,0x0f,0x1f,0x0f,0x08,0x0f,0x07,0x07,0x06,0x01,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0xc0,0x80,0xc0,0x40,0xc0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x01,0x06,0x01,0x03,0x0f,0x08,0x0f,0x07,0x1f,0x30,0x0f,0x1f,0x5f,0x60,0x7f,0x3f,0xbf,0xc0,0x7f,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xfc,0xfe,0x38,0xc4,0xfc,0xf8,0x30,0xc0,0xf8,0xf0,0x20,0xd0,0xf0,0xe0,0x00,0xc0,0xe0,0xe0,0x20,0xc0,0xe0,0xc0,0x20,0xc0,0xc0,0xc0,0x00,0x80,0xc0,0xc0,0x00,0xc0,0x80,0xc0,0x00,0xc0,0x80,0xc0,0x00,0xc0,0xc0,0xc0,0x80,0x60,0xc0,0x40,0x40,0x60,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x40,0xc0,0xc0,0x80,0x20,0xf0,0xc0,0xe0,0x34,0xc0,0xf0,0xf8,0x3c,0xc1,0xfc,0xfe,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0xbf,0x40,0xff,0xff,0xbf,0x40,0x7f,0xff,0x3f,0x40,0xff,0x7f,0x7f,0x40,0x3f,0x7f,0x7f,0x00,0x3f,0x3f,0x0f,0x10,0x0f,0x1f,0x09,0x0a,0x01,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0xc0,0x80,0x00,0xc0,0xe8,0xf0,0x3d,0xc0,0xfe,0xff,0x3f,0xc0,0xff,0xff,0x1f,0xe0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xc0,0xff,0xff,0x1f,0xe0,0xff,0xff, +0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0x00,0x0f,0x1f,0xff,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xf0,0xfe,0xef,0x1f,0xe1,0xef,0xff,0x1e,0xe1,0xef,0xfe,0x1e,0xe1,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe1,0xee,0xfe,0x1e,0xe1,0xef,0xfe,0x1e,0xe1,0xef,0xff,0x1e,0xe0,0xee,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe1,0xef,0xff,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xf0,0xff,0xef,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe1,0xef,0xff,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe0,0xef,0xff,0x1f,0xe1,0xee,0xfe,0x1f,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe0,0xee,0xfe,0x1e,0xe1,0x0f,0x1f,0xfe,0xf0,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xc0,0xe0,0xff,0xff,0xe7,0xe7,0xf7,0xf8,0xff,0xf3,0xfb,0xfc,0xe1,0xff,0xfd,0xfe,0xe0,0xfe,0xff,0xff,0x40,0x7f,0xff,0xff,0xa0,0x3f,0x3f,0x7f,0x30,0x0f,0x3f,0x1f,0x10,0x0f,0x07,0x0f,0x00,0x07,0x07,0x03,0x00,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x80,0xe0,0xa0,0xc0,0xc0,0xf0,0xf0,0xf0,0xe0,0xe8,0xfc,0xf0,0xf8,0xf4,0xfa,0xfe,0xfc,0xe0,0xff,0xfe,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xfe,0xff,0xf4,0xf8,0xfe,0xfc,0xe4,0xf0,0xf0,0xf8,0xe0,0xc0,0xf0,0xe0,0x80,0x80,0x80,0xc0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x02,0x03,0x01,0x00,0x0f,0x03,0x07,0x08,0x17,0x1f,0x0f,0x40,0x3f,0x1f,0x3f,0xa0,0x7f,0xff,0x7f,0xf0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0x60,0x7f,0xff,0xff,0xe0,0x3f,0x3f,0x7f,0x00,0x1f,0x1f,0x3f,0x18,0x07,0x1f,0x0f,0x00,0x0b,0x07,0x07,0x02,0x03,0x01,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0xc0,0xc0,0x80,0xf0,0xc0,0xc0,0xe0,0xe0,0xe8,0xf0,0xf0,0xe0,0xfc,0xfc,0xf8,0xe2,0xfc,0xfc,0xfe,0xf0,0xfe,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,0x80,0xc0,0xc0,0xc0,0x80,0x80,0xc0,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xe0,0xd0,0xe0,0xe0,0xe0,0xf0,0xe0,0xe0,0xf0,0xe8,0xf0,0xf8,0xf0,0xe4,0xf8,0xfc,0xf8,0xe2,0xfc,0xfe,0xfc,0xe0,0xfe,0xfe,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe0,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, diff --git a/src/translations/es.h b/src/translations/es.h index 8a50ed197..9c1977f6b 100644 --- a/src/translations/es.h +++ b/src/translations/es.h @@ -18,13 +18,13 @@ #define TR_VRENAVIG "No REaREb" #define LEN_VBLMODE "\004" -#define TR_VBLMODE "OFF ""Keys""Stks""Dos ""ON\0" +#define TR_VBLMODE "OFF ""Keys""Stks""Both""ON\0" #define LEN_TRNMODE "\003" -#define TR_TRNMODE "off"" +="" :=" +#define TR_TRNMODE "OFF"" +="" :=" #define LEN_TRNCHN "\003" -#define TR_TRNCHN "ch1ch2ch3ch4" +#define TR_TRNCHN "CH1CH2CH3CH4" #define LEN_DATETIME "\005" #define TR_DATETIME "DATA:""HORA:" @@ -32,36 +32,43 @@ #define LEN_VLCD "\006" #define TR_VLCD "NormalOptrex" -#define LEN_VTRIMINC "\006" -#define TR_VTRIMINC "Expo ""ExFino""Fino ""Medio ""Grueso" +#define LEN_VTRIMINC TR("\006","\013") +#define TR_VTRIMINC TR("Expo ""ExFino""Fino ""Medio ""Grueso","Exponencial""Extra Fino ""Fino ""Medio ""Grueso ") #define LEN_RETA123 "\001" + #if defined(PCBGRUVIN9X) -#if ROTARY_ENCODERS > 2 -#define TR_RETA123 "RETA123abcd" + #if ROTARY_ENCODERS > 2 + #define TR_RETA123 "RETA123abcd" + #else + #define TR_RETA123 "RETA123ab" + #endif +#elif defined(PCBX9D) + #define TR_RETA123 "RETA12LR" #else -#define TR_RETA123 "RETA123ab" -#endif -#else -#define TR_RETA123 "RETA123" + #define TR_RETA123 "RETA123" #endif #define LEN_VPROTOS "\006" -#ifdef PXX -#define TR_PXX "PXX\0 " + +#if defined(PXX) + #define TR_PXX "PXX\0 " #else -#define TR_PXX "[PXX]\0" + #define TR_PXX "[PXX]\0" #endif -#ifdef DSM2 -#define TR_DSM2 "DSM2\0 " + +#if defined(DSM2) + #define TR_DSM2 "DSM2\0 " #else -#define TR_DSM2 "[DSM2]" + #define TR_DSM2 "[DSM2]" #endif -#ifdef IRPROTOS -#define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" + +#if defined(IRPROTOS) + #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" #else -#define TR_IRPROTOS + #define TR_IRPROTOS #endif + #define TR_VPROTOS "PPM\0 ""PPM16\0""PPMsim" TR_PXX TR_DSM2 TR_IRPROTOS #define LEN_POSNEG "\003" @@ -71,7 +78,7 @@ #define TR_VCURVEFUNC "---""x>0""x<0""|x|""f>0""f<0""|f|" #define LEN_VMLTPX "\010" -#define TR_VMLTPX "A\201adir ""Multipl.""Cambiar " +#define TR_VMLTPX "Agregar ""Multipl.""Cambiar " #define LEN_VMLTPX2 "\002" #define TR_VMLTPX2 "+=""*="":=" @@ -82,70 +89,85 @@ #define LEN_VCSWFUNC "\006" #define TR_VCSWFUNC "---\0 ""v1>x\0 ""v1x""|v1|v2\0""v1=v2""v1<=v2""d>=x\0 ""|d|>=x" -#define LEN_VFSWFUNC "\015" +#define LEN_VFSWFUNC "\013" + #if defined(VARIO) -#define TR_VVARIO "Vario " + #define TR_VVARIO "Vario\0 " #else -#define TR_VVARIO "[Vario] " + #define TR_VVARIO "[Vario]\0 " #endif + #if defined(AUDIO) -#define TR_SOUND "Oir Sonido\0 " + #define TR_SOUND "Oir sonido\0" #else -#define TR_SOUND "Beep\0 " + #define TR_SOUND "Beep\0 " #endif + #if defined(HAPTIC) -#define TR_HAPTIC "Vibrar\0 " + #define TR_HAPTIC "Tactil\0 " #else -#define TR_HAPTIC "[Vibrar]\0 " + #define TR_HAPTIC "[Tactil]\0 " #endif + #if defined(VOICE) -#define TR_PLAY_TRACK "Oir Pista \0 " -#define TR_PLAY_VALUE "Oir Valor \0 " + #define TR_PLAY_TRACK "Oir pista \0" + #define TR_PLAY_VALUE "Oir valor \0" #else -#define TR_PLAY_TRACK "[Oir Pista] \0" -#define TR_PLAY_VALUE "[Oir Valor] \0" + #define TR_PLAY_TRACK "[Oir pista]" + #define TR_PLAY_VALUE "[Oir Valor]" #endif -#if defined(PCBSKY9X) -#if defined(SDCARD) -#define TR_SDCLOGS "SDCARD Logo\0 " -#else -#define TR_SDCLOGS "[SDCARD Logo]" -#endif -#define TR_FSW_VOLUME "Volumen\0 " + +#if defined(CPUARM) + #if defined(SDCARD) + #define TR_SDCLOGS "SD Logs\0 " + #else + #define TR_SDCLOGS "[SD Logs]\0 " + #endif + #define TR_FSW_VOLUME "Volumen\0 " + #define TR_FSW_BG_MUSIC "BgMusica\0 ""BgMusica||\0" #elif defined(PCBGRUVIN9X) -#if defined(SDCARD) -#define TR_SDCLOGS "SDCARD Logo " + #if defined(SDCARD) + #define TR_SDCLOGS "SD Logs\0 " + #else + #define TR_SDCLOGS "[SD Logs]\0 " + #endif + #define TR_FSW_VOLUME + #define TR_FSW_BG_MUSIC #else -#define TR_SDCLOGS "[SDCARD Logo]" + #define TR_SDCLOGS + #define TR_FSW_VOLUME + #define TR_FSW_BG_MUSIC #endif -#define TR_FSW_VOLUME -#else -#define TR_SDCLOGS -#define TR_FSW_VOLUME +#ifdef GVARS + #define TR_FSW_ADJUST_GVAR "Ajuste \0 " +#else + #define TR_FSW_ADJUST_GVAR #endif + #ifdef DEBUG -#define TR_TEST "Test\0" + #define TR_FSW_TEST "Test\0" #else -#define TR_TEST + #define TR_FSW_TEST #endif -#define TR_VFSWFUNC "Seguro\0 ""Aprendiz \0 ""Ajuste Rapido" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "Panel Luz\0 " TR_TEST -#define LEN_VFSWRESET "\006" -#define TR_VFSWRESET "Reloj1""Reloj2""Todo ""Telem." +#define TR_VFSWFUNC "Seguro\0 ""Aprendiz\0 ""Inst. Trim\0" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "Panel luz\0 " TR_FSW_BG_MUSIC TR_FSW_ADJUST_GVAR TR_FSW_TEST + +#define LEN_VFSWRESET TR("\006","\012") +#define TR_VFSWRESET "Reloj 1 ""Reloj 2 ""Todo ""Telemetr." #define LEN_FUNCSOUNDS "\006" -#define TR_FUNCSOUNDS "Pito1 ""Pito2 ""Pito3 ""Avis1 ""Avis2 ""Pio ""Ring ""SciFi ""Robot ""Gorjeo""Tada ""Crickt""Sirena""Alarma""Ratata""Tictac" +#define TR_FUNCSOUNDS "Beep1 ""Beep2 ""Beep3 ""Aviso1""Aviso2""Cheep ""Ring ""SciFi ""Robot ""Gorjeo""Tada ""Crickt""Sirena""Alarma""Ratata""Tictac" #define LEN_VTELEMCHNS "\004" -#define TR_VTELEMCHNS "---\0""Tmr1""Tmr2""Tx\0 ""Rx\0 ""A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VVel""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Vel+""Dst+""Cur+""Acc\0""Hora" +#define TR_VTELEMCHNS "---\0""Tmr1""Tmr2""Tx\0 ""Rx\0 ""A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cur+""Acc\0""Hora" #ifdef IMPERIAL_UNITS -#define LENGTH_UNIT "ft\0" -#define SPEED_UNIT "kts" + #define LENGTH_UNIT "ft\0" + #define SPEED_UNIT "kts" #else -#define LENGTH_UNIT "m\0 " -#define SPEED_UNIT "kmh" + #define LENGTH_UNIT "m\0 " + #define SPEED_UNIT "kmh" #endif #define LEN_VTELEMUNIT "\003" @@ -160,7 +182,7 @@ #define TR_VALARMFN "<>" #define LEN_VTELPROTO "\007" -#define TR_VTELPROTO "Nada\0 ""Hub\0 ""WSHHigh""Halcyon" +#define TR_VTELPROTO "Nada\0 ""Hub\0 ""WSHHigh" #define LEN_VOLTSRC "\003" #define TR_VOLTSRC "---""A1\0""A2\0""FAS""Cel" @@ -176,50 +198,72 @@ #define LEN2_VTEMPLATES 13 #define LEN_VTEMPLATES "\015" -#define TR_VTEMPLATES "Elim Mezcla\0\0""Simple 4-CH \0""Anular Motor\0""V-Tail \0""Elevon\\Delta\0""eCCPM \0""Heli Setup \0""Servo Test \0" +#define TR_VTEMPLATES "Elim Mezcla\0\0""Simple 4-CH \0""Anular Motor\0""Cola en V \0""Elevon\\Delta\0""eCCPM \0""Heli Setup \0""Servo Test \0" #define LEN_VSWASHTYPE "\004" #define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90\0" #define LEN_VKEYS "\005" -#define TR_VKEYS " Menu""Salir""Abajo""Arrib""Drcha"" Izqda" +#define TR_VKEYS " Menu""Salir""Abajo""Arrib""Dcha.""Izqd." #define LEN_VRENCODERS "\003" #define TR_VRENCODERS "REa""REb" #define LEN_VSWITCHES "\003" -#if defined(PCBSKY9X) -#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""CS1""CS2""CS3""CS4""CS5""CS6""CS7""CS8""CS9""CSA""CSB""CSC""CSD""CSE""CSF""CSG""CSH""CSI""CSJ""CSK""CSL""CSM""CSN""CSO""CSP""CSQ""CSR""CSS""CST""CSU""CSV""CSW"" ON" + +#if 0 +#define TR_EXTRA_3POS_SWITCHES "ID3""ID4""ID5" #else -#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""CS1""CS2""CS3""CS4""CS5""CS6""CS7""CS8""CS9""CSA""CSB""CSC"" ON" +#define TR_EXTRA_3POS_SWITCHES +#endif + +#if defined(PCBX9D) + #define TR_VSWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301""CS1""CS2""CS3""CS4""CS5""CS6""CS7""CS8""CS9""CSA""CSB""CSC""CSD""CSE""CSF""CSG""CSH""CSI""CSJ""CSK""CSL""CSM""CSN""CSO""CSP""CSQ""CSR""CSS""CST""CSU""CSV""CSW"" ON" +#elif defined(PCBSKY9X) + #define TR_VSWITCHES "ACE""DIR""ELE""ID0""ID1""ID2" TR_EXTRA_3POS_SWITCHES "ALE""GEA""TRN""CS1""CS2""CS3""CS4""CS5""CS6""CS7""CS8""CS9""CSA""CSB""CSC""CSD""CSE""CSF""CSG""CSH""CSI""CSJ""CSK""CSL""CSM""CSN""CSO""CSP""CSQ""CSR""CSS""CST""CSU""CSV""CSW"" ON" +#else + #define TR_VSWITCHES "ACE""DIR""ELE""ID0""ID1""ID2" TR_EXTRA_3POS_SWITCHES "ALE""GEA""TRN""CS1""CS2""CS3""CS4""CS5""CS6""CS7""CS8""CS9""CSA""CSB""CSC"" ON" #endif #define LEN_VSRCRAW "\004" -#if defined(PCBSKY9X) -#define TR_ROTARY_ENCODERS_VSRCRAW "REa " -#elif defined(PCBGRUVIN9X) && ROTARY_ENCODERS > 2 -#define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb ""REc ""REd " -#elif defined(PCBGRUVIN9X) && ROTARY_ENCODERS <= 2 -#define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb " + +#if defined(PCBX9D) + #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""LS\0 ""RS\0 " + #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SD\0 ""SE\0 ""SF\0 ""SG\0 ""SH\0 " +#elif EXTRA_3POS == 1 + #define TR_POTS_VSRCRAW "3PO2""P2\0 ""P3\0 " + #define TR_SW_VSRCRAW "3PO1" +#elif EXTRA_3POS == 2 + #define TR_POTS_VSRCRAW "P1\0 ""3PO2""P3\0 " + #define TR_SW_VSRCRAW "3PO1" +#elif EXTRA_3POS == 3 + #define TR_POTS_VSRCRAW "P1\0 ""P2\0 ""3PO2" + #define TR_SW_VSRCRAW "3PO1" #else -#define TR_ROTARY_ENCODERS_VSRCRAW -#endif -#if defined(HELI) -#define TR_CYC_VSRCRAW "CYC1""CYC2""CYC3" -#else -#define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" + #define TR_POTS_VSRCRAW "P1\0 ""P2\0 ""P3\0 " + #define TR_SW_VSRCRAW "3POS" #endif -#if EXTRA_3POS == 1 - #define TR_VSRCRAW "Dir ""Ele ""Acel""Ail ""3PO2""P2 ""P3 " TR_ROTARY_ENCODERS_VSRCRAW "TrmR" "TrmE" "TrmT" "TrmA" "MAX ""3PO1" TR_CYC_VSRCRAW -#elif EXTRA_3POS == 2 - #define TR_VSRCRAW "Dir ""Ele ""Acel""Ail ""P1 ""3PO2""P3 " TR_ROTARY_ENCODERS_VSRCRAW "TrmR" "TrmE" "TrmT" "TrmA" "MAX ""3PO1" TR_CYC_VSRCRAW -#elif EXTRA_3POS == 3 - #define TR_VSRCRAW "Dir ""Ele ""Acel""Ail ""P1 ""P2 ""3PO2" TR_ROTARY_ENCODERS_VSRCRAW "TrmR" "TrmE" "TrmT" "TrmA" "MAX ""3PO1" TR_CYC_VSRCRAW +#if defined(PCBX9D) + #define TR_ROTARY_ENCODERS_VSRCRAW +#elif defined(PCBSKY9X) + #define TR_ROTARY_ENCODERS_VSRCRAW "REa " +#elif defined(PCBGRUVIN9X) && ROTARY_ENCODERS > 2 + #define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb ""REc ""REd " +#elif defined(PCBGRUVIN9X) && ROTARY_ENCODERS <= 2 + #define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb " #else - #define TR_VSRCRAW "Dir ""Ele ""Acel""Ail ""P1 ""P2 ""P3 " TR_ROTARY_ENCODERS_VSRCRAW "TrmR" "TrmE" "TrmT" "TrmA" "MAX ""3POS" TR_CYC_VSRCRAW + #define TR_ROTARY_ENCODERS_VSRCRAW #endif +#if defined(HELI) + #define TR_CYC_VSRCRAW "CYC1""CYC2""CYC3" +#else + #define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" +#endif + +#define TR_VSRCRAW "Dir\0""Ele\0""Ace\0""Ale\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS_VSRCRAW "TrmR" "TrmE" "TrmT" "TrmA" "MAX " TR_SW_VSRCRAW TR_CYC_VSRCRAW + #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "OFF""ABS""THs""TH%""THt" @@ -231,110 +275,126 @@ #define LEN_INDENT 1 #define INDENT_WIDTH (FW/2) +#if defined(PCBX9D) +#define TR_POPUPS "[INTRO]\010[SALIR]" +#else #define TR_POPUPS "[MENU]\010[SALIR]" +#endif #define OFS_EXIT 7 -#define TR_MENUWHENDONE CENTER"\006[MENU]AL FINAL" -#define TR_FREE "Libre" -#define TR_DELETEMODEL "BORRA MODELO" -#define TR_COPYINGMODEL "Copiando modelo." +#if defined(PCBX9D) + #define TR_MENUWHENDONE CENTER"\006[INTRO]AL ACABAR" +#else + #define TR_MENUWHENDONE CENTER"\006[MENU]AL ACABAR" +#endif +#define TR_FREE "libre" +#define TR_DELETEMODEL "BORRAR MODELO" +#define TR_COPYINGMODEL "Copiando modelo.." #define TR_MOVINGMODEL "Mover modelo..." #define TR_LOADINGMODEL "Cargar modelo..." #define TR_NAME "Nombre" -#define TR_TIMER "Reloj" -#define TR_ELIMITS "F.Limites" -#define TR_ETRIMS "F.Ajustes" -#define TR_TRIMINC "Modo Ajte" -#define TR_TTRACE "T-Rastro" -#define TR_TTRIM "T-Ajuste" -#define TR_BEEPCTR "Pitido en" -#define TR_PROTO INDENT"Protocolo" -#define TR_PPMFRAME "Medida PPM" +#define TR_MODELNAME "Nom.Modelo" +#define TR_PHASENAME "Nom. Fase" +#define TR_MIXNAME "Nom.Mezcla" +#define TR_EXPONAME "Nom. Expo" +#define TR_BITMAP "Imagen Modelo" +#define TR_TIMER TR("Reloj","Reloj ") +#define TR_ELIMITS TR("E.Limite","Ampliar Limites") +#define TR_ETRIMS TR("E.Trims","Ampliar Trims") +#define TR_TRIMINC "Trim Step" +#define TR_TTRACE TR("T-Source","Fuente Acelerad.") +#define TR_TTRIM TR("T-Trim","Trim Acelerad.") +#define TR_BEEPCTR TR("Ctr Beep","Center Beep") +#define TR_PROTO TR(INDENT"Proto",INDENT"Protocolo") +#define TR_PPMFRAME "Trama PPM" #define TR_MS "ms" -#define TR_SWITCH "Llave" -#define TR_TRIMS "Ajustes" -#define TR_FADEIN "Aparecer" -#define TR_FADEOUT "Ocultar" -#define TR_DEFAULT "(p/defecto)" -#define TR_CHECKTRIMS "\006Check\012Ajtes" -#define OFS_CHECKTRIMS (9*FW) -#define TR_SWASHTYPE "Ciclico Tipo" +#define TR_SWITCH "Interr" +#define TR_TRIMS "Trims" +#define TR_FADEIN "Inicio" +#define TR_FADEOUT "Final" +#define TR_DEFAULT "(defecto)" +#define TR_CHECKTRIMS CENTER"\006Check\012Trims" +#define OFS_CHECKTRIMS CENTER_OFS+(9*FW) +#define TR_SWASHTYPE "Tipo Ciclico" #define TR_COLLECTIVE "Colectivo" -#define TR_BITMAP "Bitmap" -#define TR_SWASHRING "Anillo Cvo" +#define TR_SWASHRING "Ciclico" #define TR_ELEDIRECTION "ELE Direccion" -#define TR_AILDIRECTION "ALE Direccion" +#define TR_AILDIRECTION "AIL Direccion" #define TR_COLDIRECTION "COL Direccion" -#define TR_MODE "Modo" +#define TR_MODE INDENT"Modo" #define TR_NOFREEEXPO "No free expo!" #define TR_NOFREEMIXER "No free mixer!" -#define TR_INSERTMIX "INSERT MIX " -#define TR_EDITMIX "EDIT MIX " +#define TR_INSERTMIX "INSERTAR MIX" +#define TR_EDITMIX "EDITAR MIX" #define TR_SOURCE INDENT"Fuente" #define TR_WEIGHT "Cantidad" #define TR_EXPO "Expo" #define TR_SIDE "Lado" -#define TR_DIFFERENTIAL "Diferir" +#define TR_DIFFERENTIAL "Diferenc" #define TR_OFFSET INDENT"Offset" -#define TR_TRIM "Ajte" +#define TR_TRIM "Trim" #define TR_DREX "DRex" #define TR_CURVE "Curva" #define TR_FPHASE "Fase" #define TR_MIXWARNING "Aviso" #define TR_OFF "OFF" -#define TR_MULTPX "Multipl" +#define TR_MULTPX "Multpx" #define TR_DELAYDOWN "Delay Dn" #define TR_DELAYUP "Delay Up" #define TR_SLOWDOWN "Slow Dn" #define TR_SLOWUP "Slow Up" -#define TR_MIXER "MEZCLA" +#define TR_MIXER "Mezclas" #define TR_CV "CV" #define TR_GV "GV" -#define TR_ACHANNEL "A\004Canal" -#define TR_RANGE INDENT"Range" +#define TR_ACHANNEL "A\004canal" +#define TR_RANGE INDENT"Alcance" #define TR_BAR "Bar" #define TR_ALARM INDENT"Alarma" #define TR_USRDATA "UsrData" #define TR_BLADES INDENT"Palas" -#define TR_SCREEN "Screen " -#define TR_SOUND_LABEL "Sound" -#define TR_LENGTH INDENT"Length" -#define TR_SPKRPITCH "Speaker Pitch" -#define TR_HAPTIC_LABEL "Haptic" -#define TR_HAPTICSTRENGTH INDENT"Strength" +#define TR_SCREEN "Pantalla" +#define TR_SOUND_LABEL "Sonido" +#define TR_LENGTH INDENT"Longitud" +#define TR_SPKRPITCH INDENT"Tono" +#define TR_HAPTIC_LABEL "Tactil" +#define TR_HAPTICSTRENGTH INDENT"Intensidad" #define TR_CONTRAST "Contraste" -#define TR_ALARMS_LABEL "Alarms" -#define TR_BATTERYWARNING "Aviso Bateria" -#define TR_INACTIVITYALARM "Alarma Reposo" -#define TR_RENAVIG "Navig RotEnc" -#define TR_THROTTLEREVERSE "Inversion Acel." -#define TR_BEEP_LABEL "Timer events" -#define TR_MINUTEBEEP "Pitido/minuto" -#define TR_BEEPCOUNTDOWN "Pitido ctaatras" -#define TR_BACKLIGHT_LABEL "Backlight" -#define TR_FLASHONBEEP "Flash al pitido" -#define TR_BLMODE "Modo P.Luminoso" -#define TR_BLDELAY "Tiempo de Luz" -#define TR_SPLASHSCREEN "Pantalla Inicio" -#define TR_THROTTLEWARNING "A Acel" -#define TR_SWITCHWARNING "A Llaves" -#define TR_MEMORYWARNING "Aviso Memoria" -#define TR_ALARMWARNING "Aviso de alarma" -#define TR_TIMEZONE "Zona Horaria" -#define TR_RXCHANNELORD "Rx Ord Canal" +#define TR_ALARMS_LABEL "Alarmas" +#define TR_BATTERYWARNING INDENT"Bateria Baja" +#define TR_INACTIVITYALARM INDENT"Inactividad" +#define TR_MEMORYWARNING INDENT"Memoria Baja" +#define TR_ALARMWARNING INDENT"Sin Sonido" +#define TR_RENAVIG "RotEnc Naveg" +#define TR_THROTTLEREVERSE TR("Acel Invert","Invertir Acel.") +#define TR_BEEP_LABEL "Pitos Reloj" +#define TR_MINUTEBEEP TR(INDENT"Minuto",INDENT"Cada minuto") +#define TR_BEEPCOUNTDOWN INDENT"Cuentaatras" +#define TR_BACKLIGHT_LABEL "Luz Fondo" +#define TR_BLDELAY INDENT"Duracion" +#define TR_SPLASHSCREEN "Ptalla. Inicio" +#define TR_THROTTLEWARNING TR("A-Aviso","Aviso Aceler.") +#define TR_SWITCHWARNING TR("I-Aviso","Aviso Intrrptor") +#define TR_TIMEZONE TR("Zona Hora","GPS Zona Horar.") +#define TR_RXCHANNELORD TR("Rx Channel Ord","Orden habitual canales") #define TR_SLAVE "Esclavo" -#define TR_MODESRC "modo\006% src" +#define TR_MODESRC "Modo\006% Fuente" #define TR_MULTIPLIER "Multiplicar" #define TR_CAL "Cal" -#define TR_VTRIM "Ajte- +" +#define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART CENTER"\007[MENU] INICIAR" -#define TR_SETMIDPOINT CENTER"\006AJUSTAR CENTROS" -#define TR_MOVESTICKSPOTS CENTER"\005MOVER STICK/POT" + +#if defined(PCBX9D) + #define TR_MENUTOSTART CENTER"\006[INTRO] EMPEZAR" +#else + #define TR_MENUTOSTART CENTER"\006[MENU] EMPEZAR" +#endif + +#define TR_SETMIDPOINT CENTER"\003STICKS AL CENTRO" +#define TR_MOVESTICKSPOTS CENTER"\006MOVER STICKS/POTS" #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_ACCEL "Acc:" -#define TR_NODATA "si" +#define TR_NODATA "SIN DATOS" #define TR_TM1TM2 "TM1\032TM2" #define TR_THRTHP "THR\032TH%" #define TR_TOT "TOT" @@ -342,126 +402,130 @@ #define STR_US (STR_TMR1LATMAXUS+12) #define TR_TMR1LATMINUS "Tmr1Lat min\006us" #define TR_TMR1JITTERUS "Tmr1 Jitter\006us" -#if defined(PCBSKY9X) -#define TR_TMIXMAXMS "Tmix max\012ms" + +#if defined(CPUARM) + #define TR_TMIXMAXMS "Tmix max\012ms" #else -#define TR_TMIXMAXMS "Tmix max\014ms" + #define TR_TMIXMAXMS "Tmix max\014ms" #endif + #define TR_T10MSUS "T10ms\016us" #define TR_FREESTACKMINB "Pila libre\010b" -#define TR_MENUTORESET "[MENU] Reinicia" +#define TR_MENUTORESET "[MENU] Resetea" #define TR_PPM "PPM" #define TR_CH "CH" #define TR_MODEL "MODELO" #define TR_FP "FP" #define TR_MIX "MIX" -#define TR_EEPROMLOWMEM "EEPROM Baja mem" +#define TR_EEPROMLOWMEM "EEPROM Mem. baja" #define TR_ALERT "\016ALERTA" -#define TR_PRESSANYKEYTOSKIP "Pulsa tecla x omitir" -#define TR_THROTTLENOTIDLE "Acelerador activado" -#define TR_ALARMSDISABLED "Alarmas Desact." -#define TR_PRESSANYKEY "\010Pulse una tecla" -#define TR_BADEEPROMDATA "Datos EEprom mal" -#define TR_EEPROMFORMATTING "Formateo EEPROM" -#define TR_EEPROMOVERFLOW "Desborde EEPROM" -#define TR_MENURADIOSETUP "AJUSTAR RADIO" +#define TR_PRESSANYKEYTOSKIP CENTER"Pulsar tecla omitir" +#define TR_THROTTLENOTIDLE CENTER"Aceler. Activado " +#define TR_ALARMSDISABLED CENTER"Alarmas Desact." +#define TR_PRESSANYKEY TR("\010Pulsa una tecla",CENTER"Pulsa una tecla") +#define TR_BADEEPROMDATA CENTER"Datos EEprom mal" +#define TR_EEPROMFORMATTING CENTER"Formateando EEPROM" +#define TR_EEPROMOVERFLOW CENTER"Desborde EEPROM" +#define TR_MENURADIOSETUP "CONFIGURACION" #define TR_MENUDATEANDTIME "FECHA Y HORA" -#define TR_MENUTRAINER "APRENDIZAJE" +#define TR_MENUTRAINER "APRENDIZ" #define TR_MENUVERSION "VERSION" -#define TR_MENUDIAG "DIAGNOST." -#define TR_MENUANA "ANALOGICOS" +#define TR_MENUDIAG "DIAG" +#define TR_MENUANA "ANAS" #define TR_MENUCALIBRATION "CALIBRACION" #define TR_TRIMS2OFFSETS "\006Trims => Offsets" -#define TR_MENUMODELSEL "MODELSEL" -#define TR_MENUSETUP "AJUSTE" -#define TR_MENUFLIGHTPHASE "FASE DE VUELO" -#define TR_MENUFLIGHTPHASES "FASES DE VUELO" -#define TR_MENUHELISETUP "AJUSTE HELI" -#if defined(PPM_CENTER_ADJUSTABLE) || defined(PPM_LIMITS_SYMETRICAL) // The right menu titles for the gurus ... -#define TR_MENUDREXPO "STICKS" -#define TR_MENULIMITS "SALIDAS" +#define TR_MENUMODELSEL TR("MODELSEL","SELECION MODELO") +#define TR_MENUSETUP TR("CONF.","CONF. MODELO") +#define TR_MENUFLIGHTPHASE "FASE VUELO" +#define TR_MENUFLIGHTPHASES "FASES VUELO" +#define TR_MENUHELISETUP "CONF.HELI" + +#if defined(PPM_CENTER_ADJUSTABLE) || defined(PPM_LIMITS_SYMETRICAL) // Los titulos del menu derecho para gurus ... + #define TR_MENUDREXPO "STICKS" + #define TR_MENULIMITS "SALIDAS" #else -#define TR_MENUDREXPO "DR/EXPO" -#define TR_MENULIMITS "LIMITES" + #define TR_MENUDREXPO "DR/EXPO" + #define TR_MENULIMITS "LIMITES" #endif + #define TR_MENUCURVES "CURVAS" #define TR_MENUCURVE "CURVA" -#define TR_MENUCUSTOMSWITCH "AJUSTES PROPIOS" -#define TR_MENUCUSTOMSWITCHES "AJUSTE PROPIO" -#define TR_MENUCUSTOMFUNC "AJUSTAR FUNCIONES" +#define TR_MENUCUSTOMSWITCH "AJTE.INTERUP." +#define TR_MENUCUSTOMSWITCHES "AJTE.INTERUPTS" +#define TR_MENUCUSTOMFUNC "AJTE.FUNCIONES" #define TR_MENUTELEMETRY "TELEMETRIA" #define TR_MENUTEMPLATES "PLANTILLAS" -#define TR_MENUSTAT "REGISTRO" -#define TR_MENUDEBUG "DEPURAR" -#define TR_RXNUM "RxNum" +#define TR_MENUSTAT "STATS" +#define TR_MENUDEBUG "DEBUG" +#define TR_RXNUM TR("RxNum","Numero Receptor") #define TR_SYNCMENU "Sync [MENU]" #define TR_BACK "Atras" -#define TR_LIMIT INDENT "Limit" +#define TR_LIMIT INDENT"Limite" #define TR_MINRSSI "Min Rssi" #define TR_LATITUDE "Latitud" #define TR_LONGITUDE "Longitud" -#define TR_GPSCOORD "Gps Coords" -#define TR_VARIO "Vario" +#define TR_GPSCOORD TR("GPS Coords","GPS formatear coords.") +#define TR_VARIO TR("Vario","Variometro") #define TR_SHUTDOWN "APAGANDO" -#define TR_BATT_CALIB "Bateria Calib" -#define TR_CURRENT_CALIB "Actual Calib" -#define TR_VOLTAGE "Voltaje" -#define TR_CURRENT "Actual" +#define TR_BATT_CALIB "Calib.bateria" +#define TR_CURRENT_CALIB "Calib.Actual" +#define TR_VOLTAGE INDENT"Voltaje" +#define TR_CURRENT INDENT"Actual" #define TR_SELECT_MODEL "Selec Modelo" #define TR_CREATE_MODEL "Crear Modelo" -#define TR_BACKUP_MODEL "Salvar Model" -#define TR_DELETE_MODEL "Borrar Model" -#define TR_RESTORE_MODEL "Recupr.Model" +#define TR_BACKUP_MODEL "Backup Modelo" +#define TR_DELETE_MODEL "Borrar Modelo" +#define TR_RESTORE_MODEL "Recuper Modelo" #define TR_SDCARD_ERROR "SDCARD Error" #define TR_NO_SDCARD "No SDCARD" -#define TR_INCOMPATIBLE "Inconpatible" +#define TR_INCOMPATIBLE "Incompatible" #define TR_WARNING "AVISO" #define TR_EEPROMWARN "EEPROM" -#define TR_THROTTLEWARN "ACELERAD" +#define TR_THROTTLEWARN "ACELERADOR" #define TR_ALARMSWARN "ALARMAS" -#define TR_SWITCHWARN "LLAVE" -#define TR_INVERT_THR "Invert acel?" -#define TR_SPEAKER_VOLUME "Volume Altavoz" +#define TR_SWITCHWARN "INTERPTOR" +#define TR_INVERT_THR TR("Invertir Acel?","Invertir Acel.?") +#define TR_SPEAKER_VOLUME INDENT"Volumen" #define TR_LCD "LCD" #define TR_BRIGHTNESS "Brillo" #define TR_CPU_TEMP "CPU Temp.\016>" #define TR_CPU_CURRENT "Actual\022>" -#define TR_CPU_MAH "Consum." +#define TR_CPU_MAH "Consumpt." #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB Temp. \016>" -#define TR_CAPAWARNING INDENT "Capacidad Low" -#define TR_TEMPWARNING INDENT "Temperat High" -#define TR_FUNC "Funcion" +#define TR_CAPAWARNING INDENT"Capacidad Baja" +#define TR_TEMPWARNING TR(INDENT"Temp. Alta",INDENT"Temperatura Alta") +#define TR_FUNC "Func" #define TR_V1 "V1" #define TR_V2 "V2" #define TR_DURATION "Duracion" -#define TR_DELAY "Retardo" -#define TR_SD_CARD "SD Card" -#define TR_SDHC_CARD "SD-HC Card" -#define TR_NO_SOUNDS_ON_SD "No Sonido en SD" -#define TR_NO_MODELS_ON_SD "No Modelos en SD" +#define TR_DELAY "Atraso" +#define TR_SD_CARD "SD CARD" +#define TR_SDHC_CARD "SD-HC CARD" +#define TR_NO_SOUNDS_ON_SD "Sin Sonidos en SD" +#define TR_NO_MODELS_ON_SD "Sin Modelos en SD" +#define TR_NO_BITMAPS_ON_SD "Sin imagenes en SD" #define TR_PLAY_FILE "Play" #define TR_DELETE_FILE "Borrar" #define TR_COPY_FILE "Copiar" -#define TR_RENAME_FILE "Renomb" -#define TR_REMOVED "borrado" -#define TR_SD_INFO "Infos" -#define TR_SD_FORMAT "Formateo" +#define TR_RENAME_FILE "Renombrar" +#define TR_REMOVED " borrado" +#define TR_SD_INFO "Informacion" +#define TR_SD_FORMAT "Formatear" #define TR_NA "N/A" -#define TR_HARDWARE "HARDWARE" -#define TR_FORMATTING "Formatting..." +#define TR_HARDWARE "COMPONENTES" +#define TR_FORMATTING "Formateando." #define TR_TEMP_CALIB "Temp. Calib" -#define TR_TIME "Time" +#define TR_TIME "Hora" #define TR_BAUDRATE "BT Baudrate" #define TR_SD_INFO_TITLE "SD INFO" -#define TR_SD_TYPE "Type:" -#define TR_SD_SPEED "Speed:" -#define TR_SD_SECTORS "Sectors:" -#define TR_NO_BITMAPS_ON_SD "No Bitmaps on SD" -#define TR_SD_SIZE "Size:" -#define TR_CURVE_TYPE "Type" +#define TR_SD_TYPE "Tipo:" +#define TR_SD_SPEED "Velocidad:" +#define TR_SD_SECTORS "Sectores:" +#define TR_SD_SIZE "Medida:" +#define TR_CURVE_TYPE "Tipo" #define TR_GLOBAL_VARS "Global Variables" -#define TR_OWN "Own" -#define TR_DATE "Date" +#define TR_OWN "Propio" +#define TR_DATE "Fecha" #define TR_ROTARY_ENCODER "R.Encs" -#define TR_CHANNELS_MONITOR "CHANNELS MONITOR" +#define TR_CHANNELS_MONITOR "MONITOR CANALES" diff --git a/src/x9d/board_x9d.cpp b/src/x9d/board_x9d.cpp index 9f1bdb7a1..cd2af9843 100644 --- a/src/x9d/board_x9d.cpp +++ b/src/x9d/board_x9d.cpp @@ -118,6 +118,16 @@ void usbMassStorage() { } +void watchdogInit() +{ + IWDG->KR = 0x5555 ; // Unlock registers + IWDG->PR = 3 ; // Divide by 32 => 1kHz clock + IWDG->KR = 0x5555 ; // Unlock registers + IWDG->RLR = 1500 ; // 1.5 seconds nominal + IWDG->KR = 0xAAAA ; // reload + IWDG->KR = 0xCCCC ; // start +} + // Starts TIMER at 200Hz, 5mS period void init5msTimer() { diff --git a/src/x9d/board_x9d.h b/src/x9d/board_x9d.h index deb00fc48..fd357876d 100644 --- a/src/x9d/board_x9d.h +++ b/src/x9d/board_x9d.h @@ -79,9 +79,6 @@ extern uint16_t sessionTimer; void delaysInit(); void debugInit(); -void init_trainer_ppm(); -void init_trainer_capture(); - #define DEBUG_UART_BAUDRATE 115200 void uartInit(void); @@ -102,6 +99,16 @@ void sdPoll10ms(); uint32_t sdMounted(); #endif +// Pulses driver +void init_main_ppm(); +void disable_main_ppm(); +void init_pxx(); +void disable_pxx(); + +// Trainer driver +void init_trainer_ppm(); +void init_trainer_capture(); + // Keys driver void keysInit(); uint32_t readKeys(); @@ -114,8 +121,9 @@ uint32_t readKeys(); // WDT driver #if !defined(SIMU) #define wdt_disable() -#define wdt_enable(x) -#define wdt_reset() +void watchdogInit(); +#define wdt_enable(x) watchdogInit() +#define wdt_reset() IWDG->KR = 0xAAAA #endif // ADC driver diff --git a/src/x9d/hal.h b/src/x9d/hal.h index 8dca4ebec..59b120c29 100644 --- a/src/x9d/hal.h +++ b/src/x9d/hal.h @@ -88,6 +88,8 @@ #define PIN_TR_PPM_OUT GPIO_Pin_9 //PC.09 // TODO merge these constants +#define PIN_PER_1 0x0010 +#define PIN_PORTA 0x0000 #define PIN_PER_3 0x030 // #define PIN_OS2 0x0000 #define PIN_OS25 0x2000 diff --git a/src/x9d/pulses_driver.cpp b/src/x9d/pulses_driver.cpp index 927e492fa..437e119ad 100644 --- a/src/x9d/pulses_driver.cpp +++ b/src/x9d/pulses_driver.cpp @@ -34,20 +34,143 @@ #include "../open9x.h" -void init_main_ppm( uint32_t period, uint32_t out_enable ) +// TODO not here! +void setupPulses(); +void setupPulsesPPM(); +void setupPulsesPXX(); + +uint16_t *ppmStreamPtr; +extern uint16_t ppmStream[20]; +extern uint16_t pxxStream[400] ; + +void init_pxx() { + // Timer1 + setupPulsesPXX() ; // TODO not here! + + RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN ; // Enable portA clock + configure_pins( 0x0100, PIN_PERIPHERAL | PIN_PORTA | PIN_PER_1 | PIN_OS25 | PIN_PUSHPULL ) ; + RCC->APB2ENR |= RCC_APB2ENR_TIM1EN ; // Enable clock + RCC->AHB1ENR |= RCC_AHB1ENR_DMA2EN ; // Enable DMA1 clock + + TIM1->CR1 &= ~TIM_CR1_CEN ; + TIM1->ARR = 18000 ; // 9mS + TIM1->CCR2 = 15000 ; // Update time + TIM1->PSC = (PERI2_FREQUENCY * TIMER_MULT_APB2) / 2000000 - 1 ; // 0.5uS from 30MHz + TIM1->CCER = TIM_CCER_CC1E | TIM_CCER_CC1P ; + TIM1->CR2 = TIM_CR2_OIS1 ; // O/P idle high + TIM1->BDTR = TIM_BDTR_MOE ; // Enable outputs + TIM1->CCR1 = pxxStream[0] ; + TIM1->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_0 ; // Force O/P high + TIM1->EGR = 1 ; // Restart + +// TIM1->SR &= ~TIM_SR_UIF ; // Clear flag +// TIM1->SR &= ~TIM_SR_CC2IF ; // Clear flag + TIM1->DIER |= TIM_DIER_CC1DE ; // Enable DMA on CC1 match + TIM1->DCR = 13 ; // DMA to CC1 + +// TIM1->CR1 = TIM_CR1_OPM ; // Just run once + // Enable the DMA channel here, DMA2 stream 1, channel 6 + DMA2_Stream1->CR &= ~DMA_SxCR_EN ; // Disable DMA + DMA2->LIFCR = DMA_LIFCR_CTCIF1 | DMA_LIFCR_CHTIF1 | DMA_LIFCR_CTEIF1 | DMA_LIFCR_CDMEIF1 | DMA_LIFCR_CFEIF1 ; // Write ones to clear bits + DMA2_Stream1->CR = DMA_SxCR_CHSEL_1 | DMA_SxCR_CHSEL_2 | DMA_SxCR_PL_0 | DMA_SxCR_MSIZE_0 + | DMA_SxCR_PSIZE_0 | DMA_SxCR_MINC | DMA_SxCR_DIR_0 | DMA_SxCR_PFCTRL ; + DMA2_Stream1->PAR = (uint32_t) &TIM1->DMAR ; + DMA2_Stream1->M0AR = (uint32_t) &pxxStream[1] ; +// DMA2_Stream1->FCR = 0x05 ; //DMA_SxFCR_DMDIS | DMA_SxFCR_FTH_0 ; +// DMA2_Stream1->NDTR = 100 ; + DMA2_Stream1->CR |= DMA_SxCR_EN ; // Enable DMA + + TIM1->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0 ; // Toggle CC1 o/p + TIM1->SR &= ~TIM_SR_CC2IF ; // Clear flag + TIM1->DIER |= TIM_DIER_CC2IE ; // Enable this interrupt + TIM1->CR1 |= TIM_CR1_CEN ; + NVIC_EnableIRQ(TIM1_CC_IRQn) ; +} + +void disable_pxx() +{ + NVIC_DisableIRQ(TIM1_CC_IRQn) ; + TIM1->DIER &= ~TIM_DIER_CC2IE ; + TIM1->CR1 &= ~TIM_CR1_CEN ; +} + + +// PPM output +// Timer 1, channel 1 on PA8 for prototype +// Pin is AF1 function for timer 1 +void init_main_ppm() +{ + // Timer1 + setupPulsesPPM() ; + ppmStreamPtr = ppmStream ; + + RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN ; // Enable portA clock + configure_pins( 0x0100, PIN_PERIPHERAL | PIN_PORTA | PIN_PER_1 | PIN_OS25 | PIN_PUSHPULL ) ; + RCC->APB2ENR |= RCC_APB2ENR_TIM1EN ; // Enable clock + + TIM1->ARR = *ppmStreamPtr++ ; + TIM1->PSC = (PERI2_FREQUENCY * TIMER_MULT_APB2) / 2000000 - 1 ; // 0.5uS from 30MHz + TIM1->CCER = TIM_CCER_CC1E ; + TIM1->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC2PE ; // PWM mode 1 + TIM1->CCR1 = 600 ; // 300 uS pulse + TIM1->BDTR = TIM_BDTR_MOE ; + TIM1->EGR = 1 ; + TIM1->DIER = TIM_DIER_UDE ; + + TIM1->SR &= ~TIM_SR_UIF ; // Clear flag + TIM1->SR &= ~TIM_SR_CC2IF ; // Clear flag + TIM1->DIER |= TIM_DIER_CC2IE ; + TIM1->DIER |= TIM_DIER_UIE ; + + TIM1->CR1 = TIM_CR1_CEN ; + NVIC_EnableIRQ(TIM1_CC_IRQn) ; + NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn) ; } void disable_main_ppm() { + NVIC_DisableIRQ(TIM1_CC_IRQn) ; + NVIC_DisableIRQ(TIM1_UP_TIM10_IRQn) ; + TIM1->DIER &= ~TIM_DIER_CC2IE & ~TIM_DIER_UIE ; + TIM1->CR1 &= ~TIM_CR1_CEN ; } -// Initialise the SSC to allow PXX output. -// TD is on PA17, peripheral A -void init_ssc() +extern "C" void TIM1_CC_IRQHandler() { + TIM1->DIER &= ~TIM_DIER_CC2IE ; // stop this interrupt + TIM1->SR &= ~TIM_SR_CC2IF ; // Clear flag + + setupPulses() ; + + if (s_current_protocol == PROTO_PPM) + { + ppmStreamPtr = ppmStream ; + + TIM1->DIER |= TIM_DIER_UDE ; + + TIM1->SR &= ~TIM_SR_UIF ; // Clear this flag + TIM1->DIER |= TIM_DIER_UIE ; // Enable this interrupt + } + else if (s_current_protocol == PROTO_PXX) + { + DMA2_Stream1->CR &= ~DMA_SxCR_EN ; // Disable DMA + DMA2->LIFCR = DMA_LIFCR_CTCIF1 | DMA_LIFCR_CHTIF1 | DMA_LIFCR_CTEIF1 | DMA_LIFCR_CDMEIF1 | DMA_LIFCR_CFEIF1 ; // Write ones to clear bits + DMA2_Stream1->M0AR = (uint32_t) &pxxStream[1] ; + DMA2_Stream1->CR |= DMA_SxCR_EN ; // Enable DMA + TIM1->CCR1 = pxxStream[0] ; + TIM1->DIER |= TIM_DIER_CC2IE ; // Enable this interrupt + } } -void disable_ssc() +extern "C" void TIM1_UP_TIM10_IRQHandler() { + TIM1->SR &= ~TIM_SR_UIF ; // Clear flag + + TIM1->ARR = *ppmStreamPtr++ ; + if ( *ppmStreamPtr == 0 ) + { + TIM1->SR &= ~TIM_SR_CC2IF ; // Clear this flag + TIM1->DIER |= TIM_DIER_CC2IE ; // Enable this interrupt + } } diff --git a/util/img2lbm.py b/util/img2lbm.py index 44dbbe25c..a47a4ac9f 100644 --- a/util/img2lbm.py +++ b/util/img2lbm.py @@ -34,6 +34,24 @@ elif sys.argv[3] == "img": value += 1 << z f.write("0x%02x," % value) f.write("\n") +elif sys.argv[3] == "bmp": + rows = 1 + colors = [] + if len(sys.argv) > 4: + rows = int(sys.argv[4]) + f.write("%d,%d,\n" % (width, height/rows)) + for y in range(0, height, 8): + for x in range(width): + values = [255, 255, 255, 255] + for z in range(8): + if y+z < height: + gray = Qt.qGray(image.pixel(x, y+z)) + for i in range(4): + if (gray & (1<<(4+i))): + values[i] -= 1 << z + for value in values: + f.write("0x%02x," % value) + f.write("\n") elif sys.argv[3] == "3x5": for y in range(0, height, 5): for x in range(width): @@ -80,6 +98,6 @@ elif sys.argv[3] == "10x14": if image.pixel(x, y+l+z) == Qt.qRgb(0, 0, 0): value += 1 << z f.write("0x%02x," % value) - f.write("\n") + f.write("\n") else: print "wrong argument", sys.argv[3]