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);
|
}
|
}
|