1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 * BlueZ - Bluetooth protocol stack for Linux
5 * Copyright (C) 2010 Nokia Corporation
6 * Copyright (C) 2010 Marcel Holtmann <marcel@holtmann.org>
12 #define __packed __attribute__((packed))
15 #define MGMT_INDEX_NONE 0xFFFF
17 #define MGMT_STATUS_SUCCESS 0x00
18 #define MGMT_STATUS_UNKNOWN_COMMAND 0x01
19 #define MGMT_STATUS_NOT_CONNECTED 0x02
20 #define MGMT_STATUS_FAILED 0x03
21 #define MGMT_STATUS_CONNECT_FAILED 0x04
22 #define MGMT_STATUS_AUTH_FAILED 0x05
23 #define MGMT_STATUS_NOT_PAIRED 0x06
24 #define MGMT_STATUS_NO_RESOURCES 0x07
25 #define MGMT_STATUS_TIMEOUT 0x08
26 #define MGMT_STATUS_ALREADY_CONNECTED 0x09
27 #define MGMT_STATUS_BUSY 0x0a
28 #define MGMT_STATUS_REJECTED 0x0b
29 #define MGMT_STATUS_NOT_SUPPORTED 0x0c
30 #define MGMT_STATUS_INVALID_PARAMS 0x0d
31 #define MGMT_STATUS_DISCONNECTED 0x0e
32 #define MGMT_STATUS_NOT_POWERED 0x0f
33 #define MGMT_STATUS_CANCELLED 0x10
34 #define MGMT_STATUS_INVALID_INDEX 0x11
35 #define MGMT_STATUS_RFKILLED 0x12
36 #define MGMT_STATUS_ALREADY_PAIRED 0x13
37 #define MGMT_STATUS_PERMISSION_DENIED 0x14
44 #define MGMT_HDR_SIZE 6
52 struct mgmt_addr_info {
57 #define MGMT_OP_READ_VERSION 0x0001
58 struct mgmt_rp_read_version {
63 #define MGMT_OP_READ_COMMANDS 0x0002
64 struct mgmt_rp_read_commands {
65 uint16_t num_commands;
70 #define MGMT_OP_READ_INDEX_LIST 0x0003
71 struct mgmt_rp_read_index_list {
72 uint16_t num_controllers;
76 /* Reserve one extra byte for names in management messages so that they
77 * are always guaranteed to be nul-terminated */
78 #define MGMT_MAX_NAME_LENGTH (248 + 1)
79 #define MGMT_MAX_SHORT_NAME_LENGTH (10 + 1)
81 #define MGMT_SETTING_POWERED 0x00000001
82 #define MGMT_SETTING_CONNECTABLE 0x00000002
83 #define MGMT_SETTING_FAST_CONNECTABLE 0x00000004
84 #define MGMT_SETTING_DISCOVERABLE 0x00000008
85 #define MGMT_SETTING_BONDABLE 0x00000010
86 #define MGMT_SETTING_LINK_SECURITY 0x00000020
87 #define MGMT_SETTING_SSP 0x00000040
88 #define MGMT_SETTING_BREDR 0x00000080
89 #define MGMT_SETTING_HS 0x00000100
90 #define MGMT_SETTING_LE 0x00000200
91 #define MGMT_SETTING_ADVERTISING 0x00000400
92 #define MGMT_SETTING_SECURE_CONN 0x00000800
93 #define MGMT_SETTING_DEBUG_KEYS 0x00001000
94 #define MGMT_SETTING_PRIVACY 0x00002000
95 #define MGMT_SETTING_CONFIGURATION 0x00004000
96 #define MGMT_SETTING_STATIC_ADDRESS 0x00008000
97 #define MGMT_SETTING_PHY_CONFIGURATION 0x00010000
98 #define MGMT_SETTING_WIDEBAND_SPEECH 0x00020000
100 #define MGMT_OP_READ_INFO 0x0004
101 struct mgmt_rp_read_info {
104 uint16_t manufacturer;
105 uint32_t supported_settings;
106 uint32_t current_settings;
107 uint8_t dev_class[3];
108 uint8_t name[MGMT_MAX_NAME_LENGTH];
109 uint8_t short_name[MGMT_MAX_SHORT_NAME_LENGTH];
120 #define MGMT_OP_SET_POWERED 0x0005
122 #define MGMT_OP_SET_DISCOVERABLE 0x0006
123 struct mgmt_cp_set_discoverable {
128 #define MGMT_OP_SET_CONNECTABLE 0x0007
130 #define MGMT_OP_SET_FAST_CONNECTABLE 0x0008
132 #define MGMT_OP_SET_BONDABLE 0x0009
134 #define MGMT_OP_SET_LINK_SECURITY 0x000A
136 #define MGMT_OP_SET_SSP 0x000B
138 #define MGMT_OP_SET_HS 0x000C
140 #define MGMT_OP_SET_LE 0x000D
142 #define MGMT_OP_SET_DEV_CLASS 0x000E
143 struct mgmt_cp_set_dev_class {
148 #define MGMT_OP_SET_LOCAL_NAME 0x000F
149 struct mgmt_cp_set_local_name {
150 uint8_t name[MGMT_MAX_NAME_LENGTH];
151 uint8_t short_name[MGMT_MAX_SHORT_NAME_LENGTH];
154 #define MGMT_OP_ADD_UUID 0x0010
155 struct mgmt_cp_add_uuid {
160 #define MGMT_OP_REMOVE_UUID 0x0011
161 struct mgmt_cp_remove_uuid {
165 struct mgmt_link_key_info {
166 struct mgmt_addr_info addr;
172 #define MGMT_OP_LOAD_LINK_KEYS 0x0012
173 struct mgmt_cp_load_link_keys {
176 struct mgmt_link_key_info keys[0];
179 struct mgmt_ltk_info {
180 struct mgmt_addr_info addr;
189 #define MGMT_OP_LOAD_LONG_TERM_KEYS 0x0013
190 struct mgmt_cp_load_long_term_keys {
192 struct mgmt_ltk_info keys[0];
195 #define MGMT_OP_DISCONNECT 0x0014
196 struct mgmt_cp_disconnect {
197 struct mgmt_addr_info addr;
199 struct mgmt_rp_disconnect {
200 struct mgmt_addr_info addr;
203 #define MGMT_OP_GET_CONNECTIONS 0x0015
204 struct mgmt_rp_get_connections {
206 struct mgmt_addr_info addr[0];
209 #define MGMT_OP_PIN_CODE_REPLY 0x0016
210 struct mgmt_cp_pin_code_reply {
211 struct mgmt_addr_info addr;
213 uint8_t pin_code[16];
216 #define MGMT_OP_PIN_CODE_NEG_REPLY 0x0017
217 struct mgmt_cp_pin_code_neg_reply {
218 struct mgmt_addr_info addr;
221 #define MGMT_OP_SET_IO_CAPABILITY 0x0018
222 struct mgmt_cp_set_io_capability {
223 uint8_t io_capability;
226 #define MGMT_OP_PAIR_DEVICE 0x0019
227 struct mgmt_cp_pair_device {
228 struct mgmt_addr_info addr;
231 struct mgmt_rp_pair_device {
232 struct mgmt_addr_info addr;
235 #define MGMT_OP_CANCEL_PAIR_DEVICE 0x001A
237 #define MGMT_OP_UNPAIR_DEVICE 0x001B
238 struct mgmt_cp_unpair_device {
239 struct mgmt_addr_info addr;
242 struct mgmt_rp_unpair_device {
243 struct mgmt_addr_info addr;
246 #define MGMT_OP_USER_CONFIRM_REPLY 0x001C
247 struct mgmt_cp_user_confirm_reply {
248 struct mgmt_addr_info addr;
250 struct mgmt_rp_user_confirm_reply {
251 struct mgmt_addr_info addr;
254 #define MGMT_OP_USER_CONFIRM_NEG_REPLY 0x001D
256 #define MGMT_OP_USER_PASSKEY_REPLY 0x001E
257 struct mgmt_cp_user_passkey_reply {
258 struct mgmt_addr_info addr;
261 struct mgmt_rp_user_passkey_reply {
262 struct mgmt_addr_info addr;
265 #define MGMT_OP_USER_PASSKEY_NEG_REPLY 0x001F
266 struct mgmt_cp_user_passkey_neg_reply {
267 struct mgmt_addr_info addr;
270 #define MGMT_OP_READ_LOCAL_OOB_DATA 0x0020
271 struct mgmt_rp_read_local_oob_data {
278 #define MGMT_OP_ADD_REMOTE_OOB_DATA 0x0021
279 struct mgmt_cp_add_remote_oob_data {
280 struct mgmt_addr_info addr;
287 #define MGMT_OP_REMOVE_REMOTE_OOB_DATA 0x0022
288 struct mgmt_cp_remove_remote_oob_data {
289 struct mgmt_addr_info addr;
292 #define MGMT_OP_START_DISCOVERY 0x0023
293 struct mgmt_cp_start_discovery {
297 #define MGMT_OP_STOP_DISCOVERY 0x0024
298 struct mgmt_cp_stop_discovery {
302 #define MGMT_OP_CONFIRM_NAME 0x0025
303 struct mgmt_cp_confirm_name {
304 struct mgmt_addr_info addr;
307 struct mgmt_rp_confirm_name {
308 struct mgmt_addr_info addr;
311 #define MGMT_OP_BLOCK_DEVICE 0x0026
312 struct mgmt_cp_block_device {
313 struct mgmt_addr_info addr;
316 #define MGMT_OP_UNBLOCK_DEVICE 0x0027
317 struct mgmt_cp_unblock_device {
318 struct mgmt_addr_info addr;
321 #define MGMT_OP_SET_DEVICE_ID 0x0028
322 struct mgmt_cp_set_device_id {
329 #define MGMT_OP_SET_ADVERTISING 0x0029
331 #define MGMT_OP_SET_BREDR 0x002A
333 #define MGMT_OP_SET_STATIC_ADDRESS 0x002B
334 struct mgmt_cp_set_static_address {
338 #define MGMT_OP_SET_SCAN_PARAMS 0x002C
339 struct mgmt_cp_set_scan_params {
344 #define MGMT_OP_SET_SECURE_CONN 0x002D
346 #define MGMT_OP_SET_DEBUG_KEYS 0x002E
348 struct mgmt_irk_info {
349 struct mgmt_addr_info addr;
353 #define MGMT_OP_SET_PRIVACY 0x002F
354 struct mgmt_cp_set_privacy {
359 #define MGMT_OP_LOAD_IRKS 0x0030
360 struct mgmt_cp_load_irks {
362 struct mgmt_irk_info irks[0];
365 #define MGMT_OP_GET_CONN_INFO 0x0031
366 struct mgmt_cp_get_conn_info {
367 struct mgmt_addr_info addr;
369 struct mgmt_rp_get_conn_info {
370 struct mgmt_addr_info addr;
376 #define MGMT_OP_GET_CLOCK_INFO 0x0032
377 struct mgmt_cp_get_clock_info {
378 struct mgmt_addr_info addr;
380 struct mgmt_rp_get_clock_info {
381 struct mgmt_addr_info addr;
382 uint32_t local_clock;
383 uint32_t piconet_clock;
387 #define MGMT_OP_ADD_DEVICE 0x0033
388 struct mgmt_cp_add_device {
389 struct mgmt_addr_info addr;
392 struct mgmt_rp_add_device {
393 struct mgmt_addr_info addr;
396 #define MGMT_OP_REMOVE_DEVICE 0x0034
397 struct mgmt_cp_remove_device {
398 struct mgmt_addr_info addr;
400 struct mgmt_rp_remove_device {
401 struct mgmt_addr_info addr;
404 struct mgmt_conn_param {
405 struct mgmt_addr_info addr;
406 uint16_t min_interval;
407 uint16_t max_interval;
412 #define MGMT_OP_LOAD_CONN_PARAM 0x0035
413 struct mgmt_cp_load_conn_param {
414 uint16_t param_count;
415 struct mgmt_conn_param params[0];
418 #define MGMT_OP_READ_UNCONF_INDEX_LIST 0x0036
419 struct mgmt_rp_read_unconf_index_list {
420 uint16_t num_controllers;
424 #define MGMT_OPTION_EXTERNAL_CONFIG 0x00000001
425 #define MGMT_OPTION_PUBLIC_ADDRESS 0x00000002
427 #define MGMT_OP_READ_CONFIG_INFO 0x0037
428 struct mgmt_rp_read_config_info {
429 uint16_t manufacturer;
430 uint32_t supported_options;
431 uint32_t missing_options;
434 #define MGMT_OP_SET_EXTERNAL_CONFIG 0x0038
435 struct mgmt_cp_set_external_config {
439 #define MGMT_OP_SET_PUBLIC_ADDRESS 0x0039
440 struct mgmt_cp_set_public_address {
444 #define MGMT_OP_START_SERVICE_DISCOVERY 0x003A
445 struct mgmt_cp_start_service_discovery {
449 uint8_t uuids[0][16];
452 #define MGMT_OP_READ_LOCAL_OOB_EXT_DATA 0x003B
453 struct mgmt_cp_read_local_oob_ext_data {
456 struct mgmt_rp_read_local_oob_ext_data {
462 #define MGMT_OP_READ_EXT_INDEX_LIST 0x003C
463 struct mgmt_rp_read_ext_index_list {
464 uint16_t num_controllers;
472 #define MGMT_OP_READ_ADV_FEATURES 0x003D
473 struct mgmt_rp_read_adv_features {
474 uint32_t supported_flags;
475 uint8_t max_adv_data_len;
476 uint8_t max_scan_rsp_len;
477 uint8_t max_instances;
478 uint8_t num_instances;
482 #define MGMT_OP_ADD_ADVERTISING 0x003E
483 struct mgmt_cp_add_advertising {
488 uint8_t adv_data_len;
489 uint8_t scan_rsp_len;
492 struct mgmt_rp_add_advertising {
496 #define MGMT_ADV_FLAG_CONNECTABLE (1 << 0)
497 #define MGMT_ADV_FLAG_DISCOV (1 << 1)
498 #define MGMT_ADV_FLAG_LIMITED_DISCOV (1 << 2)
499 #define MGMT_ADV_FLAG_MANAGED_FLAGS (1 << 3)
500 #define MGMT_ADV_FLAG_TX_POWER (1 << 4)
501 #define MGMT_ADV_FLAG_APPEARANCE (1 << 5)
502 #define MGMT_ADV_FLAG_LOCAL_NAME (1 << 6)
503 #define MGMT_ADV_FLAG_SEC_1M (1 << 7)
504 #define MGMT_ADV_FLAG_SEC_2M (1 << 8)
505 #define MGMT_ADV_FLAG_SEC_CODED (1 << 9)
506 #define MGMT_ADV_FLAG_CAN_SET_TX_POWER (1 << 10)
507 #define MGMT_ADV_FLAG_HW_OFFLOAD (1 << 11)
508 #define MGMT_ADV_PARAM_DURATION (1 << 12)
509 #define MGMT_ADV_PARAM_TIMEOUT (1 << 13)
510 #define MGMT_ADV_PARAM_INTERVALS (1 << 14)
511 #define MGMT_ADV_PARAM_TX_POWER (1 << 15)
512 #define MGMT_ADV_PARAM_SCAN_RSP (1 << 16)
514 #define MGMT_OP_REMOVE_ADVERTISING 0x003F
515 struct mgmt_cp_remove_advertising {
518 #define MGMT_REMOVE_ADVERTISING_SIZE 1
519 struct mgmt_rp_remove_advertising {
523 #define MGMT_OP_GET_ADV_SIZE_INFO 0x0040
524 struct mgmt_cp_get_adv_size_info {
528 #define MGMT_GET_ADV_SIZE_INFO_SIZE 5
529 struct mgmt_rp_get_adv_size_info {
532 uint8_t max_adv_data_len;
533 uint8_t max_scan_rsp_len;
536 #define MGMT_OP_START_LIMITED_DISCOVERY 0x0041
538 #define MGMT_OP_READ_EXT_INFO 0x0042
539 struct mgmt_rp_read_ext_info {
542 uint16_t manufacturer;
543 uint32_t supported_settings;
544 uint32_t current_settings;
549 #define MGMT_OP_SET_APPEARANCE 0x0043
550 struct mgmt_cp_set_appearance {
554 #define MGMT_OP_GET_PHY_CONFIGURATION 0x0044
555 struct mgmt_rp_get_phy_confguration {
556 uint32_t supported_phys;
557 uint32_t configurable_phys;
558 uint32_t selected_phys;
561 #define MGMT_PHY_BR_1M_1SLOT 0x00000001
562 #define MGMT_PHY_BR_1M_3SLOT 0x00000002
563 #define MGMT_PHY_BR_1M_5SLOT 0x00000004
564 #define MGMT_PHY_EDR_2M_1SLOT 0x00000008
565 #define MGMT_PHY_EDR_2M_3SLOT 0x00000010
566 #define MGMT_PHY_EDR_2M_5SLOT 0x00000020
567 #define MGMT_PHY_EDR_3M_1SLOT 0x00000040
568 #define MGMT_PHY_EDR_3M_3SLOT 0x00000080
569 #define MGMT_PHY_EDR_3M_5SLOT 0x00000100
570 #define MGMT_PHY_LE_1M_TX 0x00000200
571 #define MGMT_PHY_LE_1M_RX 0x00000400
572 #define MGMT_PHY_LE_2M_TX 0x00000800
573 #define MGMT_PHY_LE_2M_RX 0x00001000
574 #define MGMT_PHY_LE_CODED_TX 0x00002000
575 #define MGMT_PHY_LE_CODED_RX 0x00004000
577 #define MGMT_PHY_BREDR_MASK (MGMT_PHY_BR_1M_1SLOT | MGMT_PHY_BR_1M_3SLOT | \
578 MGMT_PHY_BR_1M_5SLOT | MGMT_PHY_EDR_2M_1SLOT | \
579 MGMT_PHY_EDR_2M_3SLOT | MGMT_PHY_EDR_2M_5SLOT | \
580 MGMT_PHY_EDR_3M_1SLOT | MGMT_PHY_EDR_3M_3SLOT | \
581 MGMT_PHY_EDR_3M_5SLOT)
582 #define MGMT_PHY_LE_MASK (MGMT_PHY_LE_1M_TX | MGMT_PHY_LE_1M_RX | \
583 MGMT_PHY_LE_2M_TX | MGMT_PHY_LE_2M_RX | \
584 MGMT_PHY_LE_CODED_TX | MGMT_PHY_LE_CODED_RX)
585 #define MGMT_PHY_LE_TX_MASK (MGMT_PHY_LE_1M_TX | MGMT_PHY_LE_2M_TX | \
586 MGMT_PHY_LE_CODED_TX)
587 #define MGMT_PHY_LE_RX_MASK (MGMT_PHY_LE_1M_RX | MGMT_PHY_LE_2M_RX | \
588 MGMT_PHY_LE_CODED_RX)
590 #define MGMT_OP_SET_PHY_CONFIGURATION 0x0045
591 struct mgmt_cp_set_phy_confguration {
592 uint32_t default_phys;
593 uint32_t configurable_phys;
594 uint32_t selected_phys;
597 #define MGMT_OP_SET_BLOCKED_KEYS 0x0046
599 #define MGMT_OP_SET_WIDEBAND_SPEECH 0x0047
601 #define HCI_BLOCKED_KEY_TYPE_LINKKEY 0x00
602 #define HCI_BLOCKED_KEY_TYPE_LTK 0x01
603 #define HCI_BLOCKED_KEY_TYPE_IRK 0x02
605 struct mgmt_blocked_key_info {
610 struct mgmt_cp_set_blocked_keys {
612 struct mgmt_blocked_key_info keys[0];
615 #define MGMT_CAP_SEC_FLAGS 0x01
616 #define MGMT_CAP_MAX_ENC_KEY_SIZE 0x02
617 #define MGMT_CAP_SMP_MAX_ENC_KEY_SIZE 0x03
618 #define MGMT_CAP_LE_TX_PWR 0x04
620 #define MGMT_OP_READ_CONTROLLER_CAP 0x0048
621 #define MGMT_READ_CONTROLLER_CAP_SIZE 0
622 struct mgmt_rp_read_controller_cap {
627 #define MGMT_OP_READ_EXP_FEATURES_INFO 0x0049
628 struct mgmt_rp_read_exp_features_info {
629 uint16_t feature_count;
636 #define MGMT_OP_SET_EXP_FEATURE 0x004a
637 struct mgmt_cp_set_exp_feature {
641 #define MGMT_SET_EXP_FEATURE_SIZE 17
642 struct mgmt_rp_set_exp_feature {
647 #define MGMT_OP_READ_DEF_SYSTEM_CONFIG 0x004b
648 struct mgmt_rp_read_default_system_config {
649 uint8_t parameters[0]; /* mgmt_tlv */
652 #define MGMT_OP_SET_DEF_SYSTEM_CONFIG 0x004c
653 struct mgmt_cp_set_default_system_config {
654 uint8_t parameters[0]; /* mgmt_tlv */
657 #define MGMT_OP_READ_DEF_RUNTIME_CONFIG 0x004d
658 struct mgmt_rp_read_default_runtime_config {
659 uint8_t parameters[0]; /* mgmt_tlv */
662 #define MGMT_OP_SET_DEF_RUNTIME_CONFIG 0x004e
663 struct mgmt_cp_set_default_runtime_config {
664 uint8_t parameters[0]; /* mgmt_tlv */
667 #define MGMT_OP_GET_DEVICE_FLAGS 0x004F
668 #define MGMT_GET_DEVICE_FLAGS_SIZE 7
669 struct mgmt_cp_get_device_flags {
670 struct mgmt_addr_info addr;
672 struct mgmt_rp_get_device_flags {
673 struct mgmt_addr_info addr;
674 uint32_t supported_flags;
675 uint32_t current_flags;
678 #define DEVICE_FLAG_REMOTE_WAKEUP BIT(0)
679 #define DEVICE_FLAG_DEVICE_PRIVACY BIT(1)
681 #define MGMT_OP_SET_DEVICE_FLAGS 0x0050
682 #define MGMT_SET_DEVICE_FLAGS_SIZE 11
683 struct mgmt_cp_set_device_flags {
684 struct mgmt_addr_info addr;
685 uint32_t current_flags;
687 struct mgmt_rp_set_device_flags {
688 struct mgmt_addr_info addr;
691 #define MGMT_ADV_MONITOR_FEATURE_MASK_OR_PATTERNS (1 << 0)
693 #define MGMT_OP_READ_ADV_MONITOR_FEATURES 0x0051
694 struct mgmt_rp_read_adv_monitor_features {
695 uint32_t supported_features;
696 uint32_t enabled_features;
697 uint16_t max_num_handles;
698 uint8_t max_num_patterns;
699 uint16_t num_handles;
703 struct mgmt_adv_pattern {
710 #define MGMT_OP_ADD_ADV_PATTERNS_MONITOR 0x0052
711 struct mgmt_cp_add_adv_monitor {
712 uint8_t pattern_count;
713 struct mgmt_adv_pattern patterns[0];
715 struct mgmt_rp_add_adv_patterns_monitor {
716 uint16_t monitor_handle;
719 #define MGMT_OP_REMOVE_ADV_MONITOR 0x0053
720 struct mgmt_cp_remove_adv_monitor {
721 uint16_t monitor_handle;
723 struct mgmt_rp_remove_adv_monitor {
724 uint16_t monitor_handle;
727 #define MGMT_OP_ADD_EXT_ADV_PARAMS 0x0054
728 struct mgmt_cp_add_ext_adv_params {
733 uint32_t min_interval;
734 uint32_t max_interval;
737 struct mgmt_rp_add_ext_adv_params {
740 uint8_t max_adv_data_len;
741 uint8_t max_scan_rsp_len;
744 #define MGMT_OP_ADD_EXT_ADV_DATA 0x0055
745 struct mgmt_cp_add_ext_adv_data {
747 uint8_t adv_data_len;
748 uint8_t scan_rsp_len;
751 struct mgmt_rp_add_ext_adv_data {
755 struct mgmt_adv_rssi_thresholds {
756 int8_t high_threshold;
757 uint16_t high_threshold_timeout;
758 int8_t low_threshold;
759 uint16_t low_threshold_timeout;
760 uint8_t sampling_period;
763 #define MGMT_OP_ADD_ADV_PATTERNS_MONITOR_RSSI 0x0056
764 struct mgmt_cp_add_adv_patterns_monitor_rssi {
765 struct mgmt_adv_rssi_thresholds rssi;
766 uint8_t pattern_count;
767 struct mgmt_adv_pattern patterns[0];
770 #define MGMT_EV_CMD_COMPLETE 0x0001
771 struct mgmt_ev_cmd_complete {
777 #define MGMT_EV_CMD_STATUS 0x0002
778 struct mgmt_ev_cmd_status {
783 #define MGMT_EV_CONTROLLER_ERROR 0x0003
784 struct mgmt_ev_controller_error {
788 #define MGMT_EV_INDEX_ADDED 0x0004
790 #define MGMT_EV_INDEX_REMOVED 0x0005
792 #define MGMT_EV_NEW_SETTINGS 0x0006
794 #define MGMT_EV_CLASS_OF_DEV_CHANGED 0x0007
795 struct mgmt_ev_class_of_dev_changed {
796 uint8_t dev_class[3];
799 #define MGMT_EV_LOCAL_NAME_CHANGED 0x0008
800 struct mgmt_ev_local_name_changed {
801 uint8_t name[MGMT_MAX_NAME_LENGTH];
802 uint8_t short_name[MGMT_MAX_SHORT_NAME_LENGTH];
805 #define MGMT_EV_NEW_LINK_KEY 0x0009
806 struct mgmt_ev_new_link_key {
808 struct mgmt_link_key_info key;
811 #define MGMT_EV_NEW_LONG_TERM_KEY 0x000A
812 struct mgmt_ev_new_long_term_key {
814 struct mgmt_ltk_info key;
817 #define MGMT_EV_DEVICE_CONNECTED 0x000B
818 struct mgmt_ev_device_connected {
819 struct mgmt_addr_info addr;
825 #define MGMT_DEV_DISCONN_UNKNOWN 0x00
826 #define MGMT_DEV_DISCONN_TIMEOUT 0x01
827 #define MGMT_DEV_DISCONN_LOCAL_HOST 0x02
828 #define MGMT_DEV_DISCONN_REMOTE 0x03
829 #define MGMT_DEV_DISCONN_LOCAL_HOST_SUSPEND 0x05
831 #define MGMT_EV_DEVICE_DISCONNECTED 0x000C
832 struct mgmt_ev_device_disconnected {
833 struct mgmt_addr_info addr;
837 #define MGMT_EV_CONNECT_FAILED 0x000D
838 struct mgmt_ev_connect_failed {
839 struct mgmt_addr_info addr;
843 #define MGMT_EV_PIN_CODE_REQUEST 0x000E
844 struct mgmt_ev_pin_code_request {
845 struct mgmt_addr_info addr;
849 #define MGMT_EV_USER_CONFIRM_REQUEST 0x000F
850 struct mgmt_ev_user_confirm_request {
851 struct mgmt_addr_info addr;
852 uint8_t confirm_hint;
856 #define MGMT_EV_USER_PASSKEY_REQUEST 0x0010
857 struct mgmt_ev_user_passkey_request {
858 struct mgmt_addr_info addr;
861 #define MGMT_EV_AUTH_FAILED 0x0011
862 struct mgmt_ev_auth_failed {
863 struct mgmt_addr_info addr;
867 #define MGMT_DEV_FOUND_CONFIRM_NAME 0x01
868 #define MGMT_DEV_FOUND_LEGACY_PAIRING 0x02
869 #define MGMT_DEV_FOUND_NOT_CONNECTABLE 0x04
870 #define MGMT_DEV_FOUND_NAME_REQUEST_FAILED 0x10
872 #define MGMT_EV_DEVICE_FOUND 0x0012
873 struct mgmt_ev_device_found {
874 struct mgmt_addr_info addr;
881 #define MGMT_EV_DISCOVERING 0x0013
882 struct mgmt_ev_discovering {
887 #define MGMT_EV_DEVICE_BLOCKED 0x0014
888 struct mgmt_ev_device_blocked {
889 struct mgmt_addr_info addr;
892 #define MGMT_EV_DEVICE_UNBLOCKED 0x0015
893 struct mgmt_ev_device_unblocked {
894 struct mgmt_addr_info addr;
897 #define MGMT_EV_DEVICE_UNPAIRED 0x0016
898 struct mgmt_ev_device_unpaired {
899 struct mgmt_addr_info addr;
902 #define MGMT_EV_PASSKEY_NOTIFY 0x0017
903 struct mgmt_ev_passkey_notify {
904 struct mgmt_addr_info addr;
909 #define MGMT_EV_NEW_IRK 0x0018
910 struct mgmt_ev_new_irk {
913 struct mgmt_irk_info key;
916 struct mgmt_csrk_info {
917 struct mgmt_addr_info addr;
922 #define MGMT_EV_NEW_CSRK 0x0019
923 struct mgmt_ev_new_csrk {
925 struct mgmt_csrk_info key;
928 #define MGMT_EV_DEVICE_ADDED 0x001a
929 struct mgmt_ev_device_added {
930 struct mgmt_addr_info addr;
934 #define MGMT_EV_DEVICE_REMOVED 0x001b
935 struct mgmt_ev_device_removed {
936 struct mgmt_addr_info addr;
939 #define MGMT_EV_NEW_CONN_PARAM 0x001c
940 struct mgmt_ev_new_conn_param {
941 struct mgmt_addr_info addr;
943 uint16_t min_interval;
944 uint16_t max_interval;
949 #define MGMT_EV_UNCONF_INDEX_ADDED 0x001d
951 #define MGMT_EV_UNCONF_INDEX_REMOVED 0x001e
953 #define MGMT_EV_NEW_CONFIG_OPTIONS 0x001f
955 #define MGMT_EV_EXT_INDEX_ADDED 0x0020
956 struct mgmt_ev_ext_index_added {
961 #define MGMT_EV_EXT_INDEX_REMOVED 0x0021
962 struct mgmt_ev_ext_index_removed {
967 #define MGMT_EV_LOCAL_OOB_DATA_UPDATED 0x0022
968 struct mgmt_ev_local_oob_data_updated {
974 #define MGMT_EV_ADVERTISING_ADDED 0x0023
975 struct mgmt_ev_advertising_added {
979 #define MGMT_EV_ADVERTISING_REMOVED 0x0024
980 struct mgmt_ev_advertising_removed {
984 #define MGMT_EV_EXT_INFO_CHANGED 0x0025
985 struct mgmt_ev_ext_info_changed {
990 #define MGMT_EV_PHY_CONFIGURATION_CHANGED 0x0026
991 struct mgmt_ev_phy_configuration_changed {
992 uint16_t selected_phys;
995 #define MGMT_EV_EXP_FEATURE_CHANGE 0x0027
996 struct mgmt_ev_exp_feature_changed {
1001 #define MGMT_EV_DEVICE_FLAGS_CHANGED 0x002a
1002 struct mgmt_ev_device_flags_changed {
1003 struct mgmt_addr_info addr;
1004 uint32_t supported_flags;
1005 uint32_t current_flags;
1008 #define MGMT_EV_ADV_MONITOR_ADDED 0x002b
1009 struct mgmt_ev_adv_monitor_added {
1010 uint16_t monitor_handle;
1013 #define MGMT_EV_ADV_MONITOR_REMOVED 0x002c
1014 struct mgmt_ev_adv_monitor_removed {
1015 uint16_t monitor_handle;
1018 #define MGMT_EV_CONTROLLER_SUSPEND 0x002d
1019 struct mgmt_ev_controller_suspend {
1020 uint8_t suspend_state;
1023 #define MGMT_EV_CONTROLLER_RESUME 0x002e
1024 struct mgmt_ev_controller_resume {
1025 struct mgmt_addr_info addr;
1026 uint8_t wake_reason;
1029 #define MGMT_EV_ADV_MONITOR_DEVICE_FOUND 0x002f
1030 struct mgmt_ev_adv_monitor_device_found {
1031 uint16_t monitor_handle;
1032 struct mgmt_addr_info addr;
1035 uint16_t ad_data_len;
1039 #define MGMT_EV_ADV_MONITOR_DEVICE_LOST 0x0030
1040 struct mgmt_ev_adv_monitor_device_lost {
1041 uint16_t monitor_handle;
1042 struct mgmt_addr_info addr;
1045 static const char *mgmt_op[] = {
1050 "Read Controller Info",
1054 "Set Fast Connectable", /* 0x0008 */
1056 "Set Link Security",
1057 "Set Secure Simple Pairing",
1062 "Add UUID", /* 0x0010 */
1065 "Load Long Term Keys",
1069 "PIN Code Neg Reply",
1070 "Set IO Capability", /* 0x0018 */
1072 "Cancel Pair Device",
1074 "User Confirm Reply",
1075 "User Confirm Neg Reply",
1076 "User Passkey Reply",
1077 "User Passkey Neg Reply",
1078 "Read Local OOB Data", /* 0x0020 */
1079 "Add Remote OOB Data",
1080 "Remove Remove OOB Data",
1086 "Set Device ID", /* 0x0028 */
1089 "Set Static Address",
1090 "Set Scan Parameters",
1091 "Set Secure Connections",
1094 "Load Identity Resolving Keys", /* 0x0030 */
1095 "Get Connection Information",
1096 "Get Clock Information",
1099 "Load Connection Parameters",
1100 "Read Unconfigured Index List",
1101 "Read Controller Configuration Information",
1102 "Set External Configuration", /* 0x0038 */
1103 "Set Public Address",
1104 "Start Service Discovery",
1105 "Read Local Out Of Band Extended Data",
1106 "Read Extended Controller Index List",
1107 "Read Advertising Features",
1109 "Remove Advertising",
1110 "Get Advertising Size Information", /* 0x0040 */
1111 "Start Limited Discovery",
1112 "Read Extended Controller Information",
1114 "Get PHY Configuration",
1115 "Set PHY Configuration",
1117 "Set Wideband Speech",
1118 "Read Controller Capabilities Information", /* 0x0048 */
1119 "Read Experimental Features Information",
1120 "Set Experimental Feature",
1121 "Read Default System Configuration",
1122 "Set Default System Configuration",
1123 "Read Default Runtime Configuration",
1124 "Set Default Runtime Configuration",
1126 "Set Device Flags", /* 0x0050 */
1127 "Read Advertisement Monitor Features",
1128 "Add Advertisement Patterns Monitor",
1129 "Remove Advertisement Monitor",
1130 "Add Extended Advertisement Parameters", /* 0x0054 */
1131 "Add Extended Advertisement Data",
1132 "Add Advertisement Patterns Monitor RSSI",
1135 static const char *mgmt_ev[] = {
1143 "Class of Device Changed",
1144 "Local Name Changed", /* 0x0008 */
1146 "New Long Term Key",
1148 "Device Disconnected",
1151 "User Confirm Request",
1152 "User Passkey Request", /* 0x0010 */
1153 "Authentication Failed",
1160 "New Identity Resolving Key", /* 0x0018 */
1161 "New Signature Resolving Key",
1164 "New Connection Parameter",
1165 "Unconfigured Index Added",
1166 "Unconfigured Index Removed",
1167 "New Configuration Options",
1168 "Extended Index Added", /* 0x0020 */
1169 "Extended Index Removed",
1170 "Local Out Of Band Extended Data Updated",
1171 "Advertising Added",
1172 "Advertising Removed",
1173 "Extended Controller Information Changed",
1174 "PHY Configuration Changed",
1175 "Experimental Feature Changed",
1176 "Default System Configuration Changed", /* 0x0028 */
1177 "Default Runtime Configuration Changed",
1178 "Device Flags Changed",
1179 "Advertisement Monitor Added", /* 0x002b */
1180 "Advertisement Monitor Removed",
1181 "Controller Suspend",
1182 "Controller Resume",
1183 "Advertisement Monitor Device Found", /* 0x002f */
1184 "Advertisement Monitor Device Lost",
1187 static const char *mgmt_status[] = {
1193 "Authentication Failed",
1197 "Already Connected",
1201 "Invalid Parameters",
1206 "Blocked through rfkill",
1208 "Permission Denied",
1209 "Connection Not Established",
1212 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
1214 #define TIZEN_OP_CODE_BASE 0xff00
1215 #define TIZEN_EV_BASE 0xff00
1217 #define MGMT_MAX_ADVERTISING_LENGTH 31
1219 #define MGMT_MAX_EIR_MANUFACTURER_DATA_LENGTH 100
1221 #define MGMT_IRK_SIZE 16
1223 #define MGMT_OP_SET_ADVERTISING_PARAMS (TIZEN_OP_CODE_BASE + 0x01)
1224 struct mgmt_cp_set_advertising_params {
1225 uint16_t interval_min;
1226 uint16_t interval_max;
1227 uint8_t filter_policy;
1231 #define MGMT_OP_SET_ADVERTISING_DATA (TIZEN_OP_CODE_BASE + 0x02)
1232 struct mgmt_cp_set_advertising_data {
1233 uint8_t data[MGMT_MAX_ADVERTISING_LENGTH];
1236 #define MGMT_OP_SET_SCAN_RSP_DATA (TIZEN_OP_CODE_BASE + 0x03)
1237 struct mgmt_cp_set_scan_rsp_data {
1238 uint8_t data[MGMT_MAX_ADVERTISING_LENGTH];
1241 #define MGMT_OP_ADD_DEV_WHITE_LIST (TIZEN_OP_CODE_BASE + 0x04)
1242 struct mgmt_cp_add_dev_white_list {
1243 uint8_t bdaddr_type;
1247 #define MGMT_OP_REMOVE_DEV_FROM_WHITE_LIST (TIZEN_OP_CODE_BASE + 0x05)
1248 struct mgmt_cp_remove_dev_white_list {
1249 uint8_t bdaddr_type;
1253 #define MGMT_OP_CLEAR_DEV_WHITE_LIST (TIZEN_OP_CODE_BASE + 0x06)
1255 /* BEGIN TIZEN_Bluetooth :: RSSI monitoring */
1256 #define MGMT_OP_SET_RSSI_ENABLE (TIZEN_OP_CODE_BASE + 0x07)
1257 struct mgmt_cp_set_enable_rssi {
1265 struct mgmt_cc_rsp_enable_rssi {
1267 uint8_t le_ext_opcode;
1268 bdaddr_t bt_address;
1272 #define MGMT_OP_GET_RAW_RSSI (TIZEN_OP_CODE_BASE + 0x08)
1273 struct mgmt_cp_get_raw_rssi {
1274 bdaddr_t bt_address;
1277 struct mgmt_cc_rp_get_raw_rssi {
1281 bdaddr_t bt_address;
1284 #define MGMT_OP_SET_RSSI_DISABLE (TIZEN_OP_CODE_BASE + 0x09)
1285 struct mgmt_cp_disable_rssi {
1289 struct mgmt_cc_rp_disable_rssi {
1291 uint8_t le_ext_opcode;
1292 bdaddr_t bt_address;
1295 /* END TIZEN_Bluetooth :: RSSI monitoring */
1297 #define MGMT_OP_START_LE_DISCOVERY (TIZEN_OP_CODE_BASE + 0x0a)
1298 struct mgmt_cp_start_le_discovery {
1302 #define MGMT_OP_STOP_LE_DISCOVERY (TIZEN_OP_CODE_BASE + 0x0b)
1303 struct mgmt_cp_stop_le_discovery {
1307 #define MGMT_OP_LE_CONN_UPDATE (TIZEN_OP_CODE_BASE + 0x0d)
1308 struct mgmt_cp_le_conn_update {
1309 uint16_t interval_min;
1310 uint16_t interval_max;
1312 uint16_t supervision_time_out;
1316 #define MGMT_OP_SET_MANUFACTURER_DATA (TIZEN_OP_CODE_BASE + 0x0e)
1317 struct mgmt_cp_set_manufacturer_data {
1318 uint8_t data[MGMT_MAX_EIR_MANUFACTURER_DATA_LENGTH];
1321 #define MGMT_OP_LE_SET_SCAN_PARAMS (TIZEN_OP_CODE_BASE + 0x0f)
1322 struct mgmt_cp_le_set_scan_params {
1323 uint8_t type; /* le scan type */
1328 #define MGMT_SCO_ROLE_HANDSFREE 0x00
1329 #define MGMT_SCO_ROLE_AUDIO_GATEWAY 0x01
1330 #define MGMT_OP_SET_VOICE_SETTING (TIZEN_OP_CODE_BASE + 0x10)
1331 struct mgmt_cp_set_voice_setting {
1334 uint16_t voice_setting;
1337 #define MGMT_OP_GET_ADV_TX_POWER (TIZEN_OP_CODE_BASE + 0x11)
1338 struct mgmt_rp_get_adv_tx_power {
1339 int8_t adv_tx_power;
1342 #define MGMT_OP_ENABLE_6LOWPAN (TIZEN_OP_CODE_BASE + 0x12)
1343 struct mgmt_cp_enable_6lowpan {
1344 uint8_t enable_6lowpan;
1347 #define MGMT_OP_CONNECT_6LOWPAN (TIZEN_OP_CODE_BASE + 0x13)
1348 struct mgmt_cp_connect_6lowpan {
1349 struct mgmt_addr_info addr;
1352 #define MGMT_OP_DISCONNECT_6LOWPAN (TIZEN_OP_CODE_BASE + 0x14)
1353 struct mgmt_cp_disconnect_6lowpan {
1354 struct mgmt_addr_info addr;
1357 #define MGMT_OP_LE_READ_MAXIMUM_DATA_LENGTH (TIZEN_OP_CODE_BASE + 0x15)
1358 struct mgmt_rp_le_read_maximum_data_length {
1360 uint16_t max_tx_octets;
1361 uint16_t max_tx_time;
1362 uint16_t max_rx_octets;
1363 uint16_t max_rx_time;
1366 #define MGMT_OP_LE_WRITE_HOST_SUGGESTED_DATA_LENGTH (TIZEN_OP_CODE_BASE + 0x16)
1367 struct mgmt_cp_le_write_host_suggested_data_length {
1368 uint16_t def_tx_octets;
1369 uint16_t def_tx_time;
1372 #define MGMT_OP_LE_READ_HOST_SUGGESTED_DATA_LENGTH (TIZEN_OP_CODE_BASE + 0x17)
1373 struct mgmt_rp_le_read_host_suggested_data_length {
1375 uint16_t def_tx_octets;
1376 uint16_t def_tx_time;
1379 #define MGMT_OP_LE_SET_DATA_LENGTH (TIZEN_OP_CODE_BASE + 0x18)
1380 struct mgmt_cp_le_set_data_length {
1382 uint16_t max_tx_octets;
1383 uint16_t max_tx_time;
1385 #define MGMT_LE_SET_DATA_LENGTH_SIZE 10
1387 #define MGMT_OP_SET_IRK (TIZEN_OP_CODE_BASE + 0x19)
1388 struct mgmt_cp_set_irk {
1392 #define MGMT_OP_SET_DEV_RPA_RES_SUPPORT (TIZEN_OP_CODE_BASE + 0x1a)
1393 struct mgmt_cp_set_dev_rpa_res_support {
1394 struct mgmt_addr_info addr;
1395 uint8_t res_support;
1398 #define MGMT_OP_SET_STREAMING_MODE (TIZEN_OP_CODE_BASE + 0x1b)
1399 struct mgmt_cp_set_streaming_mode {
1400 uint8_t streaming_mode;
1404 #define MGMT_OP_GET_LE_BATCHING_BUFFER (TIZEN_OP_CODE_BASE + 0x1f)
1406 struct mgmt_rp_get_le_batching_buffer {
1411 #define MGMT_OP_SET_LE_BATCHING_PARAM (TIZEN_OP_CODE_BASE + 0x20)
1412 struct mgmt_cp_set_le_batching_param {
1418 struct mgmt_rp_set_le_batching_param {
1422 #define MGMT_OP_SET_LE_BATCHING_ENABLE (TIZEN_OP_CODE_BASE + 0x21)
1423 struct mgmt_cp_set_le_batching_enable {
1428 struct mgmt_rp_set_le_batching_enable {
1432 /* BEGIN TIZEN_Bluetooth :: name update changes */
1433 #define MGMT_EV_DEVICE_NAME_UPDATE (TIZEN_EV_BASE + 0x01)
1434 struct mgmt_ev_device_name_update {
1435 struct mgmt_addr_info addr;
1439 /* END TIZEN_Bluetooth :: name update changes */
1441 /* BEGIN TIZEN_Bluetooth :: Add handling of hardware error event */
1442 #define MGMT_EV_HARDWARE_ERROR (TIZEN_EV_BASE + 0x02)
1443 struct mgmt_ev_hardware_error{
1446 /* END TIZEN_Bluetooth */
1448 /* BEGIN TIZEN_Bluetooth :: HCI TX Timeout Error */
1449 #define MGMT_EV_TX_TIMEOUT_ERROR (TIZEN_EV_BASE + 0x03)
1450 /* END TIZEN_Bluetooth */
1452 /* BEGIN TIZEN_Bluetooth :: Add handling of RSSI Events */
1453 #define MGMT_EV_RSSI_ALERT (TIZEN_EV_BASE + 0x04)
1454 struct mgmt_ev_vendor_specific_rssi_alert {
1461 #define MGMT_EV_RAW_RSSI (TIZEN_EV_BASE + 0x05)
1463 #define MGMT_EV_RSSI_ENABLED (TIZEN_EV_BASE + 0x06)
1465 #define MGMT_EV_RSSI_DISABLED (TIZEN_EV_BASE + 0x07)
1466 /* END TIZEN_Bluetooth :: Handling of RSSI Events */
1468 /* BEGIN TIZEN_Bluetooth :: Add LE connection update Events */
1469 #define MGMT_EV_CONN_UPDATED (TIZEN_EV_BASE + 0x08)
1470 struct mgmt_ev_conn_updated {
1471 struct mgmt_addr_info addr;
1472 uint16_t conn_interval;
1473 uint16_t conn_latency;
1474 uint16_t supervision_timeout;
1477 #define MGMT_EV_CONN_UPDATE_FAILED (TIZEN_EV_BASE + 0x09)
1478 struct mgmt_ev_conn_update_failed {
1479 struct mgmt_addr_info addr;
1482 /* END TIZEN_Bluetooth :: Add LE connection update Events */
1484 #define MGMT_EV_LE_DEVICE_FOUND (TIZEN_EV_BASE + 0x0a)
1485 struct mgmt_ev_le_device_found {
1486 struct mgmt_addr_info addr;
1494 #define MGMT_EV_MULTI_ADV_STATE_CHANGED (TIZEN_EV_BASE + 0x0b)
1495 struct mgmt_ev_vendor_specific_multi_adv_state_changed {
1496 uint8_t adv_instance;
1497 uint8_t state_change_reason;
1498 int16_t connection_handle;
1501 #define MGMT_EV_6LOWPAN_CONN_STATE_CHANGED (TIZEN_EV_BASE + 0x0c)
1502 struct mgmt_ev_6lowpan_conn_state_changed {
1503 struct mgmt_addr_info addr;
1509 #define MGMT_EV_LE_DATA_LENGTH_CHANGED (TIZEN_EV_BASE + 0x0d)
1510 struct mgmt_ev_le_data_length_changed {
1511 struct mgmt_addr_info addr;
1512 int16_t max_tx_octets;
1513 int16_t max_tx_time;
1514 int16_t max_rx_octets;
1515 int16_t max_rx_time;
1518 #define MGMT_EV_RPA_CHANGED (TIZEN_EV_BASE + 0x0f)
1519 struct mgmt_ev_rpa_changed {
1523 static const char *mgmt_tizen_op[] = {
1525 "Set Advertising Parameters",
1526 "Set Advertising Data",
1527 "Set Scan Response Data",
1528 "Add Device White List",
1529 "Remove Device White List",
1530 "Clear Device White List",
1534 "Start LE Discovery",
1535 "Stop LE Discovery",
1536 "Disable LE Auto Connect",
1537 "LE Connection Update",
1538 "Set Manufacturer Data",
1539 "LE Set Scan Parameters",
1540 "Set Voice Setting",
1542 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
1543 "Enable BT 6LOWPAN",
1544 "Connect BT 6LOWPAN",
1545 "Disconnect BT 6LOWPAN"
1549 static const char *mgmt_tizen_ev[] = {
1551 "Device Name Update",
1558 "LE Connection Updated",
1559 "LE Connection Update Failed",
1561 "Multi Adv State Change",
1563 #endif /* End of TIZEN_FEATURE_BLUEZ_MODIFY */
1566 #define NELEM(x) (sizeof(x) / sizeof((x)[0]))
1569 static inline const char *mgmt_opstr(uint16_t op)
1571 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
1572 if (op >= NELEM(mgmt_op)) {
1573 uint16_t tizen_op = op - TIZEN_OP_CODE_BASE;
1576 tizen_op < NELEM(mgmt_tizen_op))
1577 return mgmt_tizen_op[tizen_op];
1579 return "<unknown opcode>";
1582 if (op >= NELEM(mgmt_op))
1583 return "<unknown opcode>";
1589 static inline const char *mgmt_evstr(uint16_t ev)
1591 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
1592 if (ev >= NELEM(mgmt_ev)) {
1593 uint16_t tizen_ev = ev - TIZEN_EV_BASE;
1596 tizen_ev < NELEM(mgmt_tizen_ev))
1597 return mgmt_tizen_ev[tizen_ev];
1599 return "<unknown event>";
1602 if (ev >= NELEM(mgmt_ev))
1603 return "<unknown event>";
1609 static inline const char *mgmt_errstr(uint8_t status)
1611 if (status >= NELEM(mgmt_status))
1612 return "<unknown status>";
1613 return mgmt_status[status];