12531c97eSMatthias Ringwald /* 22531c97eSMatthias Ringwald * Copyright (C) 2014 BlueKitchen GmbH 32531c97eSMatthias Ringwald * 42531c97eSMatthias Ringwald * Redistribution and use in source and binary forms, with or without 52531c97eSMatthias Ringwald * modification, are permitted provided that the following conditions 62531c97eSMatthias Ringwald * are met: 72531c97eSMatthias Ringwald * 82531c97eSMatthias Ringwald * 1. Redistributions of source code must retain the above copyright 92531c97eSMatthias Ringwald * notice, this list of conditions and the following disclaimer. 102531c97eSMatthias Ringwald * 2. Redistributions in binary form must reproduce the above copyright 112531c97eSMatthias Ringwald * notice, this list of conditions and the following disclaimer in the 122531c97eSMatthias Ringwald * documentation and/or other materials provided with the distribution. 132531c97eSMatthias Ringwald * 3. Neither the name of the copyright holders nor the names of 142531c97eSMatthias Ringwald * contributors may be used to endorse or promote products derived 152531c97eSMatthias Ringwald * from this software without specific prior written permission. 162531c97eSMatthias Ringwald * 4. Any redistribution, use, or modification is done solely for 172531c97eSMatthias Ringwald * personal benefit and not for any commercial purpose or for 182531c97eSMatthias Ringwald * monetary gain. 192531c97eSMatthias Ringwald * 202531c97eSMatthias Ringwald * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS 212531c97eSMatthias Ringwald * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 222531c97eSMatthias Ringwald * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 232531c97eSMatthias Ringwald * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS 242531c97eSMatthias Ringwald * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 252531c97eSMatthias Ringwald * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 262531c97eSMatthias Ringwald * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 272531c97eSMatthias Ringwald * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 282531c97eSMatthias Ringwald * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 292531c97eSMatthias Ringwald * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 302531c97eSMatthias Ringwald * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 312531c97eSMatthias Ringwald * SUCH DAMAGE. 322531c97eSMatthias Ringwald * 332531c97eSMatthias Ringwald * Please inquire about commercial licensing options at 342531c97eSMatthias Ringwald * [email protected] 352531c97eSMatthias Ringwald * 362531c97eSMatthias Ringwald */ 372531c97eSMatthias Ringwald 382531c97eSMatthias Ringwald /* 392531c97eSMatthias Ringwald * le_scan.c 402531c97eSMatthias Ringwald */ 412531c97eSMatthias Ringwald 422531c97eSMatthias Ringwald #include <unistd.h> 432531c97eSMatthias Ringwald #include <stdio.h> 442531c97eSMatthias Ringwald #include <stdlib.h> 452531c97eSMatthias Ringwald #include <string.h> 462531c97eSMatthias Ringwald 472531c97eSMatthias Ringwald #include "btstack_client.h" 482531c97eSMatthias Ringwald #include "btstack_run_loop_posix.h" 492531c97eSMatthias Ringwald 502531c97eSMatthias Ringwald static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ 512531c97eSMatthias Ringwald 522531c97eSMatthias Ringwald if (packet_type != HCI_EVENT_PACKET) return; 532531c97eSMatthias Ringwald 540e2df43fSMatthias Ringwald uint8_t event = hci_event_packet_get_type(packet); 552531c97eSMatthias Ringwald 562531c97eSMatthias Ringwald switch (event){ 572531c97eSMatthias Ringwald case BTSTACK_EVENT_STATE: 582531c97eSMatthias Ringwald // bt stack activated, get started 592531c97eSMatthias Ringwald printf("- btstack state %u\n", packet[2]); 60be7cc9a0SMilanka Ringwald if (btstack_event_state_get_state(packet) == HCI_STATE_WORKING){ 612531c97eSMatthias Ringwald bt_send_cmd(&gap_le_set_scan_parameters, 1, 0x30, 0x30); 622531c97eSMatthias Ringwald bt_send_cmd(&gap_le_scan_start); 632531c97eSMatthias Ringwald } 642531c97eSMatthias Ringwald break; 652531c97eSMatthias Ringwald case HCI_EVENT_LE_META: 66*10cad102SMilanka Ringwald switch (hci_event_le_meta_get_subevent_code(packet)) { 672531c97eSMatthias Ringwald case HCI_SUBEVENT_LE_ADVERTISING_REPORT: 682531c97eSMatthias Ringwald printf("\n- ADV: "); 692531c97eSMatthias Ringwald printf_hexdump(packet, size); 702531c97eSMatthias Ringwald break; 712531c97eSMatthias Ringwald } 722531c97eSMatthias Ringwald break; 732531c97eSMatthias Ringwald default: 742531c97eSMatthias Ringwald break; 752531c97eSMatthias Ringwald } 762531c97eSMatthias Ringwald } 772531c97eSMatthias Ringwald 782531c97eSMatthias Ringwald int main (int argc, const char * argv[]){ 792531c97eSMatthias Ringwald printf("le_scan started\n"); 802531c97eSMatthias Ringwald printf("- connecting to BTstack Daemon\n"); 812531c97eSMatthias Ringwald // start stack 822531c97eSMatthias Ringwald btstack_run_loop_init(btstack_run_loop_posix_get_instance()); 832531c97eSMatthias Ringwald int err = bt_open(); 842531c97eSMatthias Ringwald if (err) { 852531c97eSMatthias Ringwald printf("-> Failed to open connection to BTstack Daemon\n"); 862531c97eSMatthias Ringwald return err; 872531c97eSMatthias Ringwald } 882531c97eSMatthias Ringwald 892531c97eSMatthias Ringwald printf("- connected\n"); 902531c97eSMatthias Ringwald printf("- send power on\n"); 912531c97eSMatthias Ringwald 922531c97eSMatthias Ringwald bt_register_packet_handler(packet_handler); 932531c97eSMatthias Ringwald bt_send_cmd(&btstack_set_power_mode, HCI_POWER_ON ); 942531c97eSMatthias Ringwald btstack_run_loop_execute(); 952531c97eSMatthias Ringwald bt_close(); 962531c97eSMatthias Ringwald return 0; 972531c97eSMatthias Ringwald } 98