{"id":19157022,"url":"https://github.com/bertrandmartel/bluetooth-hci-decoder","last_synced_at":"2025-05-07T07:46:51.907Z","repository":{"id":94807873,"uuid":"46644138","full_name":"bertrandmartel/bluetooth-hci-decoder","owner":"bertrandmartel","description":":iphone: C++ Bluetooth HCI decoder library","archived":false,"fork":false,"pushed_at":"2020-10-01T21:54:37.000Z","size":1803,"stargazers_count":27,"open_issues_count":4,"forks_count":10,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-19T20:17:43.727Z","etag":null,"topics":["bluetooth","cpp","cpp-library","hci","json"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bertrandmartel.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-11-22T03:03:27.000Z","updated_at":"2025-01-21T11:16:33.000Z","dependencies_parsed_at":"2023-03-13T16:57:06.974Z","dependency_job_id":null,"html_url":"https://github.com/bertrandmartel/bluetooth-hci-decoder","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertrandmartel%2Fbluetooth-hci-decoder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertrandmartel%2Fbluetooth-hci-decoder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertrandmartel%2Fbluetooth-hci-decoder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertrandmartel%2Fbluetooth-hci-decoder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bertrandmartel","download_url":"https://codeload.github.com/bertrandmartel/bluetooth-hci-decoder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252838792,"owners_count":21812082,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bluetooth","cpp","cpp-library","hci","json"],"created_at":"2024-11-09T08:37:01.015Z","updated_at":"2025-05-07T07:46:51.898Z","avatar_url":"https://github.com/bertrandmartel.png","language":"C++","readme":"# Bluetooth HCI decoder library #\n\n[![Build Status](https://travis-ci.org/bertrandmartel/bluetooth-hci-decoder.svg?branch=master)](https://travis-ci.org/bertrandmartel/bluetooth-hci-decoder)\n[![Download](https://api.bintray.com/packages/bertrandmartel/generic/bluetooth-hci-decoder/images/download.svg) ](https://bintray.com/bertrandmartel/generic/bluetooth-hci-decoder/_latestVersion)\n[![License](http://img.shields.io/:license-mit-blue.svg)](LICENSE.md)\n\nLightweight Bluetooth HCI decoder library parsing individually HCI frames into JSON format\n\n\u003ca href=\"CHANGELOG.md\"\u003eChangeLogs can be found here\u003c/a\u003e\n\n## Documentation\n\nhttp://bertrandmartel.github.io/bluetooth-hci-decoder\n\n## Setup \u0026 Build\n\n```\ngit submodule init\ngit submodule update\ncmake .\nmake\n```\n\nlibrary release is located under `lib` directory.\n\n## Test\n\nA small test program is provided extracting HCI frames from a btsnoop file decoded with https://github.com/bertrandmartel/btsnoop-decoder\n\nSyntax : ``./bthci-test \u003cbtsnoop_file\u003e``\n\n```\n./bin/bthci-test ./snoop_files/btsnoop_hci.log\n```\n\n##Decoding\n\n###Decode frame\n\nInput should be a single HCI frame in `std::vector\u003cchar\u003e packet` format\n\nInstanciate a `HciDecoder` class and call `IHciFrame* decode(std::vector\u003cchar\u003e packet);` :\n\n```\nHciDecoder hci_decoder;\n\nIHciFrame * frame = hci_decoder.decode(packet);\n\n```\n\n\u003ci\u003e`IHciFrame * frame` can be null if HCI frame is not currently supported\u003c/i\u003e\n\n### Architecture\n\n![architecture](img/arch.png)\n\n###List of HCI frames\n\nYou can retrieve full list of `IHciFrame` decoded with a single `HciDecoder` with `std::vector\u003cIHciFrame*\u003e getFrameList()` method : \n\n```\nstd::vector\u003cIHciFrame*\u003e frame_list = hci_decoder.getFrameList();\n\nfor (unsigned int i = 0; i  \u003c frame_list.size();i++){\n\tframe_list.at(i)-\u003eprint();\n}\n```\n\n###Complete HCI frame list in JSON array\n\nTo convert all HCI frames previously decoded to json array format, use `std::string toJson(bool beautify)` :\n\n```\nstd::string json_array_list = hci_decoder.toJson(false);\n\n```\n\u003ci\u003e`beautify` to `true` will insert indentation and linefeed to string output\u003c/i\u003e\n\n##JSON output format\n\nCommon fields for all HCI frames :\n\n* packet_type\n* parameters\n\n\u003ctable\u003e\n\t\u003ctr\u003e\n\t\t\t\u003cth\u003efield name\u003c/th\u003e\n\t\t\t\u003cth\u003esubfield name\u003c/th\u003e\n\t\t\t\u003cth\u003etype\u003c/th\u003e\n\t\t\t\u003cth\u003edescription\u003c/th\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003epacket_type\u003c/td\u003e\n\t\t\t\u003ctd\u003ecode\u003c/td\u003e\n\t\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\t\u003ctd\u003ehci packet type numeric value\u003c/td\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\t\u003ctd\u003evalue\u003c/td\u003e\n\t\t\t\u003ctd\u003estring\u003c/td\u003e\n\t\t\t\u003ctd\u003ehci packet type string value\u003c/td\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\t\u003ctd\u003eparameters\u003c/td\u003e\n\t\t\t\u003ctd\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003ejson object\u003c/td\u003e\n\t\t\t\u003ctd\u003eparameters items\u003c/td\u003e\n\t\u003c/tr\u003e\n\u003c/table\u003e\n\n###Event\n\nCommon fields for all HCI Event frames:\n\n* event_code\n* parameter_total_length\n* subevent_code (for subevent)\n\n\u003ctable\u003e\n\t\u003ctr\u003e\n\t\t\t\u003cth\u003efield name\u003c/th\u003e\n\t\t\t\u003cth\u003esubfield name\u003c/th\u003e\n\t\t\t\u003cth\u003etype\u003c/th\u003e\n\t\t\t\u003cth\u003edescription\u003c/th\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003eevent_code\u003c/td\u003e\n\t\t\t\u003ctd\u003ecode\u003c/td\u003e\n\t\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\t\u003ctd\u003eevent numeric value\u003c/td\u003e\u0001\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\t\u003ctd\u003evalue\u003c/td\u003e\n\t\t\t\u003ctd\u003estring\u003c/td\u003e\n\t\t\t\u003ctd\u003eevent string value\u003c/td\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\t\u003ctd\u003eparameter_total_length\u003c/td\u003e\n\t\t\t\u003ctd\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\t\u003ctd\u003etotal length of parameters\u003c/td\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003esubevent_code\u003c/td\u003e\n\t\t\t\u003ctd\u003ecode\u003c/td\u003e\n\t\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\t\u003ctd\u003esubevent numeric value\u003c/td\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\t\u003ctd\u003evalue\u003c/td\u003e\n\t\t\t\u003ctd\u003estring\u003c/td\u003e\n\t\t\t\u003ctd\u003esubevent string value\u003c/td\u003e\n\t\u003c/tr\u003e\n\u003c/table\u003e\n\nExample :\n\n```\n{\n\t\"event_code\" : {\n\t\t \"code\" : 14,\n\t\t \"value\" : \"HCI_EVENT_COMMAND_COMPLETE\"\n\t},\n\t\"packet_type\" : {\n\t\t \"code\" : 4,\n\t\t \"value\" : \"HCI_TYPE_EVENT\"\n\t},\n\t\"parameter_total_length\" : 4,\n\t\"parameters\" : {\n\t\t \"command_opcode\" : {\n\t\t\t\t\"ocf\" : {\n\t\t\t\t\t \"code\" : 26,\n\t\t\t\t\t \"value\" : \"HCI_CMD_OCF_CTRL_BSB_WRITE_SCAN_ENABLE_COMMAND\"\n\t\t\t\t},\n\t\t\t\t\"ogf\" : {\n\t\t\t\t\t \"code\" : 3,\n\t\t\t\t\t \"value\" : \"HCI_CMD_OGF_CONTROLLER_BASEBAND_COMMANDS\"\n\t\t\t\t}\n\t\t },\n\t\t \"num_hci_command_packets\" : 1,\n\t\t \"return_parameters\" : {\n\t\t\t\t\"values\" : {\n\t\t\t\t\t \"status\" : 0\n\t\t\t\t}\n\t\t }\n\t}\n}\n```\n\n###Command\n\nCommon fields for all HCI Command frames:\n\n* ogf (Opcode Group field)\n* ocf (Opcode Command field)\n\n\u003ctable\u003e\n\t\u003ctr\u003e\n\t\t\t\u003cth\u003efield name\u003c/th\u003e\n\t\t\t\u003cth\u003esubfield name\u003c/th\u003e\n\t\t\t\u003cth\u003etype\u003c/th\u003e\n\t\t\t\u003cth\u003edescription\u003c/th\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003eogf\u003c/td\u003e\n\t\t\t\u003ctd\u003ecode\u003c/td\u003e\n\t\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\t\u003ctd\u003eopcode group field numeric value\u003c/td\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\t\u003ctd\u003evalue\u003c/td\u003e\n\t\t\t\u003ctd\u003estring\u003c/td\u003e\n\t\t\t\u003ctd\u003eopcode group field string value\u003c/td\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003eocf\u003c/td\u003e\n\t\t\t\u003ctd\u003ecode\u003c/td\u003e\n\t\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\t\u003ctd\u003eopcode command field numeric value\u003c/td\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\t\u003ctd\u003evalue\u003c/td\u003e\n\t\t\t\u003ctd\u003estring\u003c/td\u003e\n\t\t\t\u003ctd\u003eopcode command field string value\u003c/td\u003e\n\t\u003c/tr\u003e\n\u003c/table\u003e\n\n```\n{\n\t\"ocf\" : {\n\t\t \"code\" : 8,\n\t\t \"value\" : \"HCI_CMD_OCF_LE_SET_ADVERTISING_DATA_COMMAND\"\n\t},\n\t\"ogf\" : {\n\t\t \"code\" : 8,\n\t\t \"value\" : \"HCI_CMD_OGF_LE_CONTROLLER_COMMANDS\"\n\t},\n\t\"packet_type\" : {\n\t\t \"code\" : 1,\n\t\t \"value\" : \"HCI_TYPE_COMMAND\"\n\t},\n\t\"parameter_total_length\" : 32,\n\t\"parameters\" : {\n\t\t \"advertising_data\" : [ 2, 1, 0 ],\n\t\t \"advertising_data_length\" : 3\n\t}\n}\n```\n###Model \u0026 Supported Command / Events\n\n* Packet types\n\n| Packet type string | packet type value |\n|--------------------|-------------------|\n| HCI_TYPE_UNKNOWN   | 0x00              |\n| HCI_TYPE_COMMAND   | 0x01              |\n| HCI_TYPE_ACL_DATA  | 0x02              |\n| HCI_TYPE_SCO_DATA  | 0x03              |\n| HCI_TYPE_EVENT     | 0x04              |\n\n\u003chr/\u003e\n\n* Opcode Group field\n\n| OGF string                               | OGF value |\n|--------------------|-------------------|\n| HCI_CMD_OGF_LINK_CONTROl_COMMANDS        | 0x01      |\n| HCI_CMD_OGF_LINK_POLICY_COMMANDS         | 0x02      |\n| HCI_CMD_OGF_CONTROLLER_BASEBAND_COMMANDS | 0x03      |\n| HCI_CMD_OGF_INFORMATIONAL_PARAMETERS     | 0x04      |\n| HCI_CMD_OGF_STATUS_PARAMETERS            | 0x05      |\n| HCI_CMD_OGF_TESTING_COMMANDS             | 0x06      |\n| HCI_CMD_OGF_LE_CONTROLLER_COMMANDS       | 0x08      |\n| HCI_CMD_OGF_VENDOR_SPECIFIC              | 0x3F      |\n\n\u003chr/\u003e\n\n* Informational Command\n\n| HCI Command string                                               | HCI command value |\n|--------------------|-------------------|\n| HCI_CMD_OCF_INFORMATIONAL_READ_LOCAL_SUPPORTED_COMMAND           | 0x0002 |\n| HCI_CMD_OCF_INFORMATIONAL_READ_BUFFER_SIZE_COMMAND               | 0x0005 |\n| HCI_CMD_OCF_INFORMATIONAL_READ_BD_ADDR                           | 0x0009 |\n| HCI_CMD_OCF_INFORMATIONAL_READ_LOCAL_VERSION_INFORMATION_COMMAND | 0x0001 |\n| HCI_CMD_OCF_INFORMATIONAL_READ_LOCAL_EXTENDED_FEATURES_COMMAND   | 0x0004 |\n\n\u003chr/\u003e\n\n* Le Command\n\n| HCI Command string                                               | HCI command value |\n|--------------------|-------------------|\n| HCI_CMD_OCF_LE_SET_SCAN_PARAMETERS_COMMAND                 | 0x000B |\n| HCI_CMD_OCF_LE_SET_ADVERTISING_PARAMETERS_COMMAND          | 0x0006 |\n| HCI_CMD_OCF_LE_SET_SCAN_ENABLE_COMMAND                     | 0x000C |\n| HCI_CMD_OCF_LE_CREATE_CONNECTION_COMMAND                   | 0x000D |\n| HCI_CMD_OCF_LE_CLEAR_WHITE_LIST_COMMAND                    | 0x0010 |\n| HCI_CMD_OCF_LE_READ_REMOTE_USED_FEATURES_COMMAND           | 0x0016 |\n| HCI_CMD_OCF_LE_READ_WHITE_LIST_SIZE_COMMAND                | 0x000F |\n| HCI_CMD_OCF_LE_SET_ADVERTISING_DATA_COMMAND                | 0x0008 |\n| HCI_CMD_OCF_LE_READ_BUFFER_SIZE_COMMAND                    | 0x0002 |\n| HCI_CMD_OCF_LE_READ_LOCAL_SUPPORTED_FEATURES_COMMAND       | 0x0003 |\n| HCI_CMD_OCF_LE_SET_EVENT_MASK_COMMAND                      | 0x0001 |\n| HCI_CMD_OCF_LE_SET_RANDOM_ADDRESS_COMMAND                  | 0x0005 |\n| HCI_CMD_OCF_LE_REMOVE_DEVICE_FROM_RESOLVING_LIST_COMMAND   | 0x001C |\n\n\u003chr/\u003e\n\n  * Link Control Command\n\n| HCI Command string                                                  | HCI command value |\n|--------------------|-------------------|\n| HCI_CMD_OCF_LINK_CONTROL_INQUIRY_COMMAND  | 0x0001 |\n| HCI_CMD_OCF_LINK_CONTROL_INQUIRY_CANCEL_COMMAND | 0x0002 |\n| HCI_CMD_OCF_LINK_CONTROL_DISCONNECT_COMMAND | 0x0006 |\n\n\u003chr/\u003e\n\n  * Link Policy Command\n\n| HCI Command string                                                  | HCI command value |\n|--------------------|-------------------|\n| HCI_CMD_OCF_LINK_POLICY_WRITE_DEFAULT_LINK_POLICY_SETTINGS_COMMAND  | 0x000F |\n\n\u003chr/\u003e\n\n* Baseband Control Command\n\n| HCI Command string                                               | HCI command value |\n|--------------------|-------------------|\n| HCI_CMD_OCF_CTRL_BSB_RESET_COMMAND                               | 0x0003 |\n| HCI_CMD_OCF_CTRL_BSB_SET_EVENT_FILTER_COMMAND                    | 0x0005 |\n| HCI_CMD_OCF_CTRL_BSB_WRITE_LOCAL_NAME_COMMAND                    | 0x0013 |\n| HCI_CMD_OCF_CTRL_BSB_READ_LOCAL_NAME_COMMAND                     | 0x0014 |\n| HCI_CMD_OCF_CTRL_BSB_READ_CLASS_OF_DEVICE_COMMAND                | 0x0023 |\n| HCI_CMD_OCF_CTRL_BSB_WRITE_CLASS_OF_DEVICE_COMMAND               | 0x0024 |\n| HCI_CMD_OCF_CTRL_BSB_READ_INQUIRY_MODE_COMMAND                   | 0x0044 |\n| HCI_CMD_OCF_CTRL_BSB_WRITE_INQUIRY_MODE_COMMAND                  | 0x0045 |\n| HCI_CMD_OCF_CTRL_BSB_READ_LE_HOST_SUPPORT_COMMAND                | 0x006C |\n| HCI_CMD_OCF_CTRL_BSB_WRITE_LE_HOST_SUPPORT_COMMAND               | 0x006D |\n| HCI_CMD_OCF_CTRL_BSB_WRITE_INQUIRY_SCAN_ACTIVITY_COMMAND         | 0x001E |\n| HCI_CMD_OCF_CTRL_BSB_READ_INQUIRY_SCAN_ACTIVITY_COMMAND          | 0x001D |\n| HCI_CMD_OCF_CTRL_BSB_READ_VOICE_SETTING_COMMAND                  | 0x0025 |\n| HCI_CMD_OCF_CTRL_BSB_WRITE_VOICE_SETTING_COMMAND                 | 0x0026 |\n| HCI_CMD_OCF_CTRL_BSB_READ_CURRENT_IAC_LAP_COMMAND                | 0x0039 |\n| HCI_CMD_OCF_CTRL_BSB_WRITE_CURRENT_IAC_LAP_COMMAND               | 0x003A |\n| HCI_CMD_OCF_CTRL_BSB_READ_PAGE_SCAN_TYPE_COMMAND                 | 0x0046 |\n| HCI_CMD_OCF_CTRL_BSB_WRITE_PAGE_SCAN_TYPE_COMMAND                | 0x0047 |\n| HCI_CMD_OCF_CTRL_BSB_READ_SIMPLE_PAIRING_MODE_COMMAND            | 0x0055 |\n| HCI_CMD_OCF_CTRL_BSB_WRITE_SIMPLE_PAIRING_MODE_COMMAND           | 0x0056 |\n| HCI_CMD_OCF_CTRL_BSB_READ_EXTENDED_INQUIRY_RESPONSE_COMMAND      | 0x0051 |\n| HCI_CMD_OCF_CTRL_BSB_WRITE_EXTENDED_INQUIRY_RESPONSE_COMMAND     | 0x0052 |\n| HCI_CMD_OCF_CTRL_BSB_READ_SCAN_ENABLE_COMMAND                    | 0x0019 |\n| HCI_CMD_OCF_CTRL_BSB_WRITE_SCAN_ENABLE_COMMAND                   | 0x001A |\n| HCI_CMD_OCF_CTRL_BSB_READ_INQUIRY_SCAN_TYPE_COMMAND              | 0x0042 |\n| HCI_CMD_OCF_CTRL_BSB_WRITE_INQUIRY_SCAN_TYPE_COMMAND             | 0x0043 |\n| HCI_CMD_OCF_CTRL_BSB_SET_EVENT_MASK_COMMAND                      | 0x0001 |\n| HCI_CMD_OCF_CTRL_BSB_READ_PAGE_TIMEOUT_COMMAND                   | 0x0017 |\n| HCI_CMD_OCF_CTRL_BSB_WRITE_PAGE_TIMEOUT_COMMAND                  | 0x0018 |\n| HCI_CMD_OCF_CTRL_BSB_HOST_BUFFER_SIZE_COMMAND                    | 0x0033 |\n\n\u003chr/\u003e\n\n* Events\n\n| HCI event string                                               | HCI event value |\n|--------------------|-------------------|\n| HCI_EVENT_COMMAND_COMPLETE   | 0x0E |\n| HCI_EVENT_LE_META            | 0x3E |\n| HCI_EVENT_DISCONNECTION_COMPLETE      | 0x05 |\n| HCI_EVENT_NUMBER_OF_COMPLETED_PACKET  | 0x13 |\n| HCI_EVENT_EXTENDED_INQUIRY_RESULT     | 0x2F |\n| HCI_EVENT_INQUIRY_COMPLETE            | 0x01 |\n| HCI_EVENT_COMMAND_STATUS              | 0x0F |\n\n\u003chr/\u003e\n\n* LE subevent\n\n| HCI subevent string                                               | HCI subevent value |\n|--------------------|-------------------|\n| HCI_EVENT_LE_CONNECTION_COMPLETE | 0x01 |\n| HCI_EVENT_LE_ADVERTISING_REPORT  | 0x02 |\n| HCI_EVENT_LE_CONNECTION_UPDATE_COMPLETE          | 0x03 |\n| HCI_EVENT_LE_READ_REMOTE_USED_FEATURES_COMPLETE  | 0x04 |\n| HCI_EVENT_LE_LONG_TERM_KEY_REQUEST               | 0x05 |\n| HCI_EVENT_LE_REMOTE_CONNECTION_PARAMETER_REQUEST | 0x06 |\n| HCI_EVENT_LE_DATA_LENGTH_CHANGE                  | 0x07 |\n| HCI_EVENT_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE | 0x08 |\n| HCI_EVENT_LE_GENERATE_DHKEY_COMPLETE             | 0x09 |\n| HCI_EVENT_LE_ENHANCED_CONNECTION_COMPLETE        | 0x0A |\n| HCI_EVENT_LE_DIRECT_ADVERTISING_REPORT           | 0x0B |\n\n\u003chr/\u003e\n\n* Advertising packets type\n\n| HCI subevent string                              | HCI subevent value | fully decoded |\n|--------------------------------------------------|-------------------|----------------|\n| ADVERTIZING_TYPE_UNKNOWN                                   | 0x00 |                   |\n| ADVERTIZING_TYPE_FLAGS                                     | 0x01 |  X                |\n| ADVERTIZING_TYPE_INCOMPLETE_LIST_16BIT_SERVICE_CLASS_UUID  | 0x02 |                   |\n| ADVERTIZING_TYPE_COMPLETE_LIST_16BIT_SERVICE_CLASS_UUID    | 0x03 |                   |\n| ADVERTIZING_TYPE_INCOMPLETE_LIST_32BIT_SERVICE_CLASS_UUID  | 0x04 |                   |\n| ADVERTIZING_TYPE_COMPLETE_LIST_32BIT_SERVICE_CLASS_UUID    | 0x05 |                   |\n| ADVERTIZING_TYPE_INCOMPLETE_LIST_128BIT_SERVICE_CLASS_UUID | 0x06 |                   |\n| ADVERTIZING_TYPE_COMPLETE_LIST_128BIT_SERVICE_CLASS_UUID   | 0x07 |                   |\n| ADVERTIZING_TYPE_SHORTENED_LOCAL_NAME                      | 0x08 | X                 |\n| ADVERTIZING_TYPE_COMPLETE_LOCAL_NAME                       | 0x09 | X                 |\n| ADVERTIZING_TYPE_TX_POWER_LEVEL                            | 0x0A | X                 |\n| ADVERTIZING_TYPE_CLASS_OF_DEVICE                           | 0x0D |                   |\n| ADVERTIZING_TYPE_SIMPLE_PAIRING_HASH_C                     | 0x0E |                   |\n| ADVERTIZING_TYPE_SIMPLE_PAIRING_RANDOMIZER_R               | 0x0F |                   |\n| ADVERTIZING_TYPE_DEVICE_ID                                 | 0x10 |                   |\n| ADVERTIZING_TYPE_SECURITY_MANAGER_OUT_OF_BAND_FLAGS        | 0x11 |                   |\n| ADVERTIZING_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE           | 0x12 |                   |\n| ADVERTIZING_TYPE_LIST_16BIT_SOLICITATION_UUIDS             | 0x14 |                   |\n| ADVERTIZING_TYPE_LIST_32BIT_SOLICITATION_UUIDS             | 0x1F |                   |\n| ADVERTIZING_TYPE_LIST_128BIT_SOLICITATION_UUIDS            | 0x15 |                   |\n| ADVERTIZING_TYPE_SERVICE_DATA_16BIT                        | 0x16 |                   |\n| ADVERTIZING_TYPE_SERVICE_DATA_32BIT                        | 0x20 |                   |\n| ADVERTIZING_TYPE_SERVICE_DATA_128BIT                       | 0x21 |                   |\n| ADVERTIZING_TYPE_LE_SECURE_CONNECTIONS_CONFIRMATION_VALUE  | 0x22 |                   |\n| ADVERTIZING_TYPE_LE_SECURE_CONNECTIONS_RANDOM_VALUE        | 0x23 |                   |\n| ADVERTIZING_TYPE_PUBLIC_TARGET_ADDRESS                     | 0x17 |                   |\n| ADVERTIZING_TYPE_RANDOM_TARGET_ADDRESS                     | 0x18 |                   |\n| ADVERTIZING_TYPE_APPEARANCE                                | 0x19 |                   |\n| ADVERTIZING_TYPE_ADVERTIZING_INTERVAL                      | 0x1A |                   |\n| ADVERTIZING_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS               | 0x1B |                   |\n| ADVERTIZING_TYPE_LE_ROLE                                   | 0x1C |                   |\n| ADVERTIZING_TYPE_SIMPLE_PAIRING_HASH                       | 0x1D |                   |\n| ADVERTIZING_TYPE_SIMPLE_PAIRING_RANDOMIZER                 | 0x1E |                   |\n| ADVERTIZING_TYPE_INFORMATION_DATA_3D                       | 0x3D |                   |\n| ADVERTIZING_TYPE_MANUFACTURER_SPECIFIC_DATA                | 0xFF | X                 |\n\n\u003chr/\u003e\n\n##Android integration\n\nAn example using HCI decoder library is provided in `android-example` directory.\n\nThis example will decode a snoop file extracted from raw directory, parse all HCI frames in it and display results on the screen\n\nAn update of submodule of https://github.com/bertrandmartel/btsnoop-decoder is needed to retrieve source of btsnoop decoder project. Make sure you have done a `git submodule update` before\n\nThis is an Android Studio project which can be built with gradle :\n\n```\ncd android-example\n./gradlew clean build\n```\n\n![android application](img/android.png)\n\n###Troubleshoot\n\nIf you dont use Android NDK rc10 in your `Android.mk` change std include with your own path in you android-ndk source :\n\n```\nLOCAL_C_INCLUDES := $NDK/sources/cxx-stl/gnu-libstdc++/4.8/include\n```\n\n\u003chr/\u003e\n\n##External library\n\n* json encoding with jsonccp : https://github.com/open-source-parsers/jsoncpp\n* for testing HCI library, bluetooth snoop decoder : https://github.com/bertrandmartel/btsnoop-decoder\n\n##Specifications\n\n* Bluetooth specifications v4.2 - Volume 2 - Part E Host Controller Interface Functionnal Specification https://www.bluetooth.org\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbertrandmartel%2Fbluetooth-hci-decoder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbertrandmartel%2Fbluetooth-hci-decoder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbertrandmartel%2Fbluetooth-hci-decoder/lists"}