使CGO的代码更加的跨平台
This commit is contained in:
		
							
								
								
									
										54
									
								
								Core.go
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								Core.go
									
									
									
									
									
								
							| @@ -14,7 +14,22 @@ package HikSDK | |||||||
| #include <stddef.h> | #include <stddef.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| #include <arpa/inet.h> | #include <stdint.h> | ||||||
|  |  | ||||||
|  | #ifdef _WIN32 | ||||||
|  |     #include <windows.h> | ||||||
|  | #else | ||||||
|  |     #include <unistd.h> | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | void sleep_seconds(int seconds) { | ||||||
|  | #ifdef _WIN32 | ||||||
|  |     Sleep(seconds * 1000);  // Sleep 参数是毫秒 | ||||||
|  | #else | ||||||
|  |     sleep(seconds);         // sleep 参数是秒 | ||||||
|  | #endif | ||||||
|  | } | ||||||
|  |  | ||||||
| #include "HCNetSDK.h" | #include "HCNetSDK.h" | ||||||
|  |  | ||||||
| typedef struct DEVICEINFO | typedef struct DEVICEINFO | ||||||
| @@ -145,16 +160,33 @@ struct SerialData | |||||||
|  |  | ||||||
| struct SerialData serialData; | struct SerialData serialData; | ||||||
|  |  | ||||||
|  | // 自定义 ntohs 函数(仅适用于小端平台) | ||||||
|  | uint16_t my_ntohs(uint16_t netshort) { | ||||||
|  |     return (netshort >> 8) | (netshort << 8); | ||||||
|  | } | ||||||
|  |  | ||||||
| void CALLBACK g_fSerialDataCallBack(LONG lSerialHandle, char *pRecvDataBuffer, DWORD dwBufSize, DWORD dwUser) | void CALLBACK g_fSerialDataCallBack(LONG lSerialHandle, char *pRecvDataBuffer, DWORD dwBufSize, DWORD dwUser) | ||||||
| { | { | ||||||
|     char type = pRecvDataBuffer[3]; |     char type = pRecvDataBuffer[3]; | ||||||
|     printf("type: %x\n", type); |     printf("type: %x\n", type); | ||||||
|     if (type == 0x59){ |  | ||||||
|         serialData.p = (float)ntohs(*(uint16_t*)(pRecvDataBuffer + 4))/100.0f; |     uint16_t raw_value; | ||||||
|     }else if (type == 0x5b){ |     memcpy(&raw_value, pRecvDataBuffer + 4, sizeof(uint16_t)); | ||||||
|         serialData.t = (float)ntohs(*(uint16_t*)(pRecvDataBuffer + 4))/100.0f; |     float converted = (float)my_ntohs(raw_value) / 100.0f; | ||||||
|     }else if (type == 0x5d){ |  | ||||||
|         serialData.z = (float)ntohs(*(uint16_t*)(pRecvDataBuffer + 4))/100.0f; |     switch (type) { | ||||||
|  |         case 0x59: | ||||||
|  |             serialData.p = converted; | ||||||
|  |             break; | ||||||
|  |         case 0x5b: | ||||||
|  |             serialData.t = converted; | ||||||
|  |             break; | ||||||
|  |         case 0x5d: | ||||||
|  |             serialData.z = converted; | ||||||
|  |             break; | ||||||
|  |         default: | ||||||
|  |             // 未知类型 | ||||||
|  |             break; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -165,13 +197,13 @@ void GetPTZPOS(LONG lUserID) | |||||||
|     char z[7] = {0xff, 0x01, 0x00, 0x55, 0x00, 0x00, 0x56}; |     char z[7] = {0xff, 0x01, 0x00, 0x55, 0x00, 0x00, 0x56}; | ||||||
|     LONG lTranHandle = NET_DVR_SerialStart(lUserID, 2,g_fSerialDataCallBack,6); |     LONG lTranHandle = NET_DVR_SerialStart(lUserID, 2,g_fSerialDataCallBack,6); | ||||||
|     LONG lSerialChan = 0; |     LONG lSerialChan = 0; | ||||||
|     sleep(1); |     sleep_seconds(1); | ||||||
|     NET_DVR_SerialSend(lTranHandle, lSerialChan, p, 7); |     NET_DVR_SerialSend(lTranHandle, lSerialChan, p, 7); | ||||||
|     sleep(1); |     sleep_seconds(1); | ||||||
|     NET_DVR_SerialSend(lTranHandle, lSerialChan, t, 7); |     NET_DVR_SerialSend(lTranHandle, lSerialChan, t, 7); | ||||||
|     sleep(1); |     sleep_seconds(1); | ||||||
|     NET_DVR_SerialSend(lTranHandle, lSerialChan, z, 7); |     NET_DVR_SerialSend(lTranHandle, lSerialChan, z, 7); | ||||||
|     sleep(1); |     sleep_seconds(1); | ||||||
|     NET_DVR_SerialStop(lTranHandle); |     NET_DVR_SerialStop(lTranHandle); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 kunmeng
					kunmeng