/* * meterComm.h * * Created on: 2021/6/4 * Author: foluswen */ #ifndef HEADER_METERCOMM_H_ #define HEADER_METERCOMM_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef struct METER_INFO { double presetVoltage; // resolution: 1.000v double presentCurrent; // resolution: 1.000a double presentPower; // resolution: 1.000kw double totlizeImportEnergy; // resolution: 1.000kwh double totlizeExportEnergy; // resolution: 1.000kwh unsigned char timestamp[32]; unsigned char LinkStatus; // 0 = unknow ,1 = link , 2 miss link }Meter_Info; typedef union { unsigned char Status; struct { unsigned char suLinkStatusIsOk:1; unsigned char muFatalErrorOccured:1; unsigned char transactionIsOnGoing:1; unsigned char tamperingIsDetected:1; unsigned char timeSyncStatusIsOk:1; unsigned char overTemperatureIsDetected:1; unsigned char reversedVoltage:1; unsigned char suMeasureFailureOccurred:1; }bits; }StatusFlag; typedef union { unsigned char Errors; struct { unsigned char muInitIsFailed:1; unsigned char suStateIsInvalid:1; unsigned char versionCheckIsFailed:1; unsigned char muRngInitIsFailed:1; unsigned char muDataIntegrityIsFailed:1; unsigned char muFwIntegrityIsFailed:1; unsigned char suIntegrityIsFailed:1; unsigned char logbookIntegrityIsFailed:1; unsigned char logbookIsFull:1; unsigned char memoryAccessIsFailed:1; unsigned char muStateIsFailed:1; unsigned char res:5; }bits; }ErrorFlag; typedef struct METER_STATUS_INFO { unsigned short StatusValue; StatusFlag MeterStatusFlag; unsigned char applicationFirmwareVersion[16]; unsigned char applicationFirmwareAuthTag[32]; unsigned char legalFirmwareVersion[16]; unsigned char legalFirmwareAuthTag[32]; unsigned char sensorFirmwareVersion[16]; unsigned char sensorFirmwareCrc[4]; unsigned char Systime[32]; unsigned char ipAddress[32]; unsigned char meterId[32]; unsigned short ErrorValue; ErrorFlag MeterErrorFlag; unsigned char publicKey[140]; unsigned char publicKeyOcmf[200]; unsigned short indexOfLastTransaction; unsigned short numberOfStoredTransactions; }Meter_Status_Info; typedef struct METER_TRANSACTION_HEAD { unsigned char evseId[32]; unsigned char transactionId[32]; unsigned char clientId[32]; unsigned short tariffId; unsigned short cableId; unsigned short userData[32]; }Meter_transaction_Head; typedef struct METER_TRANSACTION_ACTION { Meter_transaction_Head head; unsigned char transactionOCMF[2048]; unsigned char OcmfInfoReady; // 0 = nothing, 1 = ocmp info ready unsigned char ActionCmd; // 0 = nothing ,1 = transaction Start , 2 transaction Stop , sync time }Meter_transaction_Action; typedef union { unsigned char Status; struct { unsigned char intermediateRead:1; unsigned char res:7; }bits; }TransactionReadlevel; typedef struct METER_TRANSACTION_RESULT { unsigned short paginationCounter; Meter_transaction_Head head; unsigned char timestampStart[32]; unsigned char timestampStop[32]; unsigned int transactionDuration; TransactionReadlevel intermediateRead; unsigned int transactionStatus; unsigned char energyUnit[8]; double energyImport; double energyImportTotalStart; double energyImportTotalStop; double energyExport; double energyExportTotalStart; double energyExportTotalStop; unsigned char signature[140]; //unsigned char transactionOCMF[512]; }Meter_transaction_Result; enum METER_MODEL { METER_MODEL_LEM_L18005A=0, }; extern void meterInitialize(uint8_t model); extern int readMeterLivemeasure(uint8_t meterIndex, Meter_Info *meter_info); extern int readMeterStatusInfo(uint8_t meterIndex, Meter_Status_Info *meter_status_info); extern int startMeterTransaction(uint8_t meterIndex, Meter_transaction_Action *meter_transaction_Action); extern int stopMeterTransaction(uint8_t meterIndex, Meter_transaction_Action *meter_transaction_Action,Meter_transaction_Result *meter_transaction_Result); extern int readMeterTransactionOCMF(uint8_t meterIndex, Meter_transaction_Action *meter_transaction_Action); extern int readMeterLegal(uint8_t meterIndex, Meter_transaction_Action *meter_transaction_Action); extern int configure_meter_time(uint8_t meterIndex); extern unsigned char meterModel; extern char meterApiAddress[]; #endif /* HEADER_METERCOMM_H_ */