/* * * * Copyright 1990-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */ //----------------------------------------------------------------------------- // PACKAGE DEFINITION //----------------------------------------------------------------------------- package sim.toolkit; //----------------------------------------------------------------------------- // IMPORTS //----------------------------------------------------------------------------- /** * * The <code>MEProfile</code> class contains methods to question the handset * profile, regarding the SIM Application Toolkit and supposing that this * profile has been set by the <b>Terminal Profile</b> APDU command. * The following table gives the index value according to the facility to * check. This class contains only static methods, no instance of this class is * necessary.<p> * * <br><br><Table Border="1" Cellpadding="3"><tr bgcolor=#c0c0c0 align=center> * <td> <b>Facility</b> </td> * <td> <b>Index</b> </td></tr> * <tr><td> Profile download </td> * <td> 0 </td></tr> * <tr><td> SMS-PP data download </td> * <td> 1 </td></tr> * <tr><td> Cell Broadcast data download </td> * <td> 2 </td></tr> * <tr><td> Menu selection </td> * <td> 3 </td></tr> * <tr><td> '9E xx' response code for SIM data download error</td> * <td> 4 </td></tr> * <tr><td> Timer Expiration </td> * <td> 5 </td></tr> * <tr><td> USSD string data object supported in Call Control</td> * <td> 6 </td></tr> * <tr><td> Envelope Call Control sent during auto. redial </td> * <td> 7 </td></tr> * <tr><td> command result </td> * <td> 8 </td></tr> * <tr><td> Call Control by SIM </td> * <td> 9 </td></tr> * <tr><td> Cell identity included in Call Control by SIM </td> * <td> 10 </td></tr> * <tr><td> MO short message control by SIM </td> * <td> 11 </td></tr> * <tr><td> Handling of the alpha identifier, user indication</td> * <td> 12 </td></tr> * <tr><td> UCS2 Entry supported </td> * <td> 13 </td></tr> * <tr><td> UCS2 Display supported </td> * <td> 14 </td></tr> * <tr><td> Display of the extension Text </td> * <td> 15 </td></tr> * <tr><td> Proactive SIM: Display Text </td> * <td> 16 </td></tr> * <tr><td> Proactive SIM: Get Inkey </td> * <td> 17 </td></tr> * <tr><td> Proactive SIM: Get Input </td> * <td> 18 </td></tr> * <tr><td> Proactive SIM: More Time </td> * <td> 19 </td></tr> * <tr><td> Proactive SIM: Play Tone </td> * <td> 20 </td></tr> * <tr><td> Proactive SIM: Poll Interval </td> * <td> 21 </td></tr> * <tr><td> Proactive SIM: Polling Off </td> * <td> 22 </td></tr> * <tr><td> Proactive SIM: Refresh </td> * <td> 23 </td></tr> * <tr><td> Proactive SIM: Select Item </td> * <td> 24 </td></tr> * <tr><td> Proactive SIM: Send Short Message </td> * <td> 25 </td></tr> * <tr><td> Proactive SIM: Send SS </td> * <td> 26 </td></tr> * <tr><td> Proactive SIM: Send USSD </td> * <td> 27 </td></tr> * <tr><td> Proactive SIM: Set Up Call </td> * <td> 28 </td></tr> * <tr><td> Proactive SIM: Set Up Menu </td> * <td> 29 </td></tr> * <tr><td> Proactive SIM: Provide Local Information </td> * <td> 30 </td></tr> * <tr><td> Proactive SIM: Provide Local Information (NMR) </td> * <td> 31 </td></tr> * <tr><td> Proactive SIM: Set Up Event List </td> * <td> 32 </td></tr> * <tr><td> Event: MT call </td> * <td> 33 </td></tr> * <tr><td> Event: Call connected </td> * <td> 34 </td></tr> * <tr><td> Event: Call disconnected </td> * <td> 35 </td></tr> * <tr><td> Event: Location status </td> * <td> 36 </td></tr> * <tr><td> Event: User activity </td> * <td> 37 </td></tr> * <tr><td> Event: Idle screen available </td> * <td> 38 </td></tr> * <tr><td> Event: Card reader status </td> * <td> 39 </td></tr> * <tr><td> Event: Language selection </td> * <td> 40 </td></tr> * <tr><td> Event: Browser termination </td> * <td> 41 </td></tr> * <tr><td> RFU </td> * <td> 42 </td></tr> * <tr><td> RFU </td> * <td> 43 </td></tr> * <tr><td> RFU </td> * <td> 44 </td></tr> * <tr><td> RFU </td> * <td> 45 </td></tr> * <tr><td> RFU </td> * <td> 46 </td></tr> * <tr><td> RFU </td> * <td> 47 </td></tr> * <tr><td> Proactive SIM: Power ON Card </td> * <td> 48 </td></tr> * <tr><td> Proactive SIM: Power OFF Card </td> * <td> 49 </td></tr> * <tr><td> Proactive SIM: Perform Card APDU </td> * <td> 50 </td></tr> * <tr><td> Proactive SIM: Get Reader Status (reader status) </td> * <td> 51 </td></tr> * <tr><td> Proactive SIM: Get Reader Status (reader ident.) </td> * <td> 52 </td></tr> * <tr><td> RFU </td> * <td> 53 </td></tr> * <tr><td> RFU </td> * <td> 54 </td></tr> * <tr><td> RFU </td> * <td> 55 </td></tr> * <tr><td> Proactive SIM: Timer Management (start, stop) </td> * <td> 56 </td></tr> * <tr><td> Proactive SIM: Timer Management (get cur. value) </td> * <td> 57 </td></tr> * <tr><td> Proactive SIM: Provide Local Info (date,time...) </td> * <td> 58 </td></tr> * <tr><td> Binary choice in Get Inkey </td> * <td> 59 </td></tr> * <tr><td> Set Up Idle Mode Text </td> * <td> 60 </td></tr> * <tr><td> Run AT Command </td> * <td> 61 </td></tr> * <tr><td> 2nd Alpha Id in Set Up Call </td> * <td> 62 </td></tr> * <tr><td> 2nd Capability configuration par. in Call Control</td> * <td> 63 </td></tr> * <tr><td> Sustained Display Text </td> * <td> 64 </td></tr> * <tr><td> Send DTMF </td> * <td> 65 </td></tr> * <tr><td> Proactive SIM: Provide Local Info. (BCCH) </td> * <td> 66 </td></tr> * <tr><td> Proactive SIM: Provide Local Info. (language) </td> * <td> 67 </td></tr> * <tr><td> Proactive SIM: Provide Local Info. (Timing Adv.) </td> * <td> 68 </td></tr> * <tr><td> Proactive SIM: Language Notification </td> * <td> 69 </td></tr> * <tr><td> Proactive SIM: Launch Browser </td> * <td> 70 </td></tr> * <tr><td> RFU </td> * <td> 71 </td></tr> * <tr><td> Soft keys support for Select Item </td> * <td> 72 </td></tr> * <tr><td> Soft keys support for Set Up Menu </td> * <td> 73 </td></tr> * <tr><td> RFU </td> * <td> 74 </td></tr> * <tr><td> RFU </td> * <td> 75 </td></tr> * <tr><td> RFU </td> * <td> 76 </td></tr> * <tr><td> RFU </td> * <td> 77 </td></tr> * <tr><td> RFU </td> * <td> 78 </td></tr> * <tr><td> RFU </td> * <td> 79 </td></tr> * <tr><td> Maximum number of softkeys available (b0) </td> * <td> 80 </td></tr> * <tr><td> Maximum number of softkeys available (b1) </td> * <td> 81 </td></tr> * <tr><td> Maximum number of softkeys available (b2) </td> * <td> 82 </td></tr> * <tr><td> Maximum number of softkeys available (b3) </td> * <td> 83 </td></tr> * <tr><td> Maximum number of softkeys available (b4) </td> * <td> 84 </td></tr> * <tr><td> Maximum number of softkeys available (b5) </td> * <td> 85 </td></tr> * <tr><td> Maximum number of softkeys available (b6) </td> * <td> 86 </td></tr> * <tr><td> Maximum number of softkeys available (b7) </td> * <td> 87 </td></tr> * <tr><td> RFU </td> * <td> 88 </td></tr> * <tr><td> RFU </td> * <td> 89 </td></tr> * <tr><td> RFU </td> * <td> 90 </td></tr> * <tr><td> RFU </td> * <td> 91 </td></tr> * <tr><td> RFU </td> * <td> 92 </td></tr> * <tr><td> RFU </td> * <td> 93 </td></tr> * <tr><td> RFU </td> * <td> 94 </td></tr> * <tr><td> RFU </td> * <td> 95 </td></tr> * <tr><td> RFU </td> * <td> 96 </td></tr> * <tr><td> RFU </td> * <td> 97 </td></tr> * <tr><td> RFU </td> * <td> 98 </td></tr> * <tr><td> RFU </td> * <td> 99 </td></tr> * <tr><td> RFU </td> * <td> 100 </td></tr> * <tr><td> RFU </td> * <td> 101 </td></tr> * <tr><td> RFU </td> * <td> 102 </td></tr> * <tr><td> RFU </td> * <td> 103 </td></tr> * <tr><td> Nb of characters down ME display (b0) </td> * <td> 104 </td></tr> * <tr><td> Nb of characters down ME display (b1) </td> * <td> 105 </td></tr> * <tr><td> Nb of characters down ME display (b2) </td> * <td> 106 </td></tr> * <tr><td> Nb of characters down ME display (b3) </td> * <td> 107 </td></tr> * <tr><td> Nb of characters down ME display (b4) </td> * <td> 108 </td></tr> * <tr><td> RFU </td> * <td> 109 </td></tr> * <tr><td> RFU </td> * <td> 110 </td></tr> * <tr><td> Screen Sizing parameters supported </td> * <td> 111 </td></tr> * <tr><td> Nb of characters accross ME display (b0) </td> * <td> 112 </td></tr> * <tr><td> Nb of characters accross ME display (b1) </td> * <td> 113 </td></tr> * <tr><td> Nb of characters accross ME display (b2) </td> * <td> 114 </td></tr> * <tr><td> Nb of characters accross ME display (b3) </td> * <td> 115 </td></tr> * <tr><td> Nb of characters accross ME display (b4) </td> * <td> 116 </td></tr> * <tr><td> Nb of characters accross ME display (b5) </td> * <td> 117 </td></tr> * <tr><td> Nb of characters accross ME display (b6) </td> * <td> 118 </td></tr> * <tr><td> Variable size fonts supported </td> * <td> 119 </td></tr> * <tr><td> Display can be resized </td> * <td> 120 </td></tr> * <tr><td> Text Wrapping supported </td> * <td> 121 </td></tr> * <tr><td> Text Scrolling supported </td> * <td> 122 </td></tr> * <tr><td> RFU </td> * <td> 123 </td></tr> * <tr><td> RFU </td> * <td> 124 </td></tr> * <tr><td> Width reduction when in a menu (b0) </td> * <td> 125 </td></tr> * <tr><td> Width reduction when in a menu (b1) </td> * <td> 126 </td></tr> * <tr><td> Width reduction when in a menu (b2) </td> * <td> 127 </td></tr> * <tr><td> RFU </td> * <td> 128 </td></tr> * <tr><td> RFU </td> * <td> 129 </td></tr> * <tr><td> RFU </td> * <td> 130 </td></tr> * <tr><td> RFU </td> * <td> 131 </td></tr> * <tr><td> RFU </td> * <td> 132 </td></tr> * <tr><td> RFU </td> * <td> 133 </td></tr> * </Table><br> * * Example of use in a standard Toolkit applet:<pre><code> * private static final byte PROFILE_USSD = (byte)27; * * if (MEProfile.check(PROFILE_USSD) == true) { * // USSD available on the handset * sendTheRequest(); * } else { * // abort applet * return; * } * </code></pre> * * @version 8.3.0 */ public final class MEProfile { // ------------------------------- Constructors --------------------------- /** * constructor */ private MEProfile() { } // ------------------------------- Public methods ------------------------- /** * Checks a facility in the handset profile. * * @param index the number of the facility to check, according to * the table above. * * @return true if the facility is supported, false otherwise * * @exception ToolkitException with the following reason codes: * <ul> <li>ME_PROFILE_NOT_AVAILABLE if Terminal Profile data * are not available</ul> */ public static boolean check(byte index) throws ToolkitException { return false; } /** * Checks a set of facilities in the handset profile. * The method checks all the facilities corresponding to bits set to 1 in * the mask buffer. * * <p> Notes:<ul> <li><em>If </em><code>offset</code><em> or * </em><code>length</code><em> parameter is negative an * </em><code>ArrayIndexOutOfBoundsException</code> <em> exception * is thrown and no check is performed.</em> <li><em>If * </em><code>offset+length</code><em> is greater than * </em><code>mask.length</code><em>, the length of the * </em><code>mask</code><em> array an * </em><code>ArrayIndexOutOfBoundsException</code><em> exception * is thrown and no check is performed.</em> </ul> * * @param mask a byte array containing the mask to compare with the profile * @param offset the starting offset of the mask in the byte array * @param length the length of the mask (at least 1) * * @return true if the set of facilities is supported, false * otherwise. If <code>length</code> is equal to <code>0</code>, * true is returned. * * @exception NullPointerException if <code>mask</code> is <code>null</code> * @exception ArrayIndexOutOfBoundsException if check would cause * access of data outside mask array bounds * @exception ToolkitException with the following reason codes: * <ul> <li>ME_PROFILE_NOT_AVAILABLE if Terminal Profile data * are not available</ul> */ public static boolean check(byte[] mask, short offset, short length) throws NullPointerException, ArrayIndexOutOfBoundsException, ToolkitException { return false; } /** * Checks a facility in the handset profile. * * @param index the number of the facility to check, according to * the table above. * * @return true if the facility is supported, false otherwise * * @exception ToolkitException with the following reason codes: * <ul> <li>ME_PROFILE_NOT_AVAILABLE if Terminal Profile data * are not available</ul> */ public static boolean check(short index) throws ToolkitException { return false; } /** * Returns the binary value of a parameter, delimited by two * indexes, from the handset profile. * * @param indexMSB index of the Most Significant Bit of the * handset profile . * @param indexLSB index of the Lowest Significant Bit of the * handset profile . * * @return binary value of the data field indicated in the handset profile. * * @exception ToolkitException with the following reason codes: * <ul> <li>ME_PROFILE_NOT_AVAILABLE if Terminal Profile data * are not available <li>BAD_INPUT_PARAMETER if (indexMSB > * indexLSB +16) or (indexMSB < indexLSB) or (indexMSB < 0) * or (indexLSB < 0) </ul> */ public static short getValue(short indexMSB, short indexLSB) throws ToolkitException { return 0; } /** * Copies a part of the handset profile in a buffer. * * <p> Notes:<ul> <li><em>If </em><code>dstOffset</code><em> or * </em><code>dstLength</code><em> parameter is negative an * </em><code>ArrayIndexOutOfBoundsException</code> <em> exception * is thrown and no copy is performed.</em> <li><em>If * </em><code>dstOffset+dstLength</code><em> is greater than * </em><code>dstBuffer.length</code><em>, the length of the * </em><code>dstBuffer</code><em> array an * </em><code>ArrayIndexOutOfBoundsException</code><em> exception * is thrown and no copy is performed.</em> </ul> * * @param startOffset offset of the handset profile first byte to be copied * @param dstBuffer destination byte array * @param dstOffset offset within destination byte array to start copy into * @param dstLength byte length to be copy * * @return dstOffset + dstLength * * @exception ArrayIndexOutOfBoundsException if copy would cause * access of data outside array bounds * @exception NullPointerException if <code>dstBuffer<code> is null * @exception ToolkitException with the following reason codes: * <ul> <li>ME_PROFILE_NOT_AVAILABLE if Terminal Profile data * are not available</ul> */ public static short copy(short startOffset, byte[] dstBuffer, short dstOffset, short dstLength) throws ArrayIndexOutOfBoundsException, NullPointerException, ToolkitException { return 0; } }