meterComm.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. /*
  2. * meterComm.h
  3. *
  4. * Created on: 2021/6/4
  5. * Author: foluswen
  6. */
  7. #ifndef HEADER_METERCOMM_H_
  8. #define HEADER_METERCOMM_H_
  9. #include <sys/time.h>
  10. #include <sys/timeb.h>
  11. #include <sys/types.h>
  12. #include <sys/stat.h>
  13. #include <sys/types.h>
  14. #include <sys/ioctl.h>
  15. #include <sys/socket.h>
  16. #include <sys/ipc.h>
  17. #include <sys/shm.h>
  18. #include <sys/shm.h>
  19. #include <sys/mman.h>
  20. #include <linux/wireless.h>
  21. #include <arpa/inet.h>
  22. #include <netinet/in.h>
  23. #include <unistd.h>
  24. #include <stdarg.h>
  25. #include <stdio.h>
  26. #include <stdlib.h>
  27. #include <unistd.h>
  28. #include <fcntl.h>
  29. #include <termios.h>
  30. #include <errno.h>
  31. #include <errno.h>
  32. #include <string.h>
  33. #include <time.h>
  34. #include <ctype.h>
  35. #include <ifaddrs.h>
  36. #include <signal.h>
  37. typedef struct METER_INFO
  38. {
  39. double presetVoltage; // resolution: 1.000v
  40. double presentCurrent; // resolution: 1.000a
  41. double presentPower; // resolution: 1.000kw
  42. double totlizeImportEnergy; // resolution: 1.000kwh
  43. double totlizeExportEnergy; // resolution: 1.000kwh
  44. unsigned char timestamp[32];
  45. unsigned char LinkStatus; // 0 = unknow ,1 = link , 2 miss link
  46. }Meter_Info;
  47. typedef union
  48. {
  49. unsigned char Status;
  50. struct
  51. {
  52. unsigned char suLinkStatusIsOk:1;
  53. unsigned char muFatalErrorOccured:1;
  54. unsigned char transactionIsOnGoing:1;
  55. unsigned char tamperingIsDetected:1;
  56. unsigned char timeSyncStatusIsOk:1;
  57. unsigned char overTemperatureIsDetected:1;
  58. unsigned char reversedVoltage:1;
  59. unsigned char suMeasureFailureOccurred:1;
  60. }bits;
  61. }StatusFlag;
  62. typedef union
  63. {
  64. unsigned char Errors;
  65. struct
  66. {
  67. unsigned char muInitIsFailed:1;
  68. unsigned char suStateIsInvalid:1;
  69. unsigned char versionCheckIsFailed:1;
  70. unsigned char muRngInitIsFailed:1;
  71. unsigned char muDataIntegrityIsFailed:1;
  72. unsigned char muFwIntegrityIsFailed:1;
  73. unsigned char suIntegrityIsFailed:1;
  74. unsigned char logbookIntegrityIsFailed:1;
  75. unsigned char logbookIsFull:1;
  76. unsigned char memoryAccessIsFailed:1;
  77. unsigned char muStateIsFailed:1;
  78. unsigned char res:5;
  79. }bits;
  80. }ErrorFlag;
  81. typedef struct METER_STATUS_INFO
  82. {
  83. unsigned short StatusValue;
  84. StatusFlag MeterStatusFlag;
  85. unsigned char applicationFirmwareVersion[16];
  86. unsigned char applicationFirmwareAuthTag[32];
  87. unsigned char legalFirmwareVersion[16];
  88. unsigned char legalFirmwareAuthTag[32];
  89. unsigned char sensorFirmwareVersion[16];
  90. unsigned char sensorFirmwareCrc[4];
  91. unsigned char Systime[32];
  92. unsigned char ipAddress[32];
  93. unsigned char meterId[32];
  94. unsigned short ErrorValue;
  95. ErrorFlag MeterErrorFlag;
  96. unsigned char publicKey[140];
  97. unsigned char publicKeyOcmf[200];
  98. unsigned short indexOfLastTransaction;
  99. unsigned short numberOfStoredTransactions;
  100. }Meter_Status_Info;
  101. typedef struct METER_TRANSACTION_HEAD
  102. {
  103. unsigned char evseId[32];
  104. unsigned char transactionId[32];
  105. unsigned char clientId[32];
  106. unsigned short tariffId;
  107. unsigned short cableId;
  108. unsigned short userData[32];
  109. }Meter_transaction_Head;
  110. typedef struct METER_TRANSACTION_ACTION
  111. {
  112. Meter_transaction_Head head;
  113. unsigned char transactionOCMF[2048];
  114. unsigned char OcmfInfoReady; // 0 = nothing, 1 = ocmp info ready
  115. unsigned char ActionCmd; // 0 = nothing ,1 = transaction Start , 2 transaction Stop , sync time
  116. }Meter_transaction_Action;
  117. typedef union
  118. {
  119. unsigned char Status;
  120. struct
  121. {
  122. unsigned char intermediateRead:1;
  123. unsigned char res:7;
  124. }bits;
  125. }TransactionReadlevel;
  126. typedef struct METER_TRANSACTION_RESULT
  127. {
  128. unsigned short paginationCounter;
  129. Meter_transaction_Head head;
  130. unsigned char timestampStart[32];
  131. unsigned char timestampStop[32];
  132. unsigned int transactionDuration;
  133. TransactionReadlevel intermediateRead;
  134. unsigned int transactionStatus;
  135. unsigned char energyUnit[8];
  136. double energyImport;
  137. double energyImportTotalStart;
  138. double energyImportTotalStop;
  139. double energyExport;
  140. double energyExportTotalStart;
  141. double energyExportTotalStop;
  142. unsigned char signature[140];
  143. //unsigned char transactionOCMF[512];
  144. }Meter_transaction_Result;
  145. enum METER_MODEL
  146. {
  147. METER_MODEL_LEM_L18005A=0,
  148. };
  149. extern void meterInitialize(uint8_t model);
  150. extern int readMeterLivemeasure(uint8_t meterIndex, Meter_Info *meter_info);
  151. extern int readMeterStatusInfo(uint8_t meterIndex, Meter_Status_Info *meter_status_info);
  152. extern int startMeterTransaction(uint8_t meterIndex, Meter_transaction_Action *meter_transaction_Action);
  153. extern int stopMeterTransaction(uint8_t meterIndex, Meter_transaction_Action *meter_transaction_Action,Meter_transaction_Result *meter_transaction_Result);
  154. extern int readMeterTransactionOCMF(uint8_t meterIndex, Meter_transaction_Action *meter_transaction_Action);
  155. extern int readMeterLegal(uint8_t meterIndex, Meter_transaction_Action *meter_transaction_Action);
  156. extern int configure_meter_time(uint8_t meterIndex);
  157. extern unsigned char meterModel;
  158. extern char meterApiAddress[];
  159. #endif /* HEADER_METERCOMM_H_ */