hci_packet_parser.cc revision bf8193bc81cc077e3acd245cacbe8e3789c4b9ff
1bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson/****************************************************************************** 2bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * 3bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * Copyright (C) 2014 Google, Inc. 4bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * 5bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * Licensed under the Apache License, Version 2.0 (the "License"); 6bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * you may not use this file except in compliance with the License. 7bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * You may obtain a copy of the License at: 8bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * 9bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * http://www.apache.org/licenses/LICENSE-2.0 10bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * 11bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * Unless required by applicable law or agreed to in writing, software 12bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * distributed under the License is distributed on an "AS IS" BASIS, 13bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * See the License for the specific language governing permissions and 15bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * limitations under the License. 16bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * 17bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson ******************************************************************************/ 18bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 19bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson#include <assert.h> 20bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 21bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson#include "bt_types.h" 22bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson#include "hcimsgs.h" 23bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson#include "hci_layer.h" 24bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson#include "hci_packet_parser.h" 25bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 26bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnsonstatic void parse_read_buffer_size_response( 27bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson BT_HDR *response, 28bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson uint8_t *status_ptr, 29bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson uint16_t *data_size_ptr) { 30bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson uint8_t *stream = response->data + response->offset; 31bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson command_opcode_t opcode; 32bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 33bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson stream += 3; // skip the event header fields, and the number of hci command packets field 34bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson STREAM_TO_UINT16(opcode, stream); 35bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson STREAM_TO_UINT8(*status_ptr, stream); 36bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson STREAM_TO_UINT16(*data_size_ptr, stream); 37bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 38bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson assert(opcode == HCI_READ_BUFFER_SIZE); 39bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson} 40bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 41bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnsonstatic void parse_ble_read_buffer_size_response( 42bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson BT_HDR *response, 43bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson uint8_t *status_ptr, 44bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson uint16_t *data_size_ptr) { 45bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson uint8_t *stream = response->data + response->offset; 46bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson command_opcode_t opcode; 47bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 48bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson stream += 3; // skip the event header fields, and the number of hci command packets field 49bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson STREAM_TO_UINT16(opcode, stream); 50bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson STREAM_TO_UINT8(*status_ptr, stream); 51bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson STREAM_TO_UINT16(*data_size_ptr, stream); 52bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 53bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson assert(opcode == HCI_BLE_READ_BUFFER_SIZE); 54bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson} 55bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 56bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnsonstatic const hci_packet_parser_t interface = { 57bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson parse_read_buffer_size_response, 58bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson parse_ble_read_buffer_size_response 59bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson}; 60bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 61bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnsonconst hci_packet_parser_t *hci_packet_parser_get_interface() { 62bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson return &interface; 63bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson} 64