A1210/Core/Src/keys.c

314 lines
9.0 KiB
C

#include "keys.h"
#include "screen.h"
#include "struct.h"
#include "my.h"
extern UserData_TypeDef currentData;
extern bool menuItemIsEditable;
extern bool kprEditable;
extern int kprPointer;
extern int menuPointer;
extern uint16_t dvd;
extern int ignoreOff_flag;
uint16_t kpr_temp[6];
extern uint16_t correctedKu[13];
__IO uint16_t KEY_STATE = 0;
void keysHandler(void){
uint16_t key = KEY_STATE;
KEY_STATE = 0;
if(HAL_GPIO_ReadPin(OFF_GPIO_Port, OFF_Pin) == GPIO_PIN_RESET)ignoreOff_flag=0; //êàê òîëüêî êíîïêó âêëþ÷åíèÿ îòïóñòèëè, ïåðåñòà¸ì å¸ èãíîðèðîâàòü
if((HAL_GPIO_ReadPin(OFF_GPIO_Port, OFF_Pin) == GPIO_PIN_SET)&&(ignoreOff_flag==0)){ // åñëè êíîïêà íàæàòà âòîðîé ðàç òî âûêëþ÷àåìñÿ
HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin , GPIO_PIN_SET);
} //
if(key==OK_BTN_Pin){ //Ïî íàæàòèþ ÎÊ
if(menuPointer==KPR&&kprEditable==0){ //ââàëèâàåìñÿ â ðåäàêòèðîâàíèå KPR
kprEditable=1;
return;
}
if(menuPointer==KPR&&kprEditable==1){ //ïåðåõîäèì ê ñëóäùóþùåé öèôðå KPR
kprPointer++;
return;
}
if(menuItemIsEditable==0){
menuItemIsEditable=1;
return; //ââàëèâàåìñÿ â ðåäàêòèðîâàíèå
}else{menuItemIsEditable=0;
wrPar();
return;} // âûâàëèâàåìñÿ èç íåãî
}
if(kprEditable){
switch (kprPointer) {
case KPR0:
if(key==UP_BTN_Pin) {
if((currentData.IK0<9)&&(currentData.IK0>=0)) currentData.IK0++;
else if(currentData.IK0=='~') currentData.IK0=0;
else if(currentData.IK0==9) currentData.IK0='~';
};
if((key==DN_BTN_Pin)) {
if(currentData.IK0==0) currentData.IK0='~';
else if ((currentData.IK0<=9)&&(currentData.IK0>0)) currentData.IK0--;
else if(currentData.IK0='~') currentData.IK0=9;
}
break;
case KPR1:
if((key==UP_BTN_Pin)) {
if((currentData.IK1<9)&&(currentData.IK1>=0)) currentData.IK1++;
else if(currentData.IK1=='~') currentData.IK1=0;
else if(currentData.IK1==9) currentData.IK1='~';
}
if((key==DN_BTN_Pin)) {
if(currentData.IK1==0) currentData.IK1='~';
else if ((currentData.IK1<=9)&&(currentData.IK1>0)) currentData.IK1--;
else if(currentData.IK1='~') currentData.IK1=9;
}
break;
case KPR2:
if((key==UP_BTN_Pin)) {
if((currentData.IK2<9)&&(currentData.IK2>=0)) currentData.IK2++;
else if(currentData.IK2=='~') currentData.IK2=0;
else if(currentData.IK2==9) currentData.IK2='~';
}
if((key==DN_BTN_Pin)) {
if(currentData.IK2==0) currentData.IK2='~';
else if ((currentData.IK2<=9)&&(currentData.IK2>0)) currentData.IK2--;
else if(currentData.IK2='~') currentData.IK2=9;
}
break;
case KPR3:
if((key==UP_BTN_Pin)) {
if((currentData.IK3<9)&&(currentData.IK3>=0)) currentData.IK3++;
else if(currentData.IK3=='~') currentData.IK3=0;
else if(currentData.IK3==9) currentData.IK3='~';
}
if((key==DN_BTN_Pin)) {
if(currentData.IK3==0) currentData.IK3='~';
else if ((currentData.IK3<=9)&&(currentData.IK3>0)) currentData.IK3--;
else if(currentData.IK3='~') currentData.IK3=9;
}
break;
case KPR4:
if((key==UP_BTN_Pin)) {
if((currentData.IK4<9)&&(currentData.IK4>=0)) currentData.IK4++;
else if(currentData.IK4=='~') currentData.IK4=0;
else if(currentData.IK4==9) currentData.IK4='~';
}
if((key==DN_BTN_Pin)) {
if(currentData.IK4==0) currentData.IK4='~';
else if ((currentData.IK4<=9)&&(currentData.IK4>0)) currentData.IK4--;
else if(currentData.IK4='~') currentData.IK4=9;
}
break;
case KPR5:
if((key==UP_BTN_Pin)) {
if((currentData.IK5<9)&&(currentData.IK5>=0)) currentData.IK5++;
else if(currentData.IK5=='~') currentData.IK5=0;
else if(currentData.IK5==9) currentData.IK5='~';
}
if((key==DN_BTN_Pin)) {
if(currentData.IK5==0) currentData.IK5='~';
else if ((currentData.IK5<=9)&&(currentData.IK5>0)) currentData.IK5--;
else if(currentData.IK5='~') currentData.IK5=9;
}
break;
default:
kpr_temp[0]=currentData.IK0;
kpr_temp[1]=currentData.IK1;
kpr_temp[2]=currentData.IK2;
kpr_temp[3]=currentData.IK3;
kpr_temp[4]=currentData.IK4;
kpr_temp[5]=currentData.IK5;
if (asciiToFloat4(kpr_temp)||currentData.SENS<0.001||currentData.SENS>1000){ //ââåäåíî íåêîððåêòíîå çíà÷åíèå
currentData.IK0=kpr_temp[0];
currentData.IK1=kpr_temp[1];
currentData.IK2=kpr_temp[2];
currentData.IK3=kpr_temp[3];
currentData.IK4=kpr_temp[4];
currentData.IK5=kpr_temp[5];
kprPointer=KPR0; // ÏÅÐÅÑÊÎ×ÈÒ ÑÀÌ
//ïèøåì ÷òî çíà÷åíèÿ íå âåðíû
//ðèñóåì íóëè
}
else
{sh_applysetting(&currentData);
wrPar();
kprEditable=0;
kprPointer=0;}
break;
}
return; //åñëè ïîïàëè â ýòîò èô íå íóæíî îòðàáàòûâàòü äàëüíåéøèå êíîïêè
}
if(!menuItemIsEditable){
if(key==UP_BTN_Pin){ //Ïî íàæàòèþ ÎÊ
if(menuPointer==KPR){menuPointer=GROUND;} //todo ñäåëàé ñîõðàíåíèå //Åñëè êðàéíèé ïóíêò ìåíþ òî âîçâðàùàåìñÿ
else menuPointer--; //èíà÷å ñëåäóþùèé ïóíêò
}
if(key==DN_BTN_Pin){ //Ïî íàæàòèþ ÎÊ
if(menuPointer==GROUND){menuPointer=KPR;} //todo ñäåëàé ñîõðàíåíèå //Åñëè êðàéíèé ïóíêò ìåíþ òî âîçâðàùàåìñÿ
else menuPointer++; //èíà÷å ñëåäóþùèé ïóíêò
}
}
if(menuItemIsEditable){
switch (menuPointer){
case UNITSELECT:
if((key==UP_BTN_Pin)&&(currentData.UNIT<mV)){currentData.UNIT++; sh_applysetting(&currentData);}
if((key==UP_BTN_Pin)&&(currentData.UNIT==mV)) {currentData.UNIT=Accel; sh_applysetting(&currentData);}
if((key==DN_BTN_Pin)&&(currentData.UNIT>Accel)) {currentData.UNIT--; sh_applysetting(&currentData);}
if((key==DN_BTN_Pin)&&(currentData.UNIT==Accel)) {currentData.UNIT=mV; sh_applysetting(&currentData);}
break;
case OUT:
if((key==UP_BTN_Pin)&&(currentData.IKU<Ku1000)) {currentData.IKU++; sh_applysetting(&currentData);}
if((key==DN_BTN_Pin)&&(currentData.IKU>Ku0_1)) {currentData.IKU--; sh_applysetting(&currentData);}
break;
case FVCH:
if((key==UP_BTN_Pin)&&(currentData.IFV<Hp10)) {currentData.IFV++; sh_applysetting(&currentData);}
if((key==DN_BTN_Pin)&&(currentData.IFV>Hp0_2)) {currentData.IFV--; sh_applysetting(&currentData);}
break;
case FNCH:
if((key==UP_BTN_Pin)&&(currentData.IFN<Lp100000)) {currentData.IFN++; sh_applysetting(&currentData);}
if((key==DN_BTN_Pin)&&(currentData.IFN>Lp100)) {currentData.IFN--; sh_applysetting(&currentData);}
break;
case GROUND:
if((key==UP_BTN_Pin)) {currentData.IPZ=1; sh_applysetting(&currentData);}
if((key==DN_BTN_Pin)) {currentData.IPZ=0; sh_applysetting(&currentData);}
break;
/*
case SAVING:
wrPar();
menuPointer=WORK;
sh_applysetting(&currentData);//todo Ñäåëàòü ïî íîðìàëüíîìó.
break;
*/
} //close switch
}
}; //close keysHandler
void keysHandlerCallibration(void){
uint16_t key = KEY_STATE;
KEY_STATE = 0;
if(HAL_GPIO_ReadPin(OFF_GPIO_Port, OFF_Pin) == GPIO_PIN_RESET) ignoreOff_flag=0; //êàê òîëüêî êíîïêó âêëþ÷åíèÿ îòïóñòèëè, ïåðåñòà¸ì å¸ èãíîðèðîâàòü
if((HAL_GPIO_ReadPin(OFF_GPIO_Port, OFF_Pin) == GPIO_PIN_SET)&&(ignoreOff_flag==0)){
wrCor();
HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin , GPIO_PIN_SET);
} //
if(key==OK_BTN_Pin){ //Ïî íàæàòèþ ÎÊ
//if(menuPointer==GROUND){menuPointer=WORK;} //todo ñäåëàé ñîõðàíåíèå //Åñëè êðàéíèé ïóíêò ìåíþ òî âîçâðàùàåìñÿ ê ðàáîòå
sh_applysetting(&currentData);
menuPointer++; //èíà÷å ñëåäóþùèé ïóíêò
}
switch (menuPointer){
case KUSET:
if((key==UP_BTN_Pin)&&(currentData.IKU<Ku1000)) {currentData.IKU++; sh_applysetting(&currentData);}
if((key==DN_BTN_Pin)&&(currentData.IKU>Ku0_1)) {currentData.IKU--; sh_applysetting(&currentData);}
break;
case DAC0SET:
if(key==UP_BTN_Pin) {
if((correctedKu[currentData.IKU]+1000<=4095)) correctedKu[currentData.IKU]=correctedKu[currentData.IKU]+1000;
sh_applysetting(&currentData);
};
if((key==DN_BTN_Pin)) {
if((correctedKu[currentData.IKU]-1000>=1)) correctedKu[currentData.IKU]=correctedKu[currentData.IKU]-1000;
sh_applysetting(&currentData);
}
break;
case DAC1SET:
if(key==UP_BTN_Pin) {
if((correctedKu[currentData.IKU]+100<=4095)) correctedKu[currentData.IKU]=correctedKu[currentData.IKU]+100;
sh_applysetting(&currentData);
};
if((key==DN_BTN_Pin)) {
if((correctedKu[currentData.IKU]-100>=1)) correctedKu[currentData.IKU]=correctedKu[currentData.IKU]-100;
sh_applysetting(&currentData);
}
break;
case DAC2SET:
if(key==UP_BTN_Pin) {
if((correctedKu[currentData.IKU]+10<=4095)) correctedKu[currentData.IKU]=correctedKu[currentData.IKU]+10;
sh_applysetting(&currentData);
};
if((key==DN_BTN_Pin)) {
if((correctedKu[currentData.IKU]-10>=1)) correctedKu[currentData.IKU]=correctedKu[currentData.IKU]-10;
sh_applysetting(&currentData);
}
break;
case DAC3SET:
if(key==UP_BTN_Pin) {
if((correctedKu[currentData.IKU]+1<=4095)) correctedKu[currentData.IKU]=correctedKu[currentData.IKU]+1;
sh_applysetting(&currentData);
};
if((key==DN_BTN_Pin)) {
if((correctedKu[currentData.IKU]-1>=1)) correctedKu[currentData.IKU]=correctedKu[currentData.IKU]-1;
sh_applysetting(&currentData);
}
break;
case SAVE:
wrCor();
sh_applysetting(&currentData);//todo Ñäåëàòü ïî íîðìàëüíîìó.
menuPointer=KUSET;
break;
} //close switch
}; //close keysHandlerCallibration