Package org.nfctools.ndef.wkt.handover.encoder

Source Code of org.nfctools.ndef.wkt.handover.encoder.AlternativeCarrierRecordEncoder

/**
* Copyright 2011 Adrian Stabiszewski, as@nfctools.org
*
* 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 org.nfctools.ndef.wkt.handover.encoder;

import java.io.ByteArrayOutputStream;
import java.util.List;

import org.nfctools.ndef.NdefConstants;
import org.nfctools.ndef.NdefEncoderException;
import org.nfctools.ndef.NdefMessageEncoder;
import org.nfctools.ndef.wkt.WellKnownRecordPayloadEncoder;
import org.nfctools.ndef.wkt.handover.records.AlternativeCarrierRecord;
import org.nfctools.ndef.wkt.handover.records.AlternativeCarrierRecord.CarrierPowerState;
import org.nfctools.ndef.wkt.records.WellKnownRecord;

/**
*
* @author Thomas Rorvik Skjolberg (skjolber@gmail.com)
*
*/

public class AlternativeCarrierRecordEncoder implements WellKnownRecordPayloadEncoder {

  @Override
  public byte[] encodePayload(WellKnownRecord wellKnownRecord, NdefMessageEncoder messageEncoder) {

    AlternativeCarrierRecord alternativeCarrierRecord = (AlternativeCarrierRecord)wellKnownRecord;

    ByteArrayOutputStream bout = new ByteArrayOutputStream();

    // cps
    CarrierPowerState carrierPowerState = alternativeCarrierRecord.getCarrierPowerState();
    if (carrierPowerState == null) {
      throw new NdefEncoderException("Expected carrier power state", alternativeCarrierRecord);
    }
    bout.write(carrierPowerState.getValue() & 0x7); // 3 lsb

    // carrier data reference: 1
    String carrierDataReference = alternativeCarrierRecord.getCarrierDataReference();
    if (carrierDataReference == null) {
      throw new NdefEncoderException("Expected carrier data reference", alternativeCarrierRecord);
    }
    byte[] carrierDataReferenceChar = carrierDataReference.getBytes(NdefConstants.DEFAULT_CHARSET);
    if (carrierDataReferenceChar.length > 255) {
      throw new NdefEncoderException("Expected carrier data reference '" + carrierDataReference
          + "' <= 255 bytes", alternativeCarrierRecord);
    }
    // carrier data reference length (1)
    bout.write(carrierDataReferenceChar.length);
    // carrier data reference char
    bout.write(carrierDataReferenceChar, 0, carrierDataReferenceChar.length);

    // auxiliary data
    List<String> auxiliaryDataReferences = alternativeCarrierRecord.getAuxiliaryDataReferences();
    // auxiliary data reference count
    bout.write(auxiliaryDataReferences.size());

    for (String auxiliaryDataReference : auxiliaryDataReferences) {

      byte[] auxiliaryDataReferenceChar = auxiliaryDataReference.getBytes(NdefConstants.DEFAULT_CHARSET);
      // carrier data reference length (1)

      if (auxiliaryDataReferenceChar.length > 255) {
        throw new NdefEncoderException("Expected auxiliary data reference '" + auxiliaryDataReference
            + "' <= 255 bytes", alternativeCarrierRecord);
      }

      bout.write(auxiliaryDataReferenceChar.length);
      // carrier data reference char
      bout.write(auxiliaryDataReferenceChar, 0, auxiliaryDataReferenceChar.length);
    }

    // reserved future use
    bout.write(0);

    return bout.toByteArray();
  }

}
TOP

Related Classes of org.nfctools.ndef.wkt.handover.encoder.AlternativeCarrierRecordEncoder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.