security_manager_sc: code cleanups

This commit is contained in:
Dirk Helbig 2022-06-03 07:31:21 +02:00
parent 169aa8795f
commit 713e3f72ab
2 changed files with 110 additions and 109 deletions

View File

@ -49,6 +49,7 @@
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
#include "btstack_config.h"
@ -79,6 +80,10 @@ static const btstack_tlv_t * tlv_impl;
static btstack_tlv_posix_t tlv_context;
static bd_addr_t local_addr;
#define MAX_CMD_LINE_ITEMS 100
static int app_argc = 0;
static const char *app_argv[MAX_CMD_LINE_ITEMS] = { NULL };
int btstack_main(int argc, const char * argv[]);
static const uint8_t read_static_address_command_complete_prefix[] = { 0x0e, 0x1b, 0x01, 0x09, 0xfc };
@ -171,7 +176,7 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack
static void sigint_handler(int param){
UNUSED(param);
printf("CTRL-C - SIGINT received, shutting down..\n");
printf("CTRL-C - SIGINT received, shutting down..\n");
log_info("sigint_handler: shutting down");
// reset anyway
@ -180,7 +185,7 @@ static void sigint_handler(int param){
// power down
hci_power_control(HCI_POWER_OFF);
hci_close();
log_info("Good bye, see you.\n");
log_info("Good bye, see you.\n");
exit(0);
}
@ -190,7 +195,6 @@ void hal_led_toggle(void){
printf("LED State %u\n", led_state);
}
#include <string.h>
static void btstack_log_cmd_line( int argc, const char *args[] )
{
char buf[2048] = "command line:";
@ -247,29 +251,25 @@ static void usage(const char *name){
}
}
static int app_argc = 0;
static const char *app_argv[100] = { NULL };
static void clear_argv(int idx)
{
static void clear_argv(int idx){
app_argv[idx] = NULL;
}
static void shift_argv(int idx)
{
static void shift_argv(int idx){
for( int i=idx; i<app_argc-1; ++i )
{
app_argv[i] = app_argv[i+1];
}
app_argc--;
}
static void cleanup_argv()
{
for( int i=0; i<app_argc; )
{
static void cleanup_argv(void){
for( int i=0; i<app_argc; ){
if( app_argv[i] == NULL )
shift_argv( i );
else
else{
++i;
}
}
}
@ -281,9 +281,9 @@ int main(int argc, const char * argv[]){
const char * usb_path_string = NULL;
const char * log_file_path = NULL;
btstack_assert( argc < MAX_CMD_LINE_ITEMS );
app_argc = argc;
for( int i=0; i<argc; ++i )
{
for( int i=0; i<argc; ++i ){
app_argv[i] = argv[i];
}
@ -356,8 +356,9 @@ int main(int argc, const char * argv[]){
btstack_strcat(pklg_path, sizeof(pklg_path), ".pklg");
// use path from command line if given
if( log_file_path != NULL )
if( log_file_path != NULL ){
btstack_strcpy(pklg_path, sizeof(pklg_path), log_file_path );
}
// log into file using HCI_DUMP_PACKETLOGGER format
hci_dump_posix_fs_open(pklg_path, HCI_DUMP_PACKETLOGGER);

View File

@ -277,105 +277,105 @@ static void handle_gatt_client_event(uint8_t packet_type, uint16_t channel, uint
}
static void hci_packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
UNUSED(channel);
UNUSED(size);
bd_addr_t local_addr;
switch (packet_type) {
case HCI_EVENT_PACKET:
switch (packet[0]) {
case BTSTACK_EVENT_STATE:
// bt stack activated, get started
if (btstack_event_state_get_state(packet) == HCI_STATE_WORKING){
gap_local_bd_addr(local_addr);
printf("BD_ADDR: %s\n", bd_addr_to_str(local_addr));
// generate OOB data
sm_generate_sc_oob_data(sc_local_oob_generated_callback);
}
break;
case HCI_EVENT_LE_META:
switch (hci_event_le_meta_get_subevent_code(packet)) {
case HCI_SUBEVENT_LE_CONNECTION_COMPLETE:
connection_handle = hci_subevent_le_connection_complete_get_connection_handle(packet);
printf("CONNECTED: Connection handle 0x%04x\n", connection_handle);
break;
default:
break;
}
break;
case HCI_EVENT_DISCONNECTION_COMPLETE:
if (hci_get_state() != HCI_STATE_WORKING) break;
connection_handle = hci_event_disconnection_complete_get_connection_handle(packet);
printf("DISCONNECTED: Connection handle 0x%04x\n", connection_handle);
break;
default:
break;
}
}
fflush(stdout);
UNUSED(channel);
UNUSED(size);
bd_addr_t local_addr;
switch (packet_type) {
case HCI_EVENT_PACKET:
switch (packet[0]) {
case BTSTACK_EVENT_STATE:
// bt stack activated, get started
if (btstack_event_state_get_state(packet) == HCI_STATE_WORKING){
gap_local_bd_addr(local_addr);
printf("BD_ADDR: %s\n", bd_addr_to_str(local_addr));
// generate OOB data
sm_generate_sc_oob_data(sc_local_oob_generated_callback);
}
break;
case HCI_EVENT_LE_META:
switch (hci_event_le_meta_get_subevent_code(packet)) {
case HCI_SUBEVENT_LE_CONNECTION_COMPLETE:
connection_handle = hci_subevent_le_connection_complete_get_connection_handle(packet);
printf("CONNECTED: Connection handle 0x%04x\n", connection_handle);
break;
default:
break;
}
break;
case HCI_EVENT_DISCONNECTION_COMPLETE:
if (hci_get_state() != HCI_STATE_WORKING) break;
connection_handle = hci_event_disconnection_complete_get_connection_handle(packet);
printf("DISCONNECTED: Connection handle 0x%04x\n", connection_handle);
break;
default:
break;
}
}
fflush(stdout);
}
static void sm_packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
UNUSED(channel);
UNUSED(size);
switch (packet_type) {
case HCI_EVENT_PACKET:
switch (packet[0]) {
case SM_EVENT_JUST_WORKS_REQUEST:
printf("JUST_WORKS_REQUEST\n");
break;
case SM_EVENT_NUMERIC_COMPARISON_REQUEST:
printf("NUMERIC_COMPARISON_REQUEST\n");
break;
case SM_EVENT_PASSKEY_INPUT_NUMBER:
// display number
printf("PASSKEY_INPUT_NUMBER\n");
ui_passkey = 0;
ui_digits_for_passkey = 6;
sm_keypress_notification(connection_handle, SM_KEYPRESS_PASSKEY_ENTRY_STARTED);
break;
case SM_EVENT_PASSKEY_DISPLAY_NUMBER:
// display number
printf("PASSKEY_DISPLAY_NUMBER: %06u\n", little_endian_read_32(packet, 11));
break;
case SM_EVENT_PASSKEY_DISPLAY_CANCEL:
break;
case SM_EVENT_AUTHORIZATION_REQUEST:
break;
case SM_EVENT_PAIRING_COMPLETE:
printf("\nPAIRING_COMPLETE: %u,%u\n", sm_event_pairing_complete_get_status(packet), sm_event_pairing_complete_get_reason(packet));
if (sm_event_pairing_complete_get_status(packet)) break;
if (we_are_central){
printf("Search for LE Counter service.\n");
state = TC_W4_SERVICE_RESULT;
gatt_client_discover_primary_services_by_uuid128(handle_gatt_client_event, connection_handle, le_counter_service_uuid);
}
break;
default:
break;
}
}
fflush(stdout);
UNUSED(channel);
UNUSED(size);
switch (packet_type) {
case HCI_EVENT_PACKET:
switch (packet[0]) {
case SM_EVENT_JUST_WORKS_REQUEST:
printf("JUST_WORKS_REQUEST\n");
break;
case SM_EVENT_NUMERIC_COMPARISON_REQUEST:
printf("NUMERIC_COMPARISON_REQUEST\n");
break;
case SM_EVENT_PASSKEY_INPUT_NUMBER:
// display number
printf("PASSKEY_INPUT_NUMBER\n");
ui_passkey = 0;
ui_digits_for_passkey = 6;
sm_keypress_notification(connection_handle, SM_KEYPRESS_PASSKEY_ENTRY_STARTED);
break;
case SM_EVENT_PASSKEY_DISPLAY_NUMBER:
// display number
printf("PASSKEY_DISPLAY_NUMBER: %06u\n", little_endian_read_32(packet, 11));
break;
case SM_EVENT_PASSKEY_DISPLAY_CANCEL:
break;
case SM_EVENT_AUTHORIZATION_REQUEST:
break;
case SM_EVENT_PAIRING_COMPLETE:
printf("\nPAIRING_COMPLETE: %u,%u\n", sm_event_pairing_complete_get_status(packet), sm_event_pairing_complete_get_reason(packet));
if (sm_event_pairing_complete_get_status(packet)) break;
if (we_are_central){
printf("Search for LE Counter service.\n");
state = TC_W4_SERVICE_RESULT;
gatt_client_discover_primary_services_by_uuid128(handle_gatt_client_event, connection_handle, le_counter_service_uuid);
}
break;
default:
break;
}
}
fflush(stdout);
}
static void att_packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
UNUSED(channel);
UNUSED(size);
switch (packet_type) {
case HCI_EVENT_PACKET:
switch (packet[0]) {
case ATT_EVENT_CAN_SEND_NOW:
att_server_notify(connection_handle, ATT_CHARACTERISTIC_0000FF11_0000_1000_8000_00805F9B34FB_01_VALUE_HANDLE, (uint8_t *) "Pairing Success!", 16);
break;
default:
break;
}
}
fflush(stdout);
UNUSED(channel);
UNUSED(size);
switch (packet_type) {
case HCI_EVENT_PACKET:
switch (packet[0]) {
case ATT_EVENT_CAN_SEND_NOW:
att_server_notify(connection_handle, ATT_CHARACTERISTIC_0000FF11_0000_1000_8000_00805F9B34FB_01_VALUE_HANDLE, (uint8_t *) "Pairing Success!", 16);
break;
default:
break;
}
}
fflush(stdout);
}
static void stdin_process(char c){
log_info("stdin: %c", c);
log_info("stdin: %c", c);
// passkey input
if (ui_digits_for_passkey && c >= '0' && c <= '9'){
printf("%c", c);
@ -456,11 +456,11 @@ static void stdin_process(char c){
break;
case 'x':
#ifdef COVERAGE
log_info("Flush gcov");
log_info("Flush gcov");
__gcov_dump();
__gcov_reset();
#endif
printf("EXIT\n");
printf("EXIT\n");
exit(0);
break;
default: