From f994efa8c1be00d8ffada4b8e918688e48321ffb Mon Sep 17 00:00:00 2001 From: Jorge Ramirez-Ortiz Date: Fri, 3 Feb 2017 13:45:11 +0100 Subject: net/mqtt: Add BT support to MQTT publisher sample Change-Id: I56d54c3550a530bf250210e939840e7c7e89c5d9 Signed-off-by: Jorge Ramirez-Ortiz --- samples/net/mqtt_publisher/prj_96b_nitrogen.conf | 65 ++++++++++++++++++++++++ samples/net/mqtt_publisher/src/Makefile | 4 ++ samples/net/mqtt_publisher/src/main.c | 59 ++++++++++++++++++++- samples/net/mqtt_publisher/testcase.ini | 5 ++ 4 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 samples/net/mqtt_publisher/prj_96b_nitrogen.conf (limited to 'samples') diff --git a/samples/net/mqtt_publisher/prj_96b_nitrogen.conf b/samples/net/mqtt_publisher/prj_96b_nitrogen.conf new file mode 100644 index 000000000..2268eff73 --- /dev/null +++ b/samples/net/mqtt_publisher/prj_96b_nitrogen.conf @@ -0,0 +1,65 @@ +CONFIG_INIT_STACKS=y +CONFIG_NETWORKING=y + +CONFIG_NET_TCP=y +CONFIG_NET_UDP=n +CONFIG_NET_ARP=y +CONFIG_NET_L2_BLUETOOTH=y +CONFIG_NET_L2_BLUETOOTH_SEC_LEVEL=1 +CONFIG_NET_LOG=y +CONFIG_NET_IPV6_RA_RDNSS=y +CONFIG_NET_IPV4=n +CONFIG_NET_IPV6=y +CONFIG_NET_IPV6_MAX_NEIGHBORS=8 +CONFIG_NET_MAX_CONTEXTS=5 +CONFIG_NET_SHELL=y + +CONFIG_NET_NBUF_RX_COUNT=16 +CONFIG_NET_NBUF_TX_COUNT=16 +CONFIG_NET_NBUF_DATA_SIZE=256 +CONFIG_NET_NBUF_DATA_COUNT=30 + +CONFIG_NET_SAMPLES_IP_ADDRESSES=y +CONFIG_NET_SAMPLES_MY_IPV6_ADDR="2001:db8::1" +CONFIG_NET_SAMPLES_PEER_IPV6_ADDR="2001:db8::2" + +CONFIG_NET_SAMPLES_MY_IPV4_ADDR="192.168.1.101" +CONFIG_NET_SAMPLES_PEER_IPV4_ADDR="192.168.1.10" + +CONFIG_NET_IF_UNICAST_IPV6_ADDR_COUNT=3 +CONFIG_NET_IF_MCAST_IPV6_ADDR_COUNT=3 + +CONFIG_PRINTK=y + +CONFIG_MQTT_LIB=y + +CONFIG_MAIN_STACK_SIZE=2048 + +CONFIG_RANDOM_GENERATOR=y +CONFIG_TEST_RANDOM_GENERATOR=y +CONFIG_TIMER_RANDOM_GENERATOR=y + +CONFIG_BLUETOOTH_RX_STACK_SIZE=1024 +CONFIG_BLUETOOTH_DEVICE_NAME="Zephyr" + +CONFIG_BLUETOOTH_L2CAP_TX_BUF_COUNT=3 +CONFIG_BLUETOOTH_L2CAP_TX_MTU=65 +CONFIG_BLUETOOTH_L2CAP_TX_USER_DATA_SIZE=4 + +CONFIG_BLUETOOTH_HCI_TX_STACK_SIZE=640 +CONFIG_BLUETOOTH_HCI_HOST=y +CONFIG_BLUETOOTH_RECV_IS_RX_THREAD=y +CONFIG_BLUETOOTH_HCI_CMD_COUNT=2 +CONFIG_BLUETOOTH_MAX_CMD_LEN=64 +CONFIG_BLUETOOTH_RX_BUF_COUNT=20 +CONFIG_BLUETOOTH_RX_BUF_LEN=1024 +CONFIG_BLUETOOTH_CONN=y +CONFIG_BLUETOOTH_SIGNING=y +CONFIG_BLUETOOTH_L2CAP_DYNAMIC_CHANNEL=y +CONFIG_BLUETOOTH_DEBUG=y +CONFIG_BLUETOOTH_DEBUG_LOG=y +CONFIG_BLUETOOTH_DEBUG_COLOR=y + +CONFIG_CONSOLE_SHELL=y +CONFIG_CONSOLE_SHELL_STACKSIZE=2000 +CONFIG_CONSOLE_SHELL_MAX_CMD_QUEUED=3 diff --git a/samples/net/mqtt_publisher/src/Makefile b/samples/net/mqtt_publisher/src/Makefile index 9715a81e7..bd5dd34b8 100644 --- a/samples/net/mqtt_publisher/src/Makefile +++ b/samples/net/mqtt_publisher/src/Makefile @@ -6,3 +6,7 @@ obj-y += main.o +ifeq ($(CONFIG_NET_L2_BLUETOOTH), y) +ccflags-y +=-I${ZEPHYR_BASE}/samples/bluetooth/ +obj-y += ../../../bluetooth/gatt/ipss.o +endif diff --git a/samples/net/mqtt_publisher/src/main.c b/samples/net/mqtt_publisher/src/main.c index 909a1d211..ce7289bb2 100644 --- a/samples/net/mqtt_publisher/src/main.c +++ b/samples/net/mqtt_publisher/src/main.c @@ -14,6 +14,12 @@ #include #include +#if defined(CONFIG_NET_L2_BLUETOOTH) +#include +#include +#include +#endif + #include "config.h" /** @@ -334,6 +340,29 @@ int set_addr(struct sockaddr *sock_addr, const char *addr, uint16_t port) return rc; } +#if defined(CONFIG_NET_L2_BLUETOOTH) +static bool bt_connected; + +static +void bt_connect_cb(struct bt_conn *conn, uint8_t err) +{ + bt_connected = true; +} + +static +void bt_disconnect_cb(struct bt_conn *conn, uint8_t reason) +{ + bt_connected = false; + printk("bt disconnected (reason %u)\n", reason); +} + +static +struct bt_conn_cb bt_conn_cb = { + .connected = bt_connect_cb, + .disconnected = bt_disconnect_cb, +}; +#endif + int network_setup(struct net_context **net_ctx, const char *local_addr, const char *server_addr, uint16_t server_port) { @@ -345,11 +374,37 @@ int network_setup(struct net_context **net_ctx, const char *local_addr, socklen_t addr_len = sizeof(struct sockaddr_in); sa_family_t family = AF_INET; #endif - struct sockaddr local_sock; - struct sockaddr server_sock; + struct sockaddr server_sock, local_sock; void *p; int rc; +#if defined(CONFIG_NET_L2_BLUETOOTH) + const char *progress_mark = "/-\\|"; + int i = 0; + + rc = bt_enable(NULL); + if (rc) { + printk("bluetooth init failed\n"); + return rc; + } + + ipss_init(); + bt_conn_cb_register(&bt_conn_cb); + rc = ipss_advertise(); + if (rc) { + printk("advertising failed to start\n"); + return rc; + } + + printk("\nwaiting for bt connection: "); + while (bt_connected == false) { + k_sleep(250); + printk("%c\b", progress_mark[i]); + i = (i + 1) % (sizeof(progress_mark) - 1); + } + printk("\n"); +#endif + rc = set_addr(&local_sock, local_addr, 0); if (rc) { printk("set_addr (local) error\n"); diff --git a/samples/net/mqtt_publisher/testcase.ini b/samples/net/mqtt_publisher/testcase.ini index 16ecfdae3..4daf6534f 100644 --- a/samples/net/mqtt_publisher/testcase.ini +++ b/samples/net/mqtt_publisher/testcase.ini @@ -2,3 +2,8 @@ tags = net mqtt build_only = true platform_whitelist = frdm_k64f + +[test_bt] +tags = net mqtt bluetooth +build_only = true +platform_whitelist = 96b_nitrogen -- cgit v1.2.3