mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-09 21:45:54 +00:00
hfp: fix parsing of ranges e.g. in +CIND responses
This commit is contained in:
parent
184da38c1a
commit
f8301d4687
@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|||||||
## Changes September 2020
|
## Changes September 2020
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
- HFP: fix parsing of ranges e.g. in +CIND responses
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- `btstack_ring_buffer`: add `btstack_ring_buffer_reset` to reset it to initial state/empty
|
- `btstack_ring_buffer`: add `btstack_ring_buffer_reset` to reset it to initial state/empty
|
||||||
|
@ -1025,6 +1025,7 @@ static void hfp_parser_reset_line_buffer(hfp_connection_t *hfp_connection) {
|
|||||||
static void hfp_parser_store_if_token(hfp_connection_t * hfp_connection, uint8_t byte){
|
static void hfp_parser_store_if_token(hfp_connection_t * hfp_connection, uint8_t byte){
|
||||||
switch (byte){
|
switch (byte){
|
||||||
case ',':
|
case ',':
|
||||||
|
case '-':
|
||||||
case ';':
|
case ';':
|
||||||
case '(':
|
case '(':
|
||||||
case ')':
|
case ')':
|
||||||
@ -1040,6 +1041,7 @@ static void hfp_parser_store_if_token(hfp_connection_t * hfp_connection, uint8_t
|
|||||||
static bool hfp_parser_is_separator( uint8_t byte){
|
static bool hfp_parser_is_separator( uint8_t byte){
|
||||||
switch (byte){
|
switch (byte){
|
||||||
case ',':
|
case ',':
|
||||||
|
case '-':
|
||||||
case ';':
|
case ';':
|
||||||
case '\n':
|
case '\n':
|
||||||
case '\r':
|
case '\r':
|
||||||
|
@ -121,10 +121,13 @@ TEST(HFPParser, HFP_CMD_INDICATORS_RETRIEVE){
|
|||||||
TEST(HFPParser, HFP_HF_INDICATORS){
|
TEST(HFPParser, HFP_HF_INDICATORS){
|
||||||
offset = 0;
|
offset = 0;
|
||||||
offset += snprintf(packet, sizeof(packet), "%s:", HFP_INDICATOR);
|
offset += snprintf(packet, sizeof(packet), "%s:", HFP_INDICATOR);
|
||||||
for (pos = 0; pos < hfp_ag_indicators_nr - 1; pos++){
|
for (pos = 0; pos < hfp_ag_indicators_nr; pos++){
|
||||||
offset += snprintf(packet+offset, sizeof(packet)-offset, "(\"%s\", (%d, %d)),", hfp_ag_indicators[pos].name, hfp_ag_indicators[pos].min_range, hfp_ag_indicators[pos].max_range);
|
if (pos != 0) {
|
||||||
|
packet[offset++] = ',';
|
||||||
|
}
|
||||||
|
offset += snprintf(packet+offset, sizeof(packet)-offset, "(\"%s\", (%d, %d)),", hfp_ag_indicators[pos].name, hfp_ag_indicators[pos].min_range, hfp_ag_indicators[pos].max_range);
|
||||||
}
|
}
|
||||||
offset += snprintf(packet+offset, sizeof(packet)-offset, "(\"%s\", (%d, %d))\r\n\r\nOK\r\n", hfp_ag_indicators[pos].name, hfp_ag_indicators[pos].min_range, hfp_ag_indicators[pos].max_range);
|
offset += snprintf(packet+offset, sizeof(packet)-offset, "\r\n\r\nOK\r\n");
|
||||||
context.state = HFP_W4_RETRIEVE_INDICATORS;
|
context.state = HFP_W4_RETRIEVE_INDICATORS;
|
||||||
|
|
||||||
parse_hf(packet);
|
parse_hf(packet);
|
||||||
@ -138,6 +141,29 @@ TEST(HFPParser, HFP_HF_INDICATORS){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(HFPParser, HFP_HF_INDICATORS_RANGE){
|
||||||
|
offset = 0;
|
||||||
|
offset += snprintf(packet, sizeof(packet), "%s:", HFP_INDICATOR);
|
||||||
|
for (pos = 0; pos < hfp_ag_indicators_nr; pos++){
|
||||||
|
if (pos != 0) {
|
||||||
|
packet[offset++] = ',';
|
||||||
|
}
|
||||||
|
offset += snprintf(packet+offset, sizeof(packet)-offset, "(\"%s\", (%d-%d)),", hfp_ag_indicators[pos].name, hfp_ag_indicators[pos].min_range, hfp_ag_indicators[pos].max_range);
|
||||||
|
}
|
||||||
|
offset += snprintf(packet+offset, sizeof(packet)-offset, "\r\n\r\nOK\r\n");
|
||||||
|
context.state = HFP_W4_RETRIEVE_INDICATORS;
|
||||||
|
|
||||||
|
parse_hf(packet);
|
||||||
|
CHECK_EQUAL(HFP_CMD_OK, context.command);
|
||||||
|
CHECK_EQUAL(hfp_ag_indicators_nr, context.ag_indicators_nr);
|
||||||
|
for (pos = 0; pos < hfp_ag_indicators_nr; pos++){
|
||||||
|
CHECK_EQUAL(hfp_ag_indicators[pos].index, context.ag_indicators[pos].index);
|
||||||
|
STRCMP_EQUAL(hfp_ag_indicators[pos].name, context.ag_indicators[pos].name);
|
||||||
|
CHECK_EQUAL(hfp_ag_indicators[pos].min_range, context.ag_indicators[pos].min_range);
|
||||||
|
CHECK_EQUAL(hfp_ag_indicators[pos].max_range, context.ag_indicators[pos].max_range);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TEST(HFPParser, HFP_HF_INDICATOR_STATUS){
|
TEST(HFPParser, HFP_HF_INDICATOR_STATUS){
|
||||||
// send status
|
// send status
|
||||||
offset = 0;
|
offset = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user