20190816
Dependencies: LCD_DISCO_F429ZI TS_DISCO_F429ZI BSP_DISCO_F429ZI
TS_Thread.cpp
- Committer:
- VASKO
- Date:
- 2019-08-16
- Revision:
- 0:81007dc65bac
File content as of revision 0:81007dc65bac:
#include "PrjDefs.h" #define mSperTick 10 #define DelayBetweenTouch 5 #define DelayAfter1stTouch 50 #define PauseDelay 10 #define DelayBefore1stTouch 1 int32_t TickCtr = 0; int32_t TouchNum = 0; uint32_t TouchDelay = DelayBefore1stTouch; float pwm = 0; uint16_t x; uint16_t y; void Incrementer(float *f,float step,float max){ (*f) += step; if((*f) > max) (*f) = max; } void Decrementer(float *f,float step,float min){ (*f) -= step; if((*f) < min) (*f) = min; } bool HitTest(RT_Pars *rp){ if(x < ((rp->xr) + (rp->gap))) return false; if(x > ((rp->xr) + (rp->wr) - (rp->gap))) return false; if(y < ((rp->yr) + (rp->gap))) return false; if(y > ((rp->yr) + (rp->hr) - (rp->gap))) return false; return true; }//HitTest void SetChangingParam(uint8_t v){ if(ChangingParam == v)ChangingParam = ChangingParamNone; else ChangingParam = v; MsgType *_mail; _mail = MsgMail.alloc(); _mail->cmd = dTdt_Selected; _mail->pars.f[0] = dTdt; MsgMail.put(_mail); _mail = MsgMail.alloc(); _mail->cmd = TempS_Selected; _mail->pars.f[0] = TempS; MsgMail.put(_mail); _mail = MsgMail.alloc(); switch (ExtraSelected){ case KP_Selected: { _mail->cmd = KP_Selected; _mail->pars.f[0] = KProp; break; } case KI_Selected: { _mail->cmd = KI_Selected; _mail->pars.f[0] = KInt; break; } case KD_Selected: { _mail->cmd = KD_Selected; _mail->pars.f[0] = KDif; break; } case PWM_Selected: { _mail->cmd = PWM_Selected; _mail->pars.f[0] = PWM; break; } default: { _mail->cmd = PrjEventNone; break; } }//switch (ExtraSelected) MsgMail.put(_mail); }//SetChangingParam void SelExtraPar(uint8_t v){ if(++ExtraSelected > PWM_Selected) ExtraSelected = KP_Selected; SetChangingParam(ChangingParamNone); }//SelExtraPar bool TouchDispatcher(){ MsgType _msg; if(HitTest(&Start_Rect)){ if(TouchNum == 1){ MsgType *_mail = MsgMail.alloc(); _mail->cmd = CmdStart; if(Start) { PWM = 0; StopH(); } else { Start_H();} _mail->pars.ui8[0] = Start; MsgMail.put(_mail); }//if(TouchNum == 1) }//if(HitTest(&Start_Rect)) else if(HitTest(&TempR_Rect)){ if(TouchNum == 1){ MsgType *_mail = MsgMail.alloc(); if(TempR_Selected == cT_Selected){ TempR_Selected = dT_Selected; _mail->cmd = cT_Selected; _mail->pars.f[0] = cT; }else{ TempR_Selected = cT_Selected; _mail->cmd = dT_Selected; _mail->pars.f[0] = dT; } MsgMail.put(_mail); }//if(TouchNum == 1) }//if(HitTest(&TempR_Rect)) else if(HitTest(&TempS_Rect)){ if(TouchNum == 1){ MsgType *_mail = MsgMail.alloc(); if(ChangingParam != TempS_Changing) SetChangingParam(TempS_Changing); else SetChangingParam(TempS_Selected); _mail->cmd = ChangingParam; _mail->pars.f[0] = TempS; MsgMail.put(_mail); }//if(TouchNum == 1) }//if(HitTest(&TempS_Rect)) else if(HitTest(&dTdt_Rect)){ if(TouchNum == 1){ MsgType *_mail = MsgMail.alloc(); if(ChangingParam != dTdt_Changing) SetChangingParam(dTdt_Changing); else SetChangingParam(dTdt_Selected); _mail->cmd = ChangingParam; _mail->pars.f[0] = dTdt; MsgMail.put(_mail); }//if(TouchNum == 1) }//if(HitTest(&dTdt_Rect)) else if(HitTest(&SelExtra_Rect)){ if(TouchNum == 1){ MsgType *_mail = MsgMail.alloc(); SelExtraPar(0); switch (ExtraSelected){ case KP_Selected: { _mail->cmd = KP_Selected; _mail->pars.f[0] = KProp; break; } case KI_Selected: { _mail->cmd = KI_Selected; _mail->pars.f[0] = KInt; break; } case KD_Selected: { _mail->cmd = KD_Selected; _mail->pars.f[0] = KDif; break; } case PWM_Selected: { _mail->cmd = PWM_Selected; _mail->pars.f[0] = PWM; break; } default: { _mail->cmd = PrjEventNone; break; } }//switch (ExtraSelected) MsgMail.put(_mail); }//if(TouchNum == 1) }//if(HitTest(&ChooseExOpt_Rect)) else if(HitTest(&Extra_Rect)){ if(TouchNum == 1){ MsgType *_mail = MsgMail.alloc(); switch (ExtraSelected){ case KP_Selected: { if(ChangingParam != KP_Changing) SetChangingParam(KP_Changing); else SetChangingParam(KP_Selected); _mail->cmd = ChangingParam; _mail->pars.f[0] = KProp; break; }//KP_Selected case KI_Selected: { if(ChangingParam != KI_Changing) SetChangingParam(KI_Changing); else SetChangingParam(KI_Selected); _mail->cmd = ChangingParam; _mail->pars.f[0] = KInt; break; } case KD_Selected: { if(ChangingParam != KD_Changing) SetChangingParam(KD_Changing); else SetChangingParam(KD_Selected); _mail->cmd = ChangingParam; _mail->pars.f[0] = KDif; break; } case PWM_Selected: { if(ChangingParam != PWM_Changing) SetChangingParam(PWM_Changing); else SetChangingParam(PWM_Selected); _mail->cmd = ChangingParam; _mail->pars.f[0] = PWM; break; } default: { _mail->cmd = PrjEventNone; break; } }//switch (ExtraSelected) MsgMail.put(_mail); }//if(TouchNum == 1) }//if(HitTest(&Extra_Rect)) else if(HitTest(&Plus_Rect)){ MsgType *_mail = MsgMail.alloc(); switch(ChangingParam){ case TempS_Changing:{ Incrementer(&TempS,1,MaxTempS); _mail->cmd = TempS_Changing; _mail->pars.f[0] = TempS; ReStartH(); break;} case dTdt_Changing:{ Incrementer(&dTdt,dTdtStep,Max_dTdt); _mail->cmd = dTdt_Changing; _mail->pars.f[0] = dTdt; break;} case KP_Changing:{ Incrementer(&KProp,KPropStep,MaxKProp); _mail->cmd = KP_Changing; _mail->pars.f[0] = KProp; break;} case KI_Changing:{ Incrementer(&KInt,KIntStep,MaxKInt); _mail->cmd = KI_Changing; _mail->pars.f[0] = KInt; break;} case KD_Changing:{ Incrementer(&KDif,KDifStep,MaxKDif); _mail->cmd = KD_Changing; _mail->pars.f[0] = KDif; break;} case PWM_Changing:{ Incrementer(&PWM,PWM_Step,MaxPWM); _mail->cmd = PWM_Changing; _mail->pars.f[0] = PWM; break;} default: { _mail->cmd = PrjEventNone; break; } }//switch(ChangingParam) MsgMail.put(_mail); }//if(HitTest(&Plus_Rect)) else if(HitTest(&Minus_Rect)){ MsgType *_mail = MsgMail.alloc(); switch(ChangingParam){ case TempS_Changing:{ Decrementer(&TempS,1,0); _mail->cmd = TempS_Changing; _mail->pars.f[0] = TempS; ReStartH(); break;} case dTdt_Changing:{ Decrementer(&dTdt,dTdtStep,0); _mail->cmd = dTdt_Changing; _mail->pars.f[0] = dTdt; break;} case KP_Changing:{ Decrementer(&KProp,KPropStep,0); //_f=(*(float *))ui32; _mail->cmd = KP_Changing; _mail->pars.f[0] = KProp; break;} case KI_Changing:{ Decrementer(&KInt,KIntStep,0); _mail->cmd = KI_Changing; _mail->pars.f[0] = KInt; break;} case KD_Changing:{ Decrementer(&KDif,KDifStep,0); _mail->cmd = KD_Changing; _mail->pars.f[0] = KDif; break;} case PWM_Changing:{ Decrementer(&PWM,PWM_Step,0); _mail->cmd = PWM_Changing; _mail->pars.f[0] = PWM; break;} default: { _mail->cmd = PrjEventNone; break; } }//switch(ChangingParam) MsgMail.put(_mail); }//if(HitTest(&Minus_Rect)) else return 0; return 1; /* if(HitTest(&ExOptions_Rect,TS_State.X,TS_State.Y)){ MsgType *_mail = MsgMail.alloc(); _mail->cmd = ExOptSetting; MsgMail.put(_mail); } if(HitTest(&ChooseExOpt_Rect,TS_State.X,TS_State.Y)){ MsgType *_mail = MsgMail.alloc(); _mail->cmd = ExOptChoosing; MsgMail.put(_mail); } */ }//TouchDispatcher void TouchScreenThrdFunc(){ TS_StateTypeDef TS_State; while(1){ ts.GetState(&TS_State); if(TS_State.TouchDetected){ x = TS_State.X; y = TS_State.Y; if(++TickCtr > TouchDelay){ TickCtr=0; TouchNum++; if(!TouchDispatcher()){ TickCtr=0; TouchNum=0; TouchDelay = DelayBefore1stTouch; } if(TouchNum == 1) TouchDelay = DelayAfter1stTouch; else TouchDelay = DelayBetweenTouch; }//if(++TickCtr>TouchDelay) }else{//if(TS_State.TouchDetected) TickCtr=0; TouchNum=0; TouchDelay = DelayBefore1stTouch; } ThisThread::sleep_for(mSperTick); }//while(1) }//TouchScreenThrdFunc /* pwm += 0.001; if (pwm > 1) pwm = 0; _msg.cmd = 0x17; _msg.pars.f[0] = pwm; SendMsg(&_msg.cmd); */