mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-16 08:42:28 +00:00
mesh: provisioning device, adapt for gatt
This commit is contained in:
parent
0214327469
commit
2bf4d0f45f
@ -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;
|
if (con_handle == HCI_CON_HANDLE_INVALID) return;
|
||||||
buffer[0] = (MESH_MSG_SAR_FIELD_COMPLETE_MSG << 6) | MESH_MSG_TYPE_PROVISIONING_PDU;
|
buffer[0] = (MESH_MSG_SAR_FIELD_COMPLETE_MSG << 6) | MESH_MSG_TYPE_PROVISIONING_PDU;
|
||||||
memcpy(&buffer[1], proxy_pdu, proxy_pdu_size);
|
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);
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -129,6 +129,10 @@ int btstack_main(void){
|
|||||||
hci_event_callback_registration.callback = &packet_handler;
|
hci_event_callback_registration.callback = &packet_handler;
|
||||||
hci_add_event_handler(&hci_event_callback_registration);
|
hci_add_event_handler(&hci_event_callback_registration);
|
||||||
|
|
||||||
|
// crypto
|
||||||
|
btstack_crypto_init();
|
||||||
|
|
||||||
|
// l2cap
|
||||||
l2cap_init();
|
l2cap_init();
|
||||||
|
|
||||||
// setup le device db
|
// setup le device db
|
||||||
|
@ -370,35 +370,43 @@ static void provisioning_public_key_exchange_complete(void){
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void provisioning_run(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;
|
if (prov_waiting_for_outgoing_complete) return;
|
||||||
int start_timer = 1;
|
int start_timer = 1;
|
||||||
switch (device_state){
|
switch (device_state){
|
||||||
case DEVICE_SEND_ERROR:
|
case DEVICE_SEND_ERROR:
|
||||||
start_timer = 0; // game over
|
start_timer = 0; // game over
|
||||||
|
prov_waiting_for_outgoing_complete = 1;
|
||||||
provisioning_send_provisioning_error();
|
provisioning_send_provisioning_error();
|
||||||
provisioning_done();
|
provisioning_done();
|
||||||
break;
|
break;
|
||||||
case DEVICE_SEND_CAPABILITIES:
|
case DEVICE_SEND_CAPABILITIES:
|
||||||
provisioning_send_capabilites();
|
|
||||||
device_state = DEVICE_W4_START;
|
device_state = DEVICE_W4_START;
|
||||||
|
prov_waiting_for_outgoing_complete = 1;
|
||||||
|
provisioning_send_capabilites();
|
||||||
break;
|
break;
|
||||||
case DEVICE_SEND_INPUT_COMPLETE:
|
case DEVICE_SEND_INPUT_COMPLETE:
|
||||||
provisioning_send_input_complete();
|
|
||||||
device_state = DEVICE_W4_CONFIRM;
|
device_state = DEVICE_W4_CONFIRM;
|
||||||
|
prov_waiting_for_outgoing_complete = 1;
|
||||||
|
provisioning_send_input_complete();
|
||||||
break;
|
break;
|
||||||
case DEVICE_SEND_PUB_KEY:
|
case DEVICE_SEND_PUB_KEY:
|
||||||
|
prov_waiting_for_outgoing_complete = 1;
|
||||||
provisioning_send_public_key();
|
provisioning_send_public_key();
|
||||||
provisioning_public_key_exchange_complete();
|
provisioning_public_key_exchange_complete();
|
||||||
break;
|
break;
|
||||||
case DEVICE_SEND_CONFIRM:
|
case DEVICE_SEND_CONFIRM:
|
||||||
provisioning_send_confirm();
|
|
||||||
device_state = DEVICE_W4_RANDOM;
|
device_state = DEVICE_W4_RANDOM;
|
||||||
|
prov_waiting_for_outgoing_complete = 1;
|
||||||
|
provisioning_send_confirm();
|
||||||
break;
|
break;
|
||||||
case DEVICE_SEND_RANDOM:
|
case DEVICE_SEND_RANDOM:
|
||||||
provisioning_send_random();
|
|
||||||
device_state = DEVICE_W4_DATA;
|
device_state = DEVICE_W4_DATA;
|
||||||
|
prov_waiting_for_outgoing_complete = 1;
|
||||||
|
provisioning_send_random();
|
||||||
break;
|
break;
|
||||||
case DEVICE_SEND_COMPLETE:
|
case DEVICE_SEND_COMPLETE:
|
||||||
|
prov_waiting_for_outgoing_complete = 1;
|
||||||
provisioning_send_complete();
|
provisioning_send_complete();
|
||||||
provisioning_done();
|
provisioning_done();
|
||||||
break;
|
break;
|
||||||
@ -408,7 +416,6 @@ static void provisioning_run(void){
|
|||||||
if (start_timer){
|
if (start_timer){
|
||||||
provisioning_timer_start();
|
provisioning_timer_start();
|
||||||
}
|
}
|
||||||
prov_waiting_for_outgoing_complete = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void provisioning_handle_provisioning_error(uint8_t error_code){
|
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();
|
provisioning_public_key_exchange_complete();
|
||||||
} else {
|
} else {
|
||||||
// queue public key pdu
|
// queue public key pdu
|
||||||
|
printf("DEVICE_SEND_PUB_KEY\n");
|
||||||
device_state = DEVICE_SEND_PUB_KEY;
|
device_state = DEVICE_SEND_PUB_KEY;
|
||||||
}
|
}
|
||||||
|
provisioning_run();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void provisioning_handle_public_key(uint8_t *packet, uint16_t size){
|
static void provisioning_handle_public_key(uint8_t *packet, uint16_t size){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user