mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-25 16:43:28 +00:00
add support for Broadcom init scipts
This commit is contained in:
parent
8bf4bd7613
commit
0290598a44
126
chipset/bcm/bt_control_bcm.c
Normal file
126
chipset/bcm/bt_control_bcm.c
Normal file
@ -0,0 +1,126 @@
|
||||
/*
|
||||
* Copyright (C) 2009-2012 by Matthias Ringwald
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the copyright holders nor the names of
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
* 4. Any redistribution, use, or modification is done solely for
|
||||
* personal benefit and not for any commercial purpose or for
|
||||
* monetary gain.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY MATTHIAS RINGWALD AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
|
||||
* RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
* THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* Please inquire about commercial licensing options at btstack@ringwald.ch
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* bt_control_bcm.c
|
||||
*
|
||||
* Adapter to use Broadcom-based chipsets with BTstack
|
||||
*/
|
||||
|
||||
|
||||
#include "btstack-config.h"
|
||||
#include "bt_control_bcm.h"
|
||||
|
||||
#include <stddef.h> /* NULL */
|
||||
#include <stdio.h>
|
||||
#include <string.h> /* memcpy */
|
||||
|
||||
#include "bt_control.h"
|
||||
#include "debug.h"
|
||||
|
||||
// actual init script provided by separate bt_firmware_image.c from WICED SDK
|
||||
extern const uint8_t brcm_patchram_buf[];
|
||||
extern const int brcm_patch_ram_length;
|
||||
extern const char brcm_patch_version[];
|
||||
|
||||
//
|
||||
static uint32_t init_script_offset;
|
||||
static int send_download_command;
|
||||
|
||||
static int bt_control_bcm_on(void *config){
|
||||
log_info("Broadcom init script %s, len %u", brcm_patch_version, brcm_patch_ram_length);
|
||||
init_script_offset = 0;
|
||||
send_download_command = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
// UART Baud Rate control
|
||||
static int bcm_baudrate_cmd(void * config, uint32_t baudrate, uint8_t *hci_cmd_buffer){
|
||||
hci_cmd_buffer[0] = 0x36;
|
||||
hci_cmd_buffer[1] = 0xFF;
|
||||
hci_cmd_buffer[2] = 0x04;
|
||||
hci_cmd_buffer[3] = baudrate & 0xff;
|
||||
hci_cmd_buffer[4] = (baudrate >> 8) & 0xff;
|
||||
hci_cmd_buffer[5] = (baudrate >> 16) & 0xff;
|
||||
hci_cmd_buffer[6] = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static int bt_control_bcm_next_cmd(void *config, uint8_t *hci_cmd_buffer){
|
||||
|
||||
// send download firmware command
|
||||
if (send_download_command){
|
||||
send_download_command = 0;
|
||||
hci_cmd_buffer[0] = 0x2e;
|
||||
hci_cmd_buffer[1] = 0xfc;
|
||||
hci_cmd_buffer[2] = 0x00;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (init_script_offset >= brcm_patch_ram_length) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// use memcpy with pointer
|
||||
int cmd_len = 3 + brcm_patchram_buf[init_script_offset+2];
|
||||
memcpy(&hci_cmd_buffer[0], &brcm_patchram_buf[init_script_offset], cmd_len);
|
||||
init_script_offset += cmd_len;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// MARK: const structs
|
||||
|
||||
static const bt_control_t bt_control_bcm = {
|
||||
bt_control_bcm_on, // on
|
||||
NULL, // off
|
||||
NULL, // sleep
|
||||
NULL, // wake
|
||||
NULL, // valid
|
||||
NULL, // name
|
||||
/* bcm_baudrate_cmd */ NULL, // baudrate_cmd
|
||||
bt_control_bcm_next_cmd, // next_cmd
|
||||
NULL, // register_for_power_notifications
|
||||
NULL, // hw_error
|
||||
NULL, // set_bd_addr_cmd
|
||||
};
|
||||
|
||||
// MARK: public API
|
||||
bt_control_t * bt_control_bcm_instance(void){
|
||||
return (bt_control_t*) &bt_control_bcm;
|
||||
}
|
59
chipset/bcm/bt_control_bcm.h
Normal file
59
chipset/bcm/bt_control_bcm.h
Normal file
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (C) 2009-2012 by Matthias Ringwald
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the copyright holders nor the names of
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
* 4. Any redistribution, use, or modification is done solely for
|
||||
* personal benefit and not for any commercial purpose or for
|
||||
* monetary gain.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY MATTHIAS RINGWALD AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
|
||||
* RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
* THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* Please inquire about commercial licensing options at btstack@ringwald.ch
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* bt_control_bcm.h
|
||||
*
|
||||
* Adapter to use Broadcom-based chipsets with BTstack
|
||||
*/
|
||||
|
||||
#ifndef __BT_CONTROL_BCM_H
|
||||
#define __BT_CONTROL_BCM_H
|
||||
|
||||
#if defined __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
#include "bt_control.h"
|
||||
|
||||
bt_control_t * bt_control_bcm_instance(void);
|
||||
|
||||
#if defined __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // __BT_CONTROL_BCM_H
|
Loading…
x
Reference in New Issue
Block a user