package yaokong; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.ByteBuffer; import java.nio.ByteOrder; public class ControlCommandSender extends WaitForAck { public ControlCommandSender(InputStream inputStream, OutputStream outputStream) { super(inputStream, outputStream); } // 下发设备控制动作与紧急等级指令 public boolean sendControlCommand(byte action, byte emergencyLevel) throws IOException { ByteBuffer buffer = ByteBuffer.allocate(2 + 1 + 2 + 2 + 2 + 2 + 1); buffer.order(ByteOrder.LITTLE_ENDIAN); // 帧头 buffer.put(BluetoothProtocol.FRAME_HEADER); // 指令类型 buffer.put(BluetoothProtocol.CMD_CONTROL); // 数据长度 buffer.putShort((short) 2); // 序列号 buffer.putShort((short) BluetoothProtocol.getNextSequence()); // 控制动作 buffer.put(action); // 紧急等级 buffer.put(emergencyLevel); // 计算CRC16 byte[] dataForCRC = new byte[1 + 2 + 2 + 2]; System.arraycopy(buffer.array(), 2, dataForCRC, 0, dataForCRC.length); int crc = CRC16.calculateCRC16(dataForCRC, 0, dataForCRC.length); buffer.putShort((short) crc); // 帧尾 buffer.put(BluetoothProtocol.FRAME_FOOTER); outputStream.write(buffer.array()); outputStream.flush(); return waitForAck(BluetoothProtocol.CMD_CONTROL); } }