Created
October 15, 2014 08:19
-
-
Save amolok/889b49debcfb49f7844e to your computer and use it in GitHub Desktop.
Столбоскоп
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// чтение шрифтов с флэшки | |
void mem_fnt_p_inc(void){ | |
if( (++nand_fnt_p.shift) >= (NAND_PAGE_SIZE + NAND_SPARE_SIZE)){ | |
nand_fnt_p.shift=0; | |
if( (++nand_fnt_p.page) >= NAND_BLOCK_SIZE){ | |
nand_fnt_p.page=0; | |
if( (++nand_fnt_p.block) >= NAND_MEMORY_SIZE){ | |
nand_fnt_p.block=0; | |
} | |
} | |
nand_finish_reading(); | |
nand_start_reading(&nand_fnt_p); | |
} | |
} | |
#define fnt_get_char(X) nand_read_char(X); mem_fnt_p_inc() | |
/* | |
* поиск шрифта в памяти, на входе номер шрифта (0, 1 -- шрифты в пограммной памяти, >1 -- шрифты на флэшке) | |
* ставит указатель nand_fnt_p на высоту шрифта | |
*/ | |
void fontSeek(unsigned char fnumber){ | |
unsigned long p; | |
if(fnumber > 1) | |
{ | |
unsigned char h,l; | |
nand_fnt_p.block = MEM_FONT_ADDR; | |
nand_fnt_p.page = 0; | |
nand_fnt_p.shift = 0; | |
// ищем шрифт в памяти | |
while(fnumber-- >2){ | |
nand_start_reading(&nand_fnt_p); | |
fnt_get_char(l); | |
fnt_get_char(h); | |
p = ((h)<<8) + l; | |
fnt_get_char(l); | |
fnt_get_char(h); | |
p = ((((h)<<8) + l)<<16)+p; | |
nand_finish_reading(); | |
mem_inc_shift(&nand_fnt_p, p-sizeof(unsigned long)); | |
// nand_fnt_p.shift += p-sizeof(unsigned long); | |
} | |
// пропускаем размер найденного шрифта | |
mem_inc_shift( &nand_fnt_p, sizeof(unsigned long)); | |
// nand_fnt_p.shift += sizeof(unsigned long); | |
} | |
} | |
/* считывает высоту шрифта в глобальную curent_h, ставит указатель nand_fnt_p на таблицу символов */ | |
void fontFillHeight(unsigned char fnumber){ | |
fontSeek(fnumber); | |
// читаем высоту шрифта | |
nand_start_reading(&nand_fnt_p); | |
fnt_get_char(curent_h); | |
nand_finish_reading(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
union TempUnion | |
{ | |
struct | |
{ | |
unsigned FIRST_TIME:1; | |
unsigned REFRESH:1; | |
unsigned ARC:1; | |
} ARC; | |
unsigned char TMP; | |
struct | |
{ | |
unsigned char TMP; | |
unsigned char INPUT[INPUT_CNT]; | |
unsigned char POS; | |
unsigned char FLG; | |
unsigned long V; | |
}STR; | |
struct | |
{ | |
unsigned char TMP; | |
unsigned char STR[INPUT_CNT]; | |
unsigned char POS; | |
unsigned char FLG; | |
unsigned long V; | |
signed char KEY; | |
unsigned char SCR; | |
}KBD; | |
unsigned char RES; | |
unsigned char NAKOP; | |
unsigned char CHUV; | |
unsigned char POROG; | |
signed char SBEG; | |
signed char MATERIAL; | |
unsigned short SPECIE; | |
unsigned char SPECIE_TYPE; | |
unsigned char Z_TIME; | |
unsigned long CRIT; | |
unsigned char RFID_ENABLED; | |
unsigned char USB_MODE; | |
struct | |
{ | |
struct | |
{ | |
unsigned char DD[3]; | |
unsigned char MM[3]; | |
unsigned char YY[3]; | |
} STR; | |
struct | |
{ | |
unsigned char DD; | |
unsigned char MM; | |
unsigned char YY; | |
} TMP; | |
unsigned char SELECTED; | |
} Date; | |
unsigned char DATE_STRING[9]; | |
struct | |
{ | |
struct | |
{ | |
unsigned char HH[3]; | |
unsigned char MM[3]; | |
unsigned char SS[3]; | |
} STR; | |
struct | |
{ | |
unsigned char HH; | |
unsigned char MM; | |
} TMP; | |
unsigned char SELECTED; | |
} Time; | |
unsigned char TIME_STRING[9]; | |
struct | |
{ | |
unsigned char POS; | |
unsigned char STR[5]; | |
unsigned char ALIGN; | |
unsigned char POS_X; | |
} POLOSA; | |
unsigned char DEV_SERIAL_STR[16]; | |
char VERSION_INFO[16]; | |
char MAT_CODE[16]; | |
char LicenseExpirationDate[11]; | |
struct | |
{ | |
signed char NUM; | |
T_PROFILE DATA; | |
unsigned char NAME[5]; | |
unsigned char LIST[PROFILES_CNT]; | |
} PROFILE; | |
unsigned char STRING[16]; | |
struct | |
{ | |
unsigned FIRST_TIME:1; | |
unsigned REFRESH:1; | |
unsigned MOVE:1; | |
unsigned CHANGE:1; | |
signed char POS; | |
unsigned char CUR; | |
unsigned char INPUT[6]; | |
unsigned char PREVI[6]; | |
} BM; | |
struct | |
{ | |
unsigned FIRST_TIME:1; | |
unsigned REFRESH:1; | |
unsigned MOVE:1; | |
unsigned CHANGE:1; | |
signed char POS; | |
unsigned char CUR; | |
unsigned long NUM; | |
unsigned char INPUT[21]; | |
union TmpTime{ | |
struct | |
{ | |
unsigned char HH[3]; | |
unsigned char MM[3]; | |
unsigned char SS[3]; | |
} Time; | |
unsigned char STR[9]; | |
}; | |
t_nand_pointers mp; | |
} PoleID; | |
struct | |
{ | |
unsigned FIRST_TIME:1; | |
unsigned REFRESH:1; | |
// unsigned MOVE:1; | |
// unsigned CHANGE:1; | |
// signed char POS; | |
T_MODE FLAGS; | |
} MODE; | |
}; | |
extern union TempUnion TMP; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// вызов отвечающей за экран функции происходит каждый цикл прибора | |
void screen_func(void) | |
{ | |
char c; | |
c=buttons_get_char(); | |
refreshScreen(); | |
if(!BATTERY_LEVEL_PRC)enterLowBattery(); | |
/* | |
#ifdef WINDOWS_EMULIATOR | |
mem_load_adjust_params(); // load initial setting from file | |
#endif | |
bgSetActiveCriteriaMask(OPTIONS.CR_MASK); | |
*/ | |
// if(c!=0) | |
switch(CURRENT_SCREEN) | |
{ | |
case SCR_START: | |
processMainScreen(c); | |
break; | |
case SCR_NUMBER: | |
enterNumber(c); | |
break; | |
case SCR_HEIGHT: | |
enterHeight(c); | |
break; | |
case SCR_POLE_LENGTH: | |
enterHeight(c); | |
break; | |
… | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// упрощённая Т9 | |
unsigned char getKitSymbol(unsigned char cur) // возвращает валидный символ из кассы символов по символу (проверка) | |
{ | |
// касса символов | |
// unsigned char kit[_kit_len] = {' ','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; | |
if(cur< ' ') return 'Z'; | |
if(cur> 'Z') return ' '; | |
if(cur=='@') return ' '; | |
if(cur=='!') return 'A'; | |
return cur; | |
} | |
unsigned char getKitSymbolFilter(unsigned char c) // возвращает валидный символ из кассы символов по символу (проверка) | |
{ | |
unsigned char cur = getKitSymbol(c); | |
return (cur == ' ') ? '-' : cur; | |
} | |
void processEnterBM(char key) // ввод текстового префикса для Бермуд | |
{ | |
if(TMP.BM.FIRST_TIME){ | |
TMP.BM.FIRST_TIME=0; | |
TMP.BM.CHANGE=0; | |
TMP.BM.POS=0; | |
fillBMCode(TMP.BM.INPUT); | |
// TMP.BM.PREVI=TMP.BM.INPUT; // TODO: заполнить из вообще предыдущего столба! бэкапить в .PREVI | |
TMP.BM.REFRESH=1; | |
} | |
if(TMP.BM.REFRESH){ | |
drawSetFont(FNT__B20); | |
// FillRect1(1,126,1,62); | |
// FillRect0(2,125,2,61); | |
// FillRect0(0,127,24,52); | |
FillRect0(0,127,0,52); | |
{ // [XX_XXX] <- POS | |
unsigned char i; | |
// FillRect1(_pos_w*TMP.BM.POS + _pos_x-1,_pos_w*TMP.BM.POS + _pos_x+_pos_w-2,_pos_y-1,_pos_y+_pos_h-1); // курсор | |
// FillRect1(10,120,24,48); | |
// FillRect1(_pos_x,_pos_x+_pos_w*6,_pos_y,_pos_y+_pos_h); | |
for(i=0;i<6;i++){ | |
if(i!=TMP.BM.POS) drawChar( (((TMP.BM.INPUT[i]==0) || (TMP.BM.INPUT[i]==' ')) ? '_' : TMP.BM.INPUT[i]), _pos_x + i*_pos_w -_pos_w/2, _pos_y ); | |
// if(i==TMP.BM.POS){ | |
// drawCharAlign( (TMP.BM.INPUT[i] ? TMP.BM.INPUT[i] : '_'), _pos_x + i*_pos_w, _pos_y ,1); | |
// }else{ | |
// drawCharAlign( (TMP.BM.INPUT[i] ? TMP.BM.INPUT[i] : '_'), _pos_x + i*_pos_w, _pos_y ,1); | |
// } | |
} | |
} | |
{ // A/[B]/C | |
TMP.BM.CUR=TMP.BM.INPUT[TMP.BM.POS]; | |
if(TMP.BM.CUR==0) TMP.BM.CUR='B'; | |
FillRect1(_pos_x + TMP.BM.POS*_pos_w -_pos_w/2 -2, _pos_x + TMP.BM.POS*_pos_w +_pos_w/2 -5, _pos_y -1 , _pos_y + _pos_h-7); | |
// drawCharAlign(0x1E, _pos_x + TMP.BM.POS*_pos_w-1, _pos_y-_pos_h*2 ,1); // ^ | |
// drawChar('^', _pos_x + TMP.BM.POS*_pos_w-1, _pos_y-_pos_h*2 ); // ^ | |
drawChar(getKitSymbolFilter(TMP.BM.CUR-1), _pos_x + TMP.BM.POS*_pos_w -_pos_w/2, 0 ); // ^ | |
drawCharInvert( (((TMP.BM.CUR==0) || (TMP.BM.CUR==' ')) ? '_' : TMP.BM.CUR), _pos_x + TMP.BM.POS*_pos_w -_pos_w/2, _pos_y ); | |
drawChar(getKitSymbolFilter(TMP.BM.CUR+1), _pos_x + TMP.BM.POS*_pos_w -_pos_w/2, _pos_y+_pos_h -5 ); // v | |
// drawCharAlign('v', _pos_x + TMP.BM.POS*_pos_w-1, _pos_y+_pos_h*2 ,1); // v | |
// drawCharAlign(0x1F, _pos_x + TMP.BM.POS*_pos_w-1, _pos_y+_pos_h*2 ,1); // v | |
} | |
TMP.BM.REFRESH=0; | |
lcdRefresh(); | |
return; | |
} | |
if((key == '{')||(key=='<')){ | |
TMP.BM.POS--; | |
TMP.BM.MOVE=1; | |
} | |
if((key == '}')||(key=='>')){ | |
TMP.BM.POS++; | |
TMP.BM.MOVE=1; | |
} | |
if(TMP.BM.MOVE){ | |
TMP.BM.MOVE=0; | |
TMP.BM.POS=(TMP.BM.POS% 6 + 6)%6; | |
TMP.BM.CUR=TMP.BM.INPUT[TMP.BM.POS]; | |
TMP.BM.CHANGE=0; | |
TMP.BM.REFRESH=1; | |
return; | |
} | |
if(key == '^'){ | |
TMP.BM.CUR--; | |
TMP.BM.CHANGE=1; | |
} | |
if(key == 'v'){ | |
TMP.BM.CUR++; | |
TMP.BM.CHANGE=1; | |
} | |
if((key >= '0')&&(key <= '9')){ | |
switch(key){ | |
case '7': | |
TMP.BM.CUR=' '; break; | |
case '8': | |
TMP.BM.CUR='A'; break; | |
case '9': | |
TMP.BM.CUR='D'; break; | |
case '4': | |
TMP.BM.CUR='G'; break; | |
case '5': | |
TMP.BM.CUR='J'; break; | |
case '6': | |
TMP.BM.CUR='M'; break; | |
case '1': | |
TMP.BM.CUR='P'; break; | |
case '2': | |
TMP.BM.CUR='T'; break; | |
case '3': | |
TMP.BM.CUR='W'; break; | |
case '0': | |
TMP.BM.CUR=' '; break; | |
} | |
TMP.BM.CHANGE=1; | |
} | |
if(TMP.BM.CHANGE){ | |
TMP.BM.CHANGE=0; | |
TMP.BM.CUR=getKitSymbol(TMP.BM.CUR); | |
TMP.BM.INPUT[TMP.BM.POS]=TMP.BM.CUR; | |
TMP.BM.REFRESH=1; | |
} | |
if(key == 'C'){ | |
setGlobalScreen(Z_SCR_NUMBER); | |
initInputString(); | |
// restoreValue(DOP_INFO.LongNumber); | |
return; | |
} | |
if(key=='E'){ | |
saveBMCode(); | |
/* fillBMCode(); // !!!DEBUG!!! | |
TMP.BM.REFRESH=1; | |
return; | |
*/ setGlobalScreen(Z_SCR_NUMBER); | |
initInputString(); | |
// restoreValue(DOP_INFO.LongNumber); | |
return; | |
} | |
if(key == '*'){ | |
/* unsigned char str[8]; | |
str[0]='B'; | |
str[1]='E'; | |
str[2]='R'; | |
str[3]='M'; | |
str[4]='U'; | |
str[5]='D'; | |
str[6]='ь'; | |
str[7]=0; | |
TMP.BM.REFRESH=1; | |
FillRect0(0,127,0,52); | |
drawSetFont(FNT__A23); | |
drawStringAlign(str,0,0,0); | |
*/ | |
return; | |
} | |
if(key)TMP.BM.REFRESH=1; | |
} | |
unsigned char enterT9key(unsigned char key, char cur){ | |
switch(key){ | |
case '7': | |
switch(cur){ | |
case '7': return '-'; | |
case ' ': return '-'; | |
case '-': return ' '; | |
default : return '-'; | |
}; | |
break; | |
case '8': | |
switch(cur){ | |
case '8': return 'A'; | |
case 'A': return 'B'; | |
case 'B': return 'C'; | |
case 'C': return 'A'; | |
default : return 'A'; | |
}; | |
break; | |
case '9': | |
switch(cur){ | |
case '9': return 'D'; | |
case 'D': return 'E'; | |
case 'E': return 'F'; | |
case 'F': return 'D'; | |
default : return 'D'; | |
}; | |
break; | |
case '4': | |
switch(cur){ | |
case '4': return 'G'; | |
case 'G': return 'H'; | |
case 'H': return 'I'; | |
case 'I': return 'G'; | |
default : return 'G'; | |
}; | |
break; | |
case '5': | |
switch(cur){ | |
case '5': return 'J'; | |
case 'J': return 'K'; | |
case 'K': return 'L'; | |
case 'L': return 'J'; | |
default : return 'J'; | |
}; | |
break; | |
case '6': | |
switch(cur){ | |
case '6': return 'M'; | |
case 'M': return 'N'; | |
case 'N': return 'O'; | |
case 'O': return 'M'; | |
default : return 'M'; | |
}; | |
break; | |
case '1': | |
switch(cur){ | |
case '1': return 'P'; | |
case 'P': return 'Q'; | |
case 'Q': return 'R'; | |
case 'R': return 'S'; | |
case 'S': return 'P'; | |
default : return 'P'; | |
}; | |
break; | |
case '2': | |
switch(cur){ | |
case '2': return 'T'; | |
case 'T': return 'U'; | |
case 'U': return 'V'; | |
case 'V': return 'T'; | |
default : return 'T'; | |
}; | |
break; | |
case '3': | |
switch(cur){ | |
case '3': return 'W'; | |
case 'W': return 'X'; | |
case 'X': return 'Y'; | |
case 'Y': return 'Z'; | |
case 'Z': return 'W'; | |
default : return 'W'; | |
}; | |
break; | |
case '0': | |
switch(cur){ | |
case '0': return ' '; | |
default : return ' '; | |
}; | |
break; | |
default: return key; | |
} | |
} | |
unsigned char enterT9one(unsigned char key, unsigned char cur){ | |
switch(key){ | |
case '0': return '0'; | |
case '7': return ' '; | |
case '8': return 'A'; | |
case '9': return 'D'; | |
case '4': return 'G'; | |
case '5': return 'J'; | |
case '6': return 'M'; | |
case '1': return 'P'; | |
case '2': return 'T'; | |
case '3': return 'W'; | |
default: return key; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// окультурил код, хотя бы переместив определения функций рядом с соответствующим номерами экранов | |
#define SCR_TEST 22 //тестирование, начальный экран | |
void processTest(char key); | |
void processZTest(char key); | |
#define SCR_START 0 //экран начала(измерить - настроить) // ACCESS - SETTINGS | |
void processMainScreen(char key); | |
#define SCR_NUMBER 1 //экран ввода номера опоры *KBD !ZIPMODE | |
void enterNumber(char key); | |
#define Z_SCR_NUMBER 90 // *KBD | |
void enterNumberZ(char key); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment