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