diff --git a/src/ble/gatt-service/mesh_provisioning_service_server.c b/src/ble/gatt-service/mesh_provisioning_service_server.c index 87eb218d9..b8dbc50e1 100644 --- a/src/ble/gatt-service/mesh_provisioning_service_server.c +++ b/src/ble/gatt-service/mesh_provisioning_service_server.c @@ -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; diff --git a/test/mesh/mesh_provisioning_device.c b/test/mesh/mesh_provisioning_device.c index ea2ecc8ad..f1fe917e3 100644 --- a/test/mesh/mesh_provisioning_device.c +++ b/test/mesh/mesh_provisioning_device.c @@ -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 diff --git a/test/mesh/provisioning_device.c b/test/mesh/provisioning_device.c index d44bb1c0a..4c6613bda 100644 --- a/test/mesh/provisioning_device.c +++ b/test/mesh/provisioning_device.c @@ -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){