Sync RuntimeHost bridge for handle state contract
This commit is contained in:
Binary file not shown.
@@ -36,31 +36,63 @@ class BridgeRepository {
|
|||||||
fun getLatestPoseFrameJson(): String = KiwiiRuntimeClientBridge.getLatestPoseFrameJson()
|
fun getLatestPoseFrameJson(): String = KiwiiRuntimeClientBridge.getLatestPoseFrameJson()
|
||||||
fun getLatestBodyPoseFrameJson(): String = KiwiiRuntimeClientBridge.getLatestBodyPoseFrameJson()
|
fun getLatestBodyPoseFrameJson(): String = KiwiiRuntimeClientBridge.getLatestBodyPoseFrameJson()
|
||||||
|
|
||||||
fun getLeftHandleIMULatest(): FloatArray = KiwiiRuntimeClientBridge.getLatestLeftHandleIMU()
|
fun getLeftHandleIMULatest(): FloatArray = KiwiiRuntimeClientBridge.getLeftHandleIMULatest()
|
||||||
|
|
||||||
fun getLeftHandleIMUQueue(): Array<FloatArray> {
|
fun getLeftHandleIMUQueue(): Array<FloatArray> {
|
||||||
val latest = KiwiiRuntimeClientBridge.getLatestLeftHandleIMU()
|
val queue = readHandleImuQueueCompat("getLeftHandleIMUQueue")
|
||||||
|
if (queue.isNotEmpty()) return queue
|
||||||
|
val latest = getLeftHandleIMULatest()
|
||||||
return if (latest.isEmpty()) emptyArray() else arrayOf(latest)
|
return if (latest.isEmpty()) emptyArray() else arrayOf(latest)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun submitLeftStaticEffect(effectId: Int): String = KiwiiRuntimeClientBridge.submitLeftStaticEffect(effectId)
|
fun submitLeftStaticEffect(effectId: Int): String = KiwiiRuntimeClientBridge.submitLeftStaticEffect(effectId)
|
||||||
fun submitLeftHeStream(streamId: Int, payload: String): String =
|
fun submitLeftHeStream(streamId: Int, payload: String): String =
|
||||||
KiwiiRuntimeClientBridge.submitLeftHeStream(buildHeStreamPatternJson(streamId, payload))
|
KiwiiRuntimeClientBridge.submitLeftHeStream(streamId, buildHeStreamPatternJson(streamId, payload))
|
||||||
|
|
||||||
|
fun getRightHandleIMULatest(): FloatArray = KiwiiRuntimeClientBridge.getRightHandleIMULatest()
|
||||||
|
|
||||||
fun getRightHandleIMULatest(): FloatArray = KiwiiRuntimeClientBridge.getLatestRightHandleIMU()
|
|
||||||
fun getRightHandleIMUQueue(): Array<FloatArray> {
|
fun getRightHandleIMUQueue(): Array<FloatArray> {
|
||||||
val latest = KiwiiRuntimeClientBridge.getLatestRightHandleIMU()
|
val queue = readHandleImuQueueCompat("getRightHandleIMUQueue")
|
||||||
|
if (queue.isNotEmpty()) return queue
|
||||||
|
val latest = getRightHandleIMULatest()
|
||||||
return if (latest.isEmpty()) emptyArray() else arrayOf(latest)
|
return if (latest.isEmpty()) emptyArray() else arrayOf(latest)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun submitRightStaticEffect(effectId: Int): String = KiwiiRuntimeClientBridge.submitRightStaticEffect(effectId)
|
fun submitRightStaticEffect(effectId: Int): String = KiwiiRuntimeClientBridge.submitRightStaticEffect(effectId)
|
||||||
fun submitRightHeStream(streamId: Int, payload: String): String =
|
fun submitRightHeStream(streamId: Int, payload: String): String =
|
||||||
KiwiiRuntimeClientBridge.submitRightHeStream(buildHeStreamPatternJson(streamId, payload))
|
KiwiiRuntimeClientBridge.submitRightHeStream(streamId, buildHeStreamPatternJson(streamId, payload))
|
||||||
|
|
||||||
fun getHandleStateJson(): String = KiwiiRuntimeClientBridge.getHandleStateJson()
|
fun getHandleStateJson(): String = KiwiiRuntimeClientBridge.getHandleStateJson()
|
||||||
|
|
||||||
fun setMotorWeightKg(weight: Float): com.kiwii.bridge.MotorCommandResult = KiwiiRuntimeClientBridge.setMotorWeightKg(weight)
|
fun setMotorWeightKg(weight: Float): com.kiwii.bridge.MotorCommandResult = KiwiiRuntimeClientBridge.setMotorWeightKg(weight)
|
||||||
fun setMotorTrainingMode(mode: Int, param: Float): String = KiwiiRuntimeClientBridge.setMotorTrainingMode(mode, param)
|
fun setMotorTrainingMode(mode: Int, param: Float): String = KiwiiRuntimeClientBridge.setMotorTrainingMode(mode, param)
|
||||||
|
fun setMotorForceControlParamsJson(paramsJson: String): String {
|
||||||
|
return try {
|
||||||
|
val method = KiwiiRuntimeClientBridge::class.java.getMethod("setMotorForceControlParamsJson", String::class.java)
|
||||||
|
method.invoke(null, paramsJson) as? String ?: "{\"error\":\"setMotorForceControlParamsJson returned null\"}"
|
||||||
|
} catch (t: Throwable) {
|
||||||
|
"{\"error\":\"setMotorForceControlParamsJson unavailable: ${t.message}\"}"
|
||||||
|
}
|
||||||
|
}
|
||||||
fun queryMotorTrainingMode(axis: Int): String = KiwiiRuntimeClientBridge.queryMotorTrainingMode(axis)
|
fun queryMotorTrainingMode(axis: Int): String = KiwiiRuntimeClientBridge.queryMotorTrainingMode(axis)
|
||||||
fun getLatestMotorStateJson(): String = KiwiiRuntimeClientBridge.getLatestMotorStateJson()
|
fun getLatestMotorStateJson(): String = KiwiiRuntimeClientBridge.getLatestMotorStateJson()
|
||||||
fun getMotorControlStateJson(): String = KiwiiRuntimeClientBridge.getMotorControlStateJson()
|
fun getMotorControlStateJson(): String = KiwiiRuntimeClientBridge.getMotorControlStateJson()
|
||||||
|
fun getMotorDisconnectDiagnosisJson(): String {
|
||||||
|
return try {
|
||||||
|
val method = KiwiiRuntimeClientBridge::class.java.getMethod("getMotorDisconnectDiagnosisJson")
|
||||||
|
method.invoke(null) as? String ?: "{\"error\":\"getMotorDisconnectDiagnosisJson returned null\"}"
|
||||||
|
} catch (t: Throwable) {
|
||||||
|
"{\"error\":\"getMotorDisconnectDiagnosisJson unavailable: ${t.message}\"}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fun sendMotorHeartbeat(): String {
|
||||||
|
return try {
|
||||||
|
val method = KiwiiRuntimeClientBridge::class.java.getMethod("sendMotorHeartbeat")
|
||||||
|
method.invoke(null) as? String ?: "{\"error\":\"sendMotorHeartbeat returned null\"}"
|
||||||
|
} catch (t: Throwable) {
|
||||||
|
"{\"error\":\"sendMotorHeartbeat unavailable: ${t.message}\"}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun getTelemetryStateJson(): String = KiwiiRuntimeClientBridge.getTelemetryStateJson()
|
fun getTelemetryStateJson(): String = KiwiiRuntimeClientBridge.getTelemetryStateJson()
|
||||||
fun getSafetyStateJson(): String = KiwiiRuntimeClientBridge.getSafetyStateJson()
|
fun getSafetyStateJson(): String = KiwiiRuntimeClientBridge.getSafetyStateJson()
|
||||||
@@ -68,6 +100,41 @@ class BridgeRepository {
|
|||||||
fun submitDeviceCommandDryRun(command: String): String = KiwiiRuntimeClientBridge.submitDeviceCommandDryRun(command)
|
fun submitDeviceCommandDryRun(command: String): String = KiwiiRuntimeClientBridge.submitDeviceCommandDryRun(command)
|
||||||
fun getDeviceCommandStateJson(): String = KiwiiRuntimeClientBridge.getDeviceCommandStateJson()
|
fun getDeviceCommandStateJson(): String = KiwiiRuntimeClientBridge.getDeviceCommandStateJson()
|
||||||
|
|
||||||
|
private fun readHandleImuQueueCompat(methodName: String): Array<FloatArray> {
|
||||||
|
return try {
|
||||||
|
val method = KiwiiRuntimeClientBridge::class.java.getMethod(methodName)
|
||||||
|
when (val value = method.invoke(null)) {
|
||||||
|
is Array<*> -> {
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
value.filterIsInstance<FloatArray>().toTypedArray()
|
||||||
|
}
|
||||||
|
is FloatArray -> splitFlatImuQueue(value)
|
||||||
|
else -> emptyArray()
|
||||||
|
}
|
||||||
|
} catch (_: Throwable) {
|
||||||
|
emptyArray()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun splitFlatImuQueue(flat: FloatArray): Array<FloatArray> {
|
||||||
|
if (flat.isEmpty()) return emptyArray()
|
||||||
|
val sampleSize = when {
|
||||||
|
flat.size % 10 == 0 -> 10
|
||||||
|
flat.size % 9 == 0 -> 9
|
||||||
|
flat.size % 7 == 0 -> 7
|
||||||
|
else -> flat.size
|
||||||
|
}
|
||||||
|
if (sampleSize <= 0) return emptyArray()
|
||||||
|
val out = ArrayList<FloatArray>()
|
||||||
|
var offset = 0
|
||||||
|
while (offset < flat.size) {
|
||||||
|
val end = minOf(offset + sampleSize, flat.size)
|
||||||
|
out.add(flat.copyOfRange(offset, end))
|
||||||
|
offset = end
|
||||||
|
}
|
||||||
|
return out.toTypedArray()
|
||||||
|
}
|
||||||
|
|
||||||
private fun buildHeStreamPatternJson(streamId: Int, payload: String): String {
|
private fun buildHeStreamPatternJson(streamId: Int, payload: String): String {
|
||||||
val trimmed = payload.trim()
|
val trimmed = payload.trim()
|
||||||
if (trimmed.startsWith("{")) return trimmed
|
if (trimmed.startsWith("{")) return trimmed
|
||||||
|
|||||||
Reference in New Issue
Block a user