diff --git a/app/src/main/java/com/ouxuan/oxface/device/OxUDP.java b/app/src/main/java/com/ouxuan/oxface/device/OxUDP.java index f6f0e41..b24b7e7 100644 --- a/app/src/main/java/com/ouxuan/oxface/device/OxUDP.java +++ b/app/src/main/java/com/ouxuan/oxface/device/OxUDP.java @@ -383,21 +383,40 @@ public class OxUDP { try { String[] responseArr = getCmdArr(response); - // 根据协议解析门禁状态(这里需要根据实际协议调整) - // 假设第8位表示A门状态,第9位表示B门状态 + // 检查响应数据长度,确保包含门禁状态信息 + if (responseArr.length < 30) { + Log.w(TAG, "响应数据长度不足,无法解析门禁状态。长度: " + responseArr.length); + notifyUDPError("响应数据长度不足: " + responseArr.length); + return; + } + + // 根据协议解析门禁状态 + // 第28位表示A门状态(数组索引28),第29位表示B门状态(数组索引29) boolean gateAState = false; boolean gateBState = false; - if (responseArr.length > 8) { - // 解析A门状态(根据实际协议调整) - int aStateValue = Integer.parseInt(responseArr[8], 16); - gateAState = (aStateValue & 0x01) != 0; + // 解析A门状态(第28位,数组索引28) + if (responseArr.length > 28) { + String aStateValue = responseArr[28]; + gateAState = "01".equals(aStateValue); // 01表示开启,00表示关闭 + Log.d(TAG, "A门状态值: " + aStateValue + " -> " + (gateAState ? "开启" : "关闭")); } - if (responseArr.length > 9) { - // 解析B门状态(根据实际协议调整) - int bStateValue = Integer.parseInt(responseArr[9], 16); - gateBState = (bStateValue & 0x01) != 0; + // 解析B门状态(第29位,数组索引29) + if (responseArr.length > 29) { + String bStateValue = responseArr[29]; + gateBState = "01".equals(bStateValue); // 01表示开启,00表示关闭 + Log.d(TAG, "B门状态值: " + bStateValue + " -> " + (gateBState ? "开启" : "关闭")); + } + + // 记录完整的响应数据用于调试 + Log.d(TAG, "完整UDP响应: " + response); + Log.d(TAG, "响应数组长度: " + responseArr.length); + if (responseArr.length > 28) { + Log.d(TAG, "第28位(A门): " + responseArr[28]); + } + if (responseArr.length > 29) { + Log.d(TAG, "第29位(B门): " + responseArr[29]); } Log.d(TAG, "门禁状态 - A门: " + (gateAState ? "开启" : "关闭") +