464 lines
12 KiB
C
464 lines
12 KiB
C
#include "screen.h"
|
|
#include "struct.h"
|
|
#include "my.h"
|
|
|
|
extern int menuPointer;
|
|
|
|
extern int reload_flag;
|
|
extern char* kPrToDispl;
|
|
extern UserData_TypeDef currentData;
|
|
extern float kNormToDAC;
|
|
extern uint16_t correctedKu[13];
|
|
|
|
extern uint8_t iobuf[256];
|
|
|
|
|
|
|
|
const char STRING_DATCHIK[] = "Lfnxbr";
|
|
const char STRING_PKL[] = "gRk/";
|
|
|
|
const char STRING_VIHOD[] = "Ds[jl";
|
|
const char STRING_MV_MS2[] = "vD/vc2";
|
|
|
|
const char STRING_FVCH[] = "DX";
|
|
const char STRING_GC[] = "Uw";
|
|
|
|
const char STRING_FNCH[] = "YX";
|
|
const char STRING_KGC[] = "rUw";
|
|
|
|
const char STRING_PEREGRUZKA[] = "Gthtuheprf";
|
|
const char STRING_OBSHAJA_ZEMLJA[] = "JP";
|
|
const char STRING_PLAVAJUSHAJA_ZEMLA[] = "GP";
|
|
|
|
const char STRING_Ku0_1[] = "0~1";
|
|
const char STRING_Ku0_2[] = "0~2";
|
|
const char STRING_Ku0_5[] = "0~5";
|
|
const char STRING_Ku1[] = "1";
|
|
const char STRING_Ku2[] = "2";
|
|
const char STRING_Ku5[] = "5";
|
|
const char STRING_Ku10[] = "10";
|
|
const char STRING_Ku20[] = "20";
|
|
const char STRING_Ku50[] = "50";
|
|
const char STRING_Ku100[] = "100";
|
|
const char STRING_Ku200[] = "200";
|
|
const char STRING_Ku500[] = "500";
|
|
const char STRING_Ku1000[] = "1000";
|
|
|
|
|
|
|
|
const char *STRINGS_UNITS[]={"vc2","Gf","Y&"};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const char *STRINGS_OUTUNITS[] = {"0~0001vD/",
|
|
"0~0002vD/",
|
|
"0~0005vD/",
|
|
"0~001vD/", //3
|
|
"0~002vD/",
|
|
"0~005vD/",
|
|
"0~01vD/",//6
|
|
"0~02vD/",
|
|
"0~05vD/",
|
|
"0~1vD/",//9
|
|
"0~2vD/",
|
|
"0~5vD/",
|
|
"1vD/",//12
|
|
"2vD/",
|
|
"5vD/",
|
|
"10vD/",//15
|
|
"20vD/",
|
|
"50vD/",
|
|
"100vD/",//18
|
|
"200vD/",
|
|
"500vD/",
|
|
"1D/",//21
|
|
"2D/",
|
|
"5D/",
|
|
"10D/",//24
|
|
"20D/",
|
|
"50D/",
|
|
"100D/",//27
|
|
"200D/",
|
|
"500D/",
|
|
"1000D/", //30
|
|
};
|
|
|
|
const char STRING_Hp0_2[] = "0~2";
|
|
const char STRING_Hp1[] = "1";
|
|
const char STRING_Hp2[] = "2";
|
|
const char STRING_Hp10[] = "10";
|
|
|
|
/////Çíà÷åíèÿ LP â Êãö
|
|
const char STRING_Lp100[] = "0~1";
|
|
const char STRING_Lp300[] = "0~3";
|
|
const char STRING_Lp1000[] = "1";
|
|
const char STRING_Lp3000[] = "3";
|
|
const char STRING_Lp10000[] = "10";
|
|
const char STRING_Lp30000[] = "30";
|
|
const char STRING_Lp100000[] = "100";
|
|
|
|
///ñïåöèàëüíûå ñòðîêè äëÿ çàâîäñêîãî ìåíþ
|
|
|
|
const char STRING_KORREKCIA_USILENIA[] = "Rjhhtrwbz ecbktybz";
|
|
const char STRING_KASKAD[] = "Rfcrfl";
|
|
const char STRING_ZNACHENIE_DAC[] = "<fpjdsq WFG";
|
|
const char STRING_SOHRANIT_IZMENENIYA[] = "CJ{HFYBNM BPVTYTYBZ";
|
|
const char *STRINGS_KU[]={"0~1","0~2","0~5","1","2","5","10","20","50","100","200","500","1000"};
|
|
|
|
//char* outUnit; // åäèíèöû âûõîäà
|
|
const char* kuToDispl;
|
|
const char* fvchTODisp;
|
|
const char* fnchTODisp;
|
|
const char* plavZemlToDisp;
|
|
int OffsetKuDisplay =0;
|
|
|
|
|
|
|
|
|
|
void setOffsetKuDisplay(void){ // òàê ýòà øëÿïà âûñòàâëÿåò ñìåùåíèå ïî ìàññèâó ñòðîê äëÿ îòîáðàæåíèÿ ñîãëàñíî íîðìèðîâàíèþ
|
|
if (currentData.SENS>=0.0001&¤tData.SENS<0.001) {OffsetKuDisplay=0; kNormToDAC=currentData.SENS*10000;} // òàêèå çíà÷åíèÿ íå äîïóñòèìû
|
|
else if (currentData.SENS>=0.001&¤tData.SENS<0.01){OffsetKuDisplay=0; kNormToDAC=currentData.SENS*1000;}
|
|
else if (currentData.SENS>=0.01&¤tData.SENS<0.1){OffsetKuDisplay=3; kNormToDAC=currentData.SENS*100;}
|
|
else if (currentData.SENS>=0.1&¤tData.SENS<1){OffsetKuDisplay=6; kNormToDAC=currentData.SENS*10;}
|
|
else if (currentData.SENS>=1&¤tData.SENS<10){OffsetKuDisplay=9; kNormToDAC=currentData.SENS/1;}
|
|
else if (currentData.SENS>=10&¤tData.SENS<100){OffsetKuDisplay=12; kNormToDAC=currentData.SENS/10;}
|
|
else if (currentData.SENS>=100&¤tData.SENS<1000){OffsetKuDisplay=15; kNormToDAC=currentData.SENS/100;}
|
|
else if (currentData.SENS<=1000){OffsetKuDisplay=18; kNormToDAC=currentData.SENS/1000;}
|
|
|
|
}
|
|
|
|
|
|
void screenDraw(void)
|
|
{
|
|
|
|
///////ïðîâåðÿåì ÊÓ/çíà÷åíèå âûõîäà. ïðèñâàåâàåì óêàçàòåëþ ñîîòâåòñâóþùåå çíà÷åíèå
|
|
switch(currentData.IKU){ ///ñäåëàòü èíëàéí ôóíêöèþ
|
|
case Ku0_1:
|
|
kuToDispl=STRING_Ku0_1;
|
|
break;
|
|
case Ku0_2:
|
|
kuToDispl=STRING_Ku0_2;
|
|
break;
|
|
case Ku0_5:
|
|
kuToDispl=STRING_Ku0_5;
|
|
break;
|
|
case Ku1:
|
|
kuToDispl=STRING_Ku1;
|
|
break;
|
|
case Ku2:
|
|
kuToDispl=STRING_Ku2;
|
|
break;
|
|
case Ku5:
|
|
kuToDispl=STRING_Ku5;
|
|
break;
|
|
case Ku10:
|
|
kuToDispl=STRING_Ku10;
|
|
break;
|
|
case Ku20:
|
|
kuToDispl=STRING_Ku20;
|
|
break;
|
|
case Ku50:
|
|
kuToDispl=STRING_Ku50;
|
|
break;
|
|
case Ku100:
|
|
kuToDispl=STRING_Ku100;
|
|
break;
|
|
case Ku200:
|
|
kuToDispl=STRING_Ku200;
|
|
break;
|
|
case Ku500:
|
|
kuToDispl=STRING_Ku500;
|
|
break;
|
|
case Ku1000:
|
|
kuToDispl=STRING_Ku1000;
|
|
break;
|
|
}
|
|
|
|
|
|
|
|
|
|
///////ïðîâåðÿåì ÔÂ× âûõîäà. ïðèñâàåâàåì óêàçàòåëþ ñîîòâåòñâóþùåå çíà÷åíèå
|
|
switch(currentData.IFV){
|
|
case Hp0_2:
|
|
fvchTODisp=STRING_Hp0_2;
|
|
break;
|
|
case Hp1:
|
|
fvchTODisp=STRING_Hp1;
|
|
break;
|
|
case Hp2:
|
|
fvchTODisp=STRING_Hp2;
|
|
break;
|
|
case Hp10:
|
|
fvchTODisp=STRING_Hp10;
|
|
break;
|
|
}
|
|
|
|
|
|
switch(currentData.IFN){
|
|
case Lp100:
|
|
fnchTODisp=STRING_Lp100;
|
|
break;
|
|
case Lp300:
|
|
fnchTODisp=STRING_Lp300;
|
|
break;
|
|
case Lp1000:
|
|
fnchTODisp=STRING_Lp1000;
|
|
break;
|
|
case Lp3000:
|
|
fnchTODisp=STRING_Lp3000;
|
|
break;
|
|
case Lp10000:
|
|
fnchTODisp=STRING_Lp10000;
|
|
break;
|
|
case Lp30000:
|
|
fnchTODisp=STRING_Lp30000;
|
|
break;
|
|
case Lp100000:
|
|
fnchTODisp=STRING_Lp100000;
|
|
break;
|
|
}
|
|
|
|
|
|
switch(currentData.IPZ){
|
|
case 0:
|
|
plavZemlToDisp=STRING_OBSHAJA_ZEMLJA;
|
|
break;
|
|
case 1:
|
|
plavZemlToDisp=STRING_PLAVAJUSHAJA_ZEMLA;
|
|
break;
|
|
}
|
|
|
|
////ðàññòàâëÿåì íà äèñïëåå íàäïèñè
|
|
|
|
FontSet(Segoe_UI_Rus_10);
|
|
OLED_DrawStr(STRING_DATCHIK, 1, 10, TEXT);
|
|
|
|
if(menuPointer==KPR0) DrawSome(currentData.IK0, 40, 10, CURSOR);
|
|
else DrawSome(currentData.IK0, 40, 10, TEXT);
|
|
|
|
if(menuPointer==KPR1) DrawSome(currentData.IK1, 47, 10, CURSOR);
|
|
else DrawSome(currentData.IK1, 47, 10, TEXT);
|
|
|
|
if(menuPointer==KPR2) DrawSome(currentData.IK2, 54, 10, CURSOR);
|
|
else DrawSome(currentData.IK2, 54, 10, TEXT);
|
|
|
|
if(menuPointer==KPR3) DrawSome(currentData.IK3, 61, 10, CURSOR);
|
|
else DrawSome(currentData.IK3, 61, 10, TEXT);
|
|
|
|
if(menuPointer==KPR4) DrawSome(currentData.IK4, 68, 10, CURSOR);
|
|
else DrawSome(currentData.IK4, 68, 10, TEXT);
|
|
|
|
if(menuPointer==KPR5) DrawSome(currentData.IK5, 75, 10, CURSOR);
|
|
else DrawSome(currentData.IK5, 75, 10, TEXT);
|
|
|
|
if(menuPointer==UNITSELECT){
|
|
OLED_DrawStr(STRING_PKL, 85, 10, CURSOR);
|
|
OLED_DrawStr(STRINGS_UNITS[currentData.UNIT], 109, 10, CURSOR);
|
|
} else {
|
|
OLED_DrawStr(STRING_PKL, 85, 10, TEXT);
|
|
OLED_DrawStr(STRINGS_UNITS[currentData.UNIT], 109, 10, TEXT);
|
|
}
|
|
////////////////////////////
|
|
|
|
/* Ñòàòè÷íàÿ ñòðîêà âûõîäà
|
|
OLED_DrawStr(STRING_VIHOD, 1, 24, TEXT);
|
|
if(menuPointer==OUT)OLED_DrawStr(kuToDispl, 40, 24, CURSOR);
|
|
else OLED_DrawStr(kuToDispl, 40, 24, TEXT);
|
|
OLED_DrawStr(STRING_MV_MS2, 67, 24, TEXT);
|
|
////////////////////////////
|
|
*/
|
|
setOffsetKuDisplay(); //îïðåäåëÿåì óñòàíàâëèâàåì åäèíèöû âûõîäà //todo: ñ÷èòàòü ÷àñòî ôëîàòû âðåäíî
|
|
|
|
OLED_DrawStr(STRING_VIHOD, 1, 24, TEXT);
|
|
|
|
|
|
/// äåëàåì íîâóþ ñòðîêó èç STRINGS_OUTUNITS + units
|
|
|
|
char *result = malloc(strlen(STRINGS_OUTUNITS[currentData.IKU+OffsetKuDisplay]) + strlen(STRINGS_UNITS[currentData.UNIT]) + 1); // +1 for the null-terminator
|
|
// in real code you would check for errors in malloc here
|
|
strcpy(result, STRINGS_OUTUNITS[currentData.IKU+OffsetKuDisplay]);
|
|
strcat(result, STRINGS_UNITS[currentData.UNIT]);
|
|
if(menuPointer==OUT)OLED_DrawStr((char *)result, 40, 24, CURSOR);
|
|
else OLED_DrawStr((char *)result, 40, 24, TEXT);//todo: STRINGS_OUTUNITS è units ïîëó÷àåòñÿ ìóòíî
|
|
free(result); /// îñâîáîäèë ïàìÿòü
|
|
|
|
OLED_DrawStr(STRING_FVCH, 2, 36, TEXT);
|
|
if(menuPointer==FVCH) OLED_DrawStr(fvchTODisp, 19, 36, CURSOR);
|
|
else OLED_DrawStr(fvchTODisp, 19, 36, TEXT);
|
|
OLED_DrawStr(STRING_GC, 35, 36, TEXT);
|
|
|
|
|
|
//////////////
|
|
OLED_DrawStr((char *)STRING_FNCH, 63, 36, TEXT);
|
|
if(menuPointer==FNCH) OLED_DrawStr(fnchTODisp, 83, 36, CURSOR);
|
|
else OLED_DrawStr(fnchTODisp, 83, 36, TEXT);
|
|
OLED_DrawStr((char *)STRING_KGC, 103, 36, TEXT);
|
|
//////////////
|
|
|
|
if(menuPointer==GROUND) OLED_DrawStr(plavZemlToDisp, 20, 48, CURSOR);
|
|
else OLED_DrawStr(plavZemlToDisp, 20, 48, TEXT);
|
|
|
|
if(currentData.OVERLOAD){OLED_DrawStr(STRING_PEREGRUZKA, 50, 48, CURSOR);}
|
|
|
|
/* uncomment to debug RS-232
|
|
OLED_DrawNum(iobuf[0], 6, 48, TEXT);
|
|
OLED_DrawNum(iobuf[1], 20, 48, TEXT);
|
|
OLED_DrawNum(iobuf[2], 34, 48, TEXT);
|
|
OLED_DrawNum(iobuf[3], 48, 48, TEXT);
|
|
OLED_DrawNum(iobuf[4], 62, 48, TEXT);
|
|
OLED_DrawNum(iobuf[5], 76, 48, TEXT);
|
|
OLED_DrawNum(iobuf[6], 90, 48, TEXT);
|
|
OLED_DrawNum(iobuf[7], 104, 48, TEXT);
|
|
*/
|
|
/*
|
|
if((menuPointer==GROUND)&&(set.plavZeml==0)) OLED_DrawStr(STRING_OBSHAJA_ZEMLJA, CENTER, 48, CURSOR);
|
|
else if(set.plavZeml==0) OLED_DrawStr(STRING_OBSHAJA_ZEMLJA, CENTER, 48, TEXT);
|
|
if((menuPointer==GROUND)&&(set.plavZeml==1)) OLED_DrawStr(STRING_PLAVAJUSHAJA_ZEMLA, CENTER, 48, CURSOR);
|
|
else if(set.plavZeml==1) OLED_DrawStr(STRING_PLAVAJUSHAJA_ZEMLA, CENTER, 48, TEXT);
|
|
*/
|
|
} // end screenDraw
|
|
|
|
|
|
void screenDrawCallibration(void)
|
|
{
|
|
|
|
///////ïðîâåðÿåì ÊÓ/çíà÷åíèå âûõîäà. ïðèñâàåâàåì óêàçàòåëþ ñîîòâåòñâóþùåå çíà÷åíèå
|
|
switch(currentData.IKU){ ///ñäåëàòü èíëàéí ôóíêöèþ
|
|
case Ku0_1:
|
|
kuToDispl=STRING_Ku0_1;
|
|
break;
|
|
case Ku0_2:
|
|
kuToDispl=STRING_Ku0_2;
|
|
break;
|
|
case Ku0_5:
|
|
kuToDispl=STRING_Ku0_5;
|
|
break;
|
|
case Ku1:
|
|
kuToDispl=STRING_Ku1;
|
|
break;
|
|
case Ku2:
|
|
kuToDispl=STRING_Ku2;
|
|
break;
|
|
case Ku5:
|
|
kuToDispl=STRING_Ku5;
|
|
break;
|
|
case Ku10:
|
|
kuToDispl=STRING_Ku10;
|
|
break;
|
|
case Ku20:
|
|
kuToDispl=STRING_Ku20;
|
|
break;
|
|
case Ku50:
|
|
kuToDispl=STRING_Ku50;
|
|
break;
|
|
case Ku100:
|
|
kuToDispl=STRING_Ku100;
|
|
break;
|
|
case Ku200:
|
|
kuToDispl=STRING_Ku200;
|
|
break;
|
|
case Ku500:
|
|
kuToDispl=STRING_Ku500;
|
|
break;
|
|
case Ku1000:
|
|
kuToDispl=STRING_Ku1000;
|
|
break;
|
|
}
|
|
|
|
|
|
|
|
|
|
///////ïðîâåðÿåì ÔÂ× âûõîäà. ïðèñâàåâàåì óêàçàòåëþ ñîîòâåòñâóþùåå çíà÷åíèå
|
|
switch(currentData.IFV){
|
|
case Hp0_2:
|
|
fvchTODisp=STRING_Hp0_2;
|
|
break;
|
|
case Hp1:
|
|
fvchTODisp=STRING_Hp1;
|
|
break;
|
|
case Hp2:
|
|
fvchTODisp=STRING_Hp2;
|
|
break;
|
|
case Hp10:
|
|
fvchTODisp=STRING_Hp10;
|
|
break;
|
|
}
|
|
|
|
|
|
switch(currentData.IFN){
|
|
case Lp100:
|
|
fnchTODisp=STRING_Lp100;
|
|
break;
|
|
case Lp300:
|
|
fnchTODisp=STRING_Lp300;
|
|
break;
|
|
case Lp1000:
|
|
fnchTODisp=STRING_Lp1000;
|
|
break;
|
|
case Lp3000:
|
|
fnchTODisp=STRING_Lp3000;
|
|
break;
|
|
case Lp10000:
|
|
fnchTODisp=STRING_Lp10000;
|
|
break;
|
|
case Lp30000:
|
|
fnchTODisp=STRING_Lp30000;
|
|
break;
|
|
case Lp100000:
|
|
fnchTODisp=STRING_Lp100000;
|
|
break;
|
|
}
|
|
|
|
|
|
switch(currentData.IPZ){
|
|
case 0:
|
|
plavZemlToDisp=STRING_OBSHAJA_ZEMLJA;
|
|
break;
|
|
case 1:
|
|
plavZemlToDisp=STRING_PLAVAJUSHAJA_ZEMLA;
|
|
break;
|
|
}
|
|
|
|
////ðàññòàâëÿåì íà äèñïëåå íàäïèñè
|
|
|
|
FontSet(Segoe_UI_Rus_10);
|
|
OLED_DrawStr(STRING_KORREKCIA_USILENIA, CENTER, 10, TEXT); //Çàãîëîâîê
|
|
OLED_DrawStr(STRING_KASKAD, 1, 24, TEXT); //êàñêàä
|
|
|
|
if(menuPointer==KUSET) OLED_DrawStr(STRINGS_KU[currentData.IKU], 45, 24, CURSOR);// îòîáðàæàåì êîýôèöèåíò óñèëåíèÿ
|
|
else OLED_DrawStr(STRINGS_KU[currentData.IKU], 45, 24, TEXT);
|
|
|
|
OLED_DrawStr(STRING_ZNACHENIE_DAC, 1, 36, TEXT);
|
|
|
|
|
|
//ïîöèôðàì âûâîäèì ñîîòâåòñâóþùèé óñèëåíèþ çíà÷åíèå ÖÀÏ
|
|
// äåëàåì ïîáèòîâûé & ñ ìàñêîé
|
|
//
|
|
|
|
if(menuPointer==DAC0SET) DrawSome((correctedKu[currentData.IKU]/1000), 85, 36, CURSOR);
|
|
else DrawSome((correctedKu[currentData.IKU]/1000), 85, 36, TEXT);
|
|
|
|
|
|
if(menuPointer==DAC1SET) DrawSome(((correctedKu[currentData.IKU]%1000)/100), 92, 36, CURSOR);
|
|
else DrawSome(((correctedKu[currentData.IKU]%1000)/100), 92, 36, TEXT);
|
|
|
|
if(menuPointer==DAC2SET) DrawSome(((correctedKu[currentData.IKU]%100)/10), 99, 36, CURSOR);
|
|
else DrawSome(((correctedKu[currentData.IKU]%100)/10), 99, 36, TEXT);
|
|
|
|
if(menuPointer==DAC3SET) DrawSome(((correctedKu[currentData.IKU]%10)/1), 106, 36, CURSOR);
|
|
else DrawSome(((correctedKu[currentData.IKU]%10)/1), 106, 36, TEXT);
|
|
|
|
if(menuPointer==SAVE){
|
|
OLED_DrawStr(STRING_SOHRANIT_IZMENENIYA, 1, 48, CURSOR); //todo:îòîáðàæàòü ñîõðàíåíèÿ
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
} // end screenDraw
|