FileDocCategorySizeDatePackage
BluetoothUtils.javaAPI DocphoneME MR2 API (J2ME)3552Wed May 02 18:00:30 BST 2007com.sun.midp.jsr082

BluetoothUtils.java

/*
 *
 *
 * Copyright  1990-2007 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 com.sun.midp.jsr082;

/**
 * Class contains Bluetooth helper methods.
 */
public class BluetoothUtils {
    /** Size of byte representation of Bluetooth address. */
    public static final int BTADDR_SIZE = 6;
    
    /**
     * Converts Bluetooth address from byte array to string representation.
     *
     * @param btaddr 6-bytes byte array containing Bluetooth address in
     *              Bluetooth byte order (little-endian)
     * @return Bluetooth address as string in
     *          user-friendly byte order (big-endian) without comma separator
     * @throws IllegalArgumentException if input address is invalid
     */
    public static String getAddressString(byte[] btaddr)
            throws IllegalArgumentException {
        final int len = btaddr.length;
            if (len != BTADDR_SIZE) {
                throw new IllegalArgumentException("Incorrect address size");
            }
        
        StringBuffer sb = new StringBuffer(len * 2);        
        String s;        
        for (int i = (len - 1); i >= 0; i--) {
            // convert decimal to hexadecimal with leading zeroes and uppercase
            s = Integer.toHexString((btaddr[i] >> 4) & 0xF);
            sb.append(s.toUpperCase());
            s = Integer.toHexString(btaddr[i] & 0xF);
            sb.append(s.toUpperCase());
        }
        
        return sb.toString();
    }    

    /**
     * Converts Bluetooth address from string to byte array representation.
     *
     * @param btaddr Bluetooth address as string in
     *          user-friendly byte order (big-endian) without comma separator
     * @return 6-bytes byte array containing Bluetooth address in
     *              Bluetooth byte order (little-endian)
     * @throws IllegalArgumentException if input address is invalid
     */
    public static byte[] getAddressBytes(String btaddr)
            throws IllegalArgumentException {
        final int len = btaddr.length() / 2;
            if (len != BTADDR_SIZE) {
                throw new IllegalArgumentException("Incorrect address size");
            }
        
        byte[] bytes = new byte[len];
        try {
            for (int i = 0; i < len; i++) {
                String s = btaddr.substring(i * 2, i * 2 + 2);
                bytes[len - 1 - i] = (byte)Integer.parseInt(s, 16);
            }
        } catch (NumberFormatException e) {
            throw new IllegalArgumentException("Incorrect address value");
        }
        
        return bytes;
    }
}