mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-16 08:42:28 +00:00
obex: move srm state back into clients
This commit is contained in:
parent
a2763e0c6f
commit
1a3b1957af
@ -163,7 +163,7 @@ static void avrcp_cover_art_client_parser_callback_connect(void * user_data, uin
|
|||||||
static void avrcp_cover_art_client_prepare_srm_header(avrcp_cover_art_client_t * cover_art_client){
|
static void avrcp_cover_art_client_prepare_srm_header(avrcp_cover_art_client_t * cover_art_client){
|
||||||
if (cover_art_client->flow_control_enabled == false){
|
if (cover_art_client->flow_control_enabled == false){
|
||||||
goep_client_header_add_srm_enable(cover_art_client->goep_cid);
|
goep_client_header_add_srm_enable(cover_art_client->goep_cid);
|
||||||
cover_art_client->srm_state = SRM_W4_CONFIRM;
|
cover_art_client->srm_state = AVRCP_COVER_ART_SRM_W4_CONFIRM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,30 +176,30 @@ static void avrcp_cover_art_client_handle_srm_headers(avrcp_cover_art_client_t *
|
|||||||
const avrcp_cover_art_obex_srm_t * obex_srm = &context->obex_srm;
|
const avrcp_cover_art_obex_srm_t * obex_srm = &context->obex_srm;
|
||||||
// Update SRM state based on SRM headers
|
// Update SRM state based on SRM headers
|
||||||
switch (context->srm_state){
|
switch (context->srm_state){
|
||||||
case SRM_W4_CONFIRM:
|
case AVRCP_COVER_ART_SRM_W4_CONFIRM:
|
||||||
switch (obex_srm->srm_value){
|
switch (obex_srm->srm_value){
|
||||||
case OBEX_SRM_ENABLE:
|
case OBEX_SRM_ENABLE:
|
||||||
switch (obex_srm->srmp_value){
|
switch (obex_srm->srmp_value){
|
||||||
case OBEX_SRMP_WAIT:
|
case OBEX_SRMP_WAIT:
|
||||||
context->srm_state = SRM_ENABLED_BUT_WAITING;
|
context->srm_state = AVRCP_COVER_ART_SRM_ENABLED_BUT_WAITING;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
context->srm_state = SRM_ENABLED;
|
context->srm_state = AVRCP_COVER_ART_SRM_ENABLED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
context->srm_state = SRM_DISABLED;
|
context->srm_state = AVRCP_COVER_ART_SRM_DISABLED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SRM_ENABLED_BUT_WAITING:
|
case AVRCP_COVER_ART_SRM_ENABLED_BUT_WAITING:
|
||||||
switch (obex_srm->srmp_value){
|
switch (obex_srm->srmp_value){
|
||||||
case OBEX_SRMP_WAIT:
|
case OBEX_SRMP_WAIT:
|
||||||
context->srm_state = SRM_ENABLED_BUT_WAITING;
|
context->srm_state = AVRCP_COVER_ART_SRM_ENABLED_BUT_WAITING;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
context->srm_state = SRM_ENABLED;
|
context->srm_state = AVRCP_COVER_ART_SRM_ENABLED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -384,7 +384,7 @@ static void avrcp_cover_art_client_goep_data_handler(avrcp_cover_art_client_t *
|
|||||||
switch (op_info.response_code) {
|
switch (op_info.response_code) {
|
||||||
case OBEX_RESP_CONTINUE:
|
case OBEX_RESP_CONTINUE:
|
||||||
avrcp_cover_art_client_handle_srm_headers(cover_art_client);
|
avrcp_cover_art_client_handle_srm_headers(cover_art_client);
|
||||||
if (cover_art_client->srm_state == SRM_ENABLED) {
|
if (cover_art_client->srm_state == AVRCP_COVER_ART_SRM_ENABLED) {
|
||||||
// prepare response
|
// prepare response
|
||||||
avrcp_cover_art_client_prepare_get_operation(cover_art_client);
|
avrcp_cover_art_client_prepare_get_operation(cover_art_client);
|
||||||
break;
|
break;
|
||||||
|
@ -84,6 +84,13 @@ typedef struct {
|
|||||||
uint8_t srmp_value;
|
uint8_t srmp_value;
|
||||||
} avrcp_cover_art_obex_srm_t;
|
} avrcp_cover_art_obex_srm_t;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
AVRCP_COVER_ART_SRM_DISABLED,
|
||||||
|
AVRCP_COVER_ART_SRM_W4_CONFIRM,
|
||||||
|
AVRCP_COVER_ART_SRM_ENABLED_BUT_WAITING,
|
||||||
|
AVRCP_COVER_ART_SRM_ENABLED
|
||||||
|
} avrcp_cover_art_srm_state_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
btstack_linked_item_t item;
|
btstack_linked_item_t item;
|
||||||
|
|
||||||
@ -114,7 +121,7 @@ typedef struct {
|
|||||||
|
|
||||||
// obex srm
|
// obex srm
|
||||||
avrcp_cover_art_obex_srm_t obex_srm;
|
avrcp_cover_art_obex_srm_t obex_srm;
|
||||||
obex_srm_state_t srm_state;
|
avrcp_cover_art_srm_state_t srm_state;
|
||||||
|
|
||||||
// request
|
// request
|
||||||
const char * object_type;
|
const char * object_type;
|
||||||
|
@ -148,36 +148,5 @@
|
|||||||
// PbapSupportedFeatures - 0x10 - 4 bytes
|
// PbapSupportedFeatures - 0x10 - 4 bytes
|
||||||
#define PBAP_APPLICATION_PARAMETER_PBAP_SUPPORTED_FEATURES 0x10
|
#define PBAP_APPLICATION_PARAMETER_PBAP_SUPPORTED_FEATURES 0x10
|
||||||
|
|
||||||
// OBEX related structs used by BTstack
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
SRM_DISABLED,
|
|
||||||
SRM_W4_CONFIRM,
|
|
||||||
SRM_ENABLED_BUT_WAITING,
|
|
||||||
SRM_ENABLED
|
|
||||||
} obex_srm_state_t;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
OBEX_AUTH_PARSER_STATE_W4_TYPE = 0,
|
|
||||||
OBEX_AUTH_PARSER_STATE_W4_LEN,
|
|
||||||
OBEX_AUTH_PARSER_STATE_W4_VALUE,
|
|
||||||
OBEX_AUTH_PARSER_STATE_INVALID,
|
|
||||||
} obex_auth_parser_state_t;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
// parsing
|
|
||||||
obex_auth_parser_state_t state;
|
|
||||||
uint8_t type;
|
|
||||||
uint8_t len;
|
|
||||||
uint8_t pos;
|
|
||||||
// data
|
|
||||||
uint8_t authentication_options;
|
|
||||||
uint16_t authentication_nonce[16];
|
|
||||||
} obex_auth_parser_t;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint8_t srm_value;
|
|
||||||
uint8_t srmp_value;
|
|
||||||
} obex_srm_t;
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -261,11 +261,11 @@ static void pbap_client_phonebook_size_parser_process_data(pbap_client_phonebook
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void obex_auth_parser_init(obex_auth_parser_t * auth_parser){
|
static void obex_auth_parser_init(pbap_client_obex_auth_parser_t * auth_parser){
|
||||||
memset(auth_parser, 0, sizeof(obex_auth_parser_t));
|
memset(auth_parser, 0, sizeof(pbap_client_obex_auth_parser_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void obex_auth_parser_process_data(obex_auth_parser_t * auth_parser, const uint8_t * data_buffer, uint16_t data_len){
|
static void obex_auth_parser_process_data(pbap_client_obex_auth_parser_t * auth_parser, const uint8_t * data_buffer, uint16_t data_len){
|
||||||
while (data_len){
|
while (data_len){
|
||||||
uint16_t bytes_to_consume = 1;
|
uint16_t bytes_to_consume = 1;
|
||||||
switch(auth_parser->state){
|
switch(auth_parser->state){
|
||||||
@ -326,7 +326,7 @@ static void obex_auth_parser_process_data(obex_auth_parser_t * auth_parser, cons
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void obex_srm_init(obex_srm_t * obex_srm){
|
static void obex_srm_init(pbap_client_obex_srm_t * obex_srm){
|
||||||
obex_srm->srm_value = OBEX_SRM_DISABLE;
|
obex_srm->srm_value = OBEX_SRM_DISABLE;
|
||||||
obex_srm->srmp_value = OBEX_SRMP_NEXT;
|
obex_srm->srmp_value = OBEX_SRMP_NEXT;
|
||||||
}
|
}
|
||||||
@ -561,7 +561,7 @@ static void pbap_client_add_application_parameters(const pbap_client_t * client,
|
|||||||
static void pbap_client_prepare_srm_header(pbap_client_t * client){
|
static void pbap_client_prepare_srm_header(pbap_client_t * client){
|
||||||
if (!client->flow_control_enabled && goep_client_version_20_or_higher(client->goep_cid)){
|
if (!client->flow_control_enabled && goep_client_version_20_or_higher(client->goep_cid)){
|
||||||
goep_client_header_add_srm_enable(client->goep_cid);
|
goep_client_header_add_srm_enable(client->goep_cid);
|
||||||
client->srm_state = SRM_W4_CONFIRM;
|
client->srm_state = PBAP_CLIENT_SRM_W4_CONFIRM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -792,33 +792,33 @@ static void pbap_handle_can_send_now(pbap_client_t *pbap_client) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void pbap_client_handle_srm_headers(pbap_client_t *client) {
|
static void pbap_client_handle_srm_headers(pbap_client_t *client) {
|
||||||
const obex_srm_t * obex_srm = &client->obex_srm;
|
const pbap_client_obex_srm_t * obex_srm = &client->obex_srm;
|
||||||
// Update SRM state based on SRM headers
|
// Update SRM state based on SRM headers
|
||||||
switch (client->srm_state){
|
switch (client->srm_state){
|
||||||
case SRM_W4_CONFIRM:
|
case PBAP_CLIENT_SRM_W4_CONFIRM:
|
||||||
switch (obex_srm->srm_value){
|
switch (obex_srm->srm_value){
|
||||||
case OBEX_SRM_ENABLE:
|
case OBEX_SRM_ENABLE:
|
||||||
switch (obex_srm->srmp_value){
|
switch (obex_srm->srmp_value){
|
||||||
case OBEX_SRMP_WAIT:
|
case OBEX_SRMP_WAIT:
|
||||||
client->srm_state = SRM_ENABLED_BUT_WAITING;
|
client->srm_state = PBAP_CLIENT_SRM_ENABLED_BUT_WAITING;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
client->srm_state = SRM_ENABLED;
|
client->srm_state = PBAP_CLIENT_SRM_ENABLED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
client->srm_state = SRM_DISABLED;
|
client->srm_state = PBAP_CLIENT_SRM_DISABLED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SRM_ENABLED_BUT_WAITING:
|
case PBAP_CLIENT_SRM_ENABLED_BUT_WAITING:
|
||||||
switch (obex_srm->srmp_value){
|
switch (obex_srm->srmp_value){
|
||||||
case OBEX_SRMP_WAIT:
|
case OBEX_SRMP_WAIT:
|
||||||
client->srm_state = SRM_ENABLED_BUT_WAITING;
|
client->srm_state = PBAP_CLIENT_SRM_ENABLED_BUT_WAITING;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
client->srm_state = SRM_ENABLED;
|
client->srm_state = PBAP_CLIENT_SRM_ENABLED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -937,7 +937,7 @@ static void pbap_packet_handler_goep(pbap_client_t *client, uint8_t *packet, uin
|
|||||||
switch (op_info.response_code) {
|
switch (op_info.response_code) {
|
||||||
case OBEX_RESP_CONTINUE:
|
case OBEX_RESP_CONTINUE:
|
||||||
pbap_client_handle_srm_headers(client);
|
pbap_client_handle_srm_headers(client);
|
||||||
if (client->srm_state == SRM_ENABLED) {
|
if (client->srm_state == PBAP_CLIENT_SRM_ENABLED) {
|
||||||
// prepare response
|
// prepare response
|
||||||
pbap_client_prepare_get_operation(client);
|
pbap_client_prepare_get_operation(client);
|
||||||
break;
|
break;
|
||||||
@ -980,7 +980,7 @@ static void pbap_packet_handler_goep(pbap_client_t *client, uint8_t *packet, uin
|
|||||||
case OBEX_RESP_CONTINUE:
|
case OBEX_RESP_CONTINUE:
|
||||||
// handle continue
|
// handle continue
|
||||||
pbap_client_handle_srm_headers(client);
|
pbap_client_handle_srm_headers(client);
|
||||||
if (client->srm_state == SRM_ENABLED) {
|
if (client->srm_state == PBAP_CLIENT_SRM_ENABLED) {
|
||||||
// prepare response
|
// prepare response
|
||||||
pbap_client_prepare_get_operation(client);
|
pbap_client_prepare_get_operation(client);
|
||||||
break;
|
break;
|
||||||
@ -1008,7 +1008,7 @@ static void pbap_packet_handler_goep(pbap_client_t *client, uint8_t *packet, uin
|
|||||||
switch (op_info.response_code) {
|
switch (op_info.response_code) {
|
||||||
case OBEX_RESP_CONTINUE:
|
case OBEX_RESP_CONTINUE:
|
||||||
pbap_client_handle_srm_headers(client);
|
pbap_client_handle_srm_headers(client);
|
||||||
if (client->srm_state == SRM_ENABLED) {
|
if (client->srm_state == PBAP_CLIENT_SRM_ENABLED) {
|
||||||
// prepare response
|
// prepare response
|
||||||
pbap_client_prepare_get_operation(client);
|
pbap_client_prepare_get_operation(client);
|
||||||
break;
|
break;
|
||||||
|
@ -109,6 +109,36 @@ typedef struct {
|
|||||||
uint8_t size_buffer[2];
|
uint8_t size_buffer[2];
|
||||||
} pbap_client_phonebook_size_parser_t;
|
} pbap_client_phonebook_size_parser_t;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
PBAP_CLIENT_SRM_DISABLED,
|
||||||
|
PBAP_CLIENT_SRM_W4_CONFIRM,
|
||||||
|
PBAP_CLIENT_SRM_ENABLED_BUT_WAITING,
|
||||||
|
PBAP_CLIENT_SRM_ENABLED
|
||||||
|
} pbap_client_obex_srm_state_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t srm_value;
|
||||||
|
uint8_t srmp_value;
|
||||||
|
} pbap_client_obex_srm_t;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
OBEX_AUTH_PARSER_STATE_W4_TYPE = 0,
|
||||||
|
OBEX_AUTH_PARSER_STATE_W4_LEN,
|
||||||
|
OBEX_AUTH_PARSER_STATE_W4_VALUE,
|
||||||
|
OBEX_AUTH_PARSER_STATE_INVALID,
|
||||||
|
} pbap_client_obex_auth_parser_state_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
// parsing
|
||||||
|
pbap_client_obex_auth_parser_state_t state;
|
||||||
|
uint8_t type;
|
||||||
|
uint8_t len;
|
||||||
|
uint8_t pos;
|
||||||
|
// data
|
||||||
|
uint8_t authentication_options;
|
||||||
|
uint16_t authentication_nonce[16];
|
||||||
|
} pbap_client_obex_auth_parser_t;
|
||||||
|
|
||||||
typedef struct pbap_client {
|
typedef struct pbap_client {
|
||||||
// pbap client linked list
|
// pbap client linked list
|
||||||
btstack_linked_item_t item;
|
btstack_linked_item_t item;
|
||||||
@ -142,7 +172,7 @@ typedef struct pbap_client {
|
|||||||
obex_parser_t obex_parser;
|
obex_parser_t obex_parser;
|
||||||
uint8_t obex_header_buffer[4];
|
uint8_t obex_header_buffer[4];
|
||||||
/* authentication */
|
/* authentication */
|
||||||
obex_auth_parser_t obex_auth_parser;
|
pbap_client_obex_auth_parser_t obex_auth_parser;
|
||||||
const char * authentication_password;
|
const char * authentication_password;
|
||||||
/* xml parser */
|
/* xml parser */
|
||||||
yxml_t xml_parser;
|
yxml_t xml_parser;
|
||||||
@ -160,8 +190,8 @@ typedef struct pbap_client {
|
|||||||
uint8_t flow_next_triggered;
|
uint8_t flow_next_triggered;
|
||||||
bool flow_wait_for_user;
|
bool flow_wait_for_user;
|
||||||
/* srm */
|
/* srm */
|
||||||
obex_srm_t obex_srm;
|
pbap_client_obex_srm_t obex_srm;
|
||||||
obex_srm_state_t srm_state;
|
pbap_client_obex_srm_state_t srm_state;
|
||||||
} pbap_client_t;
|
} pbap_client_t;
|
||||||
|
|
||||||
/* API_START */
|
/* API_START */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user