From: andre Ebersold Date: Sun, 12 Nov 2023 22:25:56 +0000 (+0100) Subject: Reading tag and writing result into the registers X-Git-Url: https://git.ebersold.fr/?a=commitdiff_plain;h=4675d1f98c1d24127e3e845ce0b364aa1b8e33dd;p=atmel%2Favr.git Reading tag and writing result into the registers --- diff --git a/Communication/CommunicationHandler.cpp b/Communication/CommunicationHandler.cpp index 587de6d..4fbaeb8 100644 --- a/Communication/CommunicationHandler.cpp +++ b/Communication/CommunicationHandler.cpp @@ -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; diff --git a/Communication/CommunicationHandler.h b/Communication/CommunicationHandler.h index 2d7ba92..54563cc 100644 --- a/Communication/CommunicationHandler.h +++ b/Communication/CommunicationHandler.h @@ -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; diff --git a/HAL/Drivers/PN532.cpp b/HAL/Drivers/PN532.cpp index e49c706..e809eb4 100644 --- a/HAL/Drivers/PN532.cpp +++ b/HAL/Drivers/PN532.cpp @@ -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; } diff --git a/Metadata/WorkMeterParamIds.h b/Metadata/WorkMeterParamIds.h index bd3b707..4e95097 100644 --- a/Metadata/WorkMeterParamIds.h +++ b/Metadata/WorkMeterParamIds.h @@ -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 diff --git a/Platform/DCMotorParameterHandler.h b/Platform/DCMotorParameterHandler.h index 42a80d4..1b0cd4a 100644 --- a/Platform/DCMotorParameterHandler.h +++ b/Platform/DCMotorParameterHandler.h @@ -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) ; diff --git a/Platform/IParameterHandler.h b/Platform/IParameterHandler.h index af19049..f6dc391 100644 --- a/Platform/IParameterHandler.h +++ b/Platform/IParameterHandler.h @@ -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; diff --git a/Platform/ParameterHandler.cpp b/Platform/ParameterHandler.cpp index 345c4ce..ab461a6 100644 --- a/Platform/ParameterHandler.cpp +++ b/Platform/ParameterHandler.cpp @@ -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) diff --git a/Platform/ParameterHandler.h b/Platform/ParameterHandler.h index 5b75a53..2255498 100644 --- a/Platform/ParameterHandler.h +++ b/Platform/ParameterHandler.h @@ -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) ; diff --git a/Platform/PowerswitchParameterHandler.h b/Platform/PowerswitchParameterHandler.h index 13f48e8..9ead971 100644 --- a/Platform/PowerswitchParameterHandler.h +++ b/Platform/PowerswitchParameterHandler.h @@ -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) ; diff --git a/Platform/RFIDReader/RFIDReaderHandler.cpp b/Platform/RFIDReader/RFIDReaderHandler.cpp index ef992ab..9ec5ea4 100644 --- a/Platform/RFIDReader/RFIDReaderHandler.cpp +++ b/Platform/RFIDReader/RFIDReaderHandler.cpp @@ -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(1)); + m_Param->writeValue(PID_BadgeLength,static_cast(UidLength)); + + m_Param->readValue(PID_BadgeCount,count); + count++; + m_Param->writeValue(PID_BadgeCount,count); + Uint32_t low = static_cast(static_cast(Uid[3]) + | (static_cast(Uid[2])<<8) + | (static_cast(Uid[1]) <<16) + | (static_cast(Uid[0]) <<24)); + m_Param->writeValue(PID_BadgeLow,low); + if (UidLength > 4) + { + Uint32_t high = static_cast(static_cast(Uid[6]) + | (static_cast(Uid[5])<<8) + | (static_cast(Uid[4]) <<16)) ; + m_Param->writeValue(PID_BadgeHigh,high); + } + } else + { + m_Param->writeValue(PID_BadgePresent,static_cast(0)); + } } void RFIDReaderHandler::doDisplay(Uint8_t _on) diff --git a/Platform/RFIDReader/RFIDReaderHandler.h b/Platform/RFIDReader/RFIDReaderHandler.h index 9326d96..560eec8 100644 --- a/Platform/RFIDReader/RFIDReaderHandler.h +++ b/Platform/RFIDReader/RFIDReaderHandler.h @@ -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 diff --git a/Platform/ShutterCtrlParameterHandler.h b/Platform/ShutterCtrlParameterHandler.h index d448d6e..da0de14 100644 --- a/Platform/ShutterCtrlParameterHandler.h +++ b/Platform/ShutterCtrlParameterHandler.h @@ -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) ;