2在代码中使用sdk-暴风魔镜官网2在代码中使用sdk-暴风魔镜官网
MojingSDK for iOS
开发说明文档
北京暴风魔镜科技有限公司
2015-09
2014-2015 北京暴风魔镜技术有限公司 1 / 19 ?
法律声明
本文档包含的所有内容除特别声明以外,版权均属于北京暴风魔镜科技有限
公司所有。未经本公司书面许可,任何单位和个人不得以任何方式,电子机械,
包括影印,翻印或转载本文档的任何部分,否则将视为侵权,追究法律责任。
一. SDK发布说明 ............................................
2在代码中使用sdk-暴风魔镜官网
MojingSDK for iOS
开发说明文档
北京暴风魔镜科技有限公司
2015-09
2014-2015 北京暴风魔镜技术有限公司 1 / 19 ?
法律声明
本文档包含的所有内容除特别声明以外,版权均属于北京暴风魔镜科技有限
公司所有。未经本公司书面许可,任何单位和个人不得以任何方式,电子机械,
包括影印,翻印或转载本文档的任何部分,否则将视为侵权,追究法律
。
一. SDK发布说明 ............................................................................................................ 4 1 SDK发布包的文件格式 .......................................................................................... 4 2 SDK的命名规范..................................................................................................... 4
二. SDK的使用说明和接口说明 ....................................................................................... 4 1 在工程中使用SDK ................................................................................................ 4
在代码中使用SDK ................................................................................................ 5 2
2.1 初始化SDK ................................................................................................. 5
2.2 使用头部跟踪系统 ....................................................................................... 5
2.2.1 启动头部跟踪 ..................................................................................... 5
2.2.2 检查当前手机设备的传感器信息 ......................................................... 6
2.2.3 头部跟踪复位 ..................................................................................... 6
2.2.4 复位YAW旋转角 ............................................................................... 6
2.2.5 开始校准头部跟踪偏置值 ................................................................... 6
2.2.6 获取头部跟踪偏置值是否已经校准 ..................................................... 7
2.2.7 获取当前视角,以矩阵形式
示 ......................................................... 7
2.2.8 获取当前视角,以欧拉角表示 ............................................................ 7
2.2.9 获取当前视角,以四元数表示 ............................................................ 7
2.2.10 停止使用头部跟踪 ............................................................................ 8
2.3 使用反畸变 .................................................................................................. 8
2.3.1 启用畸变 ............................................................................................ 8
2.3.2 获取推荐视场角(FOV) ........................................................................ 8
2.3.3 获取绘制纹理 ..................................................................................... 8
2.3.4 绘制畸变图像 ..................................................................................... 9
2.3.5 绘制场景变化通知 .............................................................................10
2.3.6 更改绘制图像的垂直位置(内测功能) ..................................................10
2.3.7 修改畸变适配的眼镜型号(414开始提供此功能) .................................10
2.3.8 停用畸变 ...........................................................................................10
2.3.9 在屏幕中央位置绘制辅助线 ............................................................... 11
2.4 获取SDK支持的厂商-产品-眼镜的信息 ...................................................... 11
2014-2015 北京暴风魔镜技术有限公司 2 / 19 ?
2.4.1 获取SDK支持的厂家列表................................................................. 11
2.4.2 获取SDK支持的特定厂商的产品列表 ...............................................12
2.4.3 获取SDK支持的产品镜片列表..........................................................12
2.4.4 获取Key的完整描述信息..................................................................13
2.4.5 拼接两个Key ....................................................................................14 2.5 获取SDK的信息 ........................................................................................15
.5.1 获取SDK版本信息 ...........................................................................15 2
2.5.2 获取SDK是否已经调用Init函数 ......................................................15
2.5.3 获取是否已经启用了头部跟踪 ...........................................................15
2.5.4 获取是否已经进入了魔镜世界 ...........................................................15
2.5.5 获取进入魔镜世界时指定的畸变算法适配的眼镜型号 ........................15
2.6 输出Log信息 .............................................................................................16
2.6.1 输出指定Log到文本 .........................................................................16 2.7 使用蓝牙手柄 .............................................................................................16
2.7.1 接入蓝牙手柄 ....................................................................................16
2.7.2 开始扫描蓝牙设备 .............................................................................17
2.7.3 停止扫描蓝牙设备 .............................................................................17
2.7.4 断开蓝牙设备 ....................................................................................17
2.7.5 设置是否自动扫描 .............................................................................18
2.7.6 手柄按键响应 ....................................................................................18
2.7.7 获得摇杆坐标 ....................................................................................19
2014-2015 北京暴风魔镜技术有限公司 3 / 19 ?
MojingSDK For iOS(下文简称SDK)是为了配合iOS软件开发者开发适用于暴风魔镜(R)2代、3代产品而推出的SDK(Software Development Kit)开发包。开发包主要从手机头部跟踪数据获取和静态偏置值纠偏,官方和第三方蓝牙手柄接入支持,以及图像抗镜片畸变、抗色散等方面为开发者提供便利性支持。
一. SDK发布说明
1 SDK发布包的文件格式
SDK采用
ZIP压缩文档格式发布,压缩文档中目前包含有以下文件,其意义为:
MojingSDK.framework 提供SDK功能的Framework。
MojingSDK.bundle SDK运行所需要的配置文件资源包。
Doc SDK相关文档。
2 SDK的命名规范
SDK发布包的文件命名为“MojingSDK_For_iOS V A.B.CCC (D)”。其中各个部分的含义如下:
, MojingSDK_For_iOS 表示是MojingSDK For iOS。
, V A.B.CCC 表示SDK的版本。目前A.B固定为1.1,CCC根据SDK修改的次数在每
次发布时单调递增。
, (D)表示发布的性质,目前(R)表示正式发布版,将在发布群中进行发布。(D)表示调
式版,不在发布群上发布,只根据需要发布给需要的特定开发人员。其他取值表示特殊
订制版,不在发布群上发布,只根据需要发布给需要的特定开发人员。
二. SDK的使用说明和接口说明
1 在工程中使用SDK
以Xcode为例,将SDK发布包解压缩后,按以下格式组织到工程中(如下图)。(工程中需要同时加入OpenGLES.framework、 CoreMotion.framework、 CoreBluetooth.framework、GameController.framework、CoreGraphics.framework、libz.dylib等系统库)。
2014-2015 北京暴风魔镜技术有限公司 4 / 19 ?
2 在代码中使用SDK
魔镜SDK的接口封装在头文件
中,以下为各API详细介绍。
2.1 初始化SDK
Bool MojingSDK_API_Init()
函数功能: 初始化SDK运行环境。此函数必须在调用其它SDK函数之前调用。
输入参数: 无。
返回值: 初始化成功返回True,否则返回False。
注意: 此接口的执行过程中会初始化SDK的运行环境,包括从SDK服务器
更最新的适配于用户手机的配置参数。建议尽早调用此函数。
2.2 使用头部跟踪系统
2.2.1 启动头部跟踪
bool MojingSDK_API_StartTracker(int nSampleFrequence);
函数功能: 启动头部跟踪,此函数必须在调用其它头部跟踪函数之前调用。
输入参数: 采样频率,以Hz为单位。内部会判定用户手机头部跟踪可使用的最小采
样间隔,如果最小采样间隔不能满足nSampleFrequence参数所指定的采
样频率,则自动采用手机允许的最小采采样间隔。
返回值: 初始化成功返回True,否则返回False。
2014-2015 北京暴风魔镜技术有限公司 5 / 19 ?
注意: 调用本函数之前,所有其他的头部跟踪相关函数调用都将失败。
本函数必须与StopTracker函数成对调用。
2.2.2 检查当前手机设备的传感器信息
int CheckSensors()
函数功能: 检查传感器状态。
输入参数: 无。
返回值: 0表示成功,其他值表示异常,具体内容如下值的安位与。
返回值 定义 说明
SENSOR_ERROR_NOERROR 没有检查到异常 0
SENSOR_ERROR_NoMag 没有地磁传感器 1
SENSOR_ERROR_NoGryo 没有陀螺仪 4
SENSOR_ERROR_GryoTooSlow 陀螺仪采样频率过低 8
SENSOR_ERROR_NoAccel 没有加速度传感器 16
SENSOR_ERROR_AccelTooSlow 加速度传感器采样频率过低 32
2.2.3 头部跟踪复位
void MojingSDK_API_ResetTracker() 函数功能: 头部跟踪复位。
输入参数: 无。
返回值: 无。
2.2.4 复位YAW旋转角
void MojingSDK_API_ResetSensorOrientation()
函数功能: YAW旋转角度复位,即欧拉角中的横摇角。
输入参数: 无。
返回值: 无。
2.2.5 开始校准头部跟踪偏置值
boo MojingSDK_API_StartTrackerCalibration();
函数功能: 强制校准头部跟踪偏置值。
2014-2015 北京暴风魔镜技术有限公司 6 / 19 ?
输入参数: 无。
返回值: 成功清楚偏置值校准状态返回True,否则返回False。 注意: 无论是否调用此函数,在StartTracker之后都会自动进入校准状态。 2.2.6 获取头部跟踪偏置值是否已经校准
float MojingSDK_API_IsTrackerCalibrated(); 函数功能: 获取头部跟踪偏置值是否已经校准或校准进度。
输入参数: 无。
返回值: 已经校准过返回1,否则返回小于1的浮点数表示进度百分比。
当传感器校准过程中出现较大的数据误差时,会自动重置校准过程。 2.2.7 获取当前视角,以矩阵形式表示
void MojingSDK_API_getLastHeadView(float* pMatrixArray)
函数功能: 获取当前视角,以矩阵形式表示。
输入参数: pMatrixArray浮点型数组,长度必须是16。
返回值: 返回的视角信息存放于pMatrixArray数组中。
2.2.8 获取当前视角,以欧拉角表示
void MojingSDK_API_getLastHeadEulerAngles(float* pEulerAngles);
函数功能: 获取当前视角,以欧拉角形式表示。
输入参数: pEulerAngles浮点型数组,长度必须是3。
返回值: 返回的视角信息存放于headEulerAngles数组中。其中,
pEulerAngles[0] = yaw;
pEulerAngles[1] = pitch;
pEulerAngles[2] = roll; 2.2.9 获取当前视角,以四元数表示
void MojingSDK_API_getLastHeadQuarternion(float* pUnitQuarternion, int length )
函数功能: 获取当前视角,以四元数形式表示。
输入参数: pUnitQuarternion浮点型数组。
length 数组长度,长度必须是4。
返回值: 返回的视角信息存放于pUnitQuarternion数组中。其中,
pUnitQuarternion[0] = w;
pUnitQuarternion[1] = x;
pUnitQuarternion[2] = y;
pUnitQuarternion[3] = z;
2014-2015 北京暴风魔镜技术有限公司 7 / 19 ?
2.2.10 停止使用头部跟踪
void MojingSDK_API_StopTracker() 函数功能: 停止使用头部跟踪。
输入参数: 无。
返回值: 无。
注意: 调用此函数之后,除StartTracker之外其他的头部跟踪调用都将不可使用。
本函数必须与StartTracker函数成对调用。
2.3 使用反畸变
反畸变是为了适用于对抗镜片畸变、色散而必须在显示图像中做特殊的图形处理和颜色处理的过程。
如无特别声明,所有畸变函数的调用必须在Open GL线程中进行。 2.3.1 启用畸变
bool MojingSDK_API_EnterMojingWorld(NSString* GlassesName)
函数功能: 启动畸变系统。
输入参数: GlassesName指定畸变需要适配的眼镜型号,参见附录一。
返回值: True 表示执行成功,False表示执行失败。
2.3.2 获取推荐视场角(FOV)
float MojingSDK_API_GetMojingWorldFOV()
函数功能: 获取推荐的视场角,以角度为单位。
输入参数: 无。
返回值: 以角度为单位的视场角大小。
2.3.3 获取绘制纹理
int MojingSDK_API_GetEyeTextureParameter(int eyeTextureType)
函数功能: SDK根据当前的眼镜型号、畸变参数、和手机屏幕尺寸,生成一副纹理。
输入参数: eyeTextureType,表示请求的纹理类型。它的值可以是:
1 请求的纹理用于绘制左眼图像;
2 请求的纹理用于绘制右眼图像;
3 请求的纹理用于绘制双眼图像;
2014-2015 北京暴风魔镜技术有限公司 8 / 19 ?
输出参数: EyeTextureParameter 对象,描述产生的纹理细节信息。主要数据成员的
定义如下:
m_EyeTexID:SDK分配的纹理ID。0表示分配失败。
m_EyeTexType:同eyeTextureType参数。
m_Width: 纹理的宽度
m_Height: 纹理的高度
m_Format: 纹理的颜色格式
返回值: 成功返回TextureID,失败返回0
注意: 通过此函数得到Texture句柄以后,应该根据纹理的类型绘制对应的图像
内容,图像内容应该充满整个纹理。
推荐分别获取单眼的纹理并分别绘制图像后交由绘制畸变图像方法绘制。
使用自行创建的纹理绘制并绘制图像后交由反畸变系统绘制的方法依
然被SDK支持,但是不推荐使用。
2.3.4 绘制畸变图像
bool MojingSDK_API_DrawTexture(int LeftTexID, int RightTexID)
函数功能: 将指定的纹理图像绘制于调用此函数时的活动Surface上。 输入参数: LeftTexID 指定绘制于左眼的纹理。传入0值或非法纹理时将绘制网格纹
理。
RightTexID 指定绘制于右眼的纹理。传入与LeftTextID相同的值的时候,
将把纹理的左半部分绘制于左眼,右半部分绘制于右眼。传入0值或非法
纹理值得时候,如果左眼纹理有效则将左眼纹理绘制于右眼,否则绘制网
格纹理。
返回值: True 表示执行成功,False表示执行失败,被迫绘制了不预期的网格纹理。
注意: 绘制图像真值表
方案 左眼图像 右眼图像 LeftTexID RightTexID
0 或者非法纹理 0 或者非法纹理 网格 网格 0
0 或者非法纹理 网格 网格 1 RightTexID
0 或者非法纹理 2 LeftTexID LeftTexID LeftTexID
LeftTexID左 LeftTexID右 3 LeftTexID LeftTexID
4 LeftTexID RightTexID LeftTexID RightTexID
绘
制方案2、4建议输入的纹理是矩形纹理,且周围有1Pix的黑边。
绘制方案3建议输入的纹理长宽比2:1,且每左半幅、右半幅各有1Pix的
黑边。不推荐使用此方案。
如果传入的纹理来自SDK
2014-2015 北京暴风魔镜技术有限公司 9 / 19 ?
2.3.5 绘制场景变化通知
boolMojingSDK_API_OnSurfaceChanged(int newWidth, int newHeight)
函数功能: 当绘制场景变化时,通知SDK根据新的屏幕尺寸计算畸变参数。 输入参数: newWidth 新的窗口宽度值,必须是窗口的长边;
newHeigth 新的窗口高度值,必须是窗口的短边; 返回值: True 表示执行成功,False表示执行失败。
注意: 此函数可以在OpenGL线程之外调用;
新的绘制效果将在下一次调用DrawTexture函数时生效;
初始化SDK调用Init函数时会根据当时的窗口信息取得适用的屏幕尺寸
并在EnterMojingWorld时用该尺寸初始化畸变参数表。
2.3.6 更改绘制图像的垂直位置(内测功能)
void MojingSDK_API_SetImageYOffset(float fYOffset)
函数功能: 更改绘制图像在屏幕上的位置;
输入参数: fYOffset 垂直方向的偏移位置,以图像半幅高度为1,在垂直正方向的增
益值;
返回值: 无。
注意: 此函数可以在OpenGL线程之外调用;
新的绘制效果将在下一次调用DrawTexture函数时生效。
2.3.7 修改畸变适配的眼镜型号(414开始提供此功能) bool MojingSDK_API_ChangeMojingWorld(String GlassesName)
函数功能: 更改绘制图像在屏幕上的位置;
输入参数: GlassesName指定畸变需要适配的眼镜型号,参见附录一。 返回值: True 表示执行成功,False表示执行失败。
注意: 此函数可以在OpenGL线程之外调用;
新的绘制效果将在下一次调用DrawTexture函数时生效。 2.3.8 停用畸变
bool MojingSDK_API_LeaveMojingWorld() 函数功能: 停止使用畸变;
输入参数: 无。
返回值: 无。
注意: 此函数必须与EnterMojingWorld在同一OpenGL线程中成对调用。 2014-2015 北京暴风魔镜技术有限公司 10 / 19 ?
2.3.9 在屏幕中央位置绘制辅助线
Void MojingSDK_API_SetCenterLine(int iWidth, int colR, int colG, int colB, int colA)
函数功能: 在屏幕中央位置绘制一条线帮助用户定位中心位置;
输入参数: iWidth线的宽度,取值范围[0…10],推荐值4。当此参数值为0时不绘制。
colR、colG、colB、colA 指定线条的颜色和Aplha通道。 返回值: 无。
注意: 此函数必须与EnterMojingWorld在同一OpenGL线程中调用。快捷用法
SetCenterLine(iWidth),此时将绘制一条白线。
2.4 获取SDK支持的厂商-产品-眼镜的信息
目前SDK内置了一些厂商的产品和镜片的支持。以下函数将用来枚举SDK所支持的所有厂商-产品-镜片,并且获得调用EnterMojingWorld的Key畸变信息。枚举出来的信息可能根据运行平台和厂商的限制会有不同。
2.4.1 获取SDK支持的厂家列表
NSString* MojingSDK_API_GetManufacturerList(NSString*
strLanguageCodeByISO963 )
函数功能: 获取SDK支持的厂家列表;
输入参数: strLanguageCodeByISO963输入参数语言码参考ISO 963-1,使用两位不
区分大小写的字符。如果对应的条目没有设定指定的语言码的显示内容,
则返回的节点中不会有Display节点。
返回值: 返回JSON字符串,内容类似:
{
"ClassName":"ManufacturerList",
"ReleaseDate":"20150813",//发布/更新日期
"ManufacturerList":[
{
"Display":"厂家的名字,没有设定则不存在此节点",
"ID":不会改变的唯一标识,
"URL":"URL OF Manufacturer Image , Size = 256 x256",
"KEY":"用于后续操作的动态字符串密钥,代表此厂商"
},
{
其他厂商信息…..
2014-2015 北京暴风魔镜技术有限公司 11 / 19 ?
},
]
}
注意: 此函数必须在Init之后调用。
2.4.2 获取SDK支持的特定厂商的产品列表
NSString* MojingSDK_API_GetProductList(NSString* strManufacturerKey ,
NSString* strLanguageCodeByISO963)
函数功能: 获取SDK支持的特定厂商的产品列表;
输入参数: strManufacturerKey 从GetManufacturerList函数中得到的Key。
strLanguageCodeByISO963输入参数语言码参考ISO 963-1,使用两位不
区分大小写的字符。如果对应的条目没有设定指定的语言码的显示内容,
则返回的节点中不会有Display节点。
返回值: 返回JSON字符串,内容类似:
{
"ClassName":"ProductList",
"ReleaseDate":"20150813",//发布/更新日期
"ProductList":[
{
"Display":"产品的名字,没有设定则不存在此节点",
"ID":不会改变的唯一标识,
"URL":"URL OF Product Image , Size = 256 x256",
"KEY":"用于后续操作的动态字符串密钥,代表此厂商-产品组合
"
},
{
其他产品信息….
}
]
}
2.4.3 获取SDK支持的产品镜片列表
NSString* MojingSDK_API_GetGlassList(NSString* strProductKey , NSString*
strLanguageCodeByISO963)
输入参数: strProductKey 从GetProductList函数中得到的Key。
strLanguageCodeByISO963输入参数语言码参考ISO 963-1,使用两位不
2014-2015 北京暴风魔镜技术有限公司 12 / 19 ?
区分大小写的字符。如果对应的条目没有设定指定的语言码的显示内容,
则返回的节点中不会有Display节点。
返回值: 返回JSON字符串,内容类似:
{
"ClassName":"GlassList",
"ReleaseDate":"20150813",//发布/更新日期
"GlassList":[
{
"Display":"镜片的名字,没有设定则不存在此节点",
"ID":不会改变的唯一标识,
"URL":"URL OF Glass Image , Size = 256 x256",
"KEY":"用于后续操作的动态字符串密钥,代表此厂商-产品-镜
片组合。这个Key可以直接用于EnterMojingWorld"
},
{
其他镜片信息….
}
]
}
2.4.4 获取Key的完整描述信息
NSString* MojingSDK_API_GetGlassInfo(NSString* strGlassKey , NSString*
strLanguageCodeByISO963)
输入参数: strGlassKey代表厂商-产品-镜片组合关系的Key。
strLanguageCodeByISO963输入参数语言码参考ISO 963-1,使用两位不
区分大小写的字符。如果对应的条目没有设定指定的语言码的显示内容,
则返回的节点中不会有Display节点。
返回值: 返回JSON字符串,内容类似:
{
"ClassName":"GlassInfo",
"ReleaseDate":"20150813",//发布/更新日期
"Manufacturer":{
"ID": 2,
"Display":"北京暴风魔镜科技有限公司",
"URL":"URL OF Manufacturer Image , Size = 256 x256"
},
"Product":{
"ID": 3,
"Display":"暴风魔镜3代",
"URL":"URL OF Product Image , Size = 256 x256"
2014-2015 北京暴风魔镜技术有限公司 13 / 19 ?
},
"Glass":{
"ID": 2,
"Display":"暴风魔镜III标准镜片",
"URL":"URL OF Glass Image , Size = 256 x256"
}
}
2.4.5 拼接两个Key
NSString* MojingSDK_API_GenerationGlassKey(NSString* strCodeA ,NSString* strCodeB )
输入参数: strCodeA代表厂商-产品-镜片组合关系的Key
strCodeB代表厂商-产品-镜片组合关系的Key
返回值: 使用CodeB中的信息补全CodeA后合成的新的Key。
1.1.1 、发生错误时返回的描述信息
当出错的时候(除了没有初始化MojingSDK)所有返回的JSON字符串可能包含以下错误提醒:
{
"ERROR":"INVALID MANUFACTURER ID", // 错误的厂商ID
"ERROR":"INVALID PRODUCT ID", // 错误的产品ID或者产品ID与厂商不匹配
"ERROR":"INVALID GLASS ID", // 错误的镜片ID或者镜片ID与产品不匹配
"ERROR":"INVALID APP ID", // 错误的应用程序ID或者应用程序ID与当前应用程序不符
"ERROR":"INVALID PLATFORM ID", // 错误的平台ID或者平台ID与当前平台不符
"ERROR":"INVALID KEY", // 无效的KEY
"ERROR":"APP ID MISSING", // 缺少APP ID
"ERROR":"MANUFACTURER ID MISSING",// 缺少厂商ID
"ERROR":"PRODUCT ID MISSING", // 缺少产品 ID
"ERROR":"GLASS ID MISSING", // 缺少镜片 ID
"ERROR":"PLATFORM ID MISSING" // 缺少平台 ID
}
2014-2015 北京暴风魔镜技术有限公司 14 / 19 ?
2.5 获取SDK的信息
2.5.1 获取SDK版本信息
NSString* MojingSDK_API_GetSDKVersion() 函数功能: 获取SDK版本信息;
输入参数: 无。
返回值: 描述SDK版本信息的字符串。
2.5.2 获取SDK是否已经调用Init函数
bool MojingSDK_API_GetInitSDK() 函数功能: 获取SDK是否已经调用Init函数;
输入参数: 无。
返回值: True已经掉用过Init,否则返回False。
2.5.3 获取是否已经启用了头部跟踪
bool MojingSDK_API_GetStartTracker() 函数功能: 获取是否已经启用了头部跟踪;
输入参数: 无。
返回值: 无。
注意: True已经掉用过StartTracker,否则返回False。
2.5.4 获取是否已经进入了魔镜世界
bool MojingSDK_API_GetInMojingWorld() 函数功能: 停止使用畸变;
输入参数: 无。
返回值: 无。
注意: True已经掉用过EnterMojingWorld且处于Open GL线程中,否则返回
False。
2.5.5 获取进入魔镜世界时指定的畸变算法适配的眼镜型号 NSString* MojingSDK_API_GetGlasses() 函数功能: 获取进入魔镜世界时指定的畸变算法适配的眼镜型号; 输入参数: 无。
返回值: 无。
2014-2015 北京暴风魔镜技术有限公司 15 / 19 ?
注意: 眼镜型号字符串,同调用EnterMojingWorld的输入参数。
2.6 输出Log信息
2.6.1 输出指定Log到文本
void MojingSDK_API_Log(int logLevel, NSString* sInfo, NSString* sFileName, int line);
函数功能: 输出自定义Log到指定文本,文本名为MojingSDK_API.log,保持在沙盒Library/Caches/MojingSDK路径下;
输入参数: logLevel 自定义Log级别,便于分类,可用值如下
#define LOG_LEVEL_TRACE 0
#define LOG_LEVEL_DEBUG 1000
#define LOG_LEVEL_INFO 2000
#define LOG_LEVEL_WARN 3000
#define LOG_LEVEL_ERROR 4000
#define LOG_LEVEL_FATAL 5000
#define LOG_LEVEL_OFF 6000 //不输出
sInfo 自定义Log字符串
sFileName Log所在程序的文件名
Line Log所在位置的行号
输出参数: 无。
返回值: 无。
2.7 使用蓝牙手柄
SDK目前支持暴风魔镜iOS平台专用手柄(代号Mojing4)、MFI认证手柄和iCade手柄。
使用时依赖CoreBluetooth.framework、GameController.framework,
手柄支持接口参见头文件 ,
键值和轴id定义参见。
2.7.1 接入蓝牙手柄
- (void)registerGamepad : (UIViewController* )viewCon;
函数功能: 注册蓝牙手柄,以便接收按键(必须调用)。
输入参数: viewCon, 传入UI的UIViewController
返回值: 无。
使用示例: [[MojingGamepad sharedGamepad] registerGamepad];
注意:在设置系统蓝牙开启状态,才可能获得手柄操作信息,可在应用运行前或运行过2014-2015 北京暴风魔镜技术有限公司 16 / 19 ?
程中来开闭系统蓝牙,应用过程中开闭系统蓝牙会收到KEY_BLUETOOTH消息。
正确调用该接口后,
i) 对于Mojing4手柄:
应用启动会自动搜索Mojing4手柄并连接,此后操作手柄在回调中会收到相关
相应,手柄连接上或者断开连接,会收到KEY_CONNECT消息。使用过程中若连
接断开,可通过三种方式重新连接,一是当调用[[MojingGamepad sharedGamepad]
setAutoScan:YES]设置为自动扫描时,会自动扫描连接,二是关闭系统蓝牙再开启,
此时会自动扫描mojing4并尝试自动连接;三是调用scan接口主动扫描并尝试连
接。不使用手柄时可通过关闭手柄电源或者关闭系统蓝牙设置来断开连接。
ii) 对于MFI认证手柄:
在系统蓝牙设置中扫描到手柄并成功连接后,可在应用中操作手柄并接收对应
消息,包括系统蓝牙开闭或手柄连接断开的消息。
iii) 对于iCade类型手柄
在系统蓝牙设置中扫描到手柄并成功连接后,还需设置系统输入法为英文状态
时方可正常接收按键消息及系统蓝牙开闭信息, 目前尚无法接收到手柄连接或断
开消息。
2.7.2 开始扫描蓝牙设备
- (void) scan;
函数功能: 扫描蓝牙设备,目前仅供Mojing4手柄使用。
输入参数: 无
返回值: 无。
使用示例:[[MojingGamepad sharedGamepad] scan];
注意:当系统蓝牙开启,手柄电源开启时调用此接口后方可开始连接手柄。 2.7.3 停止扫描蓝牙设备
- (void) stopScan;
函数功能: 停止扫描蓝牙设备,目前仅供Mojing4手柄使用。
输入参数: 无
返回值: 无。
2.7.4 断开蓝牙设备
- (void) disconnect;
函数功能: 主动断开已连接的蓝牙设备,目前仅供Mojing4手柄使用。
输入参数: 无
返回值: 无。
2014-2015 北京暴风魔镜技术有限公司 17 / 19 ?
2.7.5 设置是否自动扫描
- (void) setAutoScan;
函数功能: 设置断开连接后是否自动扫描蓝牙设备,目前仅供Mojing4手柄使用。
输入参数: bAuto,BOOL类型,YES表示设置为自动扫描
返回值: 无。
2.7.6 手柄按键响应
typedef void(^GamepadButtonValueChangedHandler)(NSString* peripheralName,
AXIS_GAMEPAD axisID, KEY_GAMEPAD button, BOOL bPressed);
函数功能: 回调函数,用于捕获各按键,获取按键对应ID和状态。
输出参数:
axisID: 按键所在轴ID,定义参见MojingKeyCode.h文件,部分定义如下。
typedef enum _AXIS_GAMEPAD
{
AXIS_NONE = 0, //按键无对应轴,比如侧键,XYAB等键。
AXIS_DPAD = 100, //方向键或主轴模拟十字键
AXIS_LEFT = 101, //双手柄左摇杆
AXIS_RIGHT = 102, //双手柄右摇杆
} AXIS_GAMEPAD;
keyID: 捕获的按键ID, 按键定义参见MojingKeyCode.h文件,部分定义如下。
typedef enum _KEY_GAMEPAD
{
KEY_BACK = 4,
KEY_UP = 19,
KEY_DOWN = 20,
KEY_LEFT = 21,
KEY_RIGHT = 22,
KEY_CENTER = 23,
KEY_OK = 66,
KEY_MENU = 82,
BUTTON_A = 96,
BUTTON_B = 97,
BUTTON_X = 99,
BUTTON_Y = 100,
BUTTON_L1 = 102,
BUTTON_R1 = 103,
BUTTON_L2 = 104,
BUTTON_R2 = 105,
BUTTON_THUMBL = 106,
BUTTON_THUMBR = 107, 2014-2015 北京暴风魔镜技术有限公司 18 / 19 ?
BUTTON_START = 108,
BUTTON_SELECT = 109,
BUTTON_MODE = 110,
KEY_CONNECT = 0xFFF0 //为共用接口而加入,标识手柄连接状
态,pressed为YES表示连接,NO表示断开连接
KEY_BLUETOOTH = 0xFFF1 //为共用接口而加入,标识系统设置
蓝牙是否开启,pressed为YES表示开启,NO表示关闭
} KEY_GAMEPAD;
bPressed 按键状态,YES-按下 NO-松开
使用示例:
[MojingGamepad sharedGamepad].buttonValueChangedHandler = ^void(AXIS_GAMEPAD axisID, KEY_GAMEPAD keyID, BOOL pressed){
NSLog(@"按键[ID=%d/%d]%@", axisID, keyID, pressed? @"按下":@"松开");
//Add your code
//当keyID为KEY_CONNECT时,若pressed为YES,则表示MFI蓝牙手柄
连接成功,为NO表示断开连接。
//当keyID为KEY_BLUETOOTH时,若pressed为YES,则表示系统设置蓝
牙开启,为NO表示关闭。
};
2.7.7 获得摇杆坐标
typedef void(^GamepadAxisValueChangedHandler)(AXIS_GAMEPAD axisID, float
xValue, float yValue);
函数功能: 回调函数,获取摇杆的轴坐标(需要时调用)。
输出参数:
axisID 按键所在轴ID,同上,定义参见MojingKeyCode.h文件。
xValue, yValue, 摇杆二维坐标值
使用示例:
[MojingGamepad sharedGamepad].axisValueChangedHandler = ^void(AXIS_GAMEPAD axisID, float xValue, float yValue) {
NSLog(@"摇杆[Pad ID=%d]坐标: (%f, %f)", axisID, xValue, yValue);
//Add your code
};
2014-2015 北京暴风魔镜技术有限公司 19 / 19 ?
本文档为【2在代码中使用sdk-暴风魔镜官网】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。