Reading tag and writing result into the registers
authorandre Ebersold <andre.ebersold@free.fr>
Sun, 12 Nov 2023 22:25:56 +0000 (23:25 +0100)
committerandre Ebersold <andre.ebersold@free.fr>
Sun, 12 Nov 2023 22:25:56 +0000 (23:25 +0100)
12 files changed:
Communication/CommunicationHandler.cpp
Communication/CommunicationHandler.h
HAL/Drivers/PN532.cpp
Metadata/WorkMeterParamIds.h
Platform/DCMotorParameterHandler.h
Platform/IParameterHandler.h
Platform/ParameterHandler.cpp
Platform/ParameterHandler.h
Platform/PowerswitchParameterHandler.h
Platform/RFIDReader/RFIDReaderHandler.cpp
Platform/RFIDReader/RFIDReaderHandler.h
Platform/ShutterCtrlParameterHandler.h

index 587de6dfaf657807c7b49c6c8dfad32ae04eaf7f..4fbaeb86458e0b29630b3e9f55758c7498722bf4 100644 (file)
@@ -54,6 +54,11 @@ CommunicationHandler::run()
                   parse_msg(msg,len ,IParameterHandler::TYPE_U16);
               }
               break;
+            case 'L':
+              {
+                  parse_msg(msg,len ,IParameterHandler::TYPE_U32);
+              }
+              break;
             case 'F':
               {
                   parse_msg(msg,len ,IParameterHandler::TYPE_FLOAT);
@@ -66,12 +71,12 @@ CommunicationHandler::run()
     } 
 }
 
-#define OUTPUT_BUFFER_SIZE 16 
+#define OUTPUT_BUFFER_SIZE 32
 void 
 CommunicationHandler::parse_msg(const Uint8_t *_msg,const Uint8_t len,IParameterHandler::eParameterType _eType)
 {
-    uint16_t nv  = 0;
-    uint16_t val = 0;
+    uint32_t nv  = 0;
+    uint32_t val = 0;
     uint8_t  pos = 0;
 
     parse_num(_msg+1,len -1,nv);
@@ -105,7 +110,11 @@ CommunicationHandler::parse_msg(const Uint8_t *_msg,const Uint8_t len,IParameter
             m_Params->readValue(nv,fval);
             //dtostre(fval,(char *)l_OutBuffer,4,0);
             dtostrf(fval,8,4,(char *)l_OutBuffer);
-        } else
+        } else if (_eType == IParameterHandler::TYPE_U32)
+        {
+            m_Params->readValue(nv,val);
+            ltoa(val,(char *)l_OutBuffer,10);
+        }else
         {
             m_Params->readValue(nv,val);
             itoa(val,(char *)l_OutBuffer,10);
@@ -122,7 +131,7 @@ CommunicationHandler::parse_msg(const Uint8_t *_msg,const Uint8_t len,IParameter
 }
 
 void 
-CommunicationHandler::parse_num(const Uint8_t *_msg,const Uint8_t len,Uint16_t &_out)
+CommunicationHandler::parse_num(const Uint8_t *_msg,const Uint8_t len,Uint32_t &_out)
 {
     Uint8_t chr = 0x00;
     Uint8_t pchr = 0x00;
index 2d7ba928c348fd9f3b92142f30daf4abbe018768..54563ccc8c16f3bb0181873071192a1e03daf537 100644 (file)
@@ -11,7 +11,7 @@ class CommunicationHandler
     private:
         void parse_msg(const Uint8_t *_msg,const Uint8_t len,IParameterHandler::eParameterType _eT);
         ///
-        void parse_num(const Uint8_t *_msg,const Uint8_t len,  Uint16_t &_out);
+        void parse_num(const Uint8_t *_msg,const Uint8_t len,  Uint32_t &_out);
     private:
         IProtocolLayer2   *m_L2;
         IParameterHandler *m_Params;
index e49c706110ca02f6c900474fcb32a56b1c4007e9..e809eb42710dab89beae85c22aca443048cdfdee 100644 (file)
@@ -140,7 +140,8 @@ Bool_t PN532::processPassiveTargetID( Uint8_t *uid,Uint8_t *uidLength)
 
     for (Uint8_t i = 0 ; (i < *uidLength) || (i < 7) ; i++)
     {
-       uid[i] = m_PacketBuffer[6 + i];
+       uid[i]   = m_PacketBuffer[6 + i];
+       m_UID[i] = m_PacketBuffer[6 + i];
     }
     return 1;
 }
index bd3b707218478d578a213aab2c13914400aa2dd9..4e9509761b25da250fc8b07598373a1153b57273 100644 (file)
@@ -19,9 +19,9 @@ enum ParameterIds {
     , PID_FirmwareVersion    =  9 /* Cycle Per rotation used in closed loop  */
     , PID_BadgePresent       = 10 /* Set PID constant factor   */
     , PID_BadgeCount         = 11 /* Set PID integral factor   */
-    , PID_Kd         = 12 /* Set PID derivation factor */
-    , PID_MAConsPwm  = 13 /* Pwm modulation instruction, Applied in open loop, ignore in closed loop */
-    , PID_MAConsRpm  = 14 /* Rpm instruction used as reference in closed loop */
+    , PID_BadgeLength        = 12 /* Badge ID length             */
+    , PID_BadgeLow           = 13 /* Write 4 bytes low badge ID  */
+    , PID_BadgeHigh          = 14 /* When 7 bytes Length add the 3 high bytes here */
     , PID_LowLevelError1  = 15 /* Low Level Error1  up to 32 errors */
     , PID_LowLevelError2  = 16 /* Low Level Error2  up to 32 errors */
     , PID_MAX        = 17
index 42a80d4e8d39f15269460890189c974baf2f9b14..1b0cd4a7beb1231f6402b8da1bafd69e5ea86097 100644 (file)
@@ -31,8 +31,11 @@ class DCMotorParameterHandler : public IParameterHandler
         virtual void readValue(const uint8_t paramID,uint16_t &_val);
         ///
         virtual void writeValue(const uint8_t paramID,const uint16_t _val);
-        
-       ///
+        ///
+        virtual void readValue(const uint8_t paramID,uint32_t &_val) {};
+        ///
+        virtual void writeValue(const uint8_t paramID,const uint32_t _val) {};
+        ///
         virtual void readValue(const uint8_t paramID,Float32_t &_val) ;
         ///
         virtual void writeValue(const uint8_t paramID,const Float32_t _val) ;
index af19049765beea09dc3e1e12af581bd7c90a6164..f6dc39188471a8a9053264fa88e1e57419205caf 100644 (file)
@@ -28,7 +28,8 @@ class IParameterHandler
         enum eParameterType {
               TYPE_U8    = 0
             , TYPE_U16   = 1
-            , TYPE_FLOAT = 2
+            , TYPE_U32   = 2
+            , TYPE_FLOAT = 3
         };
     public:
         IParameterHandler() {};
@@ -41,6 +42,10 @@ class IParameterHandler
         ///
         virtual void writeValue(const uint8_t paramID,const uint16_t _val) = 0;
         ///
+        virtual void readValue(const uint8_t paramID,uint32_t &_val) = 0;
+        ///
+        virtual void writeValue(const uint8_t paramID,const uint32_t _val) = 0;
+        ///
         virtual void readValue(const uint8_t paramID,Float32_t &_val) = 0;
         ///
         virtual void writeValue(const uint8_t paramID,const Float32_t _val) = 0;
index 345c4ce2008029c5acde4793c3f2f9476a4eb7be..ab461a6a5bdf70b0eb5082d2fc95440bbb39ab0b 100644 (file)
@@ -62,6 +62,31 @@ ParameterHandler::writeValue(const uint8_t paramID,const uint16_t _val)
     } 
 }
 
+/// Handle UInt16_t
+void
+ParameterHandler::readValue(const uint8_t paramID,uint32_t &_val)
+{
+    if (paramID < PID_MAX)
+    {
+        _val = m_Values[paramID].u.m_U32;
+    } 
+}
+
+///
+void
+ParameterHandler::writeValue(const uint8_t paramID,const uint32_t _val)
+{
+    if (paramID < PID_MAX)
+    {
+        m_Values[paramID].u.m_U32 = _val;
+        if (m_Values[paramID].m_Listener != 0 )
+        {
+            m_Values[paramID].m_Listener->onWriteValue(paramID,m_Values[paramID].u.m_U8);
+        }
+    } 
+}
+
+
 /// Handle Float32_t
 void
 ParameterHandler::readValue(const uint8_t paramID,Float32_t &_val)
index 5b75a53ef68bc819a7ef836cef5033fd87c88941..22554984ab1f19be722ff16a72b7c561c93ed223 100644 (file)
@@ -18,8 +18,11 @@ class ParameterHandler : public IParameterHandler
         virtual void readValue(const uint8_t paramID,uint16_t &_val);
         ///
         virtual void writeValue(const uint8_t paramID,const uint16_t _val);
-        
-       ///
+        ///
+        virtual void readValue(const uint8_t paramID,uint32_t &_val);
+        ///
+        virtual void writeValue(const uint8_t paramID,const uint32_t _val);
+        ///
         virtual void readValue(const uint8_t paramID,Float32_t &_val) ;
         ///
         virtual void writeValue(const uint8_t paramID,const Float32_t _val) ;
index 13f48e8b0369b766d804ba70cb786cb7e2e491e7..9ead9712d618ff76886652d339f4efc33f387816 100644 (file)
@@ -18,8 +18,11 @@ class PowerswitchParameterHandler : public IParameterHandler
         virtual void readValue(const uint8_t paramID,uint16_t &_val);
         ///
         virtual void writeValue(const uint8_t paramID,const uint16_t _val);
-        
-       ///
+        ///
+        virtual void readValue(const uint8_t paramID,uint32_t &_val) {};
+        ///
+        virtual void writeValue(const uint8_t paramID,const uint32_t _val) {};
+        ///
         virtual void readValue(const uint8_t paramID,Float32_t &_val) ;
         ///
         virtual void writeValue(const uint8_t paramID,const Float32_t _val) ;
index ef992ab8d5c85fe7e3a9723c8be9e03724e7a8f6..9ec5ea45c538df090b27433e239d8297fcf6b45d 100644 (file)
@@ -12,7 +12,8 @@
 
 
 RFIDReaderHandler::RFIDReaderHandler(PN532 *argNFC,IParameterHandler *argParam)
-  : m_NFC(argNFC), m_Param(argParam),m_State(ST_IDLE)
+  : m_NFC(argNFC), m_Param(argParam),m_State(ST_INIT)
+    , m_1Milli(10),m_CurrentRequest(ST_IDLE),m_Ticks(0)
 {
 }
 
@@ -30,6 +31,11 @@ void RFIDReaderHandler::doStateMachine()
 {
     switch (m_State)
     {
+       case ST_INIT:
+       {
+           m_State = ST_REQ_FIRMWAREVERSION;
+       }
+       break;
        case ST_IDLE:
        { // Check if 
            //m_State = ST_DISP_OFF;
@@ -37,6 +43,10 @@ void RFIDReaderHandler::doStateMachine()
        }
        break;
        case ST_REQ_FIRMWAREVERSION:
+       {
+           Uint32_t ver = m_NFC->getFirmwareVersion();
+           m_Param->writeValue(PID_RFFirmwareVersion,ver);
+       }
        break;
        case ST_REQ_BADGE_ID:
        doRequestBadgeID();
@@ -112,12 +122,34 @@ void RFIDReaderHandler::doProcessFirmwareVersion()
 
 void RFIDReaderHandler::doProcessBadgeID()
 {
-     Uint8_t Uid[9];
+     Uint8_t Uid[7]    = {0,0,0,0,0,0,0};
      Uint8_t UidLength = 0;
+     Uint8_t count     = 0;
      m_NFC->processPassiveTargetID(Uid,&UidLength);
-     m_Param->writeValue(PID_BadgePresent,UidLength);
-     Uint8_t disp = 0;
-     m_Param->writeValue(PID_Display,disp);
+     if (UidLength)
+     {
+         m_Param->writeValue(PID_BadgePresent,static_cast<Uint8_t>(1));
+         m_Param->writeValue(PID_BadgeLength,static_cast<Uint8_t>(UidLength));
+         
+         m_Param->readValue(PID_BadgeCount,count);
+         count++;
+         m_Param->writeValue(PID_BadgeCount,count);
+         Uint32_t low = static_cast<Uint32_t>(static_cast<Uint32_t>(Uid[3])
+                         | (static_cast<Uint32_t>(Uid[2])<<8) 
+                         | (static_cast<Uint32_t>(Uid[1]) <<16) 
+                         | (static_cast<Uint32_t>(Uid[0]) <<24));
+         m_Param->writeValue(PID_BadgeLow,low);
+         if (UidLength > 4)
+         {
+             Uint32_t high = static_cast<Uint32_t>(static_cast<Uint32_t>(Uid[6]) 
+                             | (static_cast<Uint32_t>(Uid[5])<<8) 
+                             | (static_cast<Uint32_t>(Uid[4]) <<16)) ;
+             m_Param->writeValue(PID_BadgeHigh,high);
+         }
+     } else 
+     {
+         m_Param->writeValue(PID_BadgePresent,static_cast<Uint8_t>(0));
+     }
 }
 
 void RFIDReaderHandler::doDisplay(Uint8_t _on)
index 9326d9663fa25e94ed2d8d0369a429f65c919f8c..560eec89a6306710c301665ac2120524c0ccf750 100644 (file)
@@ -7,7 +7,8 @@
 class RFIDReaderHandler : public ITask
 {
     enum eStates {
-      ST_IDLE
+      ST_INIT
+      ,ST_IDLE
       ,ST_REQ_FIRMWAREVERSION
       ,ST_REQ_BADGE_ID
       ,ST_PROCESS_BADGE_ID
index d448d6ee21d11f4ec828672081d45c22d271d420..da0de14cc675e53ae31bd46ef7cbcb5b5a0dcbc2 100644 (file)
@@ -18,8 +18,11 @@ class ShutterCtrlParameterHandler : public IParameterHandler
         virtual void readValue(const uint8_t paramID,uint16_t &_val);
         ///
         virtual void writeValue(const uint8_t paramID,const uint16_t _val);
-        
-       ///
+        ///
+        virtual void readValue(const uint8_t paramID,uint32_t &_val) {};
+        ///
+        virtual void writeValue(const uint8_t paramID,const uint32_t _val) {};
+        ///
         virtual void readValue(const uint8_t paramID,Float32_t &_val) ;
         ///
         virtual void writeValue(const uint8_t paramID,const Float32_t _val) ;