diff options
Diffstat (limited to 'libbt')
33 files changed, 0 insertions, 3079 deletions
diff --git a/libbt/Android.mk b/libbt/Android.mk deleted file mode 100644 index 62cad46..0000000 --- a/libbt/Android.mk +++ /dev/null @@ -1,48 +0,0 @@ -$(warning "wink:device/common/libbt E") -LOCAL_PATH := $(call my-dir) - -ifneq ($(BOARD_HAVE_BLUETOOTH_BCM),) - -include $(CLEAR_VARS) - -BDROID_DIR := $(TOP_DIR)external/bluetooth/bluedroid - -LOCAL_SRC_FILES := \ - src/bt_vendor_brcm.c \ - src/hardware.c \ - src/userial_vendor.c \ - src/upio.c \ - src/conf.c - -LOCAL_C_INCLUDES += \ - $(LOCAL_PATH)/include \ - $(BDROID_DIR)/hci/include - -LOCAL_SHARED_LIBRARIES := \ - libcutils - -LOCAL_MODULE := libbt-vendor -LOCAL_MODULE_TAGS := optional -LOCAL_MODULE_CLASS := SHARED_LIBRARIES -LOCAL_MODULE_OWNER := broadcom -LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_SHARED_LIBRARIES) - -include $(LOCAL_PATH)/vnd_buildcfg.mk - -include $(BUILD_SHARED_LIBRARY) - -ifeq ($(TARGET_PRODUCT), full_maguro) - include $(LOCAL_PATH)/conf/samsung/maguro/Android.mk -endif -ifeq ($(TARGET_PRODUCT), full_crespo) - include $(LOCAL_PATH)/conf/samsung/crespo/Android.mk -endif -ifeq ($(TARGET_PRODUCT), full_crespo4g) - include $(LOCAL_PATH)/conf/samsung/crespo4g/Android.mk -endif -ifeq ($(TARGET_PRODUCT), full_wingray) - include $(LOCAL_PATH)/conf/moto/wingray/Android.mk -endif - -endif # BOARD_HAVE_BLUETOOTH_BCM -$(warning "wink:device/common/libbt X") diff --git a/libbt/conf/asus/grouper/Android.mk b/libbt/conf/asus/grouper/Android.mk deleted file mode 100644 index 974e213..0000000 --- a/libbt/conf/asus/grouper/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE := bt_vendor.conf -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT)/etc/bluetooth - -LOCAL_MODULE_TAGS := eng - -LOCAL_SRC_FILES := $(LOCAL_MODULE) - -include $(BUILD_PREBUILT) - diff --git a/libbt/conf/asus/grouper/bt_vendor.conf b/libbt/conf/asus/grouper/bt_vendor.conf deleted file mode 100644 index 94fa0cd..0000000 --- a/libbt/conf/asus/grouper/bt_vendor.conf +++ /dev/null @@ -1,5 +0,0 @@ -# UART device port where Bluetooth controller is attached -UartPort = /dev/ttyHS2 - -# Firmware patch file location -FwPatchFilePath = /etc/firmware/ diff --git a/libbt/conf/moto/wingray/Android.mk b/libbt/conf/moto/wingray/Android.mk deleted file mode 100644 index 974e213..0000000 --- a/libbt/conf/moto/wingray/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE := bt_vendor.conf -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT)/etc/bluetooth - -LOCAL_MODULE_TAGS := eng - -LOCAL_SRC_FILES := $(LOCAL_MODULE) - -include $(BUILD_PREBUILT) - diff --git a/libbt/conf/moto/wingray/bt_vendor.conf b/libbt/conf/moto/wingray/bt_vendor.conf deleted file mode 100644 index 94fa0cd..0000000 --- a/libbt/conf/moto/wingray/bt_vendor.conf +++ /dev/null @@ -1,5 +0,0 @@ -# UART device port where Bluetooth controller is attached -UartPort = /dev/ttyHS2 - -# Firmware patch file location -FwPatchFilePath = /etc/firmware/ diff --git a/libbt/conf/samsung/crespo/Android.mk b/libbt/conf/samsung/crespo/Android.mk deleted file mode 100644 index 974e213..0000000 --- a/libbt/conf/samsung/crespo/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE := bt_vendor.conf -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT)/etc/bluetooth - -LOCAL_MODULE_TAGS := eng - -LOCAL_SRC_FILES := $(LOCAL_MODULE) - -include $(BUILD_PREBUILT) - diff --git a/libbt/conf/samsung/crespo/bt_vendor.conf b/libbt/conf/samsung/crespo/bt_vendor.conf deleted file mode 100644 index 1f471ca..0000000 --- a/libbt/conf/samsung/crespo/bt_vendor.conf +++ /dev/null @@ -1,5 +0,0 @@ -# UART device port where Bluetooth controller is attached -UartPort = /dev/s3c2410_serial0 - -# Firmware patch file location -FwPatchFilePath = /vendor/firmware/ diff --git a/libbt/conf/samsung/crespo4g/Android.mk b/libbt/conf/samsung/crespo4g/Android.mk deleted file mode 100644 index 974e213..0000000 --- a/libbt/conf/samsung/crespo4g/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE := bt_vendor.conf -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT)/etc/bluetooth - -LOCAL_MODULE_TAGS := eng - -LOCAL_SRC_FILES := $(LOCAL_MODULE) - -include $(BUILD_PREBUILT) - diff --git a/libbt/conf/samsung/crespo4g/bt_vendor.conf b/libbt/conf/samsung/crespo4g/bt_vendor.conf deleted file mode 100644 index 1f471ca..0000000 --- a/libbt/conf/samsung/crespo4g/bt_vendor.conf +++ /dev/null @@ -1,5 +0,0 @@ -# UART device port where Bluetooth controller is attached -UartPort = /dev/s3c2410_serial0 - -# Firmware patch file location -FwPatchFilePath = /vendor/firmware/ diff --git a/libbt/conf/samsung/maguro/Android.mk b/libbt/conf/samsung/maguro/Android.mk deleted file mode 100644 index 974e213..0000000 --- a/libbt/conf/samsung/maguro/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE := bt_vendor.conf -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT)/etc/bluetooth - -LOCAL_MODULE_TAGS := eng - -LOCAL_SRC_FILES := $(LOCAL_MODULE) - -include $(BUILD_PREBUILT) - diff --git a/libbt/conf/samsung/maguro/bt_vendor.conf b/libbt/conf/samsung/maguro/bt_vendor.conf deleted file mode 100644 index d5547eb..0000000 --- a/libbt/conf/samsung/maguro/bt_vendor.conf +++ /dev/null @@ -1,5 +0,0 @@ -# UART device port where Bluetooth controller is attached -UartPort = /dev/ttyO1 - -# Firmware patch file location -FwPatchFilePath = /vendor/firmware/ diff --git a/libbt/include/bt_vendor_brcm.h b/libbt/include/bt_vendor_brcm.h deleted file mode 100644 index 2ecc21e..0000000 --- a/libbt/include/bt_vendor_brcm.h +++ /dev/null @@ -1,334 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2009-2012 Broadcom Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -/****************************************************************************** - * - * Filename: bt_vendor_brcm.h - * - * Description: A wrapper header file of bt_vendor_lib.h - * - * Contains definitions specific for interfacing with Broadcom - * Bluetooth chipsets - * - ******************************************************************************/ - -#ifndef BT_VENDOR_BRCM_H -#define BT_VENDOR_BRCM_H - -#include "bt_vendor_lib.h" -#include "vnd_buildcfg.h" - -/****************************************************************************** -** Constants & Macros -******************************************************************************/ - -#ifndef FALSE -#define FALSE 0 -#endif - -#ifndef TRUE -#define TRUE (!FALSE) -#endif - -#ifndef VENDOR_LIB_RUNTIME_TUNING_ENABLED -#define VENDOR_LIB_RUNTIME_TUNING_ENABLED FALSE -#endif - -/* Run-time configuration file */ -#ifndef VENDOR_LIB_CONF_FILE -#define VENDOR_LIB_CONF_FILE "/etc/bluetooth/bt_vendor.conf" -#endif - -/* Device port name where Bluetooth controller attached */ -#ifndef BLUETOOTH_UART_DEVICE_PORT -#define BLUETOOTH_UART_DEVICE_PORT "/dev/ttyO1" /* maguro */ -#endif - -/* Location of firmware patch files */ -#ifndef FW_PATCHFILE_LOCATION -#define FW_PATCHFILE_LOCATION "/vendor/firmware/" /* maguro */ -#endif - -#ifndef UART_TARGET_BAUD_RATE -#define UART_TARGET_BAUD_RATE 3000000 -#endif - -/* The millisecond delay pauses on HCI transport after firmware patches - * were downloaded. This gives some time for firmware to restart with - * patches before host attempts to send down any HCI commands. - * - * Note: It has been discovered that BCM43241B0 needs at least 200ms - * settlement delay in here. Without the delay, a Hardware Error event - * from BCM43241B0 had been seen in HCI upstream path right after the - * host sent the HCI_VSC_SET_BDADDR commad to the controller at higher - * baud. - */ -#ifndef FW_PATCH_SETTLEMENT_DELAY_MS -#define FW_PATCH_SETTLEMENT_DELAY_MS 0 -#endif - -/* sleep mode - - 0: disable - 1: UART with Host wake/BT wake out of band signals -*/ -#ifndef LPM_SLEEP_MODE -#define LPM_SLEEP_MODE 1 -#endif - -/* Host Stack Idle Threshold in 300ms or 25ms - - In sleep mode 1, this is the number of firmware loops executed with no - activity before the Host wake line is deasserted. Activity includes HCI - traffic excluding certain sleep mode commands and the presence of SCO - connections if the "Allow Host Sleep During SCO" flag is not set to 1. - Each count of this parameter is roughly equivalent to 300ms or 25ms. -*/ -#ifndef LPM_IDLE_THRESHOLD -#define LPM_IDLE_THRESHOLD 1 -#endif - -/* Host Controller Idle Threshold in 300ms or 25ms - - This is the number of firmware loops executed with no activity before the - HC is considered idle. Depending on the mode, HC may then attempt to sleep. - Activity includes HCI traffic excluding certain sleep mode commands and - the presence of ACL/SCO connections. -*/ -#ifndef LPM_HC_IDLE_THRESHOLD -#define LPM_HC_IDLE_THRESHOLD 1 -#endif - -/* BT_WAKE Polarity - 0=Active Low, 1= Active High */ -#ifndef LPM_BT_WAKE_POLARITY -#define LPM_BT_WAKE_POLARITY 1 /* maguro */ -#endif - -/* HOST_WAKE Polarity - 0=Active Low, 1= Active High */ -#ifndef LPM_HOST_WAKE_POLARITY -#define LPM_HOST_WAKE_POLARITY 1 /* maguro */ -#endif - -/* LPM_ALLOW_HOST_SLEEP_DURING_SCO - - When this flag is set to 0, the host is not allowed to sleep while - an SCO is active. In sleep mode 1, the device will keep the host - wake line asserted while an SCO is active. - When this flag is set to 1, the host can sleep while an SCO is active. - This flag should only be set to 1 if SCO traffic is directed to the PCM - interface. -*/ -#ifndef LPM_ALLOW_HOST_SLEEP_DURING_SCO -#define LPM_ALLOW_HOST_SLEEP_DURING_SCO 1 -#endif - -/* LPM_COMBINE_SLEEP_MODE_AND_LPM - - In Mode 0, always set byte 7 to 0. In sleep mode 1, device always - requires permission to sleep between scans / periodic inquiries regardless - of the setting of this byte. In sleep mode 1, if byte is set, device must - have "permission" to sleep during the low power modes of sniff, hold, and - park. If byte is not set, device can sleep without permission during these - modes. Permission to sleep in Mode 1 is obtained if the BT_WAKE signal is - not asserted. -*/ -#ifndef LPM_COMBINE_SLEEP_MODE_AND_LPM -#define LPM_COMBINE_SLEEP_MODE_AND_LPM 1 -#endif - -/* LPM_ENABLE_UART_TXD_TRI_STATE - - When set to 0, the device will not tristate its UART TX line before going - to sleep. - When set to 1, the device will tristate its UART TX line before going to - sleep. -*/ -#ifndef LPM_ENABLE_UART_TXD_TRI_STATE -#define LPM_ENABLE_UART_TXD_TRI_STATE 0 -#endif - -/* LPM_PULSED_HOST_WAKE -*/ -#ifndef LPM_PULSED_HOST_WAKE -#define LPM_PULSED_HOST_WAKE 0 -#endif - -/* LPM_IDLE_TIMEOUT_MULTIPLE - - The multiple factor of host stack idle threshold in 300ms/25ms -*/ -#ifndef LPM_IDLE_TIMEOUT_MULTIPLE -#define LPM_IDLE_TIMEOUT_MULTIPLE 10 -#endif - -/* BT_WAKE_VIA_USERIAL_IOCTL - - Use userial ioctl function to control BT_WAKE signal -*/ -#ifndef BT_WAKE_VIA_USERIAL_IOCTL -#define BT_WAKE_VIA_USERIAL_IOCTL FALSE -#endif - - -/* SCO_CFG_INCLUDED - - Do SCO configuration by default. If the firmware patch had been embedded - with desired SCO configuration, set this FALSE to bypass configuration - from host software. -*/ -#ifndef SCO_CFG_INCLUDED -#define SCO_CFG_INCLUDED TRUE -#endif - -#ifndef SCO_USE_I2S_INTERFACE -#define SCO_USE_I2S_INTERFACE FALSE -#endif - -#if (SCO_USE_I2S_INTERFACE == TRUE) -#define SCO_I2SPCM_PARAM_SIZE 4 - -/* SCO_I2SPCM_IF_MODE - 0=Disable, 1=Enable */ -#ifndef SCO_I2SPCM_IF_MODE -#define SCO_I2SPCM_IF_MODE 1 -#endif - -/* SCO_I2SPCM_IF_ROLE - 0=Slave, 1=Master */ -#ifndef SCO_I2SPCM_IF_ROLE -#define SCO_I2SPCM_IF_ROLE 1 -#endif - -/* SCO_I2SPCM_IF_SAMPLE_RATE - - 0 : 8K - 1 : 16K - 2 : 4K -*/ -#ifndef SCO_I2SPCM_IF_SAMPLE_RATE -#define SCO_I2SPCM_IF_SAMPLE_RATE 0 -#endif - -/* SCO_I2SPCM_IF_CLOCK_RATE - - 0 : 128K - 1 : 256K - 2 : 512K - 3 : 1024K - 4 : 2048K -*/ -#ifndef SCO_I2SPCM_IF_CLOCK_RATE -#define SCO_I2SPCM_IF_CLOCK_RATE 1 -#endif -#endif // SCO_USE_I2S_INTERFACE - - -#define SCO_PCM_PARAM_SIZE 5 - -/* SCO_PCM_ROUTING - - 0 : PCM - 1 : Transport - 2 : Codec - 3 : I2S -*/ -#ifndef SCO_PCM_ROUTING -#define SCO_PCM_ROUTING 0 -#endif - -/* SCO_PCM_IF_CLOCK_RATE - - 0 : 128K - 1 : 256K - 2 : 512K - 3 : 1024K - 4 : 2048K -*/ -#ifndef SCO_PCM_IF_CLOCK_RATE -#define SCO_PCM_IF_CLOCK_RATE 4 -#endif - -/* SCO_PCM_IF_FRAME_TYPE - 0=Short, 1=Long */ -#ifndef SCO_PCM_IF_FRAME_TYPE -#define SCO_PCM_IF_FRAME_TYPE 0 -#endif - -/* SCO_PCM_IF_SYNC_MODE - 0=Slave, 1=Master */ -#ifndef SCO_PCM_IF_SYNC_MODE -#define SCO_PCM_IF_SYNC_MODE 0 -#endif - -/* SCO_PCM_IF_CLOCK_MODE - 0=Slave, 1=Master */ -#ifndef SCO_PCM_IF_CLOCK_MODE -#define SCO_PCM_IF_CLOCK_MODE 0 -#endif - -#define PCM_DATA_FORMAT_PARAM_SIZE 5 - -/* PCM_DATA_FMT_SHIFT_MODE - - 0 : MSB first - 1 : LSB first -*/ -#ifndef PCM_DATA_FMT_SHIFT_MODE -#define PCM_DATA_FMT_SHIFT_MODE 0 -#endif - -/* PCM_DATA_FMT_FILL_BITS - - Specifies the value with which to fill unused bits - if Fill_Method is set to programmable -*/ -#ifndef PCM_DATA_FMT_FILL_BITS -#define PCM_DATA_FMT_FILL_BITS 0 -#endif - -/* PCM_DATA_FMT_FILL_METHOD - - 0 : 0's - 1 : 1's - 2 : Signed - 3 : Programmable -*/ -#ifndef PCM_DATA_FMT_FILL_METHOD -#define PCM_DATA_FMT_FILL_METHOD 3 -#endif - -/* PCM_DATA_FMT_FILL_NUM - - Specifies the number of bits to be filled -*/ -#ifndef PCM_DATA_FMT_FILL_NUM -#define PCM_DATA_FMT_FILL_NUM 3 -#endif - -/* PCM_DATA_FMT_JUSTIFY_MODE - - 0 : Left justify (fill data shifted out last) - 1 : Right justify (fill data shifted out first) -*/ -#ifndef PCM_DATA_FMT_JUSTIFY_MODE -#define PCM_DATA_FMT_JUSTIFY_MODE 0 -#endif - -/****************************************************************************** -** Extern variables and functions -******************************************************************************/ - -extern bt_vendor_callbacks_t *bt_vendor_cbacks; - -#endif /* BT_VENDOR_BRCM_H */ - diff --git a/libbt/include/upio.h b/libbt/include/upio.h deleted file mode 100644 index 32920e6..0000000 --- a/libbt/include/upio.h +++ /dev/null @@ -1,106 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2009-2012 Broadcom Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -/****************************************************************************** - * - * Filename: upio.h - * - * Description: Contains definitions used for I/O controls - * - ******************************************************************************/ - -#ifndef UPIO_H -#define UPIO_H - -/****************************************************************************** -** Constants & Macros -******************************************************************************/ - -#define UPIO_BT_POWER_OFF 0 -#define UPIO_BT_POWER_ON 1 - -/* UPIO signals */ -enum { - UPIO_BT_WAKE = 0, - UPIO_HOST_WAKE, - UPIO_MAX_COUNT -}; - -/* UPIO assertion/deassertion */ -enum { - UPIO_UNKNOWN = 0, - UPIO_DEASSERT, - UPIO_ASSERT -}; - -/****************************************************************************** -** Extern variables and functions -******************************************************************************/ - -/****************************************************************************** -** Functions -******************************************************************************/ - -/******************************************************************************* -** -** Function upio_init -** -** Description Initialization -** -** Returns None -** -*******************************************************************************/ -void upio_init(void); - -/******************************************************************************* -** -** Function upio_cleanup -** -** Description Clean up -** -** Returns None -** -*******************************************************************************/ -void upio_cleanup(void); - -/******************************************************************************* -** -** Function upio_set_bluetooth_power -** -** Description Interact with low layer driver to set Bluetooth power -** on/off. -** -** Returns 0 : SUCCESS or Not-Applicable -** <0 : ERROR -** -*******************************************************************************/ -int upio_set_bluetooth_power(int on); - -/******************************************************************************* -** -** Function upio_set -** -** Description Set i/o based on polarity -** -** Returns None -** -*******************************************************************************/ -void upio_set(uint8_t pio, uint8_t action, uint8_t polarity); - -#endif /* UPIO_H */ - diff --git a/libbt/include/userial_vendor.h b/libbt/include/userial_vendor.h deleted file mode 100644 index 8e8b84f..0000000 --- a/libbt/include/userial_vendor.h +++ /dev/null @@ -1,175 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2009-2012 Broadcom Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -/****************************************************************************** - * - * Filename: userial_vendor.h - * - * Description: Contains vendor-specific definitions used in serial port - * controls - * - ******************************************************************************/ - -#ifndef USERIAL_VENDOR_H -#define USERIAL_VENDOR_H - -#include "bt_vendor_brcm.h" -#include "userial.h" - -/****************************************************************************** -** Constants & Macros -******************************************************************************/ - -/**** baud rates ****/ -#define USERIAL_BAUD_300 0 -#define USERIAL_BAUD_600 1 -#define USERIAL_BAUD_1200 2 -#define USERIAL_BAUD_2400 3 -#define USERIAL_BAUD_9600 4 -#define USERIAL_BAUD_19200 5 -#define USERIAL_BAUD_57600 6 -#define USERIAL_BAUD_115200 7 -#define USERIAL_BAUD_230400 8 -#define USERIAL_BAUD_460800 9 -#define USERIAL_BAUD_921600 10 -#define USERIAL_BAUD_1M 11 -#define USERIAL_BAUD_1_5M 12 -#define USERIAL_BAUD_2M 13 -#define USERIAL_BAUD_3M 14 -#define USERIAL_BAUD_4M 15 -#define USERIAL_BAUD_AUTO 16 - -/**** Data Format ****/ -/* Stop Bits */ -#define USERIAL_STOPBITS_1 1 -#define USERIAL_STOPBITS_1_5 (1<<1) -#define USERIAL_STOPBITS_2 (1<<2) - -/* Parity Bits */ -#define USERIAL_PARITY_NONE (1<<3) -#define USERIAL_PARITY_EVEN (1<<4) -#define USERIAL_PARITY_ODD (1<<5) - -/* Data Bits */ -#define USERIAL_DATABITS_5 (1<<6) -#define USERIAL_DATABITS_6 (1<<7) -#define USERIAL_DATABITS_7 (1<<8) -#define USERIAL_DATABITS_8 (1<<9) - - -#if (BT_WAKE_VIA_USERIAL_IOCTL==TRUE) -/* These are the ioctl values used for bt_wake ioctl via UART driver. you may - * need to redefine them on you platform! - * Logically they need to be unique and not colide with existing uart ioctl's. - */ -#ifndef USERIAL_IOCTL_BT_WAKE_ASSERT -#define USERIAL_IOCTL_BT_WAKE_ASSERT 0x8003 -#endif -#ifndef USERIAL_IOCTL_BT_WAKE_DEASSERT -#define USERIAL_IOCTL_BT_WAKE_DEASSERT 0x8004 -#endif -#ifndef USERIAL_IOCTL_BT_WAKE_GET_ST -#define USERIAL_IOCTL_BT_WAKE_GET_ST 0x8005 -#endif -#endif // (BT_WAKE_VIA_USERIAL_IOCTL==TRUE) - -/****************************************************************************** -** Type definitions -******************************************************************************/ - -/* Structure used to configure serial port during open */ -typedef struct -{ - uint16_t fmt; /* Data format */ - uint8_t baud; /* Baud rate */ -} tUSERIAL_CFG; - -typedef enum { -#if (BT_WAKE_VIA_USERIAL_IOCTL==TRUE) - USERIAL_OP_ASSERT_BT_WAKE, - USERIAL_OP_DEASSERT_BT_WAKE, - USERIAL_OP_GET_BT_WAKE_STATE, -#endif - USERIAL_OP_NOP, -} userial_vendor_ioctl_op_t; - -/****************************************************************************** -** Extern variables and functions -******************************************************************************/ - -/****************************************************************************** -** Functions -******************************************************************************/ - -/******************************************************************************* -** -** Function userial_vendor_init -** -** Description Initialize userial vendor-specific control block -** -** Returns None -** -*******************************************************************************/ -void userial_vendor_init(void); - -/******************************************************************************* -** -** Function userial_vendor_open -** -** Description Open the serial port with the given configuration -** -** Returns device fd -** -*******************************************************************************/ -int userial_vendor_open(tUSERIAL_CFG *p_cfg); - -/******************************************************************************* -** -** Function userial_vendor_close -** -** Description Conduct vendor-specific close work -** -** Returns None -** -*******************************************************************************/ -void userial_vendor_close(void); - -/******************************************************************************* -** -** Function userial_vendor_set_baud -** -** Description Set new baud rate -** -** Returns None -** -*******************************************************************************/ -void userial_vendor_set_baud(uint8_t userial_baud); - -/******************************************************************************* -** -** Function userial_vendor_ioctl -** -** Description ioctl inteface -** -** Returns None -** -*******************************************************************************/ -void userial_vendor_ioctl(userial_vendor_ioctl_op_t op, void *p_data); - -#endif /* USERIAL_VENDOR_H */ - diff --git a/libbt/include/vnd_crespo.txt b/libbt/include/vnd_crespo.txt deleted file mode 100644 index 3596b6f..0000000 --- a/libbt/include/vnd_crespo.txt +++ /dev/null @@ -1,9 +0,0 @@ -BLUETOOTH_UART_DEVICE_PORT = "/dev/s3c2410_serial0" -FW_PATCHFILE_LOCATION = "/vendor/firmware/" -BT_WAKE_VIA_USERIAL_IOCTL = TRUE -LPM_IDLE_TIMEOUT_MULTIPLE = 5 -SCO_PCM_IF_CLOCK_RATE = 0 -BTVND_DBG = FALSE -BTHW_DBG = TRUE -VNDUSERIAL_DBG = FALSE -UPIO_DBG = FALSE diff --git a/libbt/include/vnd_crespo4g.txt b/libbt/include/vnd_crespo4g.txt deleted file mode 100644 index 3596b6f..0000000 --- a/libbt/include/vnd_crespo4g.txt +++ /dev/null @@ -1,9 +0,0 @@ -BLUETOOTH_UART_DEVICE_PORT = "/dev/s3c2410_serial0" -FW_PATCHFILE_LOCATION = "/vendor/firmware/" -BT_WAKE_VIA_USERIAL_IOCTL = TRUE -LPM_IDLE_TIMEOUT_MULTIPLE = 5 -SCO_PCM_IF_CLOCK_RATE = 0 -BTVND_DBG = FALSE -BTHW_DBG = TRUE -VNDUSERIAL_DBG = FALSE -UPIO_DBG = FALSE diff --git a/libbt/include/vnd_generic.txt b/libbt/include/vnd_generic.txt deleted file mode 100644 index 43e790c..0000000 --- a/libbt/include/vnd_generic.txt +++ /dev/null @@ -1,9 +0,0 @@ -BLUETOOTH_UART_DEVICE_PORT = "/dev/ttyO1" -FW_PATCHFILE_LOCATION = "/vendor/firmware/" -BT_WAKE_VIA_USERIAL_IOCTL = TRUE -LPM_IDLE_TIMEOUT_MULTIPLE = 5 -SCO_USE_I2S_INTERFACE = TRUE -BTVND_DBG = FALSE -BTHW_DBG = TRUE -VNDUSERIAL_DBG = FALSE -UPIO_DBG = FALSE diff --git a/libbt/include/vnd_generic_x86.txt b/libbt/include/vnd_generic_x86.txt deleted file mode 100644 index 43e790c..0000000 --- a/libbt/include/vnd_generic_x86.txt +++ /dev/null @@ -1,9 +0,0 @@ -BLUETOOTH_UART_DEVICE_PORT = "/dev/ttyO1" -FW_PATCHFILE_LOCATION = "/vendor/firmware/" -BT_WAKE_VIA_USERIAL_IOCTL = TRUE -LPM_IDLE_TIMEOUT_MULTIPLE = 5 -SCO_USE_I2S_INTERFACE = TRUE -BTVND_DBG = FALSE -BTHW_DBG = TRUE -VNDUSERIAL_DBG = FALSE -UPIO_DBG = FALSE diff --git a/libbt/include/vnd_grouper.txt b/libbt/include/vnd_grouper.txt deleted file mode 100755 index 3667e65..0000000 --- a/libbt/include/vnd_grouper.txt +++ /dev/null @@ -1,9 +0,0 @@ -BLUETOOTH_UART_DEVICE_PORT = "/dev/ttyHS2" -FW_PATCHFILE_LOCATION = "/etc/firmware/" -BT_WAKE_VIA_USERIAL_IOCTL = TRUE -LPM_IDLE_TIMEOUT_MULTIPLE = 5 -BTVND_DBG = FALSE -BTHW_DBG = TRUE -VNDUSERIAL_DBG = FALSE -UPIO_DBG = FALSE -SCO_PCM_IF_CLOCK_RATE = 2 diff --git a/libbt/include/vnd_maguro.txt b/libbt/include/vnd_maguro.txt deleted file mode 100644 index 43e790c..0000000 --- a/libbt/include/vnd_maguro.txt +++ /dev/null @@ -1,9 +0,0 @@ -BLUETOOTH_UART_DEVICE_PORT = "/dev/ttyO1" -FW_PATCHFILE_LOCATION = "/vendor/firmware/" -BT_WAKE_VIA_USERIAL_IOCTL = TRUE -LPM_IDLE_TIMEOUT_MULTIPLE = 5 -SCO_USE_I2S_INTERFACE = TRUE -BTVND_DBG = FALSE -BTHW_DBG = TRUE -VNDUSERIAL_DBG = FALSE -UPIO_DBG = FALSE diff --git a/libbt/include/vnd_mako.txt b/libbt/include/vnd_mako.txt deleted file mode 100644 index 43e790c..0000000 --- a/libbt/include/vnd_mako.txt +++ /dev/null @@ -1,9 +0,0 @@ -BLUETOOTH_UART_DEVICE_PORT = "/dev/ttyO1" -FW_PATCHFILE_LOCATION = "/vendor/firmware/" -BT_WAKE_VIA_USERIAL_IOCTL = TRUE -LPM_IDLE_TIMEOUT_MULTIPLE = 5 -SCO_USE_I2S_INTERFACE = TRUE -BTVND_DBG = FALSE -BTHW_DBG = TRUE -VNDUSERIAL_DBG = FALSE -UPIO_DBG = FALSE diff --git a/libbt/include/vnd_manta.txt b/libbt/include/vnd_manta.txt deleted file mode 100644 index 53f9542..0000000 --- a/libbt/include/vnd_manta.txt +++ /dev/null @@ -1,9 +0,0 @@ -BLUETOOTH_UART_DEVICE_PORT = "/dev/ttySAC0" -FW_PATCHFILE_LOCATION = "/vendor/firmware/" -UART_TARGET_BAUD_RATE = 921600 -BT_WAKE_VIA_USERIAL_IOCTL = TRUE -LPM_IDLE_TIMEOUT_MULTIPLE = 5 -BTVND_DBG = FALSE -BTHW_DBG = TRUE -VNDUSERIAL_DBG = FALSE -UPIO_DBG = FALSE diff --git a/libbt/include/vnd_phantasm.txt b/libbt/include/vnd_phantasm.txt deleted file mode 100644 index 43e790c..0000000 --- a/libbt/include/vnd_phantasm.txt +++ /dev/null @@ -1,9 +0,0 @@ -BLUETOOTH_UART_DEVICE_PORT = "/dev/ttyO1" -FW_PATCHFILE_LOCATION = "/vendor/firmware/" -BT_WAKE_VIA_USERIAL_IOCTL = TRUE -LPM_IDLE_TIMEOUT_MULTIPLE = 5 -SCO_USE_I2S_INTERFACE = TRUE -BTVND_DBG = FALSE -BTHW_DBG = TRUE -VNDUSERIAL_DBG = FALSE -UPIO_DBG = FALSE diff --git a/libbt/include/vnd_stingray.txt b/libbt/include/vnd_stingray.txt deleted file mode 100755 index 3667e65..0000000 --- a/libbt/include/vnd_stingray.txt +++ /dev/null @@ -1,9 +0,0 @@ -BLUETOOTH_UART_DEVICE_PORT = "/dev/ttyHS2" -FW_PATCHFILE_LOCATION = "/etc/firmware/" -BT_WAKE_VIA_USERIAL_IOCTL = TRUE -LPM_IDLE_TIMEOUT_MULTIPLE = 5 -BTVND_DBG = FALSE -BTHW_DBG = TRUE -VNDUSERIAL_DBG = FALSE -UPIO_DBG = FALSE -SCO_PCM_IF_CLOCK_RATE = 2 diff --git a/libbt/include/vnd_toro.txt b/libbt/include/vnd_toro.txt deleted file mode 100644 index 43e790c..0000000 --- a/libbt/include/vnd_toro.txt +++ /dev/null @@ -1,9 +0,0 @@ -BLUETOOTH_UART_DEVICE_PORT = "/dev/ttyO1" -FW_PATCHFILE_LOCATION = "/vendor/firmware/" -BT_WAKE_VIA_USERIAL_IOCTL = TRUE -LPM_IDLE_TIMEOUT_MULTIPLE = 5 -SCO_USE_I2S_INTERFACE = TRUE -BTVND_DBG = FALSE -BTHW_DBG = TRUE -VNDUSERIAL_DBG = FALSE -UPIO_DBG = FALSE diff --git a/libbt/include/vnd_tuna.txt b/libbt/include/vnd_tuna.txt deleted file mode 100644 index 43e790c..0000000 --- a/libbt/include/vnd_tuna.txt +++ /dev/null @@ -1,9 +0,0 @@ -BLUETOOTH_UART_DEVICE_PORT = "/dev/ttyO1" -FW_PATCHFILE_LOCATION = "/vendor/firmware/" -BT_WAKE_VIA_USERIAL_IOCTL = TRUE -LPM_IDLE_TIMEOUT_MULTIPLE = 5 -SCO_USE_I2S_INTERFACE = TRUE -BTVND_DBG = FALSE -BTHW_DBG = TRUE -VNDUSERIAL_DBG = FALSE -UPIO_DBG = FALSE diff --git a/libbt/include/vnd_wingray.txt b/libbt/include/vnd_wingray.txt deleted file mode 100755 index 3667e65..0000000 --- a/libbt/include/vnd_wingray.txt +++ /dev/null @@ -1,9 +0,0 @@ -BLUETOOTH_UART_DEVICE_PORT = "/dev/ttyHS2" -FW_PATCHFILE_LOCATION = "/etc/firmware/" -BT_WAKE_VIA_USERIAL_IOCTL = TRUE -LPM_IDLE_TIMEOUT_MULTIPLE = 5 -BTVND_DBG = FALSE -BTHW_DBG = TRUE -VNDUSERIAL_DBG = FALSE -UPIO_DBG = FALSE -SCO_PCM_IF_CLOCK_RATE = 2 diff --git a/libbt/src/bt_vendor_brcm.c b/libbt/src/bt_vendor_brcm.c deleted file mode 100644 index d17baa2..0000000 --- a/libbt/src/bt_vendor_brcm.c +++ /dev/null @@ -1,227 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2009-2012 Broadcom Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -/****************************************************************************** - * - * Filename: bt_vendor_brcm.c - * - * Description: Broadcom vendor specific library implementation - * - ******************************************************************************/ - -#define LOG_TAG "bt_vendor" - -#include <utils/Log.h> -#include "bt_vendor_brcm.h" -#include "upio.h" -#include "userial_vendor.h" - -#ifndef BTVND_DBG -#define BTVND_DBG FALSE -#endif - -#if (BTVND_DBG == TRUE) -#define BTVNDDBG(param, ...) {ALOGD(param, ## __VA_ARGS__);} -#else -#define BTVNDDBG(param, ...) {} -#endif - -/****************************************************************************** -** Externs -******************************************************************************/ - -void hw_config_start(void); -uint8_t hw_lpm_enable(uint8_t turn_on); -uint32_t hw_lpm_get_idle_timeout(void); -void hw_lpm_set_wake_state(uint8_t wake_assert); -#if (SCO_CFG_INCLUDED == TRUE) -void hw_sco_config(void); -#endif -void vnd_load_conf(const char *p_path); - -/****************************************************************************** -** Variables -******************************************************************************/ - -bt_vendor_callbacks_t *bt_vendor_cbacks = NULL; -uint8_t vnd_local_bd_addr[6]={0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - -/****************************************************************************** -** Local type definitions -******************************************************************************/ - -/****************************************************************************** -** Static Variables -******************************************************************************/ - -static const tUSERIAL_CFG userial_init_cfg = -{ - (USERIAL_DATABITS_8 | USERIAL_PARITY_NONE | USERIAL_STOPBITS_1), - USERIAL_BAUD_115200 -}; - -/****************************************************************************** -** Functions -******************************************************************************/ - -/***************************************************************************** -** -** BLUETOOTH VENDOR INTERFACE LIBRARY FUNCTIONS -** -*****************************************************************************/ - -static int init(const bt_vendor_callbacks_t* p_cb, unsigned char *local_bdaddr) -{ - ALOGI("init"); - - if (p_cb == NULL) - { - ALOGE("init failed with no user callbacks!"); - return -1; - } - -#if (VENDOR_LIB_RUNTIME_TUNING_ENABLED == TRUE) - ALOGW("*****************************************************************"); - ALOGW("*****************************************************************"); - ALOGW("** Warning - BT Vendor Lib is loaded in debug tuning mode!"); - ALOGW("**"); - ALOGW("** If this is not intentional, rebuild libbt-vendor.so "); - ALOGW("** with VENDOR_LIB_RUNTIME_TUNING_ENABLED=FALSE and "); - ALOGW("** check if any run-time tuning parameters needed to be"); - ALOGW("** carried to the build-time configuration accordingly."); - ALOGW("*****************************************************************"); - ALOGW("*****************************************************************"); -#endif - - userial_vendor_init(); - upio_init(); - - vnd_load_conf(VENDOR_LIB_CONF_FILE); - - /* store reference to user callbacks */ - bt_vendor_cbacks = (bt_vendor_callbacks_t *) p_cb; - - /* This is handed over from the stack */ - memcpy(vnd_local_bd_addr, local_bdaddr, 6); - - return 0; -} - - -/** Requested operations */ -static int op(bt_vendor_opcode_t opcode, void *param) -{ - int retval = 0; - - BTVNDDBG("op for %d", opcode); - - switch(opcode) - { - case BT_VND_OP_POWER_CTRL: - { - int *state = (int *) param; - if (*state == BT_VND_PWR_OFF) - upio_set_bluetooth_power(UPIO_BT_POWER_OFF); - else if (*state == BT_VND_PWR_ON) - upio_set_bluetooth_power(UPIO_BT_POWER_ON); - } - break; - - case BT_VND_OP_FW_CFG: - { - hw_config_start(); - } - break; - - case BT_VND_OP_SCO_CFG: - { -#if (SCO_CFG_INCLUDED == TRUE) - hw_sco_config(); -#else - retval = -1; -#endif - } - break; - - case BT_VND_OP_USERIAL_OPEN: - { - int (*fd_array)[] = (int (*)[]) param; - int fd, idx; - fd = userial_vendor_open((tUSERIAL_CFG *) &userial_init_cfg); - if (fd != -1) - { - for (idx=0; idx < CH_MAX; idx++) - (*fd_array)[idx] = fd; - - retval = 1; - } - /* retval contains numbers of open fd of HCI channels */ - } - break; - - case BT_VND_OP_USERIAL_CLOSE: - { - userial_vendor_close(); - } - break; - - case BT_VND_OP_GET_LPM_IDLE_TIMEOUT: - { - uint32_t *timeout_ms = (uint32_t *) param; - *timeout_ms = hw_lpm_get_idle_timeout(); - } - break; - - case BT_VND_OP_LPM_SET_MODE: - { - uint8_t *mode = (uint8_t *) param; - retval = hw_lpm_enable(*mode); - } - break; - - case BT_VND_OP_LPM_WAKE_SET_STATE: - { - uint8_t *state = (uint8_t *) param; - uint8_t wake_assert = (state == BT_VND_LPM_WAKE_ASSERT) ? \ - TRUE : FALSE; - - hw_lpm_set_wake_state(wake_assert); - } - break; - } - - return retval; -} - -/** Closes the interface */ -static void cleanup( void ) -{ - BTVNDDBG("cleanup"); - - upio_cleanup(); - - bt_vendor_cbacks = NULL; -} - -// Entry point of DLib -const bt_vendor_interface_t BLUETOOTH_VENDOR_LIB_INTERFACE = { - sizeof(bt_vendor_interface_t), - init, - op, - cleanup -}; diff --git a/libbt/src/conf.c b/libbt/src/conf.c deleted file mode 100644 index 39ac12e..0000000 --- a/libbt/src/conf.c +++ /dev/null @@ -1,147 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2009-2012 Broadcom Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -/****************************************************************************** - * - * Filename: conf.c - * - * Description: Contains functions to conduct run-time module configuration - * based on entries present in the .conf file - * - ******************************************************************************/ - -#define LOG_TAG "bt_vnd_conf" - -#include <utils/Log.h> -#include <string.h> -#include "bt_vendor_brcm.h" - -/****************************************************************************** -** Externs -******************************************************************************/ -int userial_set_port(char *p_conf_name, char *p_conf_value, int param); -int hw_set_patch_file_path(char *p_conf_name, char *p_conf_value, int param); -int hw_set_patch_file_name(char *p_conf_name, char *p_conf_value, int param); -#if (VENDOR_LIB_RUNTIME_TUNING_ENABLED == TRUE) -int hw_set_patch_settlement_delay(char *p_conf_name, char *p_conf_value, int param); -#endif - - -/****************************************************************************** -** Local type definitions -******************************************************************************/ - -#define CONF_COMMENT '#' -#define CONF_DELIMITERS " =\n\r\t" -#define CONF_VALUES_DELIMITERS "=\n\r\t" -#define CONF_MAX_LINE_LEN 255 - -typedef int (conf_action_t)(char *p_conf_name, char *p_conf_value, int param); - -typedef struct { - const char *conf_entry; - conf_action_t *p_action; - int param; -} conf_entry_t; - -/****************************************************************************** -** Static variables -******************************************************************************/ - -/* - * Current supported entries and corresponding action functions - */ -static const conf_entry_t conf_table[] = { - {"UartPort", userial_set_port, 0}, - {"FwPatchFilePath", hw_set_patch_file_path, 0}, - {"FwPatchFileName", hw_set_patch_file_name, 0}, -#if (VENDOR_LIB_RUNTIME_TUNING_ENABLED == TRUE) - {"FwPatchSettlementDelay", hw_set_patch_settlement_delay, 0}, -#endif - {(const char *) NULL, NULL, 0} -}; - -/***************************************************************************** -** CONF INTERFACE FUNCTIONS -*****************************************************************************/ - -/******************************************************************************* -** -** Function vnd_load_conf -** -** Description Read conf entry from p_path file one by one and call -** the corresponding config function -** -** Returns None -** -*******************************************************************************/ -void vnd_load_conf(const char *p_path) -{ - FILE *p_file; - char *p_name; - char *p_value; - conf_entry_t *p_entry; - char line[CONF_MAX_LINE_LEN+1]; /* add 1 for \0 char */ - - ALOGI("Attempt to load conf from %s", p_path); - - if ((p_file = fopen(p_path, "r")) != NULL) - { - /* read line by line */ - while (fgets(line, CONF_MAX_LINE_LEN+1, p_file) != NULL) - { - if (line[0] == CONF_COMMENT) - continue; - - p_name = strtok(line, CONF_DELIMITERS); - - if (NULL == p_name) - { - continue; - } - - p_value = strtok(NULL, CONF_DELIMITERS); - - if (NULL == p_value) - { - ALOGW("vnd_load_conf: missing value for name: %s", p_name); - continue; - } - - p_entry = (conf_entry_t *)conf_table; - - while (p_entry->conf_entry != NULL) - { - if (strcmp(p_entry->conf_entry, (const char *)p_name) == 0) - { - p_entry->p_action(p_name, p_value, p_entry->param); - break; - } - - p_entry++; - } - } - - fclose(p_file); - } - else - { - ALOGI( "vnd_load_conf file >%s< not found", p_path); - } -} - diff --git a/libbt/src/hardware.c b/libbt/src/hardware.c deleted file mode 100644 index a6868e1..0000000 --- a/libbt/src/hardware.c +++ /dev/null @@ -1,1155 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2009-2012 Broadcom Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -/****************************************************************************** - * - * Filename: hardware.c - * - * Description: Contains controller-specific functions, like - * firmware patch download - * low power mode operations - * - ******************************************************************************/ - -#define LOG_TAG "bt_hwcfg" - -#include <utils/Log.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <signal.h> -#include <time.h> -#include <errno.h> -#include <fcntl.h> -#include <dirent.h> -#include <ctype.h> -#include <cutils/properties.h> -#include <stdlib.h> -#include "bt_hci_bdroid.h" -#include "bt_vendor_brcm.h" -#include "userial.h" -#include "userial_vendor.h" -#include "upio.h" - -/****************************************************************************** -** Constants & Macros -******************************************************************************/ - -#ifndef BTHW_DBG -#define BTHW_DBG FALSE -#endif - -#if (BTHW_DBG == TRUE) -#define BTHWDBG(param, ...) {ALOGD(param, ## __VA_ARGS__);} -#else -#define BTHWDBG(param, ...) {} -#endif - -#define FW_PATCHFILE_EXTENSION ".hcd" -#define FW_PATCHFILE_EXTENSION_LEN 4 -#define FW_PATCHFILE_PATH_MAXLEN 248 /* Local_Name length of return of - HCI_Read_Local_Name */ - -#define HCI_CMD_MAX_LEN 258 - -#define HCI_RESET 0x0C03 -#define HCI_VSC_WRITE_UART_CLOCK_SETTING 0xFC45 -#define HCI_VSC_UPDATE_BAUDRATE 0xFC18 -#define HCI_READ_LOCAL_NAME 0x0C14 -#define HCI_VSC_DOWNLOAD_MINIDRV 0xFC2E -#define HCI_VSC_WRITE_BD_ADDR 0xFC01 -#define HCI_VSC_WRITE_SLEEP_MODE 0xFC27 -#define HCI_VSC_WRITE_SCO_PCM_INT_PARAM 0xFC1C -#define HCI_VSC_WRITE_PCM_DATA_FORMAT_PARAM 0xFC1E -#define HCI_VSC_WRITE_I2SPCM_INTERFACE_PARAM 0xFC6D -#define HCI_VSC_LAUNCH_RAM 0xFC4E - -#define HCI_EVT_CMD_CMPL_STATUS_RET_BYTE 5 -#define HCI_EVT_CMD_CMPL_LOCAL_NAME_STRING 6 -#define HCI_EVT_CMD_CMPL_OPCODE 3 -#define LPM_CMD_PARAM_SIZE 12 -#define UPDATE_BAUDRATE_CMD_PARAM_SIZE 6 -#define HCI_CMD_PREAMBLE_SIZE 3 -#define HCD_REC_PAYLOAD_LEN_BYTE 2 -#define BD_ADDR_LEN 6 -#define LOCAL_NAME_BUFFER_LEN 32 -#define LOCAL_BDADDR_PATH_BUFFER_LEN 256 - -#define STREAM_TO_UINT16(u16, p) {u16 = ((uint16_t)(*(p)) + (((uint16_t)(*((p) + 1))) << 8)); (p) += 2;} -#define UINT16_TO_STREAM(p, u16) {*(p)++ = (uint8_t)(u16); *(p)++ = (uint8_t)((u16) >> 8);} -#define UINT32_TO_STREAM(p, u32) {*(p)++ = (uint8_t)(u32); *(p)++ = (uint8_t)((u32) >> 8); *(p)++ = (uint8_t)((u32) >> 16); *(p)++ = (uint8_t)((u32) >> 24);} - -/****************************************************************************** -** Local type definitions -******************************************************************************/ - -/* Hardware Configuration State */ -enum { - HW_CFG_START = 1, - HW_CFG_SET_UART_CLOCK, - HW_CFG_SET_UART_BAUD_1, - HW_CFG_READ_LOCAL_NAME, - HW_CFG_DL_MINIDRIVER, - HW_CFG_DL_FW_PATCH, - HW_CFG_SET_UART_BAUD_2, - HW_CFG_SET_BD_ADDR -}; - -/* h/w config control block */ -typedef struct -{ - uint8_t state; /* Hardware configuration state */ - int fw_fd; /* FW patch file fd */ - uint8_t f_set_baud_2; /* Baud rate switch state */ - char local_chip_name[LOCAL_NAME_BUFFER_LEN]; -} bt_hw_cfg_cb_t; - -/* low power mode parameters */ -typedef struct -{ - uint8_t sleep_mode; /* 0(disable),1(UART),9(H5) */ - uint8_t host_stack_idle_threshold; /* Unit scale 300ms/25ms */ - uint8_t host_controller_idle_threshold; /* Unit scale 300ms/25ms */ - uint8_t bt_wake_polarity; /* 0=Active Low, 1= Active High */ - uint8_t host_wake_polarity; /* 0=Active Low, 1= Active High */ - uint8_t allow_host_sleep_during_sco; - uint8_t combine_sleep_mode_and_lpm; - uint8_t enable_uart_txd_tri_state; /* UART_TXD Tri-State */ - uint8_t sleep_guard_time; /* sleep guard time in 12.5ms */ - uint8_t wakeup_guard_time; /* wakeup guard time in 12.5ms */ - uint8_t txd_config; /* TXD is high in sleep state */ - uint8_t pulsed_host_wake; /* pulsed host wake if mode = 1 */ -} bt_lpm_param_t; - -/* Firmware re-launch settlement time */ -typedef struct { - const char *chipset_name; - const uint32_t delay_time; -} fw_settlement_entry_t; - - -/****************************************************************************** -** Externs -******************************************************************************/ - -void hw_config_cback(void *p_evt_buf); -extern uint8_t vnd_local_bd_addr[BD_ADDR_LEN]; - - -/****************************************************************************** -** Static variables -******************************************************************************/ - -static char fw_patchfile_path[256] = FW_PATCHFILE_LOCATION; -static char fw_patchfile_name[128] = { 0 }; -#if (VENDOR_LIB_RUNTIME_TUNING_ENABLED == TRUE) -static int fw_patch_settlement_delay = -1; -#endif - -static bt_hw_cfg_cb_t hw_cfg_cb; - -static bt_lpm_param_t lpm_param = -{ - LPM_SLEEP_MODE, - LPM_IDLE_THRESHOLD, - LPM_HC_IDLE_THRESHOLD, - LPM_BT_WAKE_POLARITY, - LPM_HOST_WAKE_POLARITY, - LPM_ALLOW_HOST_SLEEP_DURING_SCO, - LPM_COMBINE_SLEEP_MODE_AND_LPM, - LPM_ENABLE_UART_TXD_TRI_STATE, - 0, /* not applicable */ - 0, /* not applicable */ - 0, /* not applicable */ - LPM_PULSED_HOST_WAKE -}; - -#if (!defined(SCO_USE_I2S_INTERFACE) || (SCO_USE_I2S_INTERFACE == FALSE)) -static uint8_t bt_sco_param[SCO_PCM_PARAM_SIZE] = -{ - SCO_PCM_ROUTING, - SCO_PCM_IF_CLOCK_RATE, - SCO_PCM_IF_FRAME_TYPE, - SCO_PCM_IF_SYNC_MODE, - SCO_PCM_IF_CLOCK_MODE -}; - -static uint8_t bt_pcm_data_fmt_param[PCM_DATA_FORMAT_PARAM_SIZE] = -{ - PCM_DATA_FMT_SHIFT_MODE, - PCM_DATA_FMT_FILL_BITS, - PCM_DATA_FMT_FILL_METHOD, - PCM_DATA_FMT_FILL_NUM, - PCM_DATA_FMT_JUSTIFY_MODE -}; -#else -static uint8_t bt_sco_param[SCO_I2SPCM_PARAM_SIZE] = -{ - SCO_I2SPCM_IF_MODE, - SCO_I2SPCM_IF_ROLE, - SCO_I2SPCM_IF_SAMPLE_RATE, - SCO_I2SPCM_IF_CLOCK_RATE -}; -#endif - -/* - * The look-up table of recommended firmware settlement delay (milliseconds) on - * known chipsets. - */ -static const fw_settlement_entry_t fw_settlement_table[] = { - {"BCM43241", 200}, - {(const char *) NULL, 100} // Giving the generic fw settlement delay setting. -}; - -/****************************************************************************** -** Static functions -******************************************************************************/ - -/****************************************************************************** -** Controller Initialization Static Functions -******************************************************************************/ - -/******************************************************************************* -** -** Function look_up_fw_settlement_delay -** -** Description If FW_PATCH_SETTLEMENT_DELAY_MS has not been explicitly -** re-defined in the platform specific build-time configuration -** file, we will search into the look-up table for a -** recommended firmware settlement delay value. -** -** Although the settlement time might be also related to board -** configurations such as the crystal clocking speed. -** -** Returns Firmware settlement delay -** -*******************************************************************************/ -uint32_t look_up_fw_settlement_delay (void) -{ - uint32_t ret_value; - fw_settlement_entry_t *p_entry; - - if (FW_PATCH_SETTLEMENT_DELAY_MS > 0) - { - ret_value = FW_PATCH_SETTLEMENT_DELAY_MS; - } -#if (VENDOR_LIB_RUNTIME_TUNING_ENABLED == TRUE) - else if (fw_patch_settlement_delay >= 0) - { - ret_value = fw_patch_settlement_delay; - } -#endif - else - { - p_entry = (fw_settlement_entry_t *)fw_settlement_table; - - while (p_entry->chipset_name != NULL) - { - if (strstr(hw_cfg_cb.local_chip_name, p_entry->chipset_name)!=NULL) - { - break; - } - - p_entry++; - } - - ret_value = p_entry->delay_time; - } - - BTHWDBG( "Settlement delay -- %d ms", ret_value); - - return (ret_value); -} - -/******************************************************************************* -** -** Function ms_delay -** -** Description sleep unconditionally for timeout milliseconds -** -** Returns None -** -*******************************************************************************/ -void ms_delay (uint32_t timeout) -{ - struct timespec delay; - int err; - - if (timeout == 0) - return; - - delay.tv_sec = timeout / 1000; - delay.tv_nsec = 1000 * 1000 * (timeout%1000); - - /* [u]sleep can't be used because it uses SIGALRM */ - do { - err = nanosleep(&delay, &delay); - } while (err < 0 && errno ==EINTR); -} - -/******************************************************************************* -** -** Function line_speed_to_userial_baud -** -** Description helper function converts line speed number into USERIAL baud -** rate symbol -** -** Returns unit8_t (USERIAL baud symbol) -** -*******************************************************************************/ -uint8_t line_speed_to_userial_baud(uint32_t line_speed) -{ - uint8_t baud; - - if (line_speed == 4000000) - baud = USERIAL_BAUD_4M; - else if (line_speed == 3000000) - baud = USERIAL_BAUD_3M; - else if (line_speed == 2000000) - baud = USERIAL_BAUD_2M; - else if (line_speed == 1000000) - baud = USERIAL_BAUD_1M; - else if (line_speed == 921600) - baud = USERIAL_BAUD_921600; - else if (line_speed == 460800) - baud = USERIAL_BAUD_460800; - else if (line_speed == 230400) - baud = USERIAL_BAUD_230400; - else if (line_speed == 115200) - baud = USERIAL_BAUD_115200; - else if (line_speed == 57600) - baud = USERIAL_BAUD_57600; - else if (line_speed == 19200) - baud = USERIAL_BAUD_19200; - else if (line_speed == 9600) - baud = USERIAL_BAUD_9600; - else if (line_speed == 1200) - baud = USERIAL_BAUD_1200; - else if (line_speed == 600) - baud = USERIAL_BAUD_600; - else - { - ALOGE( "userial vendor: unsupported baud speed %d", line_speed); - baud = USERIAL_BAUD_115200; - } - - return baud; -} - - -/******************************************************************************* -** -** Function hw_strncmp -** -** Description Used to compare two strings in caseless -** -** Returns 0: match, otherwise: not match -** -*******************************************************************************/ -static int hw_strncmp (const char *p_str1, const char *p_str2, const int len) -{ - int i; - - if (!p_str1 || !p_str2) - return (1); - - for (i = 0; i < len; i++) - { - if (toupper(p_str1[i]) != toupper(p_str2[i])) - return (i+1); - } - - return 0; -} - -/******************************************************************************* -** -** Function hw_config_findpatch -** -** Description Search for a proper firmware patch file -** The selected firmware patch file name with full path -** will be stored in the input string parameter, i.e. -** p_chip_id_str, when returns. -** -** Returns TRUE when found the target patch file, otherwise FALSE -** -*******************************************************************************/ -static uint8_t hw_config_findpatch(char *p_chip_id_str) -{ - DIR *dirp; - struct dirent *dp; - int filenamelen; - uint8_t retval = FALSE; - - BTHWDBG("Target name = [%s]", p_chip_id_str); - - if (strlen(fw_patchfile_name)> 0) - { - /* If specific filepath and filename have been given in run-time - * configuration /etc/bluetooth/bt_vendor.conf file, we will use them - * to concatenate the filename to open rather than searching a file - * matching to chipset name in the fw_patchfile_path folder. - */ - sprintf(p_chip_id_str, "%s", fw_patchfile_path); - if (fw_patchfile_path[strlen(fw_patchfile_path)- 1] != '/') - { - strcat(p_chip_id_str, "/"); - } - strcat(p_chip_id_str, fw_patchfile_name); - - ALOGI("FW patchfile: %s", p_chip_id_str); - return TRUE; - } - - if ((dirp = opendir(fw_patchfile_path)) != NULL) - { - /* Fetch next filename in patchfile directory */ - while ((dp = readdir(dirp)) != NULL) - { - /* Check if filename starts with chip-id name */ - if ((hw_strncmp(dp->d_name, p_chip_id_str, strlen(p_chip_id_str)) \ - ) == 0) - { - /* Check if it has .hcd extenstion */ - filenamelen = strlen(dp->d_name); - if ((filenamelen >= FW_PATCHFILE_EXTENSION_LEN) && - ((hw_strncmp( - &dp->d_name[filenamelen-FW_PATCHFILE_EXTENSION_LEN], \ - FW_PATCHFILE_EXTENSION, \ - FW_PATCHFILE_EXTENSION_LEN) \ - ) == 0)) - { - ALOGI("Found patchfile: %s/%s", \ - fw_patchfile_path, dp->d_name); - - /* Make sure length does not exceed maximum */ - if ((filenamelen + strlen(fw_patchfile_path)) > \ - FW_PATCHFILE_PATH_MAXLEN) - { - ALOGE("Invalid patchfile name (too long)"); - } - else - { - memset(p_chip_id_str, 0, FW_PATCHFILE_PATH_MAXLEN); - /* Found patchfile. Store location and name */ - strcpy(p_chip_id_str, fw_patchfile_path); - if (fw_patchfile_path[ \ - strlen(fw_patchfile_path)- 1 \ - ] != '/') - { - strcat(p_chip_id_str, "/"); - } - strcat(p_chip_id_str, dp->d_name); - retval = TRUE; - } - break; - } - } - } - - closedir(dirp); - - if (retval == FALSE) - { - /* Try again chip name without revision info */ - - int len = strlen(p_chip_id_str); - char *p = p_chip_id_str + len - 1; - - /* Scan backward and look for the first alphabet - which is not M or m - */ - while (len > 3) // BCM**** - { - if ((isdigit(*p)==0) && (*p != 'M') && (*p != 'm')) - break; - - p--; - len--; - } - - if (len > 3) - { - *p = 0; - retval = hw_config_findpatch(p_chip_id_str); - } - } - } - else - { - ALOGE("Could not open %s", fw_patchfile_path); - } - - return (retval); -} - -/******************************************************************************* -** -** Function hw_config_set_bdaddr -** -** Description Program controller's Bluetooth Device Address -** -** Returns TRUE, if valid address is sent -** FALSE, otherwise -** -*******************************************************************************/ -static uint8_t hw_config_set_bdaddr(HC_BT_HDR *p_buf) -{ - uint8_t retval = FALSE; - uint8_t *p = (uint8_t *) (p_buf + 1); - - ALOGI("Setting local bd addr to %02X:%02X:%02X:%02X:%02X:%02X", - vnd_local_bd_addr[0], vnd_local_bd_addr[1], vnd_local_bd_addr[2], - vnd_local_bd_addr[3], vnd_local_bd_addr[4], vnd_local_bd_addr[5]); - - UINT16_TO_STREAM(p, HCI_VSC_WRITE_BD_ADDR); - *p++ = BD_ADDR_LEN; /* parameter length */ - *p++ = vnd_local_bd_addr[5]; - *p++ = vnd_local_bd_addr[4]; - *p++ = vnd_local_bd_addr[3]; - *p++ = vnd_local_bd_addr[2]; - *p++ = vnd_local_bd_addr[1]; - *p = vnd_local_bd_addr[0]; - - p_buf->len = HCI_CMD_PREAMBLE_SIZE + BD_ADDR_LEN; - hw_cfg_cb.state = HW_CFG_SET_BD_ADDR; - - retval = bt_vendor_cbacks->xmit_cb(HCI_VSC_WRITE_BD_ADDR, p_buf, \ - hw_config_cback); - - return (retval); -} - -/******************************************************************************* -** -** Function hw_config_cback -** -** Description Callback function for controller configuration -** -** Returns None -** -*******************************************************************************/ -void hw_config_cback(void *p_mem) -{ - HC_BT_HDR *p_evt_buf = (HC_BT_HDR *) p_mem; - char *p_name, *p_tmp; - uint8_t *p, status; - uint16_t opcode; - HC_BT_HDR *p_buf=NULL; - uint8_t is_proceeding = FALSE; - int i; - - status = *((uint8_t *)(p_evt_buf + 1) + HCI_EVT_CMD_CMPL_STATUS_RET_BYTE); - p = (uint8_t *)(p_evt_buf + 1) + HCI_EVT_CMD_CMPL_OPCODE; - STREAM_TO_UINT16(opcode,p); - - /* Ask a new buffer big enough to hold any HCI commands sent in here */ - if ((status == 0) && bt_vendor_cbacks) - p_buf = (HC_BT_HDR *) bt_vendor_cbacks->alloc(BT_HC_HDR_SIZE + \ - HCI_CMD_MAX_LEN); - - if (p_buf != NULL) - { - p_buf->event = MSG_STACK_TO_HC_HCI_CMD; - p_buf->offset = 0; - p_buf->len = 0; - p_buf->layer_specific = 0; - - p = (uint8_t *) (p_buf + 1); - - switch (hw_cfg_cb.state) - { - case HW_CFG_SET_UART_BAUD_1: - /* update baud rate of host's UART port */ - ALOGI("bt vendor lib: set UART baud %i", UART_TARGET_BAUD_RATE); - userial_vendor_set_baud( \ - line_speed_to_userial_baud(UART_TARGET_BAUD_RATE) \ - ); - - /* read local name */ - UINT16_TO_STREAM(p, HCI_READ_LOCAL_NAME); - *p = 0; /* parameter length */ - - p_buf->len = HCI_CMD_PREAMBLE_SIZE; - hw_cfg_cb.state = HW_CFG_READ_LOCAL_NAME; - - is_proceeding = bt_vendor_cbacks->xmit_cb(HCI_READ_LOCAL_NAME, \ - p_buf, hw_config_cback); - break; - - case HW_CFG_READ_LOCAL_NAME: - p_tmp = p_name = (char *) (p_evt_buf + 1) + \ - HCI_EVT_CMD_CMPL_LOCAL_NAME_STRING; - - for (i=0; (i < LOCAL_NAME_BUFFER_LEN)||(*(p_name+i) != 0); i++) - *(p_name+i) = toupper(*(p_name+i)); - - if ((p_name = strstr(p_name, "BCM")) != NULL) - { - strncpy(hw_cfg_cb.local_chip_name, p_name, \ - LOCAL_NAME_BUFFER_LEN-1); - } - else - { - strncpy(hw_cfg_cb.local_chip_name, "UNKNOWN", \ - LOCAL_NAME_BUFFER_LEN-1); - p_name = p_tmp; - } - - hw_cfg_cb.local_chip_name[LOCAL_NAME_BUFFER_LEN-1] = 0; - - BTHWDBG("Chipset %s", hw_cfg_cb.local_chip_name); - - if ((status = hw_config_findpatch(p_name)) == TRUE) - { - if ((hw_cfg_cb.fw_fd = open(p_name, O_RDONLY)) == -1) - { - ALOGE("vendor lib preload failed to open [%s]", p_name); - } - else - { - /* vsc_download_minidriver */ - UINT16_TO_STREAM(p, HCI_VSC_DOWNLOAD_MINIDRV); - *p = 0; /* parameter length */ - - p_buf->len = HCI_CMD_PREAMBLE_SIZE; - hw_cfg_cb.state = HW_CFG_DL_MINIDRIVER; - - is_proceeding = bt_vendor_cbacks->xmit_cb( \ - HCI_VSC_DOWNLOAD_MINIDRV, p_buf, \ - hw_config_cback); - } - } - else - { - ALOGE( \ - "vendor lib preload failed to locate firmware patch file" \ - ); - } - - if (is_proceeding == FALSE) - { - is_proceeding = hw_config_set_bdaddr(p_buf); - } - break; - - case HW_CFG_DL_MINIDRIVER: - /* give time for placing firmware in download mode */ - ms_delay(50); - hw_cfg_cb.state = HW_CFG_DL_FW_PATCH; - /* fall through intentionally */ - case HW_CFG_DL_FW_PATCH: - p_buf->len = read(hw_cfg_cb.fw_fd, p, HCI_CMD_PREAMBLE_SIZE); - if (p_buf->len > 0) - { - if ((p_buf->len < HCI_CMD_PREAMBLE_SIZE) || \ - (opcode == HCI_VSC_LAUNCH_RAM)) - { - ALOGW("firmware patch file might be altered!"); - } - else - { - p_buf->len += read(hw_cfg_cb.fw_fd, \ - p+HCI_CMD_PREAMBLE_SIZE,\ - *(p+HCD_REC_PAYLOAD_LEN_BYTE)); - STREAM_TO_UINT16(opcode,p); - is_proceeding = bt_vendor_cbacks->xmit_cb(opcode, \ - p_buf, hw_config_cback); - break; - } - } - - close(hw_cfg_cb.fw_fd); - hw_cfg_cb.fw_fd = -1; - - /* Normally the firmware patch configuration file - * sets the new starting baud rate at 115200. - * So, we need update host's baud rate accordingly. - */ - ALOGI("bt vendor lib: set UART baud 115200"); - userial_vendor_set_baud(USERIAL_BAUD_115200); - - /* Next, we would like to boost baud rate up again - * to desired working speed. - */ - hw_cfg_cb.f_set_baud_2 = TRUE; - - /* Check if we need to pause a few hundred milliseconds - * before sending down any HCI command. - */ - ms_delay(look_up_fw_settlement_delay()); - - /* fall through intentionally */ - case HW_CFG_START: - if (UART_TARGET_BAUD_RATE > 3000000) - { - /* set UART clock to 48MHz */ - UINT16_TO_STREAM(p, HCI_VSC_WRITE_UART_CLOCK_SETTING); - *p++ = 1; /* parameter length */ - *p = 1; /* (1,"UART CLOCK 48 MHz")(2,"UART CLOCK 24 MHz") */ - - p_buf->len = HCI_CMD_PREAMBLE_SIZE + 1; - hw_cfg_cb.state = HW_CFG_SET_UART_CLOCK; - - is_proceeding = bt_vendor_cbacks->xmit_cb( \ - HCI_VSC_WRITE_UART_CLOCK_SETTING, \ - p_buf, hw_config_cback); - break; - } - /* fall through intentionally */ - case HW_CFG_SET_UART_CLOCK: - /* set controller's UART baud rate to 3M */ - UINT16_TO_STREAM(p, HCI_VSC_UPDATE_BAUDRATE); - *p++ = UPDATE_BAUDRATE_CMD_PARAM_SIZE; /* parameter length */ - *p++ = 0; /* encoded baud rate */ - *p++ = 0; /* use encoded form */ - UINT32_TO_STREAM(p, UART_TARGET_BAUD_RATE); - - p_buf->len = HCI_CMD_PREAMBLE_SIZE + \ - UPDATE_BAUDRATE_CMD_PARAM_SIZE; - hw_cfg_cb.state = (hw_cfg_cb.f_set_baud_2) ? \ - HW_CFG_SET_UART_BAUD_2 : HW_CFG_SET_UART_BAUD_1; - - is_proceeding = bt_vendor_cbacks->xmit_cb(HCI_VSC_UPDATE_BAUDRATE, \ - p_buf, hw_config_cback); - break; - - case HW_CFG_SET_UART_BAUD_2: - /* update baud rate of host's UART port */ - ALOGI("bt vendor lib: set UART baud %i", UART_TARGET_BAUD_RATE); - userial_vendor_set_baud( \ - line_speed_to_userial_baud(UART_TARGET_BAUD_RATE) \ - ); - - if ((is_proceeding = hw_config_set_bdaddr(p_buf)) == TRUE) - break; - - /* fall through intentionally */ - case HW_CFG_SET_BD_ADDR: - ALOGI("vendor lib fwcfg completed"); - bt_vendor_cbacks->dealloc(p_buf); - bt_vendor_cbacks->fwcfg_cb(BT_VND_OP_RESULT_SUCCESS); - - hw_cfg_cb.state = 0; - - if (hw_cfg_cb.fw_fd != -1) - { - close(hw_cfg_cb.fw_fd); - hw_cfg_cb.fw_fd = -1; - } - - is_proceeding = TRUE; - break; - } // switch(hw_cfg_cb.state) - } // if (p_buf != NULL) - - /* Free the RX event buffer */ - if (bt_vendor_cbacks) - bt_vendor_cbacks->dealloc(p_evt_buf); - - if (is_proceeding == FALSE) - { - ALOGE("vendor lib fwcfg aborted!!!"); - if (bt_vendor_cbacks) - { - if (p_buf != NULL) - bt_vendor_cbacks->dealloc(p_buf); - - bt_vendor_cbacks->fwcfg_cb(BT_VND_OP_RESULT_FAIL); - } - - if (hw_cfg_cb.fw_fd != -1) - { - close(hw_cfg_cb.fw_fd); - hw_cfg_cb.fw_fd = -1; - } - - hw_cfg_cb.state = 0; - } -} - -/****************************************************************************** -** LPM Static Functions -******************************************************************************/ - -/******************************************************************************* -** -** Function hw_lpm_ctrl_cback -** -** Description Callback function for lpm enable/disable rquest -** -** Returns None -** -*******************************************************************************/ -void hw_lpm_ctrl_cback(void *p_mem) -{ - HC_BT_HDR *p_evt_buf = (HC_BT_HDR *) p_mem; - bt_vendor_op_result_t status = BT_VND_OP_RESULT_FAIL; - - if (*((uint8_t *)(p_evt_buf + 1) + HCI_EVT_CMD_CMPL_STATUS_RET_BYTE) == 0) - { - status = BT_VND_OP_RESULT_SUCCESS; - } - - if (bt_vendor_cbacks) - { - bt_vendor_cbacks->lpm_cb(status); - bt_vendor_cbacks->dealloc(p_evt_buf); - } -} - - -#if (SCO_CFG_INCLUDED == TRUE) -/***************************************************************************** -** SCO Configuration Static Functions -*****************************************************************************/ - -/******************************************************************************* -** -** Function hw_sco_cfg_cback -** -** Description Callback function for SCO configuration rquest -** -** Returns None -** -*******************************************************************************/ -void hw_sco_cfg_cback(void *p_mem) -{ - HC_BT_HDR *p_evt_buf = (HC_BT_HDR *) p_mem; - uint8_t *p; - uint16_t opcode; - HC_BT_HDR *p_buf=NULL; - - p = (uint8_t *)(p_evt_buf + 1) + HCI_EVT_CMD_CMPL_OPCODE; - STREAM_TO_UINT16(opcode,p); - - /* Free the RX event buffer */ - if (bt_vendor_cbacks) - bt_vendor_cbacks->dealloc(p_evt_buf); - -#if (!defined(SCO_USE_I2S_INTERFACE) || (SCO_USE_I2S_INTERFACE == FALSE)) - if (opcode == HCI_VSC_WRITE_SCO_PCM_INT_PARAM) - { - uint8_t ret = FALSE; - - /* Ask a new buffer to hold WRITE_PCM_DATA_FORMAT_PARAM command */ - if (bt_vendor_cbacks) - p_buf = (HC_BT_HDR *) bt_vendor_cbacks->alloc(BT_HC_HDR_SIZE + \ - HCI_CMD_PREAMBLE_SIZE + \ - PCM_DATA_FORMAT_PARAM_SIZE); - if (p_buf) - { - p_buf->event = MSG_STACK_TO_HC_HCI_CMD; - p_buf->offset = 0; - p_buf->layer_specific = 0; - p_buf->len = HCI_CMD_PREAMBLE_SIZE + PCM_DATA_FORMAT_PARAM_SIZE; - - p = (uint8_t *) (p_buf + 1); - UINT16_TO_STREAM(p, HCI_VSC_WRITE_PCM_DATA_FORMAT_PARAM); - *p++ = PCM_DATA_FORMAT_PARAM_SIZE; - memcpy(p, &bt_pcm_data_fmt_param, PCM_DATA_FORMAT_PARAM_SIZE); - - if ((ret = bt_vendor_cbacks->xmit_cb(HCI_VSC_WRITE_PCM_DATA_FORMAT_PARAM,\ - p_buf, hw_sco_cfg_cback)) == FALSE) - { - bt_vendor_cbacks->dealloc(p_buf); - } - else - return; - } - } -#endif // !SCO_USE_I2S_INTERFACE - -if (bt_vendor_cbacks) - bt_vendor_cbacks->scocfg_cb(BT_VND_OP_RESULT_SUCCESS); -} -#endif // SCO_CFG_INCLUDED - -/***************************************************************************** -** Hardware Configuration Interface Functions -*****************************************************************************/ - - -/******************************************************************************* -** -** Function hw_config_start -** -** Description Kick off controller initialization process -** -** Returns None -** -*******************************************************************************/ -void hw_config_start(void) -{ - HC_BT_HDR *p_buf = NULL; - uint8_t *p; - - hw_cfg_cb.state = 0; - hw_cfg_cb.fw_fd = -1; - hw_cfg_cb.f_set_baud_2 = FALSE; - - /* Start from sending HCI_RESET */ - - if (bt_vendor_cbacks) - { - p_buf = (HC_BT_HDR *) bt_vendor_cbacks->alloc(BT_HC_HDR_SIZE + \ - HCI_CMD_PREAMBLE_SIZE); - } - - if (p_buf) - { - p_buf->event = MSG_STACK_TO_HC_HCI_CMD; - p_buf->offset = 0; - p_buf->layer_specific = 0; - p_buf->len = HCI_CMD_PREAMBLE_SIZE; - - p = (uint8_t *) (p_buf + 1); - UINT16_TO_STREAM(p, HCI_RESET); - *p = 0; /* parameter length */ - - hw_cfg_cb.state = HW_CFG_START; - - bt_vendor_cbacks->xmit_cb(HCI_RESET, p_buf, hw_config_cback); - } - else - { - if (bt_vendor_cbacks) - { - ALOGE("vendor lib fw conf aborted [no buffer]"); - bt_vendor_cbacks->fwcfg_cb(BT_VND_OP_RESULT_FAIL); - } - } -} - -/******************************************************************************* -** -** Function hw_lpm_enable -** -** Description Enalbe/Disable LPM -** -** Returns TRUE/FALSE -** -*******************************************************************************/ -uint8_t hw_lpm_enable(uint8_t turn_on) -{ - HC_BT_HDR *p_buf = NULL; - uint8_t *p; - uint8_t ret = FALSE; - - if (bt_vendor_cbacks) - p_buf = (HC_BT_HDR *) bt_vendor_cbacks->alloc(BT_HC_HDR_SIZE + \ - HCI_CMD_PREAMBLE_SIZE + \ - LPM_CMD_PARAM_SIZE); - - if (p_buf) - { - p_buf->event = MSG_STACK_TO_HC_HCI_CMD; - p_buf->offset = 0; - p_buf->layer_specific = 0; - p_buf->len = HCI_CMD_PREAMBLE_SIZE + LPM_CMD_PARAM_SIZE; - - p = (uint8_t *) (p_buf + 1); - UINT16_TO_STREAM(p, HCI_VSC_WRITE_SLEEP_MODE); - *p++ = LPM_CMD_PARAM_SIZE; /* parameter length */ - - if (turn_on) - { - memcpy(p, &lpm_param, LPM_CMD_PARAM_SIZE); - } - else - { - memset(p, 0, LPM_CMD_PARAM_SIZE); - } - - if ((ret = bt_vendor_cbacks->xmit_cb(HCI_VSC_WRITE_SLEEP_MODE, p_buf, \ - hw_lpm_ctrl_cback)) == FALSE) - { - bt_vendor_cbacks->dealloc(p_buf); - } - } - - if ((ret == FALSE) && bt_vendor_cbacks) - bt_vendor_cbacks->lpm_cb(BT_VND_OP_RESULT_FAIL); - - return ret; -} - -/******************************************************************************* -** -** Function hw_lpm_get_idle_timeout -** -** Description Calculate idle time based on host stack idle threshold -** -** Returns idle timeout value -** -*******************************************************************************/ -uint32_t hw_lpm_get_idle_timeout(void) -{ - uint32_t timeout_ms; - - /* set idle time to be LPM_IDLE_TIMEOUT_MULTIPLE times of - * host stack idle threshold (in 300ms/25ms) - */ - timeout_ms = (uint32_t)lpm_param.host_stack_idle_threshold \ - * LPM_IDLE_TIMEOUT_MULTIPLE; - - if (strstr(hw_cfg_cb.local_chip_name, "BCM4325") != NULL) - timeout_ms *= 25; // 12.5 or 25 ? - else - timeout_ms *= 300; - - return timeout_ms; -} - -/******************************************************************************* -** -** Function hw_lpm_set_wake_state -** -** Description Assert/Deassert BT_WAKE -** -** Returns None -** -*******************************************************************************/ -void hw_lpm_set_wake_state(uint8_t wake_assert) -{ - uint8_t state = (wake_assert) ? UPIO_ASSERT : UPIO_DEASSERT; - - upio_set(UPIO_BT_WAKE, state, lpm_param.bt_wake_polarity); -} - -#if (SCO_CFG_INCLUDED == TRUE) -/******************************************************************************* -** -** Function hw_sco_config -** -** Description Configure SCO related hardware settings -** -** Returns None -** -*******************************************************************************/ -void hw_sco_config(void) -{ - HC_BT_HDR *p_buf = NULL; - uint8_t *p, ret; - -#if (!defined(SCO_USE_I2S_INTERFACE) || (SCO_USE_I2S_INTERFACE == FALSE)) - uint16_t cmd_u16 = HCI_CMD_PREAMBLE_SIZE + SCO_PCM_PARAM_SIZE; -#else - uint16_t cmd_u16 = HCI_CMD_PREAMBLE_SIZE + SCO_I2SPCM_PARAM_SIZE; -#endif - - if (bt_vendor_cbacks) - p_buf = (HC_BT_HDR *) bt_vendor_cbacks->alloc(BT_HC_HDR_SIZE+cmd_u16); - - if (p_buf) - { - p_buf->event = MSG_STACK_TO_HC_HCI_CMD; - p_buf->offset = 0; - p_buf->layer_specific = 0; - p_buf->len = cmd_u16; - - p = (uint8_t *) (p_buf + 1); -#if (!defined(SCO_USE_I2S_INTERFACE) || (SCO_USE_I2S_INTERFACE == FALSE)) - UINT16_TO_STREAM(p, HCI_VSC_WRITE_SCO_PCM_INT_PARAM); - *p++ = SCO_PCM_PARAM_SIZE; - memcpy(p, &bt_sco_param, SCO_PCM_PARAM_SIZE); - cmd_u16 = HCI_VSC_WRITE_SCO_PCM_INT_PARAM; - ALOGI("SCO PCM configure {%d, %d, %d, %d, %d}", - bt_sco_param[0], bt_sco_param[1], bt_sco_param[2], bt_sco_param[3], \ - bt_sco_param[4]); - -#else - UINT16_TO_STREAM(p, HCI_VSC_WRITE_I2SPCM_INTERFACE_PARAM); - *p++ = SCO_I2SPCM_PARAM_SIZE; - memcpy(p, &bt_sco_param, SCO_I2SPCM_PARAM_SIZE); - cmd_u16 = HCI_VSC_WRITE_I2SPCM_INTERFACE_PARAM; - ALOGI("SCO over I2SPCM interface {%d, %d, %d, %d}", - bt_sco_param[0], bt_sco_param[1], bt_sco_param[2], bt_sco_param[3]); -#endif - - if ((ret=bt_vendor_cbacks->xmit_cb(cmd_u16, p_buf, hw_sco_cfg_cback)) \ - == FALSE) - { - bt_vendor_cbacks->dealloc(p_buf); - } - else - return; - } - - if (bt_vendor_cbacks) - { - ALOGE("vendor lib scocfg aborted"); - bt_vendor_cbacks->scocfg_cb(BT_VND_OP_RESULT_FAIL); - } -} -#endif // SCO_CFG_INCLUDED - -/******************************************************************************* -** -** Function hw_set_patch_file_path -** -** Description Set the location of firmware patch file -** -** Returns 0 : Success -** Otherwise : Fail -** -*******************************************************************************/ -int hw_set_patch_file_path(char *p_conf_name, char *p_conf_value, int param) -{ - - strcpy(fw_patchfile_path, p_conf_value); - - return 0; -} - -/******************************************************************************* -** -** Function hw_set_patch_file_name -** -** Description Give the specific firmware patch filename -** -** Returns 0 : Success -** Otherwise : Fail -** -*******************************************************************************/ -int hw_set_patch_file_name(char *p_conf_name, char *p_conf_value, int param) -{ - - strcpy(fw_patchfile_name, p_conf_value); - - return 0; -} - -#if (VENDOR_LIB_RUNTIME_TUNING_ENABLED == TRUE) -/******************************************************************************* -** -** Function hw_set_patch_settlement_delay -** -** Description Give the specific firmware patch settlement time in milliseconds -** -** Returns 0 : Success -** Otherwise : Fail -** -*******************************************************************************/ -int hw_set_patch_settlement_delay(char *p_conf_name, char *p_conf_value, int param) -{ - fw_patch_settlement_delay = atoi(p_conf_value); - - return 0; -} -#endif //VENDOR_LIB_RUNTIME_TUNING_ENABLED - diff --git a/libbt/src/upio.c b/libbt/src/upio.c deleted file mode 100644 index d32f334..0000000 --- a/libbt/src/upio.c +++ /dev/null @@ -1,298 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2009-2012 Broadcom Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -/****************************************************************************** - * - * Filename: upio.c - * - * Description: Contains I/O functions, like - * rfkill control - * BT_WAKE/HOST_WAKE control - * - ******************************************************************************/ - -#define LOG_TAG "bt_upio" - -#include <utils/Log.h> -#include <fcntl.h> -#include <errno.h> -#include <cutils/properties.h> -#include "bt_vendor_brcm.h" -#include "upio.h" -#include "userial_vendor.h" - -/****************************************************************************** -** Constants & Macros -******************************************************************************/ - -#ifndef UPIO_DBG -#define UPIO_DBG FALSE -#endif - -#if (UPIO_DBG == TRUE) -#define UPIODBG(param, ...) {ALOGD(param, ## __VA_ARGS__);} -#else -#define UPIODBG(param, ...) {} -#endif - -/****************************************************************************** -** Local type definitions -******************************************************************************/ - -/****************************************************************************** -** Static variables -******************************************************************************/ - -static uint8_t upio_state[UPIO_MAX_COUNT]; -static int rfkill_id = -1; -static int bt_emul_enable = 0; -static char *rfkill_state_path = NULL; - -/****************************************************************************** -** Static functions -******************************************************************************/ - -/* for friendly debugging outpout string */ -static char *lpm_state[] = { - "UNKNOWN", - "de-asserted", - "asserted" -}; - -/***************************************************************************** -** Bluetooth On/Off Static Functions -*****************************************************************************/ -static int is_emulator_context(void) -{ - char value[PROPERTY_VALUE_MAX]; - - property_get("ro.kernel.qemu", value, "0"); - UPIODBG("is_emulator_context : %s", value); - if (strcmp(value, "1") == 0) { - return 1; - } - return 0; -} - -static int is_rfkill_disabled(void) -{ - char value[PROPERTY_VALUE_MAX]; - - property_get("ro.rfkilldisabled", value, "0"); - UPIODBG("is_rfkill_disabled ? [%s]", value); - - if (strcmp(value, "1") == 0) { - return UPIO_BT_POWER_ON; - } - - return UPIO_BT_POWER_OFF; -} - -static int init_rfkill() -{ - char path[64]; - char buf[16]; - int fd, sz, id; - - if (is_rfkill_disabled()) - return -1; - - for (id = 0; ; id++) - { - snprintf(path, sizeof(path), "/sys/class/rfkill/rfkill%d/type", id); - fd = open(path, O_RDONLY); - if (fd < 0) - { - ALOGE("init_rfkill : open(%s) failed: %s (%d)\n", \ - path, strerror(errno), errno); - return -1; - } - - sz = read(fd, &buf, sizeof(buf)); - close(fd); - - if (sz >= 9 && memcmp(buf, "bluetooth", 9) == 0) - { - rfkill_id = id; - break; - } - } - - asprintf(&rfkill_state_path, "/sys/class/rfkill/rfkill%d/state", rfkill_id); - return 0; -} - -/***************************************************************************** -** LPM Static Functions -*****************************************************************************/ - -/***************************************************************************** -** UPIO Interface Functions -*****************************************************************************/ - -/******************************************************************************* -** -** Function upio_init -** -** Description Initialization -** -** Returns None -** -*******************************************************************************/ -void upio_init(void) -{ - memset(upio_state, UPIO_UNKNOWN, UPIO_MAX_COUNT); -} - -/******************************************************************************* -** -** Function upio_cleanup -** -** Description Clean up -** -** Returns None -** -*******************************************************************************/ -void upio_cleanup(void) -{ -} - -/******************************************************************************* -** -** Function upio_set_bluetooth_power -** -** Description Interact with low layer driver to set Bluetooth power -** on/off. -** -** Returns 0 : SUCCESS or Not-Applicable -** <0 : ERROR -** -*******************************************************************************/ -int upio_set_bluetooth_power(int on) -{ - int sz; - int fd = -1; - int ret = -1; - char buffer = '0'; - - switch(on) - { - case UPIO_BT_POWER_OFF: - buffer = '0'; - break; - - case UPIO_BT_POWER_ON: - buffer = '1'; - break; - } - - if (is_emulator_context()) - { - /* if new value is same as current, return -1 */ - if (bt_emul_enable == on) - return ret; - - UPIODBG("set_bluetooth_power [emul] %d", on); - - bt_emul_enable = on; - return 0; - } - - /* check if we have rfkill interface */ - if (is_rfkill_disabled()) - return 0; - - if (rfkill_id == -1) - { - if (init_rfkill()) - return ret; - } - - fd = open(rfkill_state_path, O_WRONLY); - - if (fd < 0) - { - ALOGE("set_bluetooth_power : open(%s) for write failed: %s (%d)", - rfkill_state_path, strerror(errno), errno); - return ret; - } - - sz = write(fd, &buffer, 1); - - if (sz < 0) { - ALOGE("set_bluetooth_power : write(%s) failed: %s (%d)", - rfkill_state_path, strerror(errno),errno); - } - else - ret = 0; - - if (fd >= 0) - close(fd); - - return ret; -} - - -/******************************************************************************* -** -** Function upio_set -** -** Description Set i/o based on polarity -** -** Returns None -** -*******************************************************************************/ -void upio_set(uint8_t pio, uint8_t action, uint8_t polarity) -{ - int rc; - - switch (pio) - { - case UPIO_BT_WAKE: - - if (upio_state[UPIO_BT_WAKE] == action) - { - UPIODBG("BT_WAKE is %s already", lpm_state[action]); - return; - } - - upio_state[UPIO_BT_WAKE] = action; - - /**************************************** - * !!! TODO !!! - * - * === Custom Porting Required === - * - * Platform dependent user-to-kernel - * interface is required to set output - * state of physical BT_WAKE pin. - ****************************************/ -#if (BT_WAKE_VIA_USERIAL_IOCTL == TRUE) - userial_vendor_ioctl( ( (action==UPIO_ASSERT) ? \ - USERIAL_OP_ASSERT_BT_WAKE : USERIAL_OP_DEASSERT_BT_WAKE),\ - NULL); -#endif - break; - - case UPIO_HOST_WAKE: - UPIODBG("upio_set: UPIO_HOST_WAKE"); - break; - } -} - - diff --git a/libbt/src/userial_vendor.c b/libbt/src/userial_vendor.c deleted file mode 100755 index 1a745b5..0000000 --- a/libbt/src/userial_vendor.c +++ /dev/null @@ -1,361 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2009-2012 Broadcom Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -/****************************************************************************** - * - * Filename: userial_vendor.c - * - * Description: Contains vendor-specific userial functions - * - ******************************************************************************/ - -#define LOG_TAG "bt_userial_vendor" - -#include <utils/Log.h> -#include <termios.h> -#include <fcntl.h> -#include <errno.h> -#include <stdio.h> -#include "bt_vendor_brcm.h" -#include "userial.h" -#include "userial_vendor.h" - -/****************************************************************************** -** Constants & Macros -******************************************************************************/ - -#ifndef VNDUSERIAL_DBG -#define VNDUSERIAL_DBG FALSE -#endif - -#if (VNDUSERIAL_DBG == TRUE) -#define VNDUSERIALDBG(param, ...) {ALOGD(param, ## __VA_ARGS__);} -#else -#define VNDUSERIALDBG(param, ...) {} -#endif - -#define VND_PORT_NAME_MAXLEN 256 - -/****************************************************************************** -** Local type definitions -******************************************************************************/ - -/* vendor serial control block */ -typedef struct -{ - int fd; /* fd to Bluetooth device */ - struct termios termios; /* serial terminal of BT port */ - char port_name[VND_PORT_NAME_MAXLEN]; -} vnd_userial_cb_t; - -/****************************************************************************** -** Static variables -******************************************************************************/ - -static vnd_userial_cb_t vnd_userial; - -/***************************************************************************** -** Helper Functions -*****************************************************************************/ - -/******************************************************************************* -** -** Function userial_to_tcio_baud -** -** Description helper function converts USERIAL baud rates into TCIO -** conforming baud rates -** -** Returns TRUE/FALSE -** -*******************************************************************************/ -uint8_t userial_to_tcio_baud(uint8_t cfg_baud, uint32_t *baud) -{ - if (cfg_baud == USERIAL_BAUD_115200) - *baud = B115200; - else if (cfg_baud == USERIAL_BAUD_4M) - *baud = B4000000; - else if (cfg_baud == USERIAL_BAUD_3M) - *baud = B3000000; - else if (cfg_baud == USERIAL_BAUD_2M) - *baud = B2000000; - else if (cfg_baud == USERIAL_BAUD_1M) - *baud = B1000000; - else if (cfg_baud == USERIAL_BAUD_921600) - *baud = B921600; - else if (cfg_baud == USERIAL_BAUD_460800) - *baud = B460800; - else if (cfg_baud == USERIAL_BAUD_230400) - *baud = B230400; - else if (cfg_baud == USERIAL_BAUD_57600) - *baud = B57600; - else if (cfg_baud == USERIAL_BAUD_19200) - *baud = B19200; - else if (cfg_baud == USERIAL_BAUD_9600) - *baud = B9600; - else if (cfg_baud == USERIAL_BAUD_1200) - *baud = B1200; - else if (cfg_baud == USERIAL_BAUD_600) - *baud = B600; - else - { - ALOGE( "userial vendor open: unsupported baud idx %i", cfg_baud); - *baud = B115200; - return FALSE; - } - - return TRUE; -} - -#if (BT_WAKE_VIA_USERIAL_IOCTL==TRUE) -/******************************************************************************* -** -** Function userial_ioctl_init_bt_wake -** -** Description helper function to set the open state of the bt_wake if ioctl -** is used. it should not hurt in the rfkill case but it might -** be better to compile it out. -** -** Returns none -** -*******************************************************************************/ -void userial_ioctl_init_bt_wake(int fd) -{ - uint32_t bt_wake_state; - - /* assert BT_WAKE through ioctl */ - ioctl(fd, USERIAL_IOCTL_BT_WAKE_ASSERT, NULL); - ioctl(fd, USERIAL_IOCTL_BT_WAKE_GET_ST, &bt_wake_state); - VNDUSERIALDBG("userial_ioctl_init_bt_wake read back BT_WAKE state=%i", \ - bt_wake_state); -} -#endif // (BT_WAKE_VIA_USERIAL_IOCTL==TRUE) - - -/***************************************************************************** -** Userial Vendor API Functions -*****************************************************************************/ - -/******************************************************************************* -** -** Function userial_vendor_init -** -** Description Initialize userial vendor-specific control block -** -** Returns None -** -*******************************************************************************/ -void userial_vendor_init(void) -{ - vnd_userial.fd = -1; - snprintf(vnd_userial.port_name, VND_PORT_NAME_MAXLEN, "%s", \ - BLUETOOTH_UART_DEVICE_PORT); -} - -/******************************************************************************* -** -** Function userial_vendor_open -** -** Description Open the serial port with the given configuration -** -** Returns device fd -** -*******************************************************************************/ -int userial_vendor_open(tUSERIAL_CFG *p_cfg) -{ - uint32_t baud; - uint8_t data_bits; - uint16_t parity; - uint8_t stop_bits; - - vnd_userial.fd = -1; - - if (!userial_to_tcio_baud(p_cfg->baud, &baud)) - { - return -1; - } - - if(p_cfg->fmt & USERIAL_DATABITS_8) - data_bits = CS8; - else if(p_cfg->fmt & USERIAL_DATABITS_7) - data_bits = CS7; - else if(p_cfg->fmt & USERIAL_DATABITS_6) - data_bits = CS6; - else if(p_cfg->fmt & USERIAL_DATABITS_5) - data_bits = CS5; - else - { - ALOGE("userial vendor open: unsupported data bits"); - return -1; - } - - if(p_cfg->fmt & USERIAL_PARITY_NONE) - parity = 0; - else if(p_cfg->fmt & USERIAL_PARITY_EVEN) - parity = PARENB; - else if(p_cfg->fmt & USERIAL_PARITY_ODD) - parity = (PARENB | PARODD); - else - { - ALOGE("userial vendor open: unsupported parity bit mode"); - return -1; - } - - if(p_cfg->fmt & USERIAL_STOPBITS_1) - stop_bits = 0; - else if(p_cfg->fmt & USERIAL_STOPBITS_2) - stop_bits = CSTOPB; - else - { - ALOGE("userial vendor open: unsupported stop bits"); - return -1; - } - - ALOGI("userial vendor open: opening %s", vnd_userial.port_name); - - if ((vnd_userial.fd = open(vnd_userial.port_name, O_RDWR)) == -1) - { - ALOGE("userial vendor open: unable to open %s", vnd_userial.port_name); - return -1; - } - - tcflush(vnd_userial.fd, TCIOFLUSH); - - tcgetattr(vnd_userial.fd, &vnd_userial.termios); - cfmakeraw(&vnd_userial.termios); - vnd_userial.termios.c_cflag |= (CRTSCTS | stop_bits); - tcsetattr(vnd_userial.fd, TCSANOW, &vnd_userial.termios); - tcflush(vnd_userial.fd, TCIOFLUSH); - - tcsetattr(vnd_userial.fd, TCSANOW, &vnd_userial.termios); - tcflush(vnd_userial.fd, TCIOFLUSH); - tcflush(vnd_userial.fd, TCIOFLUSH); - - /* set input/output baudrate */ - cfsetospeed(&vnd_userial.termios, baud); - cfsetispeed(&vnd_userial.termios, baud); - tcsetattr(vnd_userial.fd, TCSANOW, &vnd_userial.termios); - -#if (BT_WAKE_VIA_USERIAL_IOCTL==TRUE) - userial_ioctl_init_bt_wake(vnd_userial.fd); -#endif - - ALOGI("device fd = %d open", vnd_userial.fd); - - return vnd_userial.fd; -} - -/******************************************************************************* -** -** Function userial_vendor_close -** -** Description Conduct vendor-specific close work -** -** Returns None -** -*******************************************************************************/ -void userial_vendor_close(void) -{ - int result; - - if (vnd_userial.fd == -1) - return; - -#if (BT_WAKE_VIA_USERIAL_IOCTL==TRUE) - /* de-assert bt_wake BEFORE closing port */ - ioctl(vnd_userial.fd, USERIAL_IOCTL_BT_WAKE_DEASSERT, NULL); -#endif - - ALOGI("device fd = %d close", vnd_userial.fd); - - if ((result = close(vnd_userial.fd)) < 0) - ALOGE( "close(fd:%d) FAILED result:%d", vnd_userial.fd, result); - - vnd_userial.fd = -1; -} - -/******************************************************************************* -** -** Function userial_vendor_set_baud -** -** Description Set new baud rate -** -** Returns None -** -*******************************************************************************/ -void userial_vendor_set_baud(uint8_t userial_baud) -{ - uint32_t tcio_baud; - - userial_to_tcio_baud(userial_baud, &tcio_baud); - - cfsetospeed(&vnd_userial.termios, tcio_baud); - cfsetispeed(&vnd_userial.termios, tcio_baud); - tcsetattr(vnd_userial.fd, TCSANOW, &vnd_userial.termios); -} - -/******************************************************************************* -** -** Function userial_vendor_ioctl -** -** Description ioctl inteface -** -** Returns None -** -*******************************************************************************/ -void userial_vendor_ioctl(userial_vendor_ioctl_op_t op, void *p_data) -{ - switch(op) - { -#if (BT_WAKE_VIA_USERIAL_IOCTL==TRUE) - case USERIAL_OP_ASSERT_BT_WAKE: - VNDUSERIALDBG("## userial_vendor_ioctl: Asserting BT_Wake ##"); - ioctl(vnd_userial.fd, USERIAL_IOCTL_BT_WAKE_ASSERT, NULL); - break; - - case USERIAL_OP_DEASSERT_BT_WAKE: - VNDUSERIALDBG("## userial_vendor_ioctl: De-asserting BT_Wake ##"); - ioctl(vnd_userial.fd, USERIAL_IOCTL_BT_WAKE_DEASSERT, NULL); - break; - - case USERIAL_OP_GET_BT_WAKE_STATE: - ioctl(vnd_userial.fd, USERIAL_IOCTL_BT_WAKE_GET_ST, p_data); - break; -#endif // (BT_WAKE_VIA_USERIAL_IOCTL==TRUE) - - default: - break; - } -} - -/******************************************************************************* -** -** Function userial_set_port -** -** Description Configure UART port name -** -** Returns 0 : Success -** Otherwise : Fail -** -*******************************************************************************/ -int userial_set_port(char *p_conf_name, char *p_conf_value, int param) -{ - strcpy(vnd_userial.port_name, p_conf_value); - - return 0; -} - diff --git a/libbt/vnd_buildcfg.mk b/libbt/vnd_buildcfg.mk deleted file mode 100644 index b65033a..0000000 --- a/libbt/vnd_buildcfg.mk +++ /dev/null @@ -1,16 +0,0 @@ -intermediates := $(local-intermediates-dir) - -SRC := $(call my-dir)/include/$(addprefix vnd_, $(addsuffix .txt,$(basename $(TARGET_DEVICE)))) -ifeq (,$(wildcard $(SRC))) -# configuration file does not exist. Use default one -SRC := $(call my-dir)/include/vnd_generic.txt -endif -GEN := $(intermediates)/vnd_buildcfg.h -TOOL := $(TOP_DIR)external/bluetooth/bluedroid/tools/gen-buildcfg.sh - -$(GEN): PRIVATE_PATH := $(call my-dir) -$(GEN): PRIVATE_CUSTOM_TOOL = $(TOOL) $< $@ -$(GEN): $(SRC) $(TOOL) - $(transform-generated-source) - -LOCAL_GENERATED_SOURCES += $(GEN) |