[X9D] New 4 bits logo (thanks to Michael Byrne

[X9D] Model COPY / MOVE operations fixed
[X9D] New navigation system
[X9D] Pulses driver
[X9D] Watch dog
[all] es translations
This commit is contained in:
bsongis
2013-02-04 19:43:27 +00:00
parent 3a1d0b1fd9
commit 04fb2bdc2b
20 changed files with 692 additions and 382 deletions
+1 -1
View File
@@ -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
+22
View File
@@ -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
+6
View File
@@ -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);
+1 -1
View File
@@ -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;
+5 -19
View File
@@ -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;
}
}
+46 -14
View File
@@ -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);
+18 -18
View File
@@ -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
+21 -34
View File
@@ -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 (cur<size-1) cur++;
break;
#if defined(ROTARY_ENCODER_NAVIGATION)
#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBX9D)
#if defined(ROTARY_ENCODERS)
case EVT_KEY_LONG(BTN_REa):
case EVT_KEY_LONG(BTN_REb):
@@ -664,7 +650,7 @@ void editSingleName(uint8_t x, uint8_t y, const pm_char *label, char *name, uint
enum menuModelSetupItems {
ITEM_MODEL_NAME,
IF_PCBX9D(ITEM_MODEL_BITMAP)
CASE_PCBX9D(ITEM_MODEL_BITMAP)
ITEM_MODEL_TIMER1,
ITEM_MODEL_TIMER2,
ITEM_MODEL_EXTENDED_LIMITS,
@@ -714,7 +700,7 @@ void menuModelSetup(uint8_t event)
s_rangecheck_mode = 0;
#endif
MENU(STR_MENUSETUP, menuTabModel, e_Model, ((protocol<=PROTO_PPMSIM||IS_DSM2_PROTOCOL(protocol)||IS_PXX_PROTOCOL(protocol)) ? 1+ITEM_MODEL_SETUP_MAX : ITEM_MODEL_SETUP_MAX), {0,0,IF_PCBX9D(0) FIELD_TIMER_MAX,FIELD_TIMER_MAX,0,0,0,0,0,0,0,NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1,1,2});
MENU(STR_MENUSETUP, menuTabModel, e_Model, ((protocol<=PROTO_PPMSIM||IS_DSM2_PROTOCOL(protocol)||IS_PXX_PROTOCOL(protocol)) ? 1+ITEM_MODEL_SETUP_MAX : ITEM_MODEL_SETUP_MAX), {0,0,CASE_PCBX9D(0) FIELD_TIMER_MAX,FIELD_TIMER_MAX,0,0,0,0,0,0,0,NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1,1,2});
uint8_t sub = m_posVert - 1;
int8_t editMode = s_editMode;
@@ -1981,7 +1967,7 @@ void menuModelMixOne(uint8_t event)
if (attr && m_posHorz==1 && editMode>0) 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);
+4
View File
@@ -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();
}
+7 -3
View File
@@ -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
+92 -48
View File
@@ -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 ;
-7
View File
@@ -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*/
+7
View File
@@ -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()
+8 -8
View File
@@ -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,
+282 -218
View File
@@ -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 ""v1<x\0 ""|v1|>x""|v1|<x""AND\0 ""OR\0 ""XOR\0 ""v1==v2""v1!=v2""v1>v2\0""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"
+10
View File
@@ -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()
{
+13 -5
View File
@@ -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
+2
View File
@@ -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
+128 -5
View File
@@ -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
}
}
+19 -1
View File
@@ -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]