1*79662672Smatthias.ringwald /* 2*79662672Smatthias.ringwald * hci_dump.c 3*79662672Smatthias.ringwald * 4*79662672Smatthias.ringwald * Dump HCI trace in BlueZ's hcidump format 5*79662672Smatthias.ringwald * 6*79662672Smatthias.ringwald * Created by Matthias Ringwald on 5/26/09. 7*79662672Smatthias.ringwald */ 8*79662672Smatthias.ringwald 9*79662672Smatthias.ringwald #include "hci_dump.h" 10*79662672Smatthias.ringwald #include "hci.h" 11*79662672Smatthias.ringwald #include "hci_transport_h4.h" 12*79662672Smatthias.ringwald 13*79662672Smatthias.ringwald #include <fcntl.h> // open 14*79662672Smatthias.ringwald #include <arpa/inet.h> // hton.. 15*79662672Smatthias.ringwald #include <strings.h> // bzero 16*79662672Smatthias.ringwald #include <unistd.h> // write 17*79662672Smatthias.ringwald #include <stdio.h> 18*79662672Smatthias.ringwald 19*79662672Smatthias.ringwald static int dump_file; 20*79662672Smatthias.ringwald 21*79662672Smatthias.ringwald void hci_dump_open(char *filename){ 22*79662672Smatthias.ringwald dump_file = open(filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU); 23*79662672Smatthias.ringwald } 24*79662672Smatthias.ringwald 25*79662672Smatthias.ringwald void hci_dump_packet(uint8_t packet_type, uint8_t in, uint8_t *packet, uint16_t len) { 26*79662672Smatthias.ringwald static hcidump_hdr header; 27*79662672Smatthias.ringwald bzero( &header, sizeof(hcidump_hdr)); 28*79662672Smatthias.ringwald bt_store_16( (uint8_t *) &header, 0, 1 + len); 29*79662672Smatthias.ringwald header.in = in; 30*79662672Smatthias.ringwald header.packet_type = packet_type; 31*79662672Smatthias.ringwald write (dump_file, &header, sizeof(hcidump_hdr) ); 32*79662672Smatthias.ringwald write (dump_file, packet, len ); 33*79662672Smatthias.ringwald } 34*79662672Smatthias.ringwald 35*79662672Smatthias.ringwald void hci_dump_close(){ 36*79662672Smatthias.ringwald close(dump_file); 37*79662672Smatthias.ringwald } 38*79662672Smatthias.ringwald 39