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>
25f355ef5a4d7fb667fc57a0dfb60f738d870e252eMyles Watson
26258c2538e3b62a8cdb403f2730c45d721e5292b4Pavlin Radoslavov#include "bt_common.h"
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_api.h"
28cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "utl.h"
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         utl_str2int
338af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
348af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      This utility function converts a character string to an
358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  integer.  Acceptable values in string are 0-9.  If invalid
368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  string or string value too large, -1 is returned.  Leading
378af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  spaces are skipped.
388af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
398af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
408af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          Integer value or -1 on error.
418af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
428af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
43cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonint16_t utl_str2int(const char* p_s) {
44cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  int32_t val = 0;
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  for (; *p_s == ' ' && *p_s != 0; p_s++)
47cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    ;
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  if (*p_s == 0) return -1;
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
51cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  for (;;) {
52cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    if ((*p_s < '0') || (*p_s > '9')) return -1;
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
54cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    val += (int32_t)(*p_s++ - '0');
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
56cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    if (val > 32767) return -1;
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
58cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    if (*p_s == 0) {
59cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      return (int16_t)val;
60cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    } else {
61cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      val *= 10;
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
63cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  }
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
688af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         utl_strucmp
698af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
708af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      This utility function compares two strings in uppercase.
718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  String p_s must be uppercase.  String p_t is converted to
728af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  uppercase if lowercase.  If p_s ends first, the substring
738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  match is counted as a match.
748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          0 if strings match, nonzero otherwise.
778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
79cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonint utl_strucmp(const char* p_s, const char* p_t) {
80cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  char c;
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
82cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  while (*p_s && *p_t) {
83cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    c = *p_t++;
84cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    if (c >= 'a' && c <= 'z') {
85cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      c -= 0x20;
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
87cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    if (*p_s++ != c) {
88cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      return -1;
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
90cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  }
91cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  /* if p_t hit null first, no match */
92cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  if (*p_t == 0 && *p_s != 0) {
93cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    return 1;
94cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  }
95cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  /* else p_s hit null first, count as match */
96cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  else {
97cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    return 0;
98cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  }
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1028af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         utl_itoa
1048af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      This utility function converts a uint16_t to a string.  The
1068af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  string is NULL-terminated.  The length of the string is
1078af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  returned;
1088af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1098af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1108af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          Length of string.
1118af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
113cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonuint8_t utl_itoa(uint16_t i, char* p_s) {
114cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  uint16_t j, k;
115cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  char* p = p_s;
116cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bool fill = false;
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
118cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  if (i == 0) {
119cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    /* take care of zero case */
120cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    *p++ = '0';
121cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  } else {
122cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    for (j = 10000; j > 0; j /= 10) {
123cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      k = i / j;
124cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      i %= j;
125cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      if (k > 0 || fill) {
126cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson        *p++ = k + '0';
127cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson        fill = true;
128cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      }
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
130cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  }
131cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  *p = 0;
132cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  return (uint8_t)(p - p_s);
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1378af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         utl_set_device_class
1388af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1398af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      This function updates the local Device Class.
1408af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1418af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters:
1428af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  p_cod   - Pointer to the device class to set to
1438af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1448af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  cmd     - the fields of the device class to update.
145cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson *                            BTA_UTL_SET_COD_MAJOR_MINOR, - overwrite major,
1461baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson *                                                           minor class
147cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson *                            BTA_UTL_SET_COD_SERVICE_CLASS - set the bits in
1481baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson *                                                            the input
149cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson *                            BTA_UTL_CLR_COD_SERVICE_CLASS - clear the bits in
1501baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson *                                                            the input
151cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson *                            BTA_UTL_SET_COD_ALL - overwrite major, minor, set
1521baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson *                                                  the bits in service class
153cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson *                            BTA_UTL_INIT_COD - overwrite major, minor, and
1541baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson *                                               service class
1558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          true if successful, Otherwise false
1578af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
1588af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
159cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonbool utl_set_device_class(tBTA_UTL_COD* p_cod, uint8_t cmd) {
160cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  uint8_t* dev;
161cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  uint16_t service;
162cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  uint8_t minor, major;
163cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  DEV_CLASS dev_class;
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
165cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  dev = BTM_ReadDeviceClass();
166cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BTM_COD_SERVICE_CLASS(service, dev);
167cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BTM_COD_MINOR_CLASS(minor, dev);
168cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BTM_COD_MAJOR_CLASS(major, dev);
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
170cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  switch (cmd) {
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_UTL_SET_COD_MAJOR_MINOR:
172cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      minor = p_cod->minor & BTM_COD_MINOR_CLASS_MASK;
173cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      major = p_cod->major & BTM_COD_MAJOR_CLASS_MASK;
174cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      break;
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_UTL_SET_COD_SERVICE_CLASS:
177cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      /* clear out the bits that is not SERVICE_CLASS bits */
178cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      p_cod->service &= BTM_COD_SERVICE_CLASS_MASK;
179cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      service = service | p_cod->service;
180cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      break;
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_UTL_CLR_COD_SERVICE_CLASS:
183cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      p_cod->service &= BTM_COD_SERVICE_CLASS_MASK;
184cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      service = service & (~p_cod->service);
185cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      break;
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_UTL_SET_COD_ALL:
188cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      minor = p_cod->minor & BTM_COD_MINOR_CLASS_MASK;
189cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      major = p_cod->major & BTM_COD_MAJOR_CLASS_MASK;
190cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      p_cod->service &= BTM_COD_SERVICE_CLASS_MASK;
191cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      service = service | p_cod->service;
192cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      break;
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_UTL_INIT_COD:
195cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      minor = p_cod->minor & BTM_COD_MINOR_CLASS_MASK;
196cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      major = p_cod->major & BTM_COD_MAJOR_CLASS_MASK;
197cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      service = p_cod->service & BTM_COD_SERVICE_CLASS_MASK;
198cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      break;
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    default:
201cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson      return false;
202cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  }
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
204cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  /* convert the fields into the device class type */
205cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  FIELDS_TO_COD(dev_class, minor, major, service);
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
207cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  if (BTM_SetDeviceClass(dev_class) == BTM_SUCCESS) return true;
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
209cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  return false;
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2148af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         utl_isintstr
2158af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2168af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      This utility function checks if the given string is an
2178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  integer string or not
2188af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          true if successful, Otherwise false
2218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2228af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
223cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonbool utl_isintstr(const char* p_s) {
224cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  uint16_t i = 0;
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
226cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  for (i = 0; p_s[i] != 0; i++) {
227cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    if (((p_s[i] < '0') || (p_s[i] > '9')) && (p_s[i] != ';')) return false;
228cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  }
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
230cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  return true;
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2348af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         utl_isdialchar
2368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2378af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      This utility function checks if the given character
2388af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  is an acceptable dial digit
2398af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2408af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          true if successful, Otherwise false
2418af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2428af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
243cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonbool utl_isdialchar(const char d) {
244cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  return (((d >= '0') && (d <= '9')) || (d == '*') || (d == '+') ||
245cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson          (d == '#') || (d == ';') || ((d >= 'A') && (d <= 'C')) ||
246cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson          ((d == 'p') || (d == 'P') || (d == 'w') || (d == 'W')));
247c75a71d9b6012c46743099b53d172ad46e6f41d2Satish Kodishala}
248c75a71d9b6012c46743099b53d172ad46e6f41d2Satish Kodishala
249c75a71d9b6012c46743099b53d172ad46e6f41d2Satish Kodishala/*******************************************************************************
2508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function         utl_isdialstr
2528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description      This utility function checks if the given string contains
2548af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *                  only dial digits or not
2558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2578af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns          true if successful, Otherwise false
2588af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *
2598af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/
260cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonbool utl_isdialstr(const char* p_s) {
261cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  for (uint16_t i = 0; p_s[i] != 0; i++) {
262cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    // include chars not in spec that work sent by some headsets.
263cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    if (!(utl_isdialchar(p_s[i]) || (p_s[i] == '-'))) return false;
264cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  }
265cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  return true;
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
267