001/** 002 * Copyright (c) 2014 Digi International Inc., 003 * All rights not expressly granted are reserved. 004 * 005 * This Source Code Form is subject to the terms of the Mozilla Public 006 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 007 * You can obtain one at http://mozilla.org/MPL/2.0/. 008 * 009 * Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343 010 * ======================================================================= 011 */ 012package com.digi.xbee.api.models; 013 014/** 015 * This class represents an AT command used to read or set different properties 016 * of the XBee device. 017 * 018 * <p>AT commands can be sent directly to the connected device or to remote 019 * devices and may have parameters.</p> 020 * 021 * <p>After executing an AT Command, an AT Response is received from the 022 * device.</p> 023 * 024 * @see ATCommandResponse 025 */ 026public class ATCommand { 027 028 // Variables 029 private final String command; 030 031 private byte[] parameter; 032 033 /** 034 * Class constructor. Instantiates a new object of type {@code ATCommand} 035 * with the given parameters. 036 * 037 * @param command The AT Command alias. 038 * 039 * @throws IllegalArgumentException if {@code command.length() != 2}. 040 * @throws NullPointerException if {@code command == null}. 041 */ 042 public ATCommand(String command) { 043 this(command, (String)null); 044 } 045 046 /** 047 * Class constructor. Instantiates a new object of type {@code ATCommand} 048 * with the given parameters. 049 * 050 * <p>If not parameter is required the constructor 051 * {@link #ATCommand(String)} is recommended.</p> 052 * 053 * @param command The AT Command alias. 054 * @param parameter The command parameter as string. 055 * 056 * @throws IllegalArgumentException if {@code command.length() != 2}. 057 * @throws NullPointerException if {@code command == null}. 058 */ 059 public ATCommand(String command, String parameter) { 060 this(command, parameter == null ? null : parameter.getBytes()); 061 } 062 063 /** 064 * Class constructor. Instantiates a new object of type {@code ATCommand} 065 * with the given parameters. 066 * 067 * <p>If not parameter is required the constructor 068 * {@link #ATCommand(String)} is recommended.</p> 069 * 070 * @param command The AT Command alias. 071 * @param parameter The command parameter as byte array. 072 * 073 * @throws IllegalArgumentException if {@code command.length() != 2}. 074 * @throws NullPointerException if {@code command == null}. 075 */ 076 public ATCommand(String command, byte[] parameter) { 077 if (command == null) 078 throw new NullPointerException("Command cannot be null."); 079 if (command.length() != 2) 080 throw new IllegalArgumentException("Command lenght must be 2."); 081 082 this.command = command; 083 this.parameter = parameter; 084 } 085 086 /** 087 * Returns the AT command alias. 088 * 089 * @return The AT command alias. 090 */ 091 public String getCommand() { 092 return command; 093 } 094 095 /** 096 * Returns the AT command parameter. 097 * 098 * @return The AT command parameter, {@code null} if the command does not 099 * have a parameter. 100 */ 101 public byte[] getParameter() { 102 return parameter; 103 } 104 105 /** 106 * Returns the AT command parameter in string format. 107 * 108 * @return The AT command parameter, {@code null} if the command does not 109 * have a parameter. 110 */ 111 public String getParameterString() { 112 if (parameter == null) 113 return null; 114 return new String(parameter); 115 } 116 117 /** 118 * Sets the AT command parameter as string. 119 * 120 * @param parameter The AT command parameter as string. 121 */ 122 public void setParameter(String parameter) { 123 this.parameter = parameter.getBytes(); 124 } 125 126 /** 127 * Sets the AT command parameter as byte array. 128 * 129 * @param parameter The AT command parameter as byte array. 130 */ 131 public void setParameter(byte[] parameter) { 132 this.parameter = parameter; 133 } 134}