20190816

Dependencies:   LCD_DISCO_F429ZI TS_DISCO_F429ZI BSP_DISCO_F429ZI

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