#pragma once
#include <stdint.h>
#include <string>
#include "MotionGloveSDKDef.h"

#define MOTIONGLOVESDK_MAIN_VERSION   (0)
#define MOTIONGLOVESDK_SUB_VERSION    (0)
#define MOTIONGLOVESDK_MODIFY_VERSION (9)

#define MOTIONGLOVESDK_HEADER         ("FOHEART MotionGloveSDK ")

#define MOTIONGLOVESDK_RELEASE_YEAR  (2025)
#define MOTIONGLOVESDK_RELEASE_MONTH (11)
#define MOTIONGLOVESDK_RELEASE_DAY   (14)

#define _S(x)    #x
#define __S(x)    _S(x)

#define BUILDING_DLL

// 使用字符串表示的版本号
#define VERSION_S_1 __S(MOTIONGLOVESDK_MAIN_VERSION)
#define VERSION_S_2 __S(MOTIONGLOVESDK_SUB_VERSION)
#define VERSION_S_3 __S(MOTIONGLOVESDK_MODIFY_VERSION)

#if defined(_WIN32) || defined(__CYGWIN__)
    #ifdef BUILDING_DLL
        #define DLL_PUBLIC __declspec(dllexport)
    #else
        #define DLL_PUBLIC __declspec(dllimport)
    #endif
#else
    #if __GNUC__ >= 4
        #define DLL_PUBLIC __attribute__ ((visibility("default")))
    #else
        #define DLL_PUBLIC
    #endif
#endif


#ifdef __cplusplus
extern "C" {
#endif

	DLL_PUBLIC  unsigned int MotionGloveSDK_getVersion(void);


	/*
		绑定一个本机的端口，等待读取数据
		nPort:1024 ~ 65535, 默认5001

		返回：
		0：绑定成功。
		-1：绑定失败，一般是因为当前的端口已经被其它程序占用了。
	*/
	 DLL_PUBLIC int MotionGloveSDK_ListenUDPPort(int nPort);

	/*
		关闭当前打开的UDP连接
		0：关闭成功。
		-1：关闭失败，一般是因为当前的端口已经关闭了。
	*/
	 DLL_PUBLIC int MotionGloveSDK_CloseUDPPort(void);

	 /*
	 按照数据流的名称查询是否有新的一帧数据到来。
	 数据流的名称是指在MotionGloveSDK客户端
	 actorName：传入需要查询的数据流的名称，最后需要以0x00结束。
	 例如：Glove1(Live)。
	 actorName的最大长度不能超过64字节，超过64字节后面的字符会被忽略。
	 这里的一个字母占用宽度为1字节，而不能是双字节或Unicode。
	 如果只有一条数据流，那么也可以传入一个0。
	 返回值：
	 true：代表有一帧新的数据。
	 false：没有新的数据。
	 */
	 DLL_PUBLIC  bool MotionGloveSDK_isGloveNewFramePending(const char* actorName);
	 DLL_PUBLIC  bool MotionGloveSDK_resetGloveNewFramePending(const char* actorName);
	 /*
	如果调用MotionGloveSDK_isNewPosePending返回为true，则再次执行这个函数获取实际的数据内容。
	返回值：
	0：获取成功。
	-1：获取失败，可能原因是没有找到名称为actorName的数据流，或者actorName没有以0x00结束。
 */
	 DLL_PUBLIC  int  MotionGloveSDK_GetGloveSkeletonsFrame(const char* actorName, KHHS32PosAttitude_TypeDef* pKHHS32PosAttitude);



#ifdef __cplusplus
};
#endif