utl.cc revision 8af480e24549ba51a3f6858d9d9af504715e0bea
15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 2003-2012 Broadcom Corporation
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  you may not use this file except in compliance with the License.
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  You may obtain a copy of the License at:
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  See the License for the specific language governing permissions and
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  limitations under the License.
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  This file contains utility functions.
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
24933926c92e1378cc76bc9c149107e670c4872d4eScott James Remnant#include <stddef.h>
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "utl.h"
26258c2538e3b62a8cdb403f2730c45d721e5292b4Pavlin Radoslavov#include "bt_common.h"
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_api.h"
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         utl_str2int
328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
338af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      This utility function converts a character string to an
348af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  integer.  Acceptable values in string are 0-9.  If invalid
358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  string or string value too large, -1 is returned.  Leading
368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  spaces are skipped.
378af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
388af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
398af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          Integer value or -1 on error.
408af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
418af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
42e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenint16_t utl_str2int(const char *p_s)
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
44e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen    int32_t   val = 0;
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (;*p_s == ' ' && *p_s != 0; p_s++);
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (*p_s == 0) return -1;
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (;;)
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((*p_s < '0') || (*p_s > '9')) return -1;
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
54e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen        val += (int32_t) (*p_s++ - '0');
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (val > 32767) return -1;
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (*p_s == 0)
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
60e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen            return (int16_t) val;
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            val *= 10;
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
708af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         utl_strucmp
728af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      This utility function compares two strings in uppercase.
748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  String p_s must be uppercase.  String p_t is converted to
758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  uppercase if lowercase.  If p_s ends first, the substring
768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  match is counted as a match.
778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
798af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          0 if strings match, nonzero otherwise.
808af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
818af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint utl_strucmp(const char *p_s, const char *p_t)
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char c;
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    while (*p_s && *p_t)
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        c = *p_t++;
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (c >= 'a' && c <= 'z')
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            c -= 0x20;
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (*p_s++ != c)
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return -1;
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if p_t hit null first, no match */
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (*p_t == 0 && *p_s != 0)
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return 1;
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* else p_s hit null first, count as match */
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return 0;
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1118af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         utl_itoa
1138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1148af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      This utility function converts a uint16_t to a string.  The
1158af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  string is NULL-terminated.  The length of the string is
1168af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  returned;
1178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1188af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          Length of string.
1208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
122e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenuint8_t utl_itoa(uint16_t i, char *p_s)
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
124e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen    uint16_t  j, k;
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char    *p = p_s;
126e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen    bool fill = false;
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (i == 0)
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* take care of zero case */
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *p++ = '0';
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for(j = 10000; j > 0; j /= 10)
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            k = i / j;
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            i %= j;
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (k > 0 || fill)
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project              *p++ = k + '0';
142e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen              fill = true;
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    *p = 0;
147e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen    return (uint8_t) (p - p_s);
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         utl_set_device_class
1538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1548af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      This function updates the local Device Class.
1558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters:
1578af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  p_cod   - Pointer to the device class to set to
1588af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1598af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  cmd     - the fields of the device class to update.
1608af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                            BTA_UTL_SET_COD_MAJOR_MINOR, - overwrite major, minor class
1618af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                            BTA_UTL_SET_COD_SERVICE_CLASS - set the bits in the input
1628af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                            BTA_UTL_CLR_COD_SERVICE_CLASS - clear the bits in the input
1638af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                            BTA_UTL_SET_COD_ALL - overwrite major, minor, set the bits in service class
1648af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                            BTA_UTL_INIT_COD - overwrite major, minor, and service class
1658af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          true if successful, Otherwise false
1678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1688af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
169e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenbool utl_set_device_class(tBTA_UTL_COD *p_cod, uint8_t cmd)
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
171e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen    uint8_t *dev;
172e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen    uint16_t service;
173e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen    uint8_t  minor, major;
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    DEV_CLASS dev_class;
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    dev = BTM_ReadDeviceClass();
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_COD_SERVICE_CLASS( service, dev );
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_COD_MINOR_CLASS(minor, dev );
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_COD_MAJOR_CLASS(major, dev );
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch(cmd)
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_UTL_SET_COD_MAJOR_MINOR:
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        minor = p_cod->minor & BTM_COD_MINOR_CLASS_MASK;
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        major = p_cod->major & BTM_COD_MAJOR_CLASS_MASK;
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_UTL_SET_COD_SERVICE_CLASS:
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* clear out the bits that is not SERVICE_CLASS bits */
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_cod->service &= BTM_COD_SERVICE_CLASS_MASK;
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        service = service | p_cod->service;
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_UTL_CLR_COD_SERVICE_CLASS:
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_cod->service &= BTM_COD_SERVICE_CLASS_MASK;
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        service = service & (~p_cod->service);
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_UTL_SET_COD_ALL:
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        minor = p_cod->minor & BTM_COD_MINOR_CLASS_MASK;
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        major = p_cod->major & BTM_COD_MAJOR_CLASS_MASK;
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_cod->service &= BTM_COD_SERVICE_CLASS_MASK;
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        service = service | p_cod->service;
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_UTL_INIT_COD:
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        minor = p_cod->minor & BTM_COD_MINOR_CLASS_MASK;
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        major = p_cod->major & BTM_COD_MAJOR_CLASS_MASK;
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        service = p_cod->service & BTM_COD_SERVICE_CLASS_MASK;
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    default:
213e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen        return false;
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* convert the fields into the device class type */
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    FIELDS_TO_COD(dev_class, minor, major, service);
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (BTM_SetDeviceClass(dev_class) == BTM_SUCCESS)
220e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen        return true;
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
222e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen    return false;
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         utl_isintstr
2288af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2298af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      This utility function checks if the given string is an
2308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  integer string or not
2318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2338af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          true if successful, Otherwise false
2348af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
236e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenbool utl_isintstr(const char *p_s)
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
238e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen    uint16_t i = 0;
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for(i=0; p_s[i] != 0; i++)
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(((p_s[i] < '0') || (p_s[i] > '9')) && (p_s[i] != ';'))
243e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen            return false;
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
246e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen    return true;
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         utl_isdialchar
2528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      This utility function checks if the given character
2548af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  is an acceptable dial digit
2558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          true if successful, Otherwise false
2578af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2588af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
259c75a71d9b6012c46743099b53d172ad46e6f41d2Satish Kodishalabool utl_isdialchar(const char d)
260c75a71d9b6012c46743099b53d172ad46e6f41d2Satish Kodishala{
261c75a71d9b6012c46743099b53d172ad46e6f41d2Satish Kodishala    return (((d >= '0') && (d <= '9'))
262c75a71d9b6012c46743099b53d172ad46e6f41d2Satish Kodishala            || (d == '*') || (d == '+') || (d == '#') || (d == ';')
263c75a71d9b6012c46743099b53d172ad46e6f41d2Satish Kodishala            || ((d >= 'A') && (d <= 'C'))
264c75a71d9b6012c46743099b53d172ad46e6f41d2Satish Kodishala            || ((d == 'p') || (d == 'P')
265c75a71d9b6012c46743099b53d172ad46e6f41d2Satish Kodishala            || (d == 'w') || (d == 'W')));
266c75a71d9b6012c46743099b53d172ad46e6f41d2Satish Kodishala}
267c75a71d9b6012c46743099b53d172ad46e6f41d2Satish Kodishala
268c75a71d9b6012c46743099b53d172ad46e6f41d2Satish Kodishala/*******************************************************************************
2698af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2708af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         utl_isdialstr
2718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2728af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      This utility function checks if the given string contains
2738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  only dial digits or not
2748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          true if successful, Otherwise false
2778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
279e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenbool utl_isdialstr(const char *p_s)
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
281c75a71d9b6012c46743099b53d172ad46e6f41d2Satish Kodishala    for (uint16_t i = 0; p_s[i] != 0; i++) {
282c75a71d9b6012c46743099b53d172ad46e6f41d2Satish Kodishala        // include chars not in spec that work sent by some headsets.
283c75a71d9b6012c46743099b53d172ad46e6f41d2Satish Kodishala        if(!(utl_isdialchar(p_s[i])
284c75a71d9b6012c46743099b53d172ad46e6f41d2Satish Kodishala            || (p_s[i] == '-')))
285e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen            return false;
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
287e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen    return true;
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
291