hci.c (308eeaffaa1b7bc3f35655c74d782ef314fd65cd) hci.c (6fad2c376995e272e1924e97046a38cb37cd48b1)
1/*
2 * Copyright (C) 2014 BlueKitchen GmbH
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright

--- 39 unchanged lines hidden (view full) ---

48
49
50#ifdef ENABLE_CLASSIC
51#ifdef HAVE_EMBEDDED_TICK
52#include "btstack_run_loop_embedded.h"
53#endif
54#endif
55
1/*
2 * Copyright (C) 2014 BlueKitchen GmbH
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright

--- 39 unchanged lines hidden (view full) ---

48
49
50#ifdef ENABLE_CLASSIC
51#ifdef HAVE_EMBEDDED_TICK
52#include "btstack_run_loop_embedded.h"
53#endif
54#endif
55
56#ifdef HAVE_PLATFORM_IPHONE_OS
57#include "../port/ios/src/btstack_control_iphone.h"
58#endif
59
60#ifdef ENABLE_BLE
61#include "gap.h"
62#include "ble/le_device_db.h"
63#endif
64
65#include <stdarg.h>
66#include <string.h>
67#include <inttypes.h>

--- 1246 unchanged lines hidden (view full) ---

1314 (void)memcpy(&packet[6], hci_stack->local_name, bytes_to_copy);
1315 // expand '00:00:00:00:00:00' in name with bd_addr
1316 btstack_replace_bd_addr_placeholder(&packet[offset], bytes_to_copy, hci_stack->local_bd_addr);
1317 }
1318 hci_send_cmd_packet(packet, HCI_CMD_HEADER_SIZE + 1 + EXTENDED_INQUIRY_RESPONSE_DATA_LEN);
1319}
1320#endif
1321
56#ifdef ENABLE_BLE
57#include "gap.h"
58#include "ble/le_device_db.h"
59#endif
60
61#include <stdarg.h>
62#include <string.h>
63#include <inttypes.h>

--- 1246 unchanged lines hidden (view full) ---

1310 (void)memcpy(&packet[6], hci_stack->local_name, bytes_to_copy);
1311 // expand '00:00:00:00:00:00' in name with bd_addr
1312 btstack_replace_bd_addr_placeholder(&packet[offset], bytes_to_copy, hci_stack->local_bd_addr);
1313 }
1314 hci_send_cmd_packet(packet, HCI_CMD_HEADER_SIZE + 1 + EXTENDED_INQUIRY_RESPONSE_DATA_LEN);
1315}
1316#endif
1317
1322#if !defined(HAVE_PLATFORM_IPHONE_OS) && !defined (HAVE_HOST_CONTROLLER_API)
1318#ifndef HAVE_HOST_CONTROLLER_API
1323
1324static uint32_t hci_transport_uart_get_main_baud_rate(void){
1325 if (!hci_stack->config) return 0;
1326 uint32_t baud_rate = ((hci_transport_config_uart_t *)hci_stack->config)->baudrate_main;
1327 // Limit baud rate for Broadcom chipsets to 3 mbps
1328 if ((hci_stack->manufacturer == BLUETOOTH_COMPANY_ID_BROADCOM_CORPORATION) && (baud_rate > 3000000)){
1329 baud_rate = 3000000;
1330 }

--- 57 unchanged lines hidden (view full) ---

1388
1389// assumption: hci_can_send_command_packet_now() == true
1390static void hci_initializing_run(void){
1391 log_debug("hci_initializing_run: substate %u, can send %u", hci_stack->substate, hci_can_send_command_packet_now());
1392 switch (hci_stack->substate){
1393 case HCI_INIT_SEND_RESET:
1394 hci_state_reset();
1395
1319
1320static uint32_t hci_transport_uart_get_main_baud_rate(void){
1321 if (!hci_stack->config) return 0;
1322 uint32_t baud_rate = ((hci_transport_config_uart_t *)hci_stack->config)->baudrate_main;
1323 // Limit baud rate for Broadcom chipsets to 3 mbps
1324 if ((hci_stack->manufacturer == BLUETOOTH_COMPANY_ID_BROADCOM_CORPORATION) && (baud_rate > 3000000)){
1325 baud_rate = 3000000;
1326 }

--- 57 unchanged lines hidden (view full) ---

1384
1385// assumption: hci_can_send_command_packet_now() == true
1386static void hci_initializing_run(void){
1387 log_debug("hci_initializing_run: substate %u, can send %u", hci_stack->substate, hci_can_send_command_packet_now());
1388 switch (hci_stack->substate){
1389 case HCI_INIT_SEND_RESET:
1390 hci_state_reset();
1391
1396#if !defined(HAVE_PLATFORM_IPHONE_OS) && !defined (HAVE_HOST_CONTROLLER_API)
1392#ifndef HAVE_HOST_CONTROLLER_API
1397 // prepare reset if command complete not received in 100ms
1398 btstack_run_loop_set_timer(&hci_stack->timeout, HCI_RESET_RESEND_TIMEOUT_MS);
1399 btstack_run_loop_set_timer_handler(&hci_stack->timeout, hci_initialization_timeout_handler);
1400 btstack_run_loop_add_timer(&hci_stack->timeout);
1401#endif
1402 // send command
1403 hci_stack->substate = HCI_INIT_W4_SEND_RESET;
1404 hci_send_cmd(&hci_reset);
1405 break;
1406 case HCI_INIT_SEND_READ_LOCAL_VERSION_INFORMATION:
1407 hci_send_cmd(&hci_read_local_version_information);
1408 hci_stack->substate = HCI_INIT_W4_SEND_READ_LOCAL_VERSION_INFORMATION;
1409 break;
1410 case HCI_INIT_SEND_READ_LOCAL_NAME:
1411 hci_send_cmd(&hci_read_local_name);
1412 hci_stack->substate = HCI_INIT_W4_SEND_READ_LOCAL_NAME;
1413 break;
1414
1393 // prepare reset if command complete not received in 100ms
1394 btstack_run_loop_set_timer(&hci_stack->timeout, HCI_RESET_RESEND_TIMEOUT_MS);
1395 btstack_run_loop_set_timer_handler(&hci_stack->timeout, hci_initialization_timeout_handler);
1396 btstack_run_loop_add_timer(&hci_stack->timeout);
1397#endif
1398 // send command
1399 hci_stack->substate = HCI_INIT_W4_SEND_RESET;
1400 hci_send_cmd(&hci_reset);
1401 break;
1402 case HCI_INIT_SEND_READ_LOCAL_VERSION_INFORMATION:
1403 hci_send_cmd(&hci_read_local_version_information);
1404 hci_stack->substate = HCI_INIT_W4_SEND_READ_LOCAL_VERSION_INFORMATION;
1405 break;
1406 case HCI_INIT_SEND_READ_LOCAL_NAME:
1407 hci_send_cmd(&hci_read_local_name);
1408 hci_stack->substate = HCI_INIT_W4_SEND_READ_LOCAL_NAME;
1409 break;
1410
1415#if !defined(HAVE_PLATFORM_IPHONE_OS) && !defined (HAVE_HOST_CONTROLLER_API)
1411#ifndef HAVE_HOST_CONTROLLER_API
1416 case HCI_INIT_SEND_RESET_CSR_WARM_BOOT:
1417 hci_state_reset();
1418 // prepare reset if command complete not received in 100ms
1419 btstack_run_loop_set_timer(&hci_stack->timeout, HCI_RESET_RESEND_TIMEOUT_MS);
1420 btstack_run_loop_set_timer_handler(&hci_stack->timeout, hci_initialization_timeout_handler);
1421 btstack_run_loop_add_timer(&hci_stack->timeout);
1422 // send command
1423 hci_stack->substate = HCI_INIT_W4_CUSTOM_INIT_CSR_WARM_BOOT;

--- 284 unchanged lines hidden (view full) ---

1708 log_debug("Command status error 0x%02x for expected opcode %04x at substate %u", status, opcode, hci_stack->substate);
1709 } else {
1710 log_info("Command status OK for expected opcode %04x, waiting for command complete", opcode);
1711 }
1712 } else {
1713 log_debug("Command status for opcode %04x, expected %04x", opcode, hci_stack->last_cmd_opcode);
1714 }
1715 }
1412 case HCI_INIT_SEND_RESET_CSR_WARM_BOOT:
1413 hci_state_reset();
1414 // prepare reset if command complete not received in 100ms
1415 btstack_run_loop_set_timer(&hci_stack->timeout, HCI_RESET_RESEND_TIMEOUT_MS);
1416 btstack_run_loop_set_timer_handler(&hci_stack->timeout, hci_initialization_timeout_handler);
1417 btstack_run_loop_add_timer(&hci_stack->timeout);
1418 // send command
1419 hci_stack->substate = HCI_INIT_W4_CUSTOM_INIT_CSR_WARM_BOOT;

--- 284 unchanged lines hidden (view full) ---

1704 log_debug("Command status error 0x%02x for expected opcode %04x at substate %u", status, opcode, hci_stack->substate);
1705 } else {
1706 log_info("Command status OK for expected opcode %04x, waiting for command complete", opcode);
1707 }
1708 } else {
1709 log_debug("Command status for opcode %04x, expected %04x", opcode, hci_stack->last_cmd_opcode);
1710 }
1711 }
1716#if !defined(HAVE_PLATFORM_IPHONE_OS) && !defined (HAVE_HOST_CONTROLLER_API)
1712#ifndef HAVE_HOST_CONTROLLER_API
1717 // Vendor == CSR
1718 if ((hci_stack->substate == HCI_INIT_W4_CUSTOM_INIT) && (hci_event_packet_get_type(packet) == HCI_EVENT_VENDOR_SPECIFIC)){
1719 // TODO: track actual command
1720 command_completed = true;
1721 }
1722
1723 // Vendor == Toshiba
1724 if ((hci_stack->substate == HCI_INIT_W4_SEND_BAUD_CHANGE) && (hci_event_packet_get_type(packet) == HCI_EVENT_VENDOR_SPECIFIC)){

--- 8 unchanged lines hidden (view full) ---

1733}
1734
1735static void hci_initializing_event_handler(const uint8_t * packet, uint16_t size){
1736
1737 UNUSED(size); // ok: less than 6 bytes are read from our buffer
1738
1739 bool command_completed = hci_initializing_event_handler_command_completed(packet);
1740
1713 // Vendor == CSR
1714 if ((hci_stack->substate == HCI_INIT_W4_CUSTOM_INIT) && (hci_event_packet_get_type(packet) == HCI_EVENT_VENDOR_SPECIFIC)){
1715 // TODO: track actual command
1716 command_completed = true;
1717 }
1718
1719 // Vendor == Toshiba
1720 if ((hci_stack->substate == HCI_INIT_W4_SEND_BAUD_CHANGE) && (hci_event_packet_get_type(packet) == HCI_EVENT_VENDOR_SPECIFIC)){

--- 8 unchanged lines hidden (view full) ---

1729}
1730
1731static void hci_initializing_event_handler(const uint8_t * packet, uint16_t size){
1732
1733 UNUSED(size); // ok: less than 6 bytes are read from our buffer
1734
1735 bool command_completed = hci_initializing_event_handler_command_completed(packet);
1736
1741#if !defined(HAVE_PLATFORM_IPHONE_OS) && !defined (HAVE_HOST_CONTROLLER_API)
1737#ifndef HAVE_HOST_CONTROLLER_API
1742
1743 // Late response (> 100 ms) for HCI Reset e.g. on Toshiba TC35661:
1744 // Command complete for HCI Reset arrives after we've resent the HCI Reset command
1745 //
1746 // HCI Reset
1747 // Timeout 100 ms
1748 // HCI Reset
1749 // Command Complete Reset

--- 43 unchanged lines hidden (view full) ---

1793
1794#endif
1795
1796 if (!command_completed) return;
1797
1798 bool need_baud_change = false;
1799 bool need_addr_change = false;
1800
1738
1739 // Late response (> 100 ms) for HCI Reset e.g. on Toshiba TC35661:
1740 // Command complete for HCI Reset arrives after we've resent the HCI Reset command
1741 //
1742 // HCI Reset
1743 // Timeout 100 ms
1744 // HCI Reset
1745 // Command Complete Reset

--- 43 unchanged lines hidden (view full) ---

1789
1790#endif
1791
1792 if (!command_completed) return;
1793
1794 bool need_baud_change = false;
1795 bool need_addr_change = false;
1796
1801#if !defined(HAVE_PLATFORM_IPHONE_OS) && !defined (HAVE_HOST_CONTROLLER_API)
1797#ifndef HAVE_HOST_CONTROLLER_API
1802 need_baud_change = hci_stack->config
1803 && hci_stack->chipset
1804 && hci_stack->chipset->set_baudrate_command
1805 && hci_stack->hci_transport->set_baudrate
1806 && ((hci_transport_config_uart_t *)hci_stack->config)->baudrate_main;
1807
1808 need_addr_change = hci_stack->custom_bd_addr_set
1809 && hci_stack->chipset
1810 && hci_stack->chipset->set_bd_addr_command;
1811#endif
1812
1813 switch(hci_stack->substate){
1814
1798 need_baud_change = hci_stack->config
1799 && hci_stack->chipset
1800 && hci_stack->chipset->set_baudrate_command
1801 && hci_stack->hci_transport->set_baudrate
1802 && ((hci_transport_config_uart_t *)hci_stack->config)->baudrate_main;
1803
1804 need_addr_change = hci_stack->custom_bd_addr_set
1805 && hci_stack->chipset
1806 && hci_stack->chipset->set_bd_addr_command;
1807#endif
1808
1809 switch(hci_stack->substate){
1810
1815#if !defined(HAVE_PLATFORM_IPHONE_OS) && !defined (HAVE_HOST_CONTROLLER_API)
1811#ifndef HAVE_HOST_CONTROLLER_API
1816 case HCI_INIT_SEND_RESET:
1817 // on CSR with BCSP/H5, resend triggers resend of HCI Reset and leads to substate == HCI_INIT_SEND_RESET
1818 // fix: just correct substate and behave as command below
1819 hci_stack->substate = HCI_INIT_W4_SEND_RESET;
1820 btstack_run_loop_remove_timer(&hci_stack->timeout);
1821 break;
1822 case HCI_INIT_W4_SEND_RESET:
1823 btstack_run_loop_remove_timer(&hci_stack->timeout);

--- 39 unchanged lines hidden (view full) ---

1863 return;
1864 }
1865 if (need_addr_change){
1866 hci_stack->substate = HCI_INIT_SET_BD_ADDR;
1867 return;
1868 }
1869 hci_stack->substate = HCI_INIT_READ_BD_ADDR;
1870 return;
1812 case HCI_INIT_SEND_RESET:
1813 // on CSR with BCSP/H5, resend triggers resend of HCI Reset and leads to substate == HCI_INIT_SEND_RESET
1814 // fix: just correct substate and behave as command below
1815 hci_stack->substate = HCI_INIT_W4_SEND_RESET;
1816 btstack_run_loop_remove_timer(&hci_stack->timeout);
1817 break;
1818 case HCI_INIT_W4_SEND_RESET:
1819 btstack_run_loop_remove_timer(&hci_stack->timeout);

--- 39 unchanged lines hidden (view full) ---

1859 return;
1860 }
1861 if (need_addr_change){
1862 hci_stack->substate = HCI_INIT_SET_BD_ADDR;
1863 return;
1864 }
1865 hci_stack->substate = HCI_INIT_READ_BD_ADDR;
1866 return;
1871#if !defined(HAVE_PLATFORM_IPHONE_OS) && !defined (HAVE_HOST_CONTROLLER_API)
1867#ifndef HAVE_HOST_CONTROLLER_API
1872 case HCI_INIT_W4_SEND_BAUD_CHANGE_BCM:
1873 if (need_baud_change){
1874 uint32_t baud_rate = hci_transport_uart_get_main_baud_rate();
1875 log_info("Local baud rate change to %" PRIu32 "(w4_send_baud_change_bcm))", baud_rate);
1876 hci_stack->hci_transport->set_baudrate(baud_rate);
1877 }
1878 if (need_addr_change){
1879 hci_stack->substate = HCI_INIT_SET_BD_ADDR;

--- 1847 unchanged lines hidden (view full) ---

3727 hci_stack->link_supervision_timeout = link_supervision_timeout;
3728}
3729
3730void hci_disable_l2cap_timeout_check(void){
3731 disable_l2cap_timeouts = 1;
3732}
3733#endif
3734
1868 case HCI_INIT_W4_SEND_BAUD_CHANGE_BCM:
1869 if (need_baud_change){
1870 uint32_t baud_rate = hci_transport_uart_get_main_baud_rate();
1871 log_info("Local baud rate change to %" PRIu32 "(w4_send_baud_change_bcm))", baud_rate);
1872 hci_stack->hci_transport->set_baudrate(baud_rate);
1873 }
1874 if (need_addr_change){
1875 hci_stack->substate = HCI_INIT_SET_BD_ADDR;

--- 1847 unchanged lines hidden (view full) ---

3723 hci_stack->link_supervision_timeout = link_supervision_timeout;
3724}
3725
3726void hci_disable_l2cap_timeout_check(void){
3727 disable_l2cap_timeouts = 1;
3728}
3729#endif
3730
3735#if !defined(HAVE_PLATFORM_IPHONE_OS) && !defined (HAVE_HOST_CONTROLLER_API)
3731#ifndef HAVE_HOST_CONTROLLER_API
3736// Set Public BD ADDR - passed on to Bluetooth chipset if supported in bt_control_h
3737void hci_set_bd_addr(bd_addr_t addr){
3738 (void)memcpy(hci_stack->custom_bd_addr, addr, 6);
3739 hci_stack->custom_bd_addr_set = 1;
3740}
3741#endif
3742
3743// State-Module-Driver overview

--- 197 unchanged lines hidden (view full) ---

3941 break;
3942 }
3943 return ERROR_CODE_SUCCESS;
3944}
3945
3946static int hci_power_control_state_falling_asleep(HCI_POWER_MODE power_mode) {
3947 switch (power_mode){
3948 case HCI_POWER_ON:
3732// Set Public BD ADDR - passed on to Bluetooth chipset if supported in bt_control_h
3733void hci_set_bd_addr(bd_addr_t addr){
3734 (void)memcpy(hci_stack->custom_bd_addr, addr, 6);
3735 hci_stack->custom_bd_addr_set = 1;
3736}
3737#endif
3738
3739// State-Module-Driver overview

--- 197 unchanged lines hidden (view full) ---

3937 break;
3938 }
3939 return ERROR_CODE_SUCCESS;
3940}
3941
3942static int hci_power_control_state_falling_asleep(HCI_POWER_MODE power_mode) {
3943 switch (power_mode){
3944 case HCI_POWER_ON:
3949
3950#ifdef HAVE_PLATFORM_IPHONE_OS
3951 // nothing to do, if H4 supports power management
3952 if (btstack_control_iphone_power_management_enabled()){
3953 hci_stack->state = HCI_STATE_INITIALIZING;
3954 hci_stack->substate = HCI_INIT_WRITE_SCAN_ENABLE; // init after sleep
3955 break;
3956 }
3957#endif
3958 hci_power_transition_to_initializing();
3959 break;
3960 case HCI_POWER_OFF:
3961 // see hci_run
3962 hci_stack->state = HCI_STATE_HALTING;
3963 hci_stack->substate = HCI_HALTING_DISCONNECT_ALL_NO_TIMER;
3964 break;
3965 case HCI_POWER_SLEEP:

--- 5 unchanged lines hidden (view full) ---

3971 }
3972 return ERROR_CODE_SUCCESS;
3973}
3974
3975static int hci_power_control_state_sleeping(HCI_POWER_MODE power_mode) {
3976 int err;
3977 switch (power_mode){
3978 case HCI_POWER_ON:
3945 hci_power_transition_to_initializing();
3946 break;
3947 case HCI_POWER_OFF:
3948 // see hci_run
3949 hci_stack->state = HCI_STATE_HALTING;
3950 hci_stack->substate = HCI_HALTING_DISCONNECT_ALL_NO_TIMER;
3951 break;
3952 case HCI_POWER_SLEEP:

--- 5 unchanged lines hidden (view full) ---

3958 }
3959 return ERROR_CODE_SUCCESS;
3960}
3961
3962static int hci_power_control_state_sleeping(HCI_POWER_MODE power_mode) {
3963 int err;
3964 switch (power_mode){
3965 case HCI_POWER_ON:
3979#ifdef HAVE_PLATFORM_IPHONE_OS
3980 // nothing to do, if H4 supports power management
3981 if (btstack_control_iphone_power_management_enabled()){
3982 hci_stack->state = HCI_STATE_INITIALIZING;
3983 hci_stack->substate = HCI_INIT_AFTER_SLEEP;
3984 hci_update_scan_enable();
3985 break;
3986 }
3987#endif
3988 err = hci_power_control_wake();
3989 if (err) return err;
3990 hci_power_transition_to_initializing();
3991 break;
3992 case HCI_POWER_OFF:
3993 hci_stack->state = HCI_STATE_HALTING;
3994 hci_stack->substate = HCI_HALTING_DISCONNECT_ALL_NO_TIMER;
3995 break;

--- 1103 unchanged lines hidden (view full) ---

5099 break;
5100
5101 case HCI_STATE_FALLING_ASLEEP:
5102 switch(hci_stack->substate) {
5103 case HCI_FALLING_ASLEEP_DISCONNECT:
5104 log_info("HCI_STATE_FALLING_ASLEEP");
5105 // close all open connections
5106 connection = (hci_connection_t *) hci_stack->connections;
3966 err = hci_power_control_wake();
3967 if (err) return err;
3968 hci_power_transition_to_initializing();
3969 break;
3970 case HCI_POWER_OFF:
3971 hci_stack->state = HCI_STATE_HALTING;
3972 hci_stack->substate = HCI_HALTING_DISCONNECT_ALL_NO_TIMER;
3973 break;

--- 1103 unchanged lines hidden (view full) ---

5077 break;
5078
5079 case HCI_STATE_FALLING_ASLEEP:
5080 switch(hci_stack->substate) {
5081 case HCI_FALLING_ASLEEP_DISCONNECT:
5082 log_info("HCI_STATE_FALLING_ASLEEP");
5083 // close all open connections
5084 connection = (hci_connection_t *) hci_stack->connections;
5107
5108#ifdef HAVE_PLATFORM_IPHONE_OS
5109 // don't close connections, if H4 supports power management
5110 if (btstack_control_iphone_power_management_enabled()){
5111 connection = NULL;
5112 }
5113#endif
5114 if (connection){
5115
5116 // send disconnect
5117 if (!hci_can_send_command_packet_now()) return;
5118
5119 log_info("HCI_STATE_FALLING_ASLEEP, connection %p, handle %u", connection, (uint16_t)connection->con_handle);
5120 hci_send_cmd(&hci_disconnect, connection->con_handle, ERROR_CODE_REMOTE_USER_TERMINATED_CONNECTION);
5121

--- 13 unchanged lines hidden (view full) ---

5135 hci_stack->substate = HCI_FALLING_ASLEEP_W4_WRITE_SCAN_ENABLE;
5136 break;
5137 }
5138
5139 /* fall through */
5140
5141 case HCI_FALLING_ASLEEP_COMPLETE:
5142 log_info("HCI_STATE_HALTING, calling sleep");
5085 if (connection){
5086
5087 // send disconnect
5088 if (!hci_can_send_command_packet_now()) return;
5089
5090 log_info("HCI_STATE_FALLING_ASLEEP, connection %p, handle %u", connection, (uint16_t)connection->con_handle);
5091 hci_send_cmd(&hci_disconnect, connection->con_handle, ERROR_CODE_REMOTE_USER_TERMINATED_CONNECTION);
5092

--- 13 unchanged lines hidden (view full) ---

5106 hci_stack->substate = HCI_FALLING_ASLEEP_W4_WRITE_SCAN_ENABLE;
5107 break;
5108 }
5109
5110 /* fall through */
5111
5112 case HCI_FALLING_ASLEEP_COMPLETE:
5113 log_info("HCI_STATE_HALTING, calling sleep");
5143#ifdef HAVE_PLATFORM_IPHONE_OS
5144 // don't actually go to sleep, if H4 supports power management
5145 if (btstack_control_iphone_power_management_enabled()){
5146 // SLEEP MODE reached
5147 hci_stack->state = HCI_STATE_SLEEPING;
5148 hci_emit_state();
5149 break;
5150 }
5151#endif
5152 // switch mode
5153 hci_power_control_sleep(); // changes hci_stack->state to SLEEP
5154 hci_emit_state();
5155 break;
5156
5157 default:
5158 break;
5159 }

--- 1835 unchanged lines hidden ---
5114 // switch mode
5115 hci_power_control_sleep(); // changes hci_stack->state to SLEEP
5116 hci_emit_state();
5117 break;
5118
5119 default:
5120 break;
5121 }

--- 1835 unchanged lines hidden ---