A1210/Core/Src/screen.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&&currentData.SENS<0.001) {OffsetKuDisplay=0; kNormToDAC=currentData.SENS*10000;} // òàêèå çíà÷åíèÿ íå äîïóñòèìû
else if (currentData.SENS>=0.001&&currentData.SENS<0.01){OffsetKuDisplay=0; kNormToDAC=currentData.SENS*1000;}
else if (currentData.SENS>=0.01&&currentData.SENS<0.1){OffsetKuDisplay=3; kNormToDAC=currentData.SENS*100;}
else if (currentData.SENS>=0.1&&currentData.SENS<1){OffsetKuDisplay=6; kNormToDAC=currentData.SENS*10;}
else if (currentData.SENS>=1&&currentData.SENS<10){OffsetKuDisplay=9; kNormToDAC=currentData.SENS/1;}
else if (currentData.SENS>=10&&currentData.SENS<100){OffsetKuDisplay=12; kNormToDAC=currentData.SENS/10;}
else if (currentData.SENS>=100&&currentData.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