|
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using Unity.XR.PXR;
|
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace UDESDK
|
|
|
|
|
|
{
|
|
|
|
|
|
public class UDE_SDK
|
|
|
|
|
|
{
|
|
|
|
|
|
private bool IsInitialized = false;
|
|
|
|
|
|
private Dictionary<string, BleHandDriver> bleHandDriver = new();
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Bluetooth Initial.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public void UDE_BleInit()
|
|
|
|
|
|
{
|
|
|
|
|
|
UDE_API.UDE_Init();
|
|
|
|
|
|
IsInitialized = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Start Searching Device.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool UDE_BleStartSearching()
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!IsInitialized)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
UDE_API.StartEnumDevices();
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Stop Searching Device.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool UDE_BleStopSearching()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!IsInitialized)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
UDE_API.StopEnumDevices();
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Bluetooth Devices List.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public List<string> UDE_GetBleDeviceList()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!IsInitialized)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new List<string>();
|
|
|
|
|
|
}
|
|
|
|
|
|
return UDE_API.GetDeviceList();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Connecting a Device by Name.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName">Device Name</param>
|
|
|
|
|
|
public bool UDE_ConnectCertainDevice(string DeviceName, Action<string, bool> action = null)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(string.IsNullOrEmpty(DeviceName) || !IsInitialized)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (UDE_API.OpenDeviceByName(DeviceName, action))
|
|
|
|
|
|
{
|
|
|
|
|
|
bleHandDriver.Add(DeviceName, new BleHandDriver(DeviceName));
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Connection State of a Device.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool UDE_CheckDeviceIsConnect(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !IsInitialized)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return UDE_API.CheckConnectByName(DeviceName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Disconnect a Device.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool UDE_DisconnectDevice(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !IsInitialized)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return UDE_API.CloseDeviceByName(DeviceName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Device Current Battery Level (1~5)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public int UDE_GetDeviceBatteryLevel(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !IsInitialized)
|
|
|
|
|
|
{
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return UDE_API.GetDeviceBatteryByName(DeviceName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Data Update.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool UDE_RunningDataUpdate(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bleHandDriver[DeviceName].Method_update();
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private int CalibrationStepIndex = 1;
|
|
|
|
|
|
public enum CalibrationType
|
|
|
|
|
|
{
|
|
|
|
|
|
AdductFin = -2,
|
|
|
|
|
|
FistFin = -1,
|
|
|
|
|
|
None, //δ<EFBFBD>궨
|
|
|
|
|
|
Fist, //<EFBFBD><EFBFBD>ȭ
|
|
|
|
|
|
Adduct, //<EFBFBD><EFBFBD>£
|
|
|
|
|
|
Stretch, //<EFBFBD>ſ<EFBFBD>
|
|
|
|
|
|
Completed //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Start First Calibration Motion.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool UDE_CalibrationMotionController(string DeviceName, CalibrationType calibrationType, bool IsStart)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if ((int)calibrationType < 1) // || (int)calibrationType > 3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD>궨
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
BleHandDriver.CalibrationType type = (BleHandDriver.CalibrationType)calibrationType;
|
|
|
|
|
|
|
|
|
|
|
|
if (IsStart)
|
|
|
|
|
|
{
|
|
|
|
|
|
CalibrationStepIndex = (int)calibrationType;
|
|
|
|
|
|
return bleHandDriver[DeviceName].StartCalibration(type);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
CalibrationStepIndex++;
|
|
|
|
|
|
if (CalibrationStepIndex == 4) CalibrationStepIndex = 1;
|
|
|
|
|
|
return bleHandDriver[DeviceName].StopCalibration(type);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Calibration State, return None if invalid.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public CalibrationType UDE_GetCalibrationType(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return (CalibrationType)bleHandDriver[DeviceName].GetCalibrationType();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Raw Angle Data, return empty list if invalid.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public List<double> UDE_GetRawAngleData(string DeviceName, bool Raw = false)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return new List<double>();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(Raw)
|
|
|
|
|
|
return bleHandDriver[DeviceName].GetRawData();
|
|
|
|
|
|
else
|
|
|
|
|
|
return bleHandDriver[DeviceName].GetAngleData();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get calibrate offset value, which shows calibration quaility.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public double[] UDE_GetCalibrationInfoOffset(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return new double[0];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return bleHandDriver[DeviceName].GetCalibrationInfoOffset();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Bluetooth device data transfer frame rate.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public int UDE_GetDeviceTransferFPS(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return UDE_API.GetTransferFrequency(DeviceName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public enum FingerJointType
|
|
|
|
|
|
{
|
|
|
|
|
|
Thumb1, Thumb2, Thumb3,
|
|
|
|
|
|
Index1, Index2, Index3,
|
|
|
|
|
|
Middle1, Middle2, Middle3,
|
|
|
|
|
|
Ring1, Ring2, Ring3,
|
|
|
|
|
|
Pinky1, Pinky2, Pinky3
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Rotation Transfer Of Each Finger, Return null if invalid.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public Dictionary<FingerJointType, Vector3> UDE_GetFingerRotations(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Vector3 AddRotationTrans(float angle, Axis angleType)
|
|
|
|
|
|
{
|
|
|
|
|
|
float angleX = 0;
|
|
|
|
|
|
float angleY = 0;
|
|
|
|
|
|
float angleZ = 0;
|
|
|
|
|
|
|
|
|
|
|
|
switch (angleType)
|
|
|
|
|
|
{
|
|
|
|
|
|
case Axis.x_n:
|
|
|
|
|
|
angleX = -angle;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case Axis.y_n:
|
|
|
|
|
|
angleY = -angle;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case Axis.z_n:
|
|
|
|
|
|
angleZ = -angle;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case Axis.x:
|
|
|
|
|
|
angleX = angle;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case Axis.y:
|
|
|
|
|
|
angleY = angle;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case Axis.z:
|
|
|
|
|
|
angleZ = angle;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return new Vector3(angleX, angleY, angleZ);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
var Data = Driver.GetAngleData();
|
|
|
|
|
|
if(Data.Count == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return new Dictionary<FingerJointType, Vector3>
|
|
|
|
|
|
{
|
|
|
|
|
|
{ FingerJointType.Thumb3, AddRotationTrans((float)Data[0], (Axis)Driver.Pitch) },
|
|
|
|
|
|
{ FingerJointType.Thumb2, AddRotationTrans((float)Data[1], (Axis)Driver.Pitch) },
|
|
|
|
|
|
{ FingerJointType.Thumb1, AddRotationTrans((float)Data[2] * Driver.coefficient + Driver.Thumb1Offset.z, (Axis)Driver.Pitch)
|
|
|
|
|
|
+ AddRotationTrans((float)Data[3] + Driver.Thumb1Offset.y, Axis.y)
|
|
|
|
|
|
+ AddRotationTrans((float)Data[20] + Driver.Thumb1Offset.x, Axis.x)
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
{ FingerJointType.Index3, AddRotationTrans((float)Data[4], (Axis)Driver.Pitch) },
|
|
|
|
|
|
{ FingerJointType.Index2, AddRotationTrans((float)Data[5], (Axis)Driver.Pitch) },
|
|
|
|
|
|
{ FingerJointType.Index1, AddRotationTrans((float)Data[6], (Axis)Driver.Pitch)
|
|
|
|
|
|
+ AddRotationTrans((float)Data[7], Axis.y)
|
|
|
|
|
|
+ AddRotationTrans((float)Data[21], (Axis)Driver.Roll)
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
{ FingerJointType.Middle3, AddRotationTrans((float)Data[8],(Axis)Driver.Pitch) },
|
|
|
|
|
|
{ FingerJointType.Middle2, AddRotationTrans((float)Data[9],(Axis)Driver.Pitch) },
|
|
|
|
|
|
{ FingerJointType.Middle1, AddRotationTrans((float)Data[10], (Axis)Driver.Pitch)
|
|
|
|
|
|
+ AddRotationTrans((float)Data[11], Axis.y)
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
{ FingerJointType.Ring3, AddRotationTrans((float)Data[12], (Axis)Driver.Pitch) },
|
|
|
|
|
|
{ FingerJointType.Ring2, AddRotationTrans((float)Data[13], (Axis)Driver.Pitch) },
|
|
|
|
|
|
{ FingerJointType.Ring1, AddRotationTrans((float)Data[14], (Axis)Driver.Pitch)
|
|
|
|
|
|
+ AddRotationTrans(-(float)Data[15], (Axis)Driver.Yaw)
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
{ FingerJointType.Pinky3, AddRotationTrans((float)Data[16], (Axis)Driver.Pitch) },
|
|
|
|
|
|
{ FingerJointType.Pinky2, AddRotationTrans((float)Data[17], (Axis)Driver.Pitch) },
|
|
|
|
|
|
{ FingerJointType.Pinky1, AddRotationTrans((float)Data[18], (Axis)Driver.Pitch)
|
|
|
|
|
|
+ AddRotationTrans(-(float)Data[19], (Axis)Driver.Yaw)
|
|
|
|
|
|
+ AddRotationTrans(-(float)Data[22], (Axis)Driver.Roll)
|
|
|
|
|
|
},
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public string UDE_GetAlgorithmVersionName(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return "";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return bleHandDriver[DeviceName].GetAlgorithmVerName();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public enum Axis
|
|
|
|
|
|
{
|
|
|
|
|
|
x = -3,
|
|
|
|
|
|
y = -2,
|
|
|
|
|
|
z = -1,
|
|
|
|
|
|
x_n,
|
|
|
|
|
|
y_n,
|
|
|
|
|
|
z_n
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Rotate Joint in Specific Order
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="Angle"></param>
|
|
|
|
|
|
/// <param name="joint"></param>
|
|
|
|
|
|
public void UDE_FingerRotate(Transform Joint, Vector3 Angle)
|
|
|
|
|
|
{
|
|
|
|
|
|
Joint.Rotate(0,0,Angle.z);
|
|
|
|
|
|
Joint.Rotate(0,Angle.y,0);
|
|
|
|
|
|
Joint.Rotate(Angle.x,0,0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Three Axis Index order:Pitch, Roll, Yaw.
|
|
|
|
|
|
/// Return null if invalid.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public Axis[] UDE_GetThreeAxis(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
return new Axis[3] { (Axis)Driver.Pitch, (Axis)Driver.Roll, (Axis)Driver.Yaw };
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Set Three Axis Index order:Pitch, Roll, Yaw.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool UDE_SetThreeAxis(string DeviceName, Axis[] axes)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
Driver.Pitch = (BleHandDriver.Axis)axes[0];
|
|
|
|
|
|
Driver.Roll = (BleHandDriver.Axis)axes[1];
|
|
|
|
|
|
Driver.Yaw = (BleHandDriver.Axis)axes[2];
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Thumb Coefficient Value, return -1 if invalid.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public float UDE_GetThumbCoefficient(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
return Driver.coefficient;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Set Thumb Coefficient Value, Range[0,1].
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool UDE_SetThumbCoefficient(string DeviceName, float value)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(value < 0 || value > 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
Driver.coefficient = value;
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Thumb First Joint Offset Value, return Zero Vector3 if invalid.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public Vector3 UDE_GetThumbFirstJointOffset(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return Vector3.zero;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
return Driver.Thumb1Offset;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Set Thumb First Joint Offset Value.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <param name="value"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool UDE_SetThumbFirstJointOffset(string DeviceName, Vector3 value)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
Driver.Thumb1Offset = value;
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Data Of Extra Connected Device (Button, Joystick)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public InputData UDE_GetInputDeviceData(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return new InputData();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
return Driver.GetInputData();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Make Jostick Reset to Zero center point
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool UDE_JoystickCenterCalibration(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
Driver.CalibrationCenterData();
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get the Maximum Range Value of Joystick and Make Calibration
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <param name="IsStart">true is start, false is end</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool UDE_JoystickRangeCalibration(string DeviceName, bool IsStart)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
if(IsStart)
|
|
|
|
|
|
{
|
|
|
|
|
|
Driver.StartCalibrationRangeData();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
Driver.StopCalibrationRangeData();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Joystick Dead Zone Value, range[0,1], return -1 if invalid.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public float UDE_GetJoystickDeadZone(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
return Driver.GetDeadZone();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Set Joystick Dead Zone Value, range[0,1], return false if invalid.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <param name="value"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool UDE_SetJoystickDeadZone(string DeviceName, float value)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(value < 0 || value > 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
Driver.SetDeadZone(value);
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Trigger Button Active Value, range[0,1], return -1 if invalid.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public float UDE_GetTriggerActiveValue(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
return Driver.GetTriggerValue();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Set Trigger Button Active Value, range[0,1], return false if invalid.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <param name="value"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool UDE_SetTriggerActiveValue(string DeviceName, float value)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (value < 0 || value > 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
Driver.SetTriggerValue(value);
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Grip Button Active Value, range[0,1], return -1 if invalid.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public float UDE_GetGripActiveValue(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
return Driver.GetGrabValue();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Set Grip Button Active Value, range[0,1], return false if invalid.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <param name="value"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool UDE_SetGripActiveValue(string DeviceName, float value)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (value < 0 || value > 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
Driver.SetGrabValue(value);
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Grip Button Active Value, range[0,1], return -1 if invalid.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public float UDE_GetTrackpadActiveValue(string DeviceName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
return Driver.GetTrackpadValue();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Set Grip Button Active Value, range[0,1], return false if invalid.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <param name="value"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool UDE_SetTrackpadActiveValue(string DeviceName, float value)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (value < 0 || value > 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var Driver = bleHandDriver[DeviceName];
|
|
|
|
|
|
Driver.SetTrackpadValue(value);
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Control the Vibration of extra device, return false if setting value is invlid
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DeviceName"></param>
|
|
|
|
|
|
/// <param name="PlaceIndex">only available with 1 or 2</param>
|
|
|
|
|
|
/// <param name="SustainedTenMillionsecond">default minimum is 4</param>
|
|
|
|
|
|
/// <param name="Strength">default minimum is 1, range[1,7]</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool UDE_ControlVibration(string DeviceName, int PlaceIndex, int SustainedTenMillionsecond = 4, int Strength = 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(DeviceName) || !bleHandDriver.ContainsKey(DeviceName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(PlaceIndex != 2 && PlaceIndex != 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SustainedTenMillionsecond = SustainedTenMillionsecond < 4 ? 4 : SustainedTenMillionsecond;
|
|
|
|
|
|
Strength = Strength < 1 ? 1 : Strength;
|
|
|
|
|
|
Strength = Strength > 7 ? 7 : Strength;
|
|
|
|
|
|
|
|
|
|
|
|
UDE_API.Pc2Mcu_SendVibration(DeviceName, (byte)PlaceIndex, (byte)SustainedTenMillionsecond, (byte)(Strength + 3));
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|