mesh: provisioning device, adapt for gatt

This commit is contained in:
Milanka Ringwald 2018-11-15 10:32:18 +01:00 committed by Matthias Ringwald
parent 0214327469
commit 2bf4d0f45f
3 changed files with 23 additions and 6 deletions

View File

@ -345,8 +345,12 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe
if (con_handle == HCI_CON_HANDLE_INVALID) return;
buffer[0] = (MESH_MSG_SAR_FIELD_COMPLETE_MSG << 6) | MESH_MSG_TYPE_PROVISIONING_PDU;
memcpy(&buffer[1], proxy_pdu, proxy_pdu_size);
printf("sending packet, size %d, MTU %d: ", proxy_pdu_size, att_server_get_mtu(con_handle));
printf_hexdump(proxy_pdu, proxy_pdu_size);
printf("\n");
// TODO: check MTU and segment msg if needed
mesh_provisioning_service_server_send_proxy_pdu(con_handle, buffer, proxy_pdu_size+1);
// TODO: emit MESH_PBV_ADV_SEND_COMPLETE
pb_adv_emit_pdu_sent(0);
break;
default:
break;

View File

@ -129,6 +129,10 @@ int btstack_main(void){
hci_event_callback_registration.callback = &packet_handler;
hci_add_event_handler(&hci_event_callback_registration);
// crypto
btstack_crypto_init();
// l2cap
l2cap_init();
// setup le device db

View File

@ -370,35 +370,43 @@ static void provisioning_public_key_exchange_complete(void){
}
static void provisioning_run(void){
printf("provisioning_run: state %x, wait for outgoing complete %u\n", device_state, prov_waiting_for_outgoing_complete);
if (prov_waiting_for_outgoing_complete) return;
int start_timer = 1;
switch (device_state){
case DEVICE_SEND_ERROR:
start_timer = 0; // game over
prov_waiting_for_outgoing_complete = 1;
provisioning_send_provisioning_error();
provisioning_done();
break;
case DEVICE_SEND_CAPABILITIES:
provisioning_send_capabilites();
device_state = DEVICE_W4_START;
prov_waiting_for_outgoing_complete = 1;
provisioning_send_capabilites();
break;
case DEVICE_SEND_INPUT_COMPLETE:
provisioning_send_input_complete();
device_state = DEVICE_W4_CONFIRM;
prov_waiting_for_outgoing_complete = 1;
provisioning_send_input_complete();
break;
case DEVICE_SEND_PUB_KEY:
prov_waiting_for_outgoing_complete = 1;
provisioning_send_public_key();
provisioning_public_key_exchange_complete();
break;
case DEVICE_SEND_CONFIRM:
provisioning_send_confirm();
device_state = DEVICE_W4_RANDOM;
prov_waiting_for_outgoing_complete = 1;
provisioning_send_confirm();
break;
case DEVICE_SEND_RANDOM:
provisioning_send_random();
device_state = DEVICE_W4_DATA;
prov_waiting_for_outgoing_complete = 1;
provisioning_send_random();
break;
case DEVICE_SEND_COMPLETE:
prov_waiting_for_outgoing_complete = 1;
provisioning_send_complete();
provisioning_done();
break;
@ -408,7 +416,6 @@ static void provisioning_run(void){
if (start_timer){
provisioning_timer_start();
}
prov_waiting_for_outgoing_complete = 1;
}
static void provisioning_handle_provisioning_error(uint8_t error_code){
@ -509,8 +516,10 @@ static void provisioning_handle_public_key_dhkey(void * arg){
provisioning_public_key_exchange_complete();
} else {
// queue public key pdu
printf("DEVICE_SEND_PUB_KEY\n");
device_state = DEVICE_SEND_PUB_KEY;
}
provisioning_run();
}
static void provisioning_handle_public_key(uint8_t *packet, uint16_t size){