20190816
Dependencies: LCD_DISCO_F429ZI TS_DISCO_F429ZI BSP_DISCO_F429ZI
Diff: TS_Thread.cpp
- Revision:
- 0:81007dc65bac
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TS_Thread.cpp Fri Aug 16 22:22:05 2019 +0000 @@ -0,0 +1,283 @@ +#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); +*/ \ No newline at end of file