| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377 |
- /******************************************************************************
- *
- * Copyright (C) 2014 The Android Open Source Project
- * Copyright 2002 - 2004 Open Interface North America, Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
- #ifndef _OI_UTILS_H
- #define _OI_UTILS_H
- /**
- * @file
- *
- * This file provides the interface for utility functions.
- * Among the utilities are strlen (string length), strcmp (string compare), and
- * other string manipulation functions. These are provided for those plaforms
- * where this functionality is not available in stdlib.
- */
- /**********************************************************************************
- $Revision: #1 $
- ***********************************************************************************/
- #include <stdarg.h>
- #include "oi_common.h"
- #include "oi_string.h"
- #include "oi_bt_spec.h"
- /** \addtogroup Misc Miscellaneous APIs */
- /**@{*/
- #ifdef __cplusplus
- extern "C" {
- #endif
- /**
- * Opaque type for a callback function handle. See OI_ScheduleCallbackFunction()
- */
- typedef OI_UINT32 OI_CALLBACK_HANDLE;
- /**
- * Function prototype for a timed procedure callback.
- *
- * @param arg Value that was passed into the OI_ScheduleCallback() function
- *
- */
- typedef void (*OI_SCHEDULED_CALLBACK)(void *arg);
- /**
- * Registers a function to be called when a timeout expires. This API uses BLUEmagic's internal
- * function dispatch mechanism, so applications that make extensive use of this facility may need to
- * increase the value of DispatchTableSize in the configuration block for the dispatcher (see
- * oi_bt_stack_config.h).
- *
- * @param callbackFunction The function that will be called when the timeout expires
- *
- * @param arg Value that will be returned as the parameter to the callback function.
- *
- * @param timeout A timeout expressed in OI_INTERVALs (tenths of seconds). This can be
- * zero in which case the callback function will be called as soon as
- * possible.
- *
- * @param handle NULL or a pointer receive the callback handle.
- *
- * @return OI_OK if the function was reqistered, or an error status.
- */
- OI_STATUS OI_ScheduleCallbackFunction(OI_SCHEDULED_CALLBACK callbackFunction,
- void *arg,
- OI_INTERVAL timeout,
- OI_CALLBACK_HANDLE *handle);
- /**
- * Cancels a function registered with OI_ScheduleCallbackFunction() before its timer expires.
- *
- * @param handle handle returned by OI_ScheduleCallbackFunction().
- *
- * @return OI_OK if the function was cancelled, or an error status.
- */
- OI_STATUS OI_CancelCallbackFunction(OI_CALLBACK_HANDLE handle);
- /**
- * Registers a function to be called when a timeout expires. This version does not return a handle
- * so can only be canceled by calling OI_CancelCallback().
- *
- * @param callbackFunction The function that will be called when the timeout expires
- *
- * @param arg Value that will be returned as the parameter to the callback function.
- *
- * @param timeout A timeout expressed in OI_INTERVALs (tenths of seconds). This can be
- * zero in which case the callback function will be called as soon as
- * possible.
- *
- * @return OI_OK if the function was reqistered, or an error status.
- */
- #define OI_ScheduleCallback(f, a, t) OI_ScheduleCallbackFunction(f, a, t, NULL);
- /**
- * Cancels a function registered with OI_ScheduleCallback() before its timer expires. This
- * function will cancel the first entry matches the indicated callback function pointer.
- *
- * @param callbackFunction The function that was originally registered
- *
- * @return OI_OK if the function was cancelled, or an error status.
- */
- OI_STATUS OI_CancelCallback(OI_SCHEDULED_CALLBACK callbackFunction);
- /**
- * Parse a Bluetooth device address from the specified string.
- *
- * @param str the string to parse
- * @param addr the parsed address, if successful
- *
- * @return TRUE if an address was successfully parsed, FALSE otherwise
- */
- OI_BOOL OI_ParseBdAddr(const OI_CHAR *str,
- OI_BD_ADDR *addr) ;
- /**
- * Printf function for platforms which have no stdio or printf available.
- * OI_Printf supports the basic formatting types, with the exception of
- * floating point types. Additionally, OI_Printf supports several formats
- * specific to BLUEmagic 3.0 software:
- *
- * \%! prints the string for an #OI_STATUS value.
- * @code OI_Printf("There was an error %!", status); @endcode
- *
- * \%@ prints a hex dump of a buffer.
- * Requires a pointer to the buffer and a signed integer length
- * (0 for default length). If the buffer is large, only an excerpt will
- * be printed.
- * @code OI_Printf("Contents of buffer %@", buffer, sizeof(buffer)); @endcode
- *
- * \%: prints a Bluetooth address in the form "HH:HH:HH:HH:HH:HH".
- * Requires a pointer to an #OI_BD_ADDR.
- * @code OI_Printf("Bluetooth address %:", &bdaddr); @endcode
- *
- * \%^ decodes and prints a data element as formatted XML.
- * Requires a pointer to an #OI_DATAELEM.
- * @code OI_Printf("Service attribute list is:\n%^", &attributes); @endcode
- *
- * \%/ prints the base file name of a path, that is, the final substring
- * following a '/' or '\\' character. Requires a pointer to a null
- * terminated string.
- * @code OI_Printf("File %/", "c:\\dir1\\dir2\\file.txt"); @endcode
- *
- * \%~ prints a string, escaping characters as needed to display it in
- * ASCII. Requires a pointer to an #OI_PSTR and an #OI_UNICODE_ENCODING
- * parameter.
- * @code OI_Printf("Identifier %~", &id, OI_UNICODE_UTF16_BE); @endcode
- *
- * \%[ inserts an ANSI color escape sequence. Requires a single character
- * identifying the color to select. Colors are red (r/R), green (g/G),
- * blue (b/B), yellow (y/Y), cyan (c/C), magenta (m/M), white (W),
- * light-gray (l/L), dark-gray (d/D), and black (0). The lower case is
- * dim, the upper case is bright (except in the case of light-gray and
- * dark-gray, where bright and dim are identical). Any other value will
- * select the default color.
- * @code OI_Printf("%[red text %[black %[normal\n", 'r', '0', 0); @endcode
- *
- * \%a same as \%s, except '\\r' and '\\n' are output as "<cr>" and "<lf>".
- * \%?a is valid, but \%la is not.
- *
- * \%b prints an integer in base 2.
- * @code OI_Printf("Bits are %b", I); @endcode
- *
- * \%lb prints a long integer in base 2.
- *
- * \%?b prints the least significant N bits of an integer (or long integer)
- * in base 2. Requires the integer and a length N.
- * @code OI_Printf("Bottom 4 bits are: %?b", I, 4); @endcode
- *
- * \%B prints an integer as boolean text, "TRUE" or "FALSE".
- * @code OI_Printf("The value 0 is %B, the value 1 is %B", 0, 1); @endcode
- *
- * \%?s prints a substring up to a specified maximum length.
- * Requires a pointer to a string and a length parameter.
- * @code OI_Printf("String prefix is %?s", str, 3); @endcode
- *
- * \%ls same as \%S.
- *
- * \%S prints a UTF16 string as UTF8 (plain ASCII, plus 8-bit char sequences
- * where needed). Requires a pointer to #OI_CHAR16. \%?S is valid. The
- * length parameter is in OI_CHAR16 characters.
- *
- * \%T prints time, formatted as "secs.msecs".
- * Requires pointer to #OI_TIME struct, NULL pointer prints current time.
- * @code OI_Printf("The time now is %T", NULL); @endcode
- *
- * @param format The format string
- *
- */
- void OI_Printf(const OI_CHAR *format, ...);
- /**
- * Var-args version OI_Printf
- *
- * @param format Same as for OI_Printf.
- *
- * @param argp Var-args list.
- */
- void OI_VPrintf(const OI_CHAR *format, va_list argp);
- /**
- * Writes a formatted string to a buffer. This function supports the same format specifiers as
- * OI_Printf().
- *
- * @param buffer Destination buffer for the formatted string.
- *
- * @param bufLen The length of the destination buffer.
- *
- * @param format The format string
- *
- * @return Number of characters written or -1 in the case of an error.
- */
- OI_INT32 OI_SNPrintf(OI_CHAR *buffer,
- OI_UINT16 bufLen,
- const OI_CHAR *format, ...);
- /**
- * Var-args version OI_SNPrintf
- *
- * @param buffer Destination buffer for the formatted string.
- *
- * @param bufLen The length of the destination buffer.
- *
- * @param format The format string
- *
- * @param argp Var-args list.
- *
- * @return Number of characters written or -1 in the case of an error.
- */
- OI_INT32 OI_VSNPrintf(OI_CHAR *buffer,
- OI_UINT16 bufLen,
- const OI_CHAR *format, va_list argp);
- /**
- * Convert a string to an integer.
- *
- * @param str the string to parse
- *
- * @return the integer value of the string or 0 if the string could not be parsed
- */
- OI_INT OI_atoi(const OI_CHAR *str);
- /**
- * Parse a signed integer in a string.
- *
- * Skips leading whitespace (space and tabs only) and parses a decimal or hex string. Hex string
- * must be prefixed by "0x". Returns pointer to first character following the integer. Returns the
- * pointer passed in if the string does not describe an integer.
- *
- * @param str String to parse.
- *
- * @param val Pointer to receive the parsed integer value.
- *
- * @return A pointer to the first character following the integer or the pointer passed in.
- */
- const OI_CHAR *OI_ScanInt(const OI_CHAR *str,
- OI_INT32 *val);
- /**
- * Parse an unsigned integer in a string.
- *
- * Skips leading whitespace (space and tabs only) and parses a decimal or hex string. Hex string
- * must be prefixed by "0x". Returns pointer to first character following the integer. Returns the
- * pointer passed in if the string does not describe an integer.
- *
- * @param str String to parse.
- *
- * @param val Pointer to receive the parsed unsigned integer value.
- *
- * @return A pointer to the first character following the unsigned integer or the pointer passed in.
- */
- const OI_CHAR *OI_ScanUInt(const OI_CHAR *str,
- OI_UINT32 *val);
- /**
- * Parse a whitespace delimited substring out of a string.
- *
- * @param str Input string to parse.
- * @param outStr Buffer to return the substring
- * @param len Length of outStr
- *
- *
- * @return A pointer to the first character following the substring or the pointer passed in.
- */
- const OI_CHAR *OI_ScanStr(const OI_CHAR *str,
- OI_CHAR *outStr,
- OI_UINT16 len);
- /**
- * Parse a string for one of a set of alternative value. Skips leading whitespace (space and tabs
- * only) and parses text matching one of the alternative strings. Returns pointer to first character
- * following the matched text.
- *
- * @param str String to parse.
- *
- * @param alts Alternative matching strings separated by '|'
- *
- * @param index Pointer to receive the index of the matching alternative, return value is -1 if
- * there is no match.
- *
- * @return A pointer to the first character following the matched value or the pointer passed in
- * if there was no matching text.
- */
- const OI_CHAR *OI_ScanAlt(const OI_CHAR *str,
- const OI_CHAR *alts,
- OI_INT *index);
- /**
- * Parse a string for a BD Addr. Skips leading whitespace (space and tabs only) and parses a
- * Bluetooth device address with nibbles optionally separated by colons. Return pointet to first
- * character following the BD Addr.
- *
- * @param str String to parse.
- *
- * @param addr Pointer to receive the Bluetooth device address
- *
- * @return A pointer to the first character following the BD Addr or the pointer passed in.
- */
- const OI_CHAR *OI_ScanBdAddr(const OI_CHAR *str,
- OI_BD_ADDR *addr);
- /** Get a character from a digit integer value (0 - 9). */
- #define OI_DigitToChar(d) ((d) + '0')
- /**
- * Determine Maximum and Minimum between two arguments.
- *
- * @param a 1st value
- * @param b 2nd value
- *
- * @return the max or min value between a & b
- */
- #define OI_MAX(a, b) (((a) < (b)) ? (b) : (a) )
- #define OI_MIN(a, b) (((a) > (b)) ? (b) : (a) )
- /**
- * Compare two BD_ADDRs
- * SAME_BD_ADDR - Boolean: TRUE if they are the same address
- */
- #define SAME_BD_ADDR(x, y) (0 == OI_MemCmp((x),(y),OI_BD_ADDR_BYTE_SIZE) )
- #ifdef __cplusplus
- }
- #endif
- /**@}*/
- #endif /* _OI_UTILS_H */
|