From 557161fc7118765ab2b07dfed12c85ddf96e2a0f Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Mon, 19 Oct 2015 23:51:53 +0200 Subject: [PATCH] added platforms/posix-h4: a generic Bluetooth module connected via a serial port --- platforms/posix-h4/.gitignore | 27 +++++++ platforms/posix-h4/Makefile | 27 +++++++ platforms/posix-h4/btstack-config.h | 24 ++++++ platforms/posix-h4/main.c | 115 ++++++++++++++++++++++++++++ 4 files changed, 193 insertions(+) create mode 100644 platforms/posix-h4/.gitignore create mode 100644 platforms/posix-h4/Makefile create mode 100644 platforms/posix-h4/btstack-config.h create mode 100644 platforms/posix-h4/main.c diff --git a/platforms/posix-h4/.gitignore b/platforms/posix-h4/.gitignore new file mode 100644 index 000000000..506c45d91 --- /dev/null +++ b/platforms/posix-h4/.gitignore @@ -0,0 +1,27 @@ +ancs_client +ancs_client.h +ble_central_test +ble_peripheral +ble_peripheral_sm_minimal +bnep_test +classic_test +gap_dedicated_bonding +gap_inquiry +gap_inquiry_and_bond +gatt_battery_query +gatt_browser +hsp_ag_test +hsp_hs_test +l2cap_test +profile.h +sdp_bnep_query +sdp_general_query +sdp_rfcomm_query +spp_and_le_counter +spp_and_le_counter.h +spp_counter +spp_streamer +led_counter +le_counter.h +ble_peripheral_test +le_counter diff --git a/platforms/posix-h4/Makefile b/platforms/posix-h4/Makefile new file mode 100644 index 000000000..3fb1d1789 --- /dev/null +++ b/platforms/posix-h4/Makefile @@ -0,0 +1,27 @@ +# Makefile for libusb based examples +BTSTACK_ROOT = ../.. +POSIX_ROOT= ${BTSTACK_ROOT}/platforms/posix + +CORE += main.c stdin_support.c + +COMMON += hci_transport_h4.c run_loop_posix.c remote_device_db_fs.c + +include ${BTSTACK_ROOT}/example/embedded/Makefile.inc + +# CC = gcc-fsf-4.9 +CFLAGS += -g -Wall +# CFLAGS += -Werror + +VPATH += ${BTSTACK_ROOT}/platforms/posix/src + +ifeq ($(OS),Windows_NT) +LDFLAGS += -lws2_32 +endif + +# Command Line examples require porting to win32, so only build on other unix-ish hosts +ifneq ($(OS),Windows_NT) +EXAMPLES += ${EXAMPLES_CLI} +CFLAGS += -I${POSIX_ROOT}/src +endif + +all: ${BTSTACK_ROOT}/include/btstack/version.h ${EXAMPLES} diff --git a/platforms/posix-h4/btstack-config.h b/platforms/posix-h4/btstack-config.h new file mode 100644 index 000000000..0448f2826 --- /dev/null +++ b/platforms/posix-h4/btstack-config.h @@ -0,0 +1,24 @@ +// config.h created by configure for BTstack Tue Jun 4 23:10:20 CEST 2013 + +#ifndef __BTSTACK_CONFIG +#define __BTSTACK_CONFIG + +#define HAVE_TRANSPORT_USB +#define HAVE_BLE +#define USE_POSIX_RUN_LOOP +#define HAVE_SDP +#define HAVE_RFCOMM +#define REMOTE_DEVICE_DB remote_device_db_iphone +#define HAVE_SO_NOSIGPIPE +#define HAVE_TIME +#define HAVE_MALLOC +#define HAVE_BZERO +#define SDP_DES_DUMP +#define ENABLE_LOG_INFO +#define ENABLE_LOG_ERROR +#define HCI_INCOMING_PRE_BUFFER_SIZE 14 // sizeof benep heade, avoid memcpy +#define HCI_ACL_PAYLOAD_SIZE (1691 + 4) +#define HAVE_HCI_DUMP +#define SDP_DES_DUMP + +#endif diff --git a/platforms/posix-h4/main.c b/platforms/posix-h4/main.c new file mode 100644 index 000000000..6eb1da79b --- /dev/null +++ b/platforms/posix-h4/main.c @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2014 BlueKitchen GmbH + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holders nor the names of + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * 4. Any redistribution, use, or modification is done solely for + * personal benefit and not for any commercial purpose or for + * monetary gain. + * + * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS + * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Please inquire about commercial licensing options at + * contact@bluekitchen-gmbh.com + * + */ + +// ***************************************************************************** +// +// minimal setup for HCI code +// +// ***************************************************************************** + +#include +#include +#include +#include +#include + +#include "btstack-config.h" + +#include + +#include "debug.h" +#include "btstack_memory.h" +#include "hci.h" +#include "hci_dump.h" +#include "stdin_support.h" + +int btstack_main(int argc, const char * argv[]); + +static hci_uart_config_t hci_uart_config_generic = { + NULL, + 115200, +}; + +static void sigint_handler(int param){ + +#ifndef _WIN32 + // reset anyway + btstack_stdin_reset(); +#endif + + log_info(" <= SIGINT received, shutting down..\n"); + hci_power_control(HCI_POWER_OFF); + hci_close(); + log_info("Good bye, see you.\n"); + exit(0); +} + +static int led_state = 0; +void hal_led_toggle(void){ + led_state = 1 - led_state; + printf("LED State %u\n", led_state); +} + +int main(int argc, const char * argv[]){ + + /// GET STARTED with BTstack /// + btstack_memory_init(); + run_loop_init(RUN_LOOP_POSIX); + + // use logger: format HCI_DUMP_PACKETLOGGER, HCI_DUMP_BLUEZ or HCI_DUMP_STDOUT + hci_dump_open("/tmp/hci_dump.pklg", HCI_DUMP_PACKETLOGGER); + + // pick serial port + hci_uart_config_generic.device_name = "/dev/tty.usbmodem1413"; + + // init HCI + hci_transport_t * transport = hci_transport_h4_instance(); + remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_fs; + + hci_init(transport, (void*) &hci_uart_config_generic, NULL, remote_db); + + // handle CTRL-c + signal(SIGINT, sigint_handler); + + // setup app + btstack_main(argc, argv); + + // go + run_loop_execute(); + + return 0; +}