Beispiel #1
0
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);
    }
}
Beispiel #2
0
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;
	}
}