Infypwr_PsuCommObj.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. /*
  2. * Infypwr_PsuCommObj.h
  3. *
  4. * Created on: 2019年11月26日
  5. * Author: 7564
  6. */
  7. #ifndef INFYPWR_PSUCOMMOBJ_H_
  8. #define INFYPWR_PSUCOMMOBJ_H_
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <stdbool.h>
  12. #include <signal.h>
  13. #include <string.h>
  14. #include <fcntl.h>
  15. #include <unistd.h>
  16. #include <sys/socket.h>
  17. #include <sys/ioctl.h>
  18. #include <linux/wireless.h>
  19. #include <linux/can.h>
  20. #include <linux/can/raw.h>
  21. #include <sys/ipc.h>
  22. #include <sys/shm.h>
  23. #include <sys/time.h>
  24. #include <stdbool.h>
  25. #include <unistd.h>
  26. #include <stdarg.h>
  27. #include <stdio.h> /*標準輸入輸出定義*/
  28. #include <stdlib.h> /*標準函數庫定義*/
  29. #include <unistd.h> /*Unix 標準函數定義*/
  30. #include <fcntl.h> /*檔控制定義*/
  31. #include <termios.h> /*PPSIX 終端控制定義*/
  32. #include <errno.h> /*錯誤號定義*/
  33. #include <errno.h>
  34. #include <string.h>
  35. #include <time.h>
  36. #include <ctype.h>
  37. #include <ifaddrs.h>
  38. #include <math.h>
  39. #define LIB_IN_USE 1
  40. #define LIB_NO_USE 0
  41. #define INFYPWR_CMD 0x02000000
  42. #define INFYPWR_BROADCAST 0x00003F00
  43. #define INFYPWR_DEFAULT 0x000000F0
  44. #define INFYPWR_GROUP_SHIFT 0x00400000
  45. #define SYSTEM_CMD 0x3F
  46. #define DEVICE_NO_SINGLE_MODULE 0x0A
  47. #define DEVICE_NO_GROUP_MODULE 0x0B
  48. #define INFY_ADD_BROADCAST 0x3F
  49. #define INFY_ADD_CSU 0xF0
  50. #define NEXTON_ADD 0xFF
  51. #define ARRAY_SIZE(A) (sizeof(A) / sizeof(A[0]))
  52. #define CMD_DELAY_TIME 25000
  53. #define FAN_SPEED_CMD 0x1201
  54. #define TEMP_DC_CMD 0x1107
  55. #define TEMP_PFC_CMD 0x1108
  56. #define PSU_PROTOCOL_TYPE 0
  57. typedef unsigned char byte;
  58. typedef unsigned short word;
  59. typedef unsigned int unit;
  60. int CanFd;
  61. pid_t recFork;
  62. typedef union
  63. {
  64. unsigned int PwrMessage;
  65. struct
  66. {
  67. unsigned int SourceAddress:8; // source address
  68. unsigned int DestinationAddress:8; // destination address
  69. unsigned int CmdValue:6; // command value
  70. unsigned int DeviceValue:4; // 0x0A: for module command, 0x0B group command
  71. unsigned int Error:3; // error code
  72. unsigned int res:3;
  73. }InfyBits;
  74. struct
  75. {
  76. unsigned int SourceAddress:8; // source address
  77. unsigned int DestinationAddress:8; // destination address
  78. unsigned int CmdValue:13; // command value
  79. unsigned int res:3;
  80. }NextonBits;
  81. }PwrFrame;
  82. enum PSU_POWER_CMD
  83. {
  84. PSU_POWER_ON = 0,
  85. PSU_POWER_OFF = 1,
  86. };
  87. enum PSU_SLEEP_MODE_CMD
  88. {
  89. PSU_SLEEP_MODE_WAKE_UP = 0,
  90. PSU_SLEEP_MODE_SLEEP = 1,
  91. };
  92. enum PSU_FLASH_CMD
  93. {
  94. PSU_FLASH_NORMAL = 0,
  95. PSU_FLASH_ON = 1,
  96. };
  97. enum PSU_FAN_NOISE_CMD
  98. {
  99. PSU_FAN_NOISE_BY_POWER = 0xA0, // power poriority mode
  100. PSU_FAN_NOISE_BY_DENOISE = 0xA1, // denoise mode
  101. PSU_FAN_NOISE_BY_QUIET = 0xA2, // quiet mode
  102. };
  103. enum PSU_SET_CMD
  104. {
  105. MIS_INFO = 0x008F0000, // 現在只能改變降噪模式
  106. FLASH_LED = 0x00940000,
  107. WALK_IN_MODE = 0x00930000,
  108. SLEEP_MODE = 0x00990000, // 當 SWITCH POWER 打開時,可透過該指令讓模塊休眠 (風扇會停)
  109. SWITCH_POWER = 0x009A0000, // 打開,則模塊依照設定的輸出功率輸出
  110. PRESENT_OUT_VOL = 0x009B0000,
  111. DIP_SWITCH_MODE = 0x009F0000, // 設定所有模塊的地址為撥碼方式
  112. /*Ver : 9.06 used*/
  113. TEST_PRESENT_OUT = 0x180100E5,
  114. /*Upgrade*/
  115. CHANGE_BAUDRATE = 0x028F0000
  116. };
  117. enum PSU_GET_CMD
  118. {
  119. MODULE_OUTPUT_VOL_CUR_FLOAT = 0x00810000, // 取得當前輸出電壓電流 (float)
  120. MODULE_COUNT = 0x00820000, // 取得模塊數量
  121. STATUS = 0x00840000, // 取得溫度、狀態
  122. MODULE_INPUT = 0x00860000, // 取得三向輸入電壓
  123. MODULE_VER = 0x00870000, // 取得版號
  124. MODULE_OUTPUT_VOL_CUR = 0x00880000, // 取得當前輸出電壓電流
  125. MODULE_CAP = 0x008A0000, // 取得當前 Group 的最大電壓、最大電流、最小電壓、額定功率
  126. MODULE_BARCODE = 0x008B0000, // 取得 BarCode
  127. MODULE_IAVAILABLE = 0x008C0000, // 取得實際模塊可輸出的電流能力 (降載)
  128. MODULE_MIS_INFO = 0x008E0000, // 取得模塊資訊 (Tdc、Tpfc、風扇速度)
  129. /*Ver : 9.06 used*/
  130. AUTO_OUTPUT_TEMP = 0x00010000,
  131. AUTO_MODULE_STATUS = 0x00020000,
  132. AUTO_MODULE_INPUT = 0x00030000,
  133. };
  134. typedef enum
  135. {
  136. Infy_MsgErr_Normal = 0x00,
  137. Infy_MsgErr_Reserved1 = 0x01,
  138. Infy_MsgErr_CmdInvalid = 0x02,
  139. Infy_MsgErr_DataInvalid = 0x03,
  140. Infy_MsgErr_InvalidAdd = 0x04,
  141. Infy_MsgErr_Reserved2 = 0x05,
  142. Infy_MsgErr_Reserved3 = 0x06,
  143. Infy_MsgErr_StartProcess = 0x07,
  144. }InfyMessageError;
  145. typedef enum
  146. {
  147. PSU_RCmd_SysOutputVolCur_F = 0x01,
  148. PSU_RCmd_SysModuleCount = 0x02,
  149. PSU_RCmd_ModuleOutputVolCur_F = 0x03, // no use
  150. PSU_RCmd_ModuleStatus = 0x04,
  151. PSU_RCmd_ModuleInputVoltage = 0x06,
  152. PSU_RCmd_ModuleVersion = 0x07,
  153. PSU_RCmd_SysOutputVolCur = 0x08,
  154. PSU_RCmd_ModuleOutputVolCur = 0x09, // no use
  155. PSU_RCmd_ModuleCapability = 0x0A,
  156. PSU_RCmd_ModuleBarcode = 0x0B,
  157. PSU_RCmd_ModuleIAvailable = 0x0C,
  158. PSU_RCmd_ModuleMiscInfo = 0x0E,
  159. PSU_WCmd_ModuleSetMiscInfo = 0x0F,
  160. PSU_WCmd_ModuleWalkIn = 0x13,
  161. PSU_WCmd_ModuleFlashLed = 0x14,
  162. PSU_WCmd_ModuleSetGroup = 0x16,
  163. PSU_WCmd_ModuleSleepMode = 0x19,
  164. PSU_WCmd_ModulePowerOnOff = 0x1A,
  165. PSU_WCmd_SetOutput = 0x1B,
  166. PSU_WCmd_ModuleSetOutput = 0x1C,
  167. PSU_WCmd_DipSwitchMode = 0x1F,
  168. }InfyPwrCommand;
  169. typedef enum
  170. {
  171. Nexton_PSU_ChargingRequest = 0x1801,
  172. Nexton_PSU_DcOutputValue = 0x1901,
  173. Nexton_PSU_StatusEvent = 0x1902,
  174. Nexton_PSU_AcInputValue = 0x1903,
  175. }NextonPwrCommand;
  176. typedef enum
  177. {
  178. GetMiscInfo_DcTemperature = 0x1107,
  179. GetMiscInfo_PfcTemperature = 0x1108,
  180. GetMiscInfo_FanSpeed = 0x1201,
  181. }GetMiscInfoCommand;
  182. typedef enum
  183. {
  184. SetMiscInfo_FanMode = 0x1113,
  185. SetMiscInfo_FanSpeed = 0x1201,
  186. SetMiscInfo_CurrentLimit = 0x1205,
  187. SetMiscInfo_SendTemperature = 0x1301,
  188. }SetMiscInfoCommand;
  189. union FloatingPointIEEE754
  190. {
  191. struct
  192. {
  193. unsigned int mantissa : 23;
  194. unsigned int exponent : 8;
  195. unsigned int sign : 1;
  196. } raw;
  197. float f;
  198. } number;
  199. struct INFY_POW_MODULE_INFO
  200. {
  201. byte serialNumber[12];
  202. byte targetNumber[12];
  203. byte psuCount;
  204. };
  205. struct INFY_POW_MODULE_INFO infy_pow_info[4];
  206. /*Initialization*/
  207. bool InitialCommunication();
  208. /*Set Cmd*/
  209. void SwitchPower(byte group, byte value);
  210. void SleepMode(byte group, byte value);
  211. void FlashLed(byte group, byte value);
  212. void PresentOutputVol(byte group, int voltage, int current, byte psuCount);
  213. void FanNoiseInfo(byte group, byte value);
  214. void SetWalkInConfig(byte group, byte enable, byte sec);
  215. void SetDipSwitchMode();
  216. // set only one powermodule to output
  217. void PresentSingleOutput(byte moduleIndex, int voltage, int current);
  218. void SwitchSinglePower(byte moduleIndex, byte value);
  219. void FlashSingleLed(byte moduleIndex, byte value);
  220. void GetSingleModuleOutputF(byte moduleIndex);
  221. /*Ver : 9.06 used*/
  222. void SetDirModulePresentOutput(byte group, int voltage, int current, byte _switch, byte _interRelay);
  223. /*Get Cmd*/
  224. void GetStatus(byte group, byte param);
  225. void GetFanSpeed(byte group);
  226. void GetDcTemperature(byte group);
  227. void GetPfcTemperature(byte group);
  228. void GetFanSpeed(byte group);
  229. void GetModuleCount(byte group);
  230. void GetModuleVer(byte group);
  231. void GetModuleCap(byte group);
  232. void GetModuleBarCode(byte group);
  233. void GetModuleInput(byte group);
  234. void GetModuleIavailable(byte group);
  235. void GetModuleOutput(byte group);
  236. void GetModuleOutputF(byte group);
  237. /*Upgrade*/
  238. void ChangePsuBaudrate(short baudrate);
  239. /* Callback Function */
  240. void RefreshStatus(void *func);
  241. void (*return_status)(byte group, byte address, byte temp, int status, byte type,
  242. unsigned char err1, unsigned char err2, unsigned char err3, unsigned char err4);
  243. void RefreshModuleCount(void *func);
  244. void (*return_module_count)(byte group, byte count);
  245. void RefreshAvailableCap(void *func);
  246. void (*return_available_cap)(byte address, short maxVol, short minVol, short maxCur, short totalPow);
  247. void RefreshFwVersion(void *func);
  248. void (*return_fw_version)(byte address, short dcSwVer, short pfcSwVer, short hwVer, byte type);
  249. void RefreshInputVol(void *func);
  250. void (*return_input_vol)(byte address, unsigned short vol1, unsigned short vol2, unsigned short vol3);
  251. void RefreshGetOutput(void *func);
  252. void (*return_get_output)(byte address, float outVol, float outCur);
  253. void RefreshGetOutputF(void *func);
  254. void (*return_get_output_float)(byte group, float outVol, float outCur, byte type);
  255. void RefreshMisInfo(void *func);
  256. void (*return_mis_info)(byte address, unsigned int fanSpeed, byte type);
  257. void RefreshIavailable(void *func);
  258. void (*return_iavail_info)(byte address, unsigned short Iavail, unsigned short Vext);
  259. /*Test mode used*/
  260. void AutoMode_RefreshOutputAndTemp(void *func);
  261. void (*return_output_temp)(byte address, unsigned short outputVol,
  262. unsigned short outputCur, unsigned short outputPower, unsigned char Temperature, byte type);
  263. void AutoMode_RefreshModuleStatus(void *func);
  264. void (*return_module_status)(byte address, unsigned char isErr, unsigned char status,
  265. unsigned char err1, unsigned char err2, unsigned char err3, unsigned char err4);
  266. void AutoMode_RefreshModuleInput(void *func);
  267. void (*return_module_input)(byte address, unsigned short inputR,
  268. unsigned short inputS, unsigned short inputT);
  269. /* Callback Function end */
  270. #endif /* INFYPWR_PSUCOMMOBJ_H_ */