void mock_simulate_hci_event(uint8_t * packet, uint16_t size) { hci_dump_packet(HCI_EVENT_PACKET, 1, packet, size); if (event_packet_handler) { event_packet_handler(NULL, HCI_EVENT_PACKET, NULL, packet, size); } if (le_data_handler) { le_data_handler(HCI_EVENT_PACKET, NULL, packet, size); } }
static void h5_slip_process( h5_slip_t * sm, uint8_t input, uint8_t in){ uint8_t type; switch (sm->state) { case unknown: if (input == 0xc0){ sm->length = 0; sm->state = x_c0; } break; case x_c0: switch (input ){ case 0xc0: break; case 0xdb: sm->state = x_db; break; default: sm->data[sm->length] = input; ++sm->length; sm->state = decoding; break; } break; case decoding: switch (input ){ case 0xc0: sm->state = unknown; // packet done - check if valid HCI packet if (sm->length < 6) break; type = sm->data[1] & 0x0f; if (type < 1 || type > 4) break; switch (type) { case HCI_ACL_DATA_PACKET: acl_packet_handler( &sm->data[4], sm->length-4-2); break; case HCI_EVENT_PACKET: event_packet_handler( &sm->data[4], sm->length-4-2); break; default: break; } break; case 0xdb: sm->state = x_db; break; default: sm->data[sm->length] = input; ++sm->length; break; } break; case x_db: switch (input) { case 0xdc: sm->data[sm->length] = 0xc0; ++sm->length; sm->state = decoding; break; case 0xdd: sm->data[sm->length] = 0xdb; ++sm->length; sm->state = decoding; break; default: sm->state = unknown; break; } break; default: break; } }