| /* |
| * Copyright (C) 2014 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License |
| */ |
| |
| package android.location; |
| |
| import android.annotation.NonNull; |
| import android.annotation.SystemApi; |
| import android.os.Parcel; |
| import android.os.Parcelable; |
| |
| import java.security.InvalidParameterException; |
| |
| /** |
| * A class containing a GPS satellite Navigation Message. |
| * |
| * @deprecated use {@link GnssNavigationMessage} instead. |
| * |
| * @hide |
| */ |
| @Deprecated |
| @SystemApi |
| public class GpsNavigationMessage implements Parcelable { |
| |
| private static final byte[] EMPTY_ARRAY = new byte[0]; |
| |
| // The following enumerations must be in sync with the values declared in gps.h |
| |
| /** |
| * The type of the navigation message is not available or unknown. |
| */ |
| public static final byte TYPE_UNKNOWN = 0; |
| |
| /** |
| * The Navigation Message is of type L1 C/A. |
| */ |
| public static final byte TYPE_L1CA = 1; |
| |
| /** |
| * The Navigation Message is of type L1-CNAV. |
| */ |
| public static final byte TYPE_L2CNAV = 2; |
| |
| /** |
| * The Navigation Message is of type L5-CNAV. |
| */ |
| public static final byte TYPE_L5CNAV = 3; |
| |
| /** |
| * The Navigation Message is of type CNAV-2. |
| */ |
| public static final byte TYPE_CNAV2 = 4; |
| |
| /** |
| * The Navigation Message Status is 'unknown'. |
| */ |
| public static final short STATUS_UNKNOWN = 0; |
| |
| /** |
| * The Navigation Message was received without any parity error in its navigation words. |
| */ |
| public static final short STATUS_PARITY_PASSED = (1<<0); |
| |
| /** |
| * The Navigation Message was received with words that failed parity check, but the receiver was |
| * able to correct those words. |
| */ |
| public static final short STATUS_PARITY_REBUILT = (1<<1); |
| |
| // End enumerations in sync with gps.h |
| |
| private byte mType; |
| private byte mPrn; |
| private short mMessageId; |
| private short mSubmessageId; |
| private byte[] mData; |
| private short mStatus; |
| |
| GpsNavigationMessage() { |
| initialize(); |
| } |
| |
| /** |
| * Sets all contents to the values stored in the provided object. |
| */ |
| public void set(GpsNavigationMessage navigationMessage) { |
| mType = navigationMessage.mType; |
| mPrn = navigationMessage.mPrn; |
| mMessageId = navigationMessage.mMessageId; |
| mSubmessageId = navigationMessage.mSubmessageId; |
| mData = navigationMessage.mData; |
| mStatus = navigationMessage.mStatus; |
| } |
| |
| /** |
| * Resets all the contents to its original state. |
| */ |
| public void reset() { |
| initialize(); |
| } |
| |
| /** |
| * Gets the type of the navigation message contained in the object. |
| */ |
| public byte getType() { |
| return mType; |
| } |
| |
| /** |
| * Sets the type of the navigation message. |
| */ |
| public void setType(byte value) { |
| mType = value; |
| } |
| |
| /** |
| * Gets a string representation of the 'type'. |
| * For internal and logging use only. |
| */ |
| private String getTypeString() { |
| switch (mType) { |
| case TYPE_UNKNOWN: |
| return "Unknown"; |
| case TYPE_L1CA: |
| return "L1 C/A"; |
| case TYPE_L2CNAV: |
| return "L2-CNAV"; |
| case TYPE_L5CNAV: |
| return "L5-CNAV"; |
| case TYPE_CNAV2: |
| return "CNAV-2"; |
| default: |
| return "<Invalid:" + mType + ">"; |
| } |
| } |
| |
| /** |
| * Gets the Pseudo-random number. |
| * Range: [1, 32]. |
| */ |
| public byte getPrn() { |
| return mPrn; |
| } |
| |
| /** |
| * Sets the Pseud-random number. |
| */ |
| public void setPrn(byte value) { |
| mPrn = value; |
| } |
| |
| /** |
| * Gets the Message Identifier. |
| * It provides an index so the complete Navigation Message can be assembled. i.e. for L1 C/A |
| * subframe 4 and 5, this value corresponds to the 'frame id' of the navigation message. |
| * Subframe 1, 2, 3 does not contain a 'frame id' and this might be reported as -1. |
| */ |
| public short getMessageId() { |
| return mMessageId; |
| } |
| |
| /** |
| * Sets the Message Identifier. |
| */ |
| public void setMessageId(short value) { |
| mMessageId = value; |
| } |
| |
| /** |
| * Gets the Sub-message Identifier. |
| * If required by {@link #getType()}, this value contains a sub-index within the current message |
| * (or frame) that is being transmitted. i.e. for L1 C/A the sub-message identifier corresponds |
| * to the sub-frame Id of the navigation message. |
| */ |
| public short getSubmessageId() { |
| return mSubmessageId; |
| } |
| |
| /** |
| * Sets the Sub-message identifier. |
| */ |
| public void setSubmessageId(short value) { |
| mSubmessageId = value; |
| } |
| |
| /** |
| * Gets the data associated with the Navigation Message. |
| * The bytes (or words) specified using big endian format (MSB first). |
| */ |
| @NonNull |
| public byte[] getData() { |
| return mData; |
| } |
| |
| /** |
| * Sets the data associated with the Navigation Message. |
| */ |
| public void setData(byte[] value) { |
| if (value == null) { |
| throw new InvalidParameterException("Data must be a non-null array"); |
| } |
| |
| mData = value; |
| } |
| |
| /** |
| * Gets the Status of the navigation message contained in the object. |
| */ |
| public short getStatus() { |
| return mStatus; |
| } |
| |
| /** |
| * Sets the status of the navigation message. |
| */ |
| public void setStatus(short value) { |
| mStatus = value; |
| } |
| |
| /** |
| * Gets a string representation of the 'status'. |
| * For internal and logging use only. |
| */ |
| private String getStatusString() { |
| switch (mStatus) { |
| case STATUS_UNKNOWN: |
| return "Unknown"; |
| case STATUS_PARITY_PASSED: |
| return "ParityPassed"; |
| case STATUS_PARITY_REBUILT: |
| return "ParityRebuilt"; |
| default: |
| return "<Invalid:" + mStatus + ">"; |
| } |
| } |
| |
| public static final @android.annotation.NonNull Creator<GpsNavigationMessage> CREATOR = |
| new Creator<GpsNavigationMessage>() { |
| @Override |
| public GpsNavigationMessage createFromParcel(Parcel parcel) { |
| GpsNavigationMessage navigationMessage = new GpsNavigationMessage(); |
| |
| navigationMessage.setType(parcel.readByte()); |
| navigationMessage.setPrn(parcel.readByte()); |
| navigationMessage.setMessageId((short) parcel.readInt()); |
| navigationMessage.setSubmessageId((short) parcel.readInt()); |
| |
| int dataLength = parcel.readInt(); |
| byte[] data = new byte[dataLength]; |
| parcel.readByteArray(data); |
| navigationMessage.setData(data); |
| |
| int status = parcel.readInt(); |
| navigationMessage.setStatus((short) status); |
| |
| return navigationMessage; |
| } |
| |
| @Override |
| public GpsNavigationMessage[] newArray(int size) { |
| return new GpsNavigationMessage[size]; |
| } |
| }; |
| |
| public void writeToParcel(Parcel parcel, int flags) { |
| parcel.writeByte(mType); |
| parcel.writeByte(mPrn); |
| parcel.writeInt(mMessageId); |
| parcel.writeInt(mSubmessageId); |
| parcel.writeInt(mData.length); |
| parcel.writeByteArray(mData); |
| parcel.writeInt(mStatus); |
| } |
| |
| @Override |
| public int describeContents() { |
| return 0; |
| } |
| |
| @NonNull |
| @Override |
| public String toString() { |
| final String format = " %-15s = %s\n"; |
| StringBuilder builder = new StringBuilder("GpsNavigationMessage:\n"); |
| |
| builder.append(String.format(format, "Type", getTypeString())); |
| builder.append(String.format(format, "Prn", mPrn)); |
| builder.append(String.format(format, "Status", getStatusString())); |
| builder.append(String.format(format, "MessageId", mMessageId)); |
| builder.append(String.format(format, "SubmessageId", mSubmessageId)); |
| |
| builder.append(String.format(format, "Data", "{")); |
| String prefix = " "; |
| for(byte value : mData) { |
| builder.append(prefix); |
| builder.append(value); |
| prefix = ", "; |
| } |
| builder.append(" }"); |
| |
| return builder.toString(); |
| } |
| |
| private void initialize() { |
| mType = TYPE_UNKNOWN; |
| mPrn = 0; |
| mMessageId = -1; |
| mSubmessageId = -1; |
| mData = EMPTY_ARRAY; |
| mStatus = STATUS_UNKNOWN; |
| } |
| } |