123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- #pragma once
- #include "types.h"
- #define LEV_REV 0.5
- public ref class LEV
- {
- public:
-
- static const UCHAR DEVICE_TYPE = 20;
- static const UCHAR TX_TYPE = 5;
- static const USHORT MSG_PERIOD = 8192;
-
- static const UCHAR PAGE1_SPEED_SYSTEM1 = 0x01;
- static const UCHAR PAGE2_SPEED_DISTANCE = 0x02;
- static const UCHAR PAGE3_SPEED_SYSTEM2 = 0x03;
- static const UCHAR PAGE4_BATTERY = 0x04;
- static const UCHAR PAGE5_CAPABILITES = 0x05;
- static const UCHAR PAGE16_DISPLAY_DATA = 0x10;
- static const UCHAR PAGE34_SPEED_DISTANCE = 0x22;
- static const UCHAR PAGE70_REQUEST = 0x46;
-
- static const UCHAR ACK_FAIL = 0;
- static const UCHAR ACK_SUCCESS = 1;
- static const UCHAR ACK_RETRY = 2;
- static const UCHAR MAX_RETRIES = 10;
-
- static const UCHAR RESERVED = 0xFF;
-
-
- static const UCHAR BYTE_MASK = 0xFF;
-
- static const UCHAR LEV_COMMON_INTERVAL = 20;
-
- public:
-
- UCHAR ucTemperature;
- UCHAR ucTravelModeState;
- UCHAR ucSystemState;
- UCHAR ucGearState;
- UCHAR ucErrorMessage;
- USHORT usCurrentLEVSpeed;
-
- ULONG ulOdometer;
- USHORT usRemainingRange;
-
- UCHAR ucBatteryCharge;
- UCHAR ucPercentAssist;
-
- USHORT usChargeCycleCount;
- USHORT usFuelConsumption;
- UCHAR ucBatteryVoltage;
- USHORT usDistanceOnCharge;
-
- UCHAR ucSupportedTravelModes;
- USHORT usWheelCircumference;
-
- USHORT usP16WheelCircum;
- UCHAR ucP16TravelMode;
- USHORT usP16DisplayCommand;
- USHORT usP16ManID;
-
- ULONG ulP34Odometer;
- USHORT usP34FuelConsumption;
- USHORT usSpeed;
-
- UCHAR ucP70TxTimes;
- UCHAR ucP70RequestedPage;
- public:
- LEV()
- {
-
- ucTravelModeState = 0;
- ucSystemState = 0;
- ucGearState = 0;
- ucErrorMessage = 0;
- usCurrentLEVSpeed = 0;
- ucPercentAssist = 0;
- ulOdometer = 0;
- ucTemperature = 0;
- ucBatteryCharge = 0;
- usRemainingRange = 0;
- usChargeCycleCount = 0;
- usFuelConsumption = 0;
- ucBatteryVoltage = 0;
- usDistanceOnCharge = 0;
- ucSupportedTravelModes = 0;
- usWheelCircumference = 0;
- usP16WheelCircum = 0xFF;
- ucP16TravelMode = 0xFF;
- usP16DisplayCommand = 0;
- usP16ManID = 0;
- ulP34Odometer = 0;
- usP34FuelConsumption = 0;
- usSpeed = 0;
- ucP70TxTimes = 0;
- ucP70RequestedPage = 0;
- }
- ~LEV()
- {
- }
- public:
- void Decode(UCHAR* pucRxBuffer_)
- {
- ULONG ulTempHolder = 0;
- switch(pucRxBuffer_[0])
- {
- case PAGE1_SPEED_SYSTEM1:
- ucTemperature = pucRxBuffer_[1];
- ucTravelModeState = pucRxBuffer_[2];
- ucSystemState = pucRxBuffer_[3];
- ucGearState = pucRxBuffer_[4];
- ucErrorMessage = pucRxBuffer_[5];
- usCurrentLEVSpeed = pucRxBuffer_[6] | ((pucRxBuffer_[7] & 0x0F) << 8);
- break;
- case PAGE2_SPEED_DISTANCE:
- ulOdometer = pucRxBuffer_[1];
- ulTempHolder = pucRxBuffer_[2] & 0xFF;
- ulOdometer = ulOdometer | (ulTempHolder << 8);
- ulTempHolder = pucRxBuffer_[3] & 0xFF;
- ulOdometer = ulOdometer | (ulTempHolder << 16);
- usRemainingRange = pucRxBuffer_[4] | ((pucRxBuffer_[5] & 0x0F) << 8);
- usCurrentLEVSpeed = pucRxBuffer_[6] | ((pucRxBuffer_[7] & 0x0F) << 8);
- break;
- case PAGE3_SPEED_SYSTEM2:
- ucBatteryCharge = pucRxBuffer_[1];
- ucTravelModeState = pucRxBuffer_[2];
- ucSystemState = pucRxBuffer_[3];
- ucGearState = pucRxBuffer_[4];
- ucPercentAssist = pucRxBuffer_[5];
- usCurrentLEVSpeed = pucRxBuffer_[6] | ((pucRxBuffer_[7] & 0x0F) << 8);
- break;
- case PAGE4_BATTERY:
- usChargeCycleCount = pucRxBuffer_[2] | ((pucRxBuffer_[3] & 0x0F) << 8);
- usFuelConsumption = pucRxBuffer_[4] | (((pucRxBuffer_[3] & 0xF0) >> 4) << 8);
- ucBatteryVoltage = pucRxBuffer_[5];
- usDistanceOnCharge = pucRxBuffer_[6] | (pucRxBuffer_[7] << 8);
- break;
- case PAGE5_CAPABILITES:
- ucSupportedTravelModes = pucRxBuffer_[2];
- usWheelCircumference = pucRxBuffer_[3] | ((pucRxBuffer_[4] & 0x0F) << 8);
- break;
- case PAGE16_DISPLAY_DATA:
- usP16WheelCircum = pucRxBuffer_[1] | ((pucRxBuffer_[2] & 0x0F) << 8);
- ucP16TravelMode = pucRxBuffer_[3];
- usP16DisplayCommand = pucRxBuffer_[4] | (pucRxBuffer_[5] << 8);
- usP16ManID = pucRxBuffer_[6] | (pucRxBuffer_[7] << 8);
- break;
- case PAGE34_SPEED_DISTANCE:
- ulP34Odometer = pucRxBuffer_[1] | ((pucRxBuffer_[2] & 0xFF) << 8 ) | ((pucRxBuffer_[3] & 0xFF) << 16);
- usP34FuelConsumption = (pucRxBuffer_[4] | ((pucRxBuffer_[5] & 0xFF) << 8)) & 0x0FFF;
- usSpeed = (pucRxBuffer_[6] | ((pucRxBuffer_[7] & 0xFF) << 8)) & 0x0FFF;
- break;
- default:
- break;
- }
- }
- void EncodeData(UCHAR ucPageNum_, UCHAR* pucTxBuffer_)
- {
- switch(ucPageNum_)
- {
- case PAGE1_SPEED_SYSTEM1:
- pucTxBuffer_[0] = ucPageNum_;
- pucTxBuffer_[1] = ucTemperature;
- pucTxBuffer_[2] = ucTravelModeState;
- pucTxBuffer_[3] = ucSystemState;
- pucTxBuffer_[4] = ucGearState;
- pucTxBuffer_[5] = ucErrorMessage;
- pucTxBuffer_[6] = usCurrentLEVSpeed & BYTE_MASK;
- pucTxBuffer_[7] = (usCurrentLEVSpeed >> 8) & 0x0FFF;
- break;
- case PAGE2_SPEED_DISTANCE:
- pucTxBuffer_[0] = ucPageNum_;
- pucTxBuffer_[1] = ulOdometer & BYTE_MASK;
- pucTxBuffer_[2] = (ulOdometer >> 8) & BYTE_MASK;
- pucTxBuffer_[3] = (ulOdometer >> 16) & BYTE_MASK;
- pucTxBuffer_[4] = usRemainingRange & BYTE_MASK;
- pucTxBuffer_[5] = (usRemainingRange >> 8) & 0x0FFF;
- pucTxBuffer_[6] = usCurrentLEVSpeed & BYTE_MASK;
- pucTxBuffer_[7] = (usCurrentLEVSpeed >> 8) & 0x0FFF;
- break;
- case PAGE3_SPEED_SYSTEM2:
- pucTxBuffer_[0] = ucPageNum_;
- pucTxBuffer_[1] = ucBatteryCharge;
- pucTxBuffer_[2] = ucTravelModeState;
- pucTxBuffer_[3] = ucSystemState;
- pucTxBuffer_[4] = ucGearState;
- pucTxBuffer_[5] = ucPercentAssist;
- pucTxBuffer_[6] = usCurrentLEVSpeed & BYTE_MASK;
- pucTxBuffer_[7] = (usCurrentLEVSpeed >> 8) & 0x0FFF;
- break;
- case PAGE4_BATTERY:
- pucTxBuffer_[0] = ucPageNum_;
- pucTxBuffer_[1] = RESERVED;
- pucTxBuffer_[2] = usChargeCycleCount & BYTE_MASK;
- pucTxBuffer_[3] = ((usChargeCycleCount >> 8) | (usFuelConsumption >> 4) & 0xF0);
- pucTxBuffer_[4] = usFuelConsumption & BYTE_MASK;
- pucTxBuffer_[5] = ucBatteryVoltage;
- pucTxBuffer_[6] = usDistanceOnCharge & BYTE_MASK;
- pucTxBuffer_[7] = (usDistanceOnCharge >> 8) & BYTE_MASK;
- break;
- case PAGE5_CAPABILITES:
- pucTxBuffer_[0] = ucPageNum_;
- pucTxBuffer_[1] = RESERVED;
- pucTxBuffer_[2] = ucSupportedTravelModes;
- pucTxBuffer_[3] = usWheelCircumference & BYTE_MASK;
- pucTxBuffer_[4] = (usWheelCircumference >> 8) & 0x0FFF;
- pucTxBuffer_[5] = RESERVED;
- pucTxBuffer_[6] = RESERVED;
- pucTxBuffer_[7] = RESERVED;
- break;
- case PAGE16_DISPLAY_DATA:
- pucTxBuffer_[0] = ucPageNum_;
- pucTxBuffer_[1] = usP16WheelCircum & BYTE_MASK;
- pucTxBuffer_[2] = (usP16WheelCircum >> 8) & 0x0FFF;
- pucTxBuffer_[3] = ucP16TravelMode;
- pucTxBuffer_[4] = usP16DisplayCommand & BYTE_MASK;
- pucTxBuffer_[5] = (usP16DisplayCommand >> 8) & BYTE_MASK;
- pucTxBuffer_[6] = usP16ManID & BYTE_MASK;
- pucTxBuffer_[7] = (usP16ManID >> 8) & BYTE_MASK;
- break;
- case PAGE34_SPEED_DISTANCE:
- pucTxBuffer_[0] = ucPageNum_;
- pucTxBuffer_[1] = ulP34Odometer & BYTE_MASK;
- pucTxBuffer_[2] = (ulP34Odometer >> 8) & BYTE_MASK;
- pucTxBuffer_[3] = (ulP34Odometer >> 16) & BYTE_MASK;
- pucTxBuffer_[4] = usP34FuelConsumption & BYTE_MASK;
- pucTxBuffer_[5] = ((usFuelConsumption >> 8) & BYTE_MASK) | 0xF0;
- pucTxBuffer_[6] = usSpeed & BYTE_MASK;
- pucTxBuffer_[7] = ((usSpeed >> 8) & BYTE_MASK) | 0xF0;
- break;
- case PAGE70_REQUEST:
- pucTxBuffer_[0] = ucPageNum_;
- pucTxBuffer_[1] = RESERVED;
- pucTxBuffer_[2] = RESERVED;
- pucTxBuffer_[3] = RESERVED;
- pucTxBuffer_[4] = RESERVED;
- pucTxBuffer_[5] = ucP70TxTimes;
- pucTxBuffer_[6] = ucP70RequestedPage;
- pucTxBuffer_[7] = 0x01;
- break;
- default:
- break;
- }
- }
- };
|