package yaokong;
|
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.OutputStream;
|
import java.nio.ByteBuffer;
|
import java.nio.ByteOrder;
|
|
public class BaseStationCommandSender extends WaitForAck {
|
|
public BaseStationCommandSender(InputStream inputStream, OutputStream outputStream) {
|
super(inputStream, outputStream);
|
}
|
|
// 发送基站经纬度和方向信息至设备
|
public boolean sendBaseStationCommand(double latitude, double longitude,
|
char latDirection, char lonDirection) throws IOException {
|
ByteBuffer buffer = ByteBuffer.allocate(2 + 1 + 2 + 2 + 32 + 2 + 1);
|
buffer.order(ByteOrder.LITTLE_ENDIAN);
|
|
// 帧头
|
buffer.put(BluetoothProtocol.FRAME_HEADER);
|
// 指令类型
|
buffer.put(BluetoothProtocol.CMD_BASE_STATION);
|
// 数据长度
|
buffer.putShort((short) 32);
|
// 序列号
|
buffer.putShort((short) BluetoothProtocol.getNextSequence());
|
// 纬度
|
buffer.putDouble(latitude);
|
// 经度
|
buffer.putDouble(longitude);
|
// 方向
|
buffer.put((byte) latDirection);
|
buffer.put((byte) lonDirection);
|
// 保留字段(14字节)
|
for (int i = 0; i < 14; i++) {
|
buffer.put((byte) 0x00);
|
}
|
|
// 计算CRC16
|
byte[] dataForCRC = new byte[1 + 2 + 2 + 32];
|
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_BASE_STATION);
|
}
|
}
|