extracted cli stdin usage

This commit is contained in:
matthias.ringwald@gmail.com 2015-03-06 11:52:55 +00:00
parent 8f74874871
commit 2e62db4a2a
8 changed files with 103 additions and 133 deletions

View File

@ -68,11 +68,9 @@ EXAMPLES = \
spp_and_le_counter \ spp_and_le_counter \
spp_counter \ spp_counter \
spp_streamer \ spp_streamer \
hsp_ag_test \
hsp_hs_test \
# requires termios / command line support # requires termios / command line support
EXAMPLES_CLI = ble_peripheral ble_peripheral_sm_minimal l2cap_test ancs_client classic_test bnep_test EXAMPLES_CLI = ble_peripheral ble_peripheral_sm_minimal ble_central_test l2cap_test ancs_client classic_test bnep_test hsp_ag_test hsp_hs_test
# .o for .c # .o for .c
CORE_OBJ = $(CORE:.c=.o) CORE_OBJ = $(CORE:.c=.o)
@ -131,6 +129,32 @@ gap_inquiry_and_bond: ${CORE_OBJ} ${COMMON_OBJ} gap_inquiry_and_bond.c
panu_demo: ${CORE_OBJ} ${COMMON_OBJ} ${SDP_CLIENT} panu_demo.c panu_demo: ${CORE_OBJ} ${COMMON_OBJ} ${SDP_CLIENT} panu_demo.c
${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@ ${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@
gatt_browser: ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${GATT_CLIENT_OBJ} ${SM_REAL_OBJ} gatt_browser.c
${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@
gatt_battery_query: ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${GATT_CLIENT_OBJ} ${SM_REAL_OBJ} gatt_battery_query.c
${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@
ancs_client: ancs_client.h ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${GATT_SERVER_OBJ} ${GATT_CLIENT_OBJ} ${SM_REAL_OBJ} ${BTSTACK_ROOT}/ble/ancs_client_lib.c ancs_client.c
${CC} $(filter-out ancs_client.h,$^) ${CFLAGS} ${LDFLAGS} -o $@
# CLI Examples
ble_peripheral: profile.h ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${GATT_SERVER_OBJ} ${SM_REAL_OBJ} ble_peripheral.o
${CC} $(filter-out profile.h,$^) ${CFLAGS} ${LDFLAGS} -o $@
ble_peripheral_sm_minimal: profile.h ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${GATT_SERVER_OBJ} ${SM_MINIMAL_OBJ} ble_peripheral.c
${CC} $(filter-out profile.h,$^) ${CFLAGS} ${LDFLAGS} -o $@
ble_central_test: ${CORE_OBJ} ${COMMON_OBJ} ${SM_REAL_OBJ} ${ATT_OBJ} ${GATT_CLIENT_OBJ} ble_central_test.c
${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@
hsp_ag_test: ${CORE_OBJ} ${COMMON_OBJ} ${SDP_CLIENT} hsp_ag.o hsp_ag_test.c
${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@
hsp_hs_test: ${CORE_OBJ} ${COMMON_OBJ} ${SDP_CLIENT} hsp_hs.o hsp_hs_test.c
${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@
l2cap_test: ${CORE_OBJ} ${COMMON_OBJ} l2cap_test.c l2cap_test: ${CORE_OBJ} ${COMMON_OBJ} l2cap_test.c
${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@ ${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@
@ -143,26 +167,6 @@ bnep_test: ${CORE_OBJ} ${COMMON_OBJ} bnep_test.c
ble_client: ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${GATT_CLIENT_OBJ} ${SM_REAL} ble_client.c ble_client: ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${GATT_CLIENT_OBJ} ${SM_REAL} ble_client.c
${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@ ${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@
gatt_browser: ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${GATT_CLIENT_OBJ} ${SM_REAL_OBJ} gatt_browser.c
${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@
gatt_battery_query: ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${GATT_CLIENT_OBJ} ${SM_REAL_OBJ} gatt_battery_query.c
${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@
ancs_client: ancs_client.h ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${GATT_SERVER_OBJ} ${GATT_CLIENT_OBJ} ${SM_REAL_OBJ} ${BTSTACK_ROOT}/ble/ancs_client_lib.c ancs_client.c
${CC} $(filter-out ancs_client.h,$^) ${CFLAGS} ${LDFLAGS} -o $@
ble_peripheral: profile.h ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${GATT_SERVER_OBJ} ${SM_REAL_OBJ} ble_peripheral.o
${CC} $(filter-out profile.h,$^) ${CFLAGS} ${LDFLAGS} -o $@
ble_peripheral_sm_minimal: profile.h ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${GATT_SERVER_OBJ} ${SM_MINIMAL_OBJ} ble_peripheral.c
${CC} $(filter-out profile.h,$^) ${CFLAGS} ${LDFLAGS} -o $@
hsp_ag_test: ${CORE_OBJ} ${COMMON_OBJ} ${SDP_CLIENT} hsp_ag.o hsp_ag_test.c
${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@
hsp_hs_test: ${CORE_OBJ} ${COMMON_OBJ} ${SDP_CLIENT} hsp_hs.o hsp_hs_test.c
${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@
clean: clean:
rm -f ${EXAMPLES} rm -f ${EXAMPLES}

View File

@ -64,7 +64,8 @@
#include "att_server.h" #include "att_server.h"
#include "gap_le.h" #include "gap_le.h"
#include "le_device_db.h" #include "le_device_db.h"
#include "stdin_support.h"
#define HEARTBEAT_PERIOD_MS 1000 #define HEARTBEAT_PERIOD_MS 1000
// test profile // test profile
@ -927,24 +928,6 @@ static int get_oob_data_callback(uint8_t addres_type, bd_addr_t addr, uint8_t *
return 1; return 1;
} }
static data_source_t stdin_source;
void setup_cli(){
struct termios term = {0};
if (tcgetattr(0, &term) < 0)
perror("tcsetattr()");
term.c_lflag &= ~ICANON;
term.c_lflag &= ~ECHO;
term.c_cc[VMIN] = 1;
term.c_cc[VTIME] = 0;
if (tcsetattr(0, TCSANOW, &term) < 0)
perror("tcsetattr ICANON");
stdin_source.fd = 0; // stdin
stdin_source.process = &stdin_process;
run_loop_add_data_source(&stdin_source);
}
#if defined(HAVE_UART_CSR) || defined(HAVE_UART_CC256x) #if defined(HAVE_UART_CSR) || defined(HAVE_UART_CC256x)
static hci_uart_config_t hci_uart_config = { static hci_uart_config_t hci_uart_config = {
// "/dev/tty.usbserial-A40081HW", // "/dev/tty.usbserial-A40081HW",
@ -983,7 +966,7 @@ int btstack_main(int argc, const char * argv[]){
att_dump_attributes(); att_dump_attributes();
setup_cli(); btstack_stdin_setup(stdin_process);
gap_random_address_set_update_period(300000); gap_random_address_set_update_period(300000);
gap_random_address_set_mode(GAP_RANDOM_ADDRESS_RESOLVABLE); gap_random_address_set_mode(GAP_RANDOM_ADDRESS_RESOLVABLE);

View File

@ -66,6 +66,7 @@
#include "hci_dump.h" #include "hci_dump.h"
#include "l2cap.h" #include "l2cap.h"
#include "pan.h" #include "pan.h"
#include "stdin_support.h"
// prototypes // prototypes
static void show_usage(); static void show_usage();
@ -73,7 +74,7 @@ static void show_usage();
// Configuration for PTS // Configuration for PTS
static bd_addr_t pts_addr = {0x00,0x1b,0xDC,0x07,0x32,0xEF}; static bd_addr_t pts_addr = {0x00,0x1b,0xDC,0x07,0x32,0xEF};
//static bd_addr_t pts_addr = {0xE0,0x06,0xE6,0xBB,0x95,0x79}; // Ole Thinkpad //static bd_addr_t pts_addr = {0xE0,0x06,0xE6,0xBB,0x95,0x79}; // Ole Thinkpad
// static bd_addr_t other_addr = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; // static bd_addr_t other_addr = { 0x33, 0x33, 0x00, 0x00, 0x00, 0x16};
static bd_addr_t other_addr = { 0,0,0,0,0,0}; static bd_addr_t other_addr = { 0,0,0,0,0,0};
// broadcast // broadcast
static bd_addr_t broadcast_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; static bd_addr_t broadcast_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
@ -100,9 +101,6 @@ static uint16_t bnep_cid = 0;
static uint8_t network_buffer[BNEP_MTU_MIN]; static uint8_t network_buffer[BNEP_MTU_MIN];
static size_t network_buffer_len = 0; static size_t network_buffer_len = 0;
/** Testig User Interface **/
static data_source_t stdin_source;
static uint16_t setup_ethernet_header(int src_compressed, int dst_compressed, int broadcast, uint16_t network_protocol_type){ static uint16_t setup_ethernet_header(int src_compressed, int dst_compressed, int broadcast, uint16_t network_protocol_type){
// setup packet // setup packet
int pos = 0; int pos = 0;
@ -188,6 +186,8 @@ static void send_arp_probe_ipv4(){
pos += 6; pos += 6;
memcpy(&network_buffer[pos], requested_address, 4); memcpy(&network_buffer[pos], requested_address, 4);
pos += 4; pos += 4;
// magically, add some extra bytes for Ethernet padding
pos += 18;
send_buffer(pos); send_buffer(pos);
} }
@ -207,6 +207,43 @@ static void send_dns_request(){
} }
static void send_some_ipv6_packet(){
bd_addr_t an_addr = { 0x33, 0x33, 0x00, 0x00, 0x00, 0x16};
memcpy(other_addr, an_addr, 6);
int pos = setup_ethernet_header(1, 0, 0, 0x86DD); // IPv6
uint8_t ipv6_packet[] = {
0x60, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x02,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x16, 0x3a, 0x00, 0x05, 0x02, 0x00, 0x00, 0x01, 0x00, 0x8f, 0x00, 0xf3, 0xa2,
0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x60, 0x7b, 0x87
};
memcpy(&network_buffer[pos], ipv6_packet, sizeof(ipv6_packet));
pos += sizeof(ipv6_packet);
send_buffer(pos);
}
static void send_some_ipv6_packet_2(){
bd_addr_t an_addr = { 0x33, 0x33, 0xFF, 0x60, 0x7B, 0x87};
memcpy(other_addr, an_addr, 6);
int pos = setup_ethernet_header(1, 0, 0, 0x86DD); // IPv6
uint8_t ipv6_packet[] = {
0x60, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3a, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x02,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x60, 0x7b,
0x87, 0x87, 0x00, 0xb6, 0x64, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x5e, 0xf3, 0x70, 0xff, 0xfe, 0x60, 0x7b, 0x87
};
memcpy(&network_buffer[pos], ipv6_packet, sizeof(ipv6_packet));
pos += sizeof(ipv6_packet);
send_buffer(pos);
}
static void show_usage(){ static void show_usage(){
printf("\n--- Bluetooth BNEP Test Console ---\n"); printf("\n--- Bluetooth BNEP Test Console ---\n");
@ -224,6 +261,8 @@ static void show_usage(){
printf("2 - send DNS request\n"); printf("2 - send DNS request\n");
printf("4 - send IPv4 ARP request\n"); printf("4 - send IPv4 ARP request\n");
printf("6 - send IPv6 ARP request\n"); printf("6 - send IPv6 ARP request\n");
printf("9 - send some IPv6 packet\n");
printf("0 - send some IPv6 packet 2\n");
printf("---\n"); printf("---\n");
printf("Ctrl-c - exit\n"); printf("Ctrl-c - exit\n");
printf("---\n"); printf("---\n");
@ -270,6 +309,14 @@ static int stdin_process(struct data_source *ds){
printf("Sending IPv6 ARP Probe\n"); printf("Sending IPv6 ARP Probe\n");
send_arp_probe_ipv6(); send_arp_probe_ipv6();
break; break;
case '9':
printf("Sending some IPv6 packet\n");
send_some_ipv6_packet();
break;
case '0':
printf("Sending some IPv6 packet 2\n");
send_some_ipv6_packet_2();
break;
default: default:
show_usage(); show_usage();
break; break;
@ -278,25 +325,6 @@ static int stdin_process(struct data_source *ds){
return 0; return 0;
} }
static void setup_cli(){
struct termios term = {0};
if (tcgetattr(0, &term) < 0)
perror("tcsetattr()");
term.c_lflag &= ~ICANON;
term.c_lflag &= ~ECHO;
term.c_cc[VMIN] = 1;
term.c_cc[VTIME] = 0;
if (tcsetattr(0, TCSANOW, &term) < 0)
perror("tcsetattr ICANON");
stdin_source.fd = 0; // stdin
stdin_source.process = &stdin_process;
run_loop_add_data_source(&stdin_source);
show_usage();
}
/*************** PANU client routines *********************/ /*************** PANU client routines *********************/
static void packet_handler (void * connection, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size) static void packet_handler (void * connection, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size)
@ -397,7 +425,7 @@ int btstack_main(int argc, const char * argv[]){
/* Turn on the device */ /* Turn on the device */
hci_power_control(HCI_POWER_ON); hci_power_control(HCI_POWER_ON);
setup_cli(); btstack_stdin_setup(stdin_process);
/* Start mainloop */ /* Start mainloop */
run_loop_execute(); run_loop_execute();

View File

@ -63,6 +63,7 @@
#include "sdp.h" #include "sdp.h"
#include "sdp_query_rfcomm.h" #include "sdp_query_rfcomm.h"
#include "sm.h" #include "sm.h"
#include "stdin_support.h"
void show_usage(); void show_usage();
@ -777,25 +778,6 @@ void sdp_create_dummy_service(uint8_t *service, const char *name){
de_add_data(service, DE_STRING, strlen(name), (uint8_t *) name); de_add_data(service, DE_STRING, strlen(name), (uint8_t *) name);
} }
static data_source_t stdin_source;
void setup_cli(){
struct termios term = {0};
if (tcgetattr(0, &term) < 0)
perror("tcsetattr()");
term.c_lflag &= ~ICANON;
term.c_lflag &= ~ECHO;
term.c_cc[VMIN] = 1;
term.c_cc[VTIME] = 0;
if (tcsetattr(0, TCSANOW, &term) < 0)
perror("tcsetattr ICANON");
stdin_source.fd = 0; // stdin
stdin_source.process = &stdin_process;
run_loop_add_data_source(&stdin_source);
}
int btstack_main(int argc, const char * argv[]); int btstack_main(int argc, const char * argv[]);
int btstack_main(int argc, const char * argv[]){ int btstack_main(int argc, const char * argv[]){
@ -838,7 +820,7 @@ int btstack_main(int argc, const char * argv[]){
// turn on! // turn on!
hci_power_control(HCI_POWER_ON); hci_power_control(HCI_POWER_ON);
setup_cli(); btstack_stdin_setup(stdin_process);
// set one-shot timer // set one-shot timer
// timer_source_t heartbeat; // timer_source_t heartbeat;

View File

@ -65,7 +65,8 @@
#include "sdp.h" #include "sdp.h"
#include "debug.h" #include "debug.h"
#include "hsp_ag.h" #include "hsp_ag.h"
#include "stdin_support.h"
static uint8_t hsp_service_buffer[150]; static uint8_t hsp_service_buffer[150];
static uint8_t rfcomm_channel_nr = 1; static uint8_t rfcomm_channel_nr = 1;
@ -77,10 +78,6 @@ static char hs_cmd_buffer[100];
// prototypes // prototypes
static void show_usage(); static void show_usage();
// Testig User Interface
static data_source_t stdin_source;
static void show_usage(){ static void show_usage(){
printf("\n--- Bluetooth HSP AudioGateway Test Console ---\n"); printf("\n--- Bluetooth HSP AudioGateway Test Console ---\n");
printf("---\n"); printf("---\n");
@ -152,24 +149,6 @@ static int stdin_process(struct data_source *ds){
return 0; return 0;
} }
static void setup_cli(){
struct termios term = {0};
if (tcgetattr(0, &term) < 0)
perror("tcsetattr()");
term.c_lflag &= ~ICANON;
term.c_lflag &= ~ECHO;
term.c_cc[VMIN] = 1;
term.c_cc[VTIME] = 0;
if (tcsetattr(0, TCSANOW, &term) < 0)
perror("tcsetattr ICANON");
stdin_source.fd = 0; // stdin
stdin_source.process = &stdin_process;
run_loop_add_data_source(&stdin_source);
show_usage();
}
// Audio Gateway routines // Audio Gateway routines
void packet_handler(uint8_t * event, uint16_t event_size){ void packet_handler(uint8_t * event, uint16_t event_size){
switch (event[2]) { switch (event[2]) {
@ -219,7 +198,8 @@ int btstack_main(int argc, const char * argv[]){
// turn on! // turn on!
hci_power_control(HCI_POWER_ON); hci_power_control(HCI_POWER_ON);
setup_cli(); btstack_stdin_setup(stdin_process);
// go! // go!
run_loop_execute(); run_loop_execute();
return 0; return 0;

View File

@ -59,7 +59,8 @@
#include "btstack_memory.h" #include "btstack_memory.h"
#include "hci_dump.h" #include "hci_dump.h"
#include "l2cap.h" #include "l2cap.h"
#include "stdin_support.h"
void show_usage(); void show_usage();
// static bd_addr_t remote = {0x04,0x0C,0xCE,0xE4,0x85,0xD3}; // static bd_addr_t remote = {0x04,0x0C,0xCE,0xE4,0x85,0xD3};
@ -154,23 +155,6 @@ int stdin_process(struct data_source *ds){
return 0; return 0;
} }
static data_source_t stdin_source;
void setup_cli(){
struct termios term = {0};
if (tcgetattr(0, &term) < 0)
perror("tcsetattr()");
term.c_lflag &= ~ICANON;
term.c_lflag &= ~ECHO;
term.c_cc[VMIN] = 1;
term.c_cc[VTIME] = 0;
if (tcsetattr(0, TCSANOW, &term) < 0)
perror("tcsetattr ICANON");
stdin_source.fd = 0; // stdin
stdin_source.process = &stdin_process;
run_loop_add_data_source(&stdin_source);
}
int btstack_main(int argc, const char * argv[]); int btstack_main(int argc, const char * argv[]);
int btstack_main(int argc, const char * argv[]){ int btstack_main(int argc, const char * argv[]){
@ -185,7 +169,7 @@ int btstack_main(int argc, const char * argv[]){
// turn on! // turn on!
hci_power_control(HCI_POWER_ON); hci_power_control(HCI_POWER_ON);
setup_cli(); btstack_stdin_setup(stdin_process);
run_loop_execute(); run_loop_execute();
return 0; return 0;
} }

View File

@ -2,7 +2,8 @@
BTSTACK_ROOT = ../.. BTSTACK_ROOT = ../..
POSIX_ROOT= ${BTSTACK_ROOT}/platforms/posix POSIX_ROOT= ${BTSTACK_ROOT}/platforms/posix
CORE += main.c CORE += main.c stdin_support.c
COMMON += hci_transport_h2_libusb.c run_loop_posix.c remote_device_db_fs.c COMMON += hci_transport_h2_libusb.c run_loop_posix.c remote_device_db_fs.c
@ -24,9 +25,10 @@ CFLAGS += $(shell pkg-config libusb-1.0 --cflags)
LDFLAGS += $(shell pkg-config libusb-1.0 --libs) LDFLAGS += $(shell pkg-config libusb-1.0 --libs)
endif endif
# Command Line examples require porting to win32, so only build on other = unix-ish hosts # Command Line examples require porting to win32, so only build on other unix-ish hosts
ifneq ($(OS),Windows_NT) ifneq ($(OS),Windows_NT)
EXAMPLES += ${EXAMPLES_CLI} EXAMPLES += ${EXAMPLES_CLI}
CFLAGS += -I${POSIX_ROOT}/src
endif endif
EXAMPLES += sam3u_benchmark EXAMPLES += sam3u_benchmark

View File

@ -55,10 +55,17 @@
#include "btstack_memory.h" #include "btstack_memory.h"
#include "hci.h" #include "hci.h"
#include "hci_dump.h" #include "hci_dump.h"
#include "stdin_support.h"
int btstack_main(int argc, const char * argv[]); int btstack_main(int argc, const char * argv[]);
static void sigint_handler(int param){ static void sigint_handler(int param){
#ifndef _WIN32
// reset anyway
btstack_stdin_reset();
#endif
log_info(" <= SIGINT received, shutting down..\n"); log_info(" <= SIGINT received, shutting down..\n");
hci_power_control(HCI_POWER_OFF); hci_power_control(HCI_POWER_OFF);
hci_close(); hci_close();
@ -87,6 +94,6 @@ int main(int argc, const char * argv[]){
signal(SIGINT, sigint_handler); signal(SIGINT, sigint_handler);
btstack_main(argc, argv); btstack_main(argc, argv);
return 0; return 0;
} }