static char *bta_hf_client_parse_binp(char *buffer) { /* HFP only supports phone number as BINP data */ /* phone number is 32 chars plus one for \0*/ char numstr[33]; int res; int offset; AT_CHECK_EVENT(buffer, "+BINP:"); res = sscanf(buffer, "\"%32[^\"]\"\r\n%n", numstr, &offset); if (res < 1) { return NULL; } buffer += offset; /* some phones might sent type as well, just skip it */ AT_SKIP_REST(buffer); AT_CHECK_RN(buffer); bta_hf_client_handle_binp(numstr); return buffer; }
static char *bta_hf_client_parse_cops(char *buffer) { UINT8 mode; /* spec forces 16 chars max, plus \0 here */ char opstr[17]; int res; int offset; AT_CHECK_EVENT(buffer, "+COPS:"); /* TODO: Not sure if operator string actually can contain escaped " char inside */ res = sscanf(buffer, "%hhi,0,\"%16[^\"]\"%n", &mode, opstr, &offset); if (res < 2) { return NULL; } buffer += offset; AT_SKIP_REST(buffer); AT_CHECK_RN(buffer); bta_hf_client_handle_cops(opstr, mode); return buffer; }
/* in HFP context there is no difference between ccwa and clip */ static char *bta_hf_client_parse_ccwa(char *buffer) { /* ac to spec 32 chars max, plus \0 here */ char number[33]; UINT32 type = 0; int res ; int offset; AT_CHECK_EVENT(buffer, "+CCWA:"); /* there might be something more after %lu but HFP doesn't care */ res = sscanf(buffer, "\"%32[^\"]\",%u%n", number, &type, &offset); if (res < 2) { return NULL; } buffer += offset; AT_SKIP_REST(buffer); AT_CHECK_RN(buffer); bta_hf_client_handle_ccwa(number, type); return buffer; }
static char *bta_hf_client_parse_binp(char *buffer) { /* HFP only supports phone number as BINP data */ /* phone number is 32 chars plus one for \0*/ char numstr[33]; int res; int offset = 0; AT_CHECK_EVENT(buffer, "+BINP:"); res = sscanf(buffer, "\"%32[^\"]\"\r\n%n", numstr, &offset); if(res < 1) { return NULL; } /* Abort in case offset not set because of format error */ if (offset == 0) { APPL_TRACE_ERROR1("bta_hf_client_parse_binp: Format Error %s", buffer); return NULL; } buffer += offset; /* some phones might sent type as well, just skip it */ AT_SKIP_REST(buffer); AT_CHECK_RN(buffer); bta_hf_client_handle_binp(numstr); return buffer; }
static char *bta_hf_client_parse_cops(char *buffer) { UINT8 mode; /* spec forces 16 chars max, plus \0 here */ char opstr[17]; int res; int offset = 0; AT_CHECK_EVENT(buffer, "+COPS:"); /* TODO: Not sure if operator string actually can contain escaped " char inside */ res = sscanf(buffer, "%hhi,0,\"%16[^\"]\"%n", &mode, opstr, &offset); if(res < 2) { return NULL; } /* Abort in case offset not set because of format error */ if (offset == 0) { APPL_TRACE_ERROR1("bta_hf_client_parse_cops: Format Error %s", buffer); return NULL; } buffer += offset; AT_SKIP_REST(buffer); AT_CHECK_RN(buffer); bta_hf_client_handle_cops(opstr, mode); return buffer; }
static char *bta_hf_client_parse_clip(char *buffer) { /* spec forces 32 chars, plus \0 here */ char number[33]; UINT32 type = 0; int res; int offset = 0; AT_CHECK_EVENT(buffer, "+CLIP:"); /* there might be something more after %lu but HFP doesn't care */ res = sscanf(buffer, "\"%32[^\"]\",%lu%n", number, &type, &offset); if(res < 2) { return NULL; } if (offset == 0) { APPL_TRACE_ERROR1("bta_hf_client_parse_clip: Format Error %s", buffer); return NULL; } buffer += offset; AT_SKIP_REST(buffer); AT_CHECK_RN(buffer); bta_hf_client_handle_clip(number, type); return buffer; }