使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