Example usage for io.netty.buffer ByteBuf readUnsignedShortLE

List of usage examples for io.netty.buffer ByteBuf readUnsignedShortLE

Introduction

In this page you can find the example usage for io.netty.buffer ByteBuf readUnsignedShortLE.

Prototype

public abstract int readUnsignedShortLE();

Source Link

Document

Gets an unsigned 16-bit short integer at the current readerIndex in the Little Endian Byte Order and increases the readerIndex by 2 in this buffer.

Usage

From source file:org.traccar.protocol.TramigoProtocolDecoder.java

License:Apache License

@Override
protected Object decode(Channel channel, SocketAddress remoteAddress, Object msg) throws Exception {

    ByteBuf buf = (ByteBuf) msg;

    int protocol = buf.readUnsignedByte();
    boolean legacy = protocol == 0x80;

    buf.readUnsignedByte(); // version id
    int index = legacy ? buf.readUnsignedShort() : buf.readUnsignedShortLE();
    int type = legacy ? buf.readUnsignedShort() : buf.readUnsignedShortLE();
    buf.readUnsignedShort(); // length
    buf.readUnsignedShort(); // mask
    buf.readUnsignedShort(); // checksum
    long id = legacy ? buf.readUnsignedInt() : buf.readUnsignedIntLE();
    buf.readUnsignedInt(); // time

    Position position = new Position(getProtocolName());
    position.set(Position.KEY_INDEX, index);
    position.setValid(true);//from  w  ww  .jav  a2 s. c  o m

    DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, String.valueOf(id));
    if (deviceSession == null) {
        return null;
    }
    position.setDeviceId(deviceSession.getDeviceId());

    if (protocol == 0x01 && (type == MSG_COMPACT || type == MSG_FULL)) {

        // need to send ack?

        buf.readUnsignedShortLE(); // report trigger
        buf.readUnsignedShortLE(); // state flag

        position.setLatitude(buf.readUnsignedIntLE() * 0.0000001);
        position.setLongitude(buf.readUnsignedIntLE() * 0.0000001);

        position.set(Position.KEY_RSSI, buf.readUnsignedShortLE());
        position.set(Position.KEY_SATELLITES, buf.readUnsignedShortLE());
        position.set(Position.KEY_SATELLITES_VISIBLE, buf.readUnsignedShortLE());
        position.set("gpsAntennaStatus", buf.readUnsignedShortLE());

        position.setSpeed(buf.readUnsignedShortLE() * 0.194384);
        position.setCourse(buf.readUnsignedShortLE());

        position.set(Position.KEY_ODOMETER, buf.readUnsignedIntLE());

        position.set(Position.KEY_BATTERY, buf.readUnsignedShortLE());

        position.set(Position.KEY_CHARGE, buf.readUnsignedShortLE());

        position.setTime(new Date(buf.readUnsignedIntLE() * 1000));

        // parse other data

        return position;

    } else if (legacy) {

        if (channel != null) {
            channel.writeAndFlush(new NetworkMessage(
                    Unpooled.copiedBuffer("gprs,ack," + index, StandardCharsets.US_ASCII), remoteAddress));
        }

        String sentence = buf.toString(StandardCharsets.US_ASCII);

        Pattern pattern = Pattern.compile("(-?\\d+\\.\\d+), (-?\\d+\\.\\d+)");
        Matcher matcher = pattern.matcher(sentence);
        if (!matcher.find()) {
            return null;
        }
        position.setLatitude(Double.parseDouble(matcher.group(1)));
        position.setLongitude(Double.parseDouble(matcher.group(2)));

        pattern = Pattern.compile("([NSWE]{1,2}) with speed (\\d+) km/h");
        matcher = pattern.matcher(sentence);
        if (matcher.find()) {
            for (int i = 0; i < DIRECTIONS.length; i++) {
                if (matcher.group(1).equals(DIRECTIONS[i])) {
                    position.setCourse(i * 45.0);
                    break;
                }
            }
            position.setSpeed(UnitsConverter.knotsFromKph(Double.parseDouble(matcher.group(2))));
        }

        pattern = Pattern.compile("(\\d{1,2}:\\d{2}(:\\d{2})? \\w{3} \\d{1,2})");
        matcher = pattern.matcher(sentence);
        if (!matcher.find()) {
            return null;
        }
        DateFormat dateFormat = new SimpleDateFormat(
                matcher.group(2) != null ? "HH:mm:ss MMM d yyyy" : "HH:mm MMM d yyyy", Locale.ENGLISH);
        position.setTime(DateUtil.correctYear(
                dateFormat.parse(matcher.group(1) + " " + Calendar.getInstance().get(Calendar.YEAR))));

        if (sentence.contains("Ignition on detected")) {
            position.set(Position.KEY_IGNITION, true);
        } else if (sentence.contains("Ignition off detected")) {
            position.set(Position.KEY_IGNITION, false);
        }

        return position;

    }

    return null;
}

From source file:org.traccar.protocol.TzoneProtocolDecoder.java

License:Apache License

private void decodeTags(Position position, ByteBuf buf) {

    int blockLength = buf.readUnsignedShort();
    int blockEnd = buf.readerIndex() + blockLength;

    if (blockLength > 0) {

        buf.readUnsignedByte(); // tag type

        int count = buf.readUnsignedByte();
        int tagLength = buf.readUnsignedByte();

        for (int i = 1; i <= count; i++) {
            int tagEnd = buf.readerIndex() + tagLength;

            buf.readUnsignedByte(); // status
            buf.readUnsignedShortLE(); // battery voltage

            position.set(Position.PREFIX_TEMP + i, (buf.readShortLE() & 0x3fff) * 0.1);

            buf.readUnsignedByte(); // humidity
            buf.readUnsignedByte(); // rssi

            buf.readerIndex(tagEnd);/* w  ww . j  a  v a  2 s  .c o  m*/
        }

    }

    buf.readerIndex(blockEnd);

}