From 57113df3a0e2be01232281fad9a5f2c060567981 Mon Sep 17 00:00:00 2001 From: lin <lin@kickpi.com> Date: Mon, 25 Aug 2025 12:27:45 +0000 Subject: [PATCH] add vs6621 support in android --- android/hardware/seekwave/wlan/wifi_hal/wifi_command.cpp | 87 android/hardware/seekwave/firmware/SDIO-Fimware/md5.txt | 2 android/hardware/seekwave/skwbt/include/skw_common.h | 47 android/hardware/seekwave/wlan/configs/Android.mk | 31 android/device/softwinner/common/config/wireless/wireless_config.mk | 17 android/hardware/seekwave/firmware/USB-Firmware/EA6621Q_SEEKWAVE_R00005.ini | 181 + android/hardware/seekwave/firmware/USB-Firmware/EA6621QT_SEEKWAVE_R00005.ini | 183 + android/hardware/seekwave/firmware/SDIO-Fimware/EA6621Q_SEEKWAVE_R00005.bin | 0 android/hardware/seekwave/firmware/USB-Firmware/EA6521QF_SEEKWAVE_R00005.ini | 181 + android/hardware/seekwave/skwbt/Android.mk | 43 android/hardware/seekwave/firmware/calib/EA6521QF_SEEKWAVE_R00005.ini | 181 + android/hardware/seekwave/skwbt/src/skw_btsnoop.c | 252 + android/hardware/seekwave/wlan/wifi_hal/main.cpp | 1895 +++++++++++ android/hardware/seekwave/skwbt/vendor/etc/bluetooth/skw_logapp64 | 0 android/hardware/seekwave/wlan/configs/wpa_supplicant_overlay.conf | 6 android/hardware/aw/wireless/bluetooth/firmware/firmware.mk | 1 android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/common/driver_cmd_wext.c | 3 android/device/softwinner/ceres-c3/BoardConfig.mk | 15 android/hardware/seekwave/firmware/calib/EA6621Q_SEEKWAVE_R00005.ini | 181 + android/hardware/seekwave/firmware/SDIO-Fimware/EA6521QF_SEEKWAVE_R00005.ini | 181 + android/hardware/aw/wireless/wlan/config/init.wlan.common.rc | 6 android/hardware/seekwave/skwbt/src/skw_gen_addr.c | 171 + android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/common/driver_cmd_nl80211.c | 3 android/hardware/aw/wireless/bluetooth/firmware/seekwave/seekwave-bt.mk | 23 android/hardware/seekwave/wlan/CleanSpec.mk | 49 android/hardware/aw/wireless/bluetooth/libbt/common/Android.mk | 3 android/hardware/seekwave/firmware/calib/EA6521QT_SEEKWAVE_R00005.bin | 0 android/hardware/seekwave/skwbt/src/skw_log.c | 216 + android/hardware/seekwave/wlan/Android.mk | 3 android/hardware/seekwave/firmware/SDIO-Fimware/EA6521QT_SEEKWAVE_R00005.bin | 0 android/hardware/seekwave/firmware/USB-Firmware/md5.txt | 2 android/hardware/seekwave/skwbt/vendor/etc/bluetooth/sv6160lite.nvbin | 0 android/hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_SEEKWAVE_R00001.bin | 0 android/hardware/seekwave/skwbt/vendor/etc/bluetooth/skwbt.conf | 30 android/hardware/seekwave/wlan/configs/config-skw.mk | 21 android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/vendor/seekwave/Android.mk | 93 android/hardware/seekwave/firmware/calib/EA6621QT_SEEKWAVE_R00005.ini | 183 + android/hardware/seekwave/skwbt/vendor/etc/bluetooth/sv6316.nvbin | 0 android/hardware/seekwave/firmware/calib/EA6521QF_SEEKWAVE_R00005.bin | 0 android/hardware/aw/wireless/wlan/wifi_hal/common/Android.mk | 4 android/hardware/seekwave/firmware/SDIO-Fimware/EA6621QT_SEEKWAVE_R00005.ini | 183 + longan/kernel/linux-4.9/drivers/misc/seekwaveplatform_lite/sdio/skw_sdio_main.c | 32 android/device/softwinner/ceres-c3/configs/bluetooth/rtkbt.conf | 0 android/hardware/seekwave/firmware/USB-Firmware/RAM_RW_KERNEL_DRAM.bin | 0 android/hardware/seekwave/skwbt/include/skw_btsnoop.h | 49 android/hardware/aw/wireless/hwinfo/hwinfo.rc | 7 android/hardware/seekwave/firmware/calib/EA6621Q_SEEKWAVE_R00005.bin | 0 android/hardware/seekwave/firmware/SDIO-Fimware/EA6521QF_SEEKWAVE_R00005.bin | 0 android/hardware/seekwave/firmware/USB-Firmware/EA6521QT_SEEKWAVE_R00005.ini | 183 + android/hardware/seekwave/firmware/calib/EA6521QT_SEEKWAVE_R00005.ini | 183 + longan/device/config/chips/a133/configs/c3/kickpi-k5c.dts | 2 android/hardware/seekwave/firmware/USB-Firmware/ROM_EXEC_KERNEL_IRAM.bin | 0 android/hardware/aw/wireless/bluetooth/libbt/vendor/seekwave/Android.mk | 38 android/hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_IRAM_SDIO.bin | 0 android/hardware/seekwave/firmware/SDIO-Fimware/EA6521QT_SEEKWAVE_R00005.ini | 183 + android/hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_SEEKWAVE_R00001.ini | 591 +++ android/hardware/seekwave/firmware/device-skw.mk | 24 android/hardware/aw/wireless/hwinfo/libhwinfo.c | 6 android/hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_DRAM_SDIO.bin | 0 android/hardware/seekwave/firmware/calib/EA6621QT_SEEKWAVE_R00005.bin | 0 android/hardware/seekwave/wlan/wpa_supplicant_8_lib/NOTICE | 42 android/hardware/seekwave/firmware/SDIO-Fimware/EA6621Q_SEEKWAVE_R00005.ini | 181 + android/hardware/seekwave/skwbt/src/skw_ext.c | 263 + android/hardware/seekwave/firmware/SDIO-Fimware/EA6621QT_SEEKWAVE_R00005.bin | 0 android/hardware/seekwave/firmware/USB-Firmware/EA6521QT_SEEKWAVE_R00005.bin | 0 android/hardware/seekwave/skwbt/include/scom_vendor.h | 219 + android/hardware/seekwave/wlan/wpa_supplicant_8_lib/Android.mk | 64 android/hardware/seekwave/skwbt/include/skw_ext.h | 41 android/device/softwinner/common/config/wireless/initrc/init.wireless.bluetooth.rc | 10 android/hardware/seekwave/skwbt/include/skw_gen_addr.h | 19 android/frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp | 2 android/hardware/seekwave/skwbt/include/skw_log.h | 23 android/hardware/seekwave/wlan/wifi_hal/Android.mk | 36 android/frameworks/opt/net/wifi/libwifi_hal/Android.mk | 3 android/hardware/seekwave/firmware/USB-Firmware/EA6521QF_SEEKWAVE_R00005.bin | 0 android/hardware/seekwave/firmware/USB-Firmware/EA6621Q_SEEKWAVE_R00005.bin | 0 android/hardware/seekwave/wlan/wifi_hal/NOTICE | 43 android/hardware/seekwave/wlan/wpa_supplicant_8_lib/driver_cmd_nl80211.c | 169 + android/hardware/aw/wireless/wlan/config/p2p_supplicant_overlay.conf | 1 android/hardware/seekwave/skwbt/include/bt_vendor_skw.h | 64 android/hardware/seekwave/firmware/USB-Firmware/EA6621QT_SEEKWAVE_R00005.bin | 0 android/hardware/seekwave/firmware/SDIO-Fimware/RAM_RW_KERNEL_DRAM.bin | 0 android/hardware/seekwave/skwbt/src/scom_vendor.c | 1747 +++++++++++ android/hardware/seekwave/skwbt/src/bt_vendor_skw.c | 545 +++ android/hardware/seekwave/wlan/METADATA | 3 android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/common/Android.mk | 2 android/hardware/aw/wireless/bluetooth/config/init.bluetooth.common.rc | 11 android/hardware/seekwave/firmware/SDIO-Fimware/ROM_EXEC_KERNEL_IRAM.bin | 0 android/hardware/seekwave/skwbt/vendor/etc/bluetooth/skw_logapp32 | 0 android/hardware/seekwave/wlan/wifi_hal/wifi_command.h | 99 android/hardware/seekwave/wlan/wpa_supplicant_8_lib/MODULE_LICENSE_BSD | 0 android/hardware/aw/wireless/wlan/wifi_hal/vendor/seekwave/Android.mk | 56 android/hardware/seekwave/skwbt/vendor/etc/bluetooth/sv6160.nvbin | 0 android/hardware/seekwave/skwbt/skwbt.mk | 8 android/hardware/seekwave/wlan/wifi_hal/main.h | 53 95 files changed, 9,450 insertions(+), 29 deletions(-) diff --git a/android/device/softwinner/ceres-c3/BoardConfig.mk b/android/device/softwinner/ceres-c3/BoardConfig.mk index 5e20043..971835f 100644 --- a/android/device/softwinner/ceres-c3/BoardConfig.mk +++ b/android/device/softwinner/ceres-c3/BoardConfig.mk @@ -91,15 +91,16 @@ # wifi and bt configuration # 1. Wifi Configuration -BOARD_WIFI_VENDOR := aic -BOARD_USR_WIFI := aic8800 -WIFI_DRIVER_MODULE_PATH := "/vendor/modules/aic8800_fdrv.ko" -WIFI_DRIVER_MODULE_NAME := "aic8800_fdrv" -WIFI_DRIVER_MODULE_ARG := "" +BOARD_WIFI_VENDOR := common +BOARD_USR_WIFI := +WIFI_DRIVER_MODULE_PATH := +WIFI_DRIVER_MODULE_NAME := +WIFI_DRIVER_MODULE_ARG := # 2. Bluetooth Configuration -BOARD_BLUETOOTH_VENDOR := aic -BOARD_HAVE_BLUETOOTH_NAME := aic8800 +BOARD_BLUETOOTH_VENDOR := common +BOARD_HAVE_BLUETOOTH_NAME := +BOARD_BLUETOOTH_CONFIG_DIR := $(PRODUCT_PLATFORM_PATH)/common/wireless/bluetooth # wifi and bt configuration # 1. Wifi Configuration diff --git a/android/device/softwinner/ceres-c3/configs/bluetooth/rtkbt.conf b/android/device/softwinner/ceres-c3/configs/bluetooth/rtkbt.conf new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/android/device/softwinner/ceres-c3/configs/bluetooth/rtkbt.conf diff --git a/android/device/softwinner/common/config/wireless/initrc/init.wireless.bluetooth.rc b/android/device/softwinner/common/config/wireless/initrc/init.wireless.bluetooth.rc index 062150b..e08690c 100755 --- a/android/device/softwinner/common/config/wireless/initrc/init.wireless.bluetooth.rc +++ b/android/device/softwinner/common/config/wireless/initrc/init.wireless.bluetooth.rc @@ -35,6 +35,16 @@ insmod /vendor/modules/aic8800_btlpm.ko setprop vendor.init.lpm.load 1 +on property:persist.vendor.bluetooth_vendor=seekwave + mkdir /data/local/skw 0777 system system + insmod /vendor/modules/skw_sdio.ko + insmod /vendor/modules/skw_bootcoms.ko log_path=/data/local/skw + setprop vendor.init.lpm.load 1 + +on property:persist.vendor.bluetooth_vendor=seekwave_lite + insmod /vendor/modules/skw_sdio_lite.ko + setprop vendor.init.lpm.load 1 + on property:vendor.driver.lpm.load=1 setprop vendor.init.lpm.load 1 diff --git a/android/device/softwinner/common/config/wireless/wireless_config.mk b/android/device/softwinner/common/config/wireless/wireless_config.mk index 3b6c392..c5d4859 100755 --- a/android/device/softwinner/common/config/wireless/wireless_config.mk +++ b/android/device/softwinner/common/config/wireless/wireless_config.mk @@ -27,8 +27,8 @@ WIRELESS_CONFIG_PATH := device/softwinner/common/config/wireless -SUPPORTED_WIFI_VENDOR := broadcom realtek xradio sprd aic ssv common -SUPPORTED_BLUETOOTH_VENDOR := broadcom realtek xradio sprd aic common +SUPPORTED_WIFI_VENDOR := broadcom realtek xradio sprd aic ssv seekwave common +SUPPORTED_BLUETOOTH_VENDOR := broadcom realtek xradio sprd aic seekwave common SAVED_PRODUCT_COPY_FILES := $(PRODUCT_COPY_FILES) PRODUCT_COPY_FILES := @@ -100,6 +100,15 @@ BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_ssv BOARD_WIRELESS_PROPERTIES += wifi.direct.interface=p2p0 -include hardware/ssv/wlan/firmware/$(BOARD_USR_WIFI)/device-ssv.mk + else ifeq ($(BOARD_WIFI_VENDOR),seekwave) + BOARD_WLAN_DEVICE := seekwave + BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_seekwave + BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_seekwave + # hostapd enable 802.11ax + #WIFI_FEATURE_HOSTAPD_11AX := true + PRODUCT_PROPERTY_OVERRIDES += wifi.direct.interface=p2p-dev-wlan0 + PRODUCT_CFI_INCLUDE_PATHS += hardware/seekwave/wlan/wpa_supplicant_8_lib + $(call inherit-product-if-exists, hardware/seekwave/wlan/configs/config-skw.mk) else ifeq ($(BOARD_WIFI_VENDOR),common) BOARD_WLAN_DEVICE := common BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_common @@ -168,6 +177,10 @@ BOARD_WIRELESS_FILES += $(TARGET_DEVICE_DIR)/configs/bluetooth/rtkbt.conf:$(TARGET_COPY_OUT_VENDOR)/etc/bluetooth/rtkbt.conf BOARD_WIRELESS_PACKAGES += libbt-package wireless_hwinfo -include hardware/aw/wireless/bluetooth/firmware/firmware.mk + else ifeq ($(BOARD_BLUETOOTH_VENDOR),seekwave) + BOARD_WIRELESS_FILES += hardware/seekwave/skwbt/vendor/etc/bluetooth/sv6160.nvbin:$(TARGET_COPY_OUT_VENDOR)/etc/bluetooth/sv6160.nvbin + BOARD_WIRELESS_FILES += hardware/seekwave/skwbt/vendor/etc/bluetooth/skwbt.conf:$(TARGET_COPY_OUT_VENDOR)/etc/bluetooth/skwbt.conf + BOARD_WIRELESS_PACKAGES += libbt-vendor-seekwave endif $(call soong_config_add,vendor,board_bluetooth_vendor,$(BOARD_BLUETOOTH_VENDOR)) else diff --git a/android/frameworks/opt/net/wifi/libwifi_hal/Android.mk b/android/frameworks/opt/net/wifi/libwifi_hal/Android.mk index d7cb70c..313daba 100644 --- a/android/frameworks/opt/net/wifi/libwifi_hal/Android.mk +++ b/android/frameworks/opt/net/wifi/libwifi_hal/Android.mk @@ -118,6 +118,9 @@ else ifeq ($(BOARD_WLAN_DEVICE), aic) # support AIC WIFI HAL LIB_WIFI_HAL := libwifi-hal-aic +else ifeq ($(BOARD_WLAN_DEVICE), seekwave) + # support seekwave WIFI HAL + LIB_WIFI_HAL := libwifi-hal-skw else ifeq ($(BOARD_WLAN_DEVICE), common) # support aw autodetct WIFI HAL LIB_WIFI_HAL := libwifi-hal-autodetect diff --git a/android/frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp b/android/frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp index 8365834..93987cb 100644 --- a/android/frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp +++ b/android/frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp @@ -119,7 +119,7 @@ char driver_status[PROPERTY_VALUE_MAX]; #ifdef WIFI_DRIVER_MODULE_PATH FILE *proc; - char line[sizeof(DRIVER_MODULE_TAG) + 10]; + char line[sizeof(DRIVER_MODULE_TAG) + 20]; #endif if (!property_get(DRIVER_PROP_NAME, driver_status, NULL)) { diff --git a/android/hardware/aw/wireless/bluetooth/config/init.bluetooth.common.rc b/android/hardware/aw/wireless/bluetooth/config/init.bluetooth.common.rc index d6a1030..045c594 100755 --- a/android/hardware/aw/wireless/bluetooth/config/init.bluetooth.common.rc +++ b/android/hardware/aw/wireless/bluetooth/config/init.bluetooth.common.rc @@ -35,6 +35,17 @@ insmod /vendor/modules/aic8800_btlpm.ko setprop vendor.init.lpm.load 1 +on property:persist.vendor.overlay.bluetooth_vendor=seekwave + mkdir /data/local/skw 0777 system system + insmod /vendor/modules/skw_sdio.ko + insmod /vendor/modules/skw_bootcoms.ko log_path=/data/local/skw + setprop vendor.init.lpm.load 1 + +on property:persist.vendor.overlay.bluetooth_vendor=seekwave_lite + insmod /vendor/modules/skw_sdio_lite.ko + setprop vendor.init.lpm.load 1 + + on property:vendor.driver.lpm.load=1 setprop vendor.init.lpm.load 1 diff --git a/android/hardware/aw/wireless/bluetooth/firmware/firmware.mk b/android/hardware/aw/wireless/bluetooth/firmware/firmware.mk index fbb4ecd..4f3b5c8 100755 --- a/android/hardware/aw/wireless/bluetooth/firmware/firmware.mk +++ b/android/hardware/aw/wireless/bluetooth/firmware/firmware.mk @@ -3,6 +3,7 @@ -include hardware/aw/wireless/bluetooth/firmware/broadcom/broadcom-bt.mk -include hardware/aw/wireless/bluetooth/firmware/sprd/sprd-bt.mk -include hardware/aw/wireless/bluetooth/firmware/aic/aic-bt.mk +-include hardware/aw/wireless/bluetooth/firmware/seekwave/seekwave-bt.mk # initrc for bluetooth PRODUCT_COPY_FILES += \ diff --git a/android/hardware/aw/wireless/bluetooth/firmware/seekwave/seekwave-bt.mk b/android/hardware/aw/wireless/bluetooth/firmware/seekwave/seekwave-bt.mk new file mode 100755 index 0000000..be2bf56 --- /dev/null +++ b/android/hardware/aw/wireless/bluetooth/firmware/seekwave/seekwave-bt.mk @@ -0,0 +1,23 @@ +# +# Copyright (C) 2008 The Android Open Source Project +# +# 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. +# + +CUR_PATH := hardware/seekwave/skwbt + +PRODUCT_COPY_FILES += $(CUR_PATH)/vendor/etc/bluetooth/skwbt.conf:vendor/etc/bluetooth/skwbt.conf +PRODUCT_COPY_FILES += $(CUR_PATH)/vendor/etc/bluetooth/sv6160.nvbin:vendor/etc/bluetooth/sv6160.nvbin +PRODUCT_COPY_FILES += $(CUR_PATH)/vendor/etc/bluetooth/sv6316.nvbin:vendor/etc/bluetooth/sv6316.nvbin +PRODUCT_COPY_FILES += $(CUR_PATH)/vendor/etc/bluetooth/sv6160lite.nvbin:vendor/etc/bluetooth/sv6160lite.nvbin +-include hardware/seekwave/firmware/device-skw.mk diff --git a/android/hardware/aw/wireless/bluetooth/libbt/common/Android.mk b/android/hardware/aw/wireless/bluetooth/libbt/common/Android.mk index 024be37..2fc8736 100755 --- a/android/hardware/aw/wireless/bluetooth/libbt/common/Android.mk +++ b/android/hardware/aw/wireless/bluetooth/libbt/common/Android.mk @@ -37,5 +37,6 @@ libbt-xradio \ libbt-broadcom \ libbt-realtek \ - libbt-sprd + libbt-sprd \ + libbt-skw include $(BUILD_PHONY_PACKAGE) diff --git a/android/hardware/aw/wireless/bluetooth/libbt/vendor/seekwave/Android.mk b/android/hardware/aw/wireless/bluetooth/libbt/vendor/seekwave/Android.mk new file mode 100755 index 0000000..f8a5d3b --- /dev/null +++ b/android/hardware/aw/wireless/bluetooth/libbt/vendor/seekwave/Android.mk @@ -0,0 +1,38 @@ +LOCAL_PATH := hardware/seekwave/skwbt + +include $(CLEAR_VARS) + +BDROID_DIR := $(TOP_DIR)system/bt +ifeq ($(PLATFORM_VERSION),13) +BDROID_DIR := $(TOP_DIR)packages/modules/Bluetooth/system +else ifeq ($(PLATFORM_VERSION),14) +BDROID_DIR := $(TOP_DIR)packages/modules/Bluetooth/system +endif + +LOCAL_SRC_FILES := \ + src/skw_ext.c \ + src/bt_vendor_skw.c \ + src/scom_vendor.c \ + src/skw_log.c \ + src/skw_gen_addr.c \ + src/skw_btsnoop.c + +LOCAL_C_INCLUDES += \ + $(LOCAL_PATH)/include \ + $(BDROID_DIR)/hci/include + +LOCAL_C_INCLUDES += $(bdroid_C_INCLUDES) +LOCAL_CFLAGS += $(bdroid_CFLAGS) + +LOCAL_SHARED_LIBRARIES := \ + libcutils \ + libutils \ + liblog + +LOCAL_MODULE := libbt-skw +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_CLASS := SHARED_LIBRARIES +LOCAL_MODULE_OWNER := seekwave +LOCAL_PROPRIETARY_MODULE := true + +include $(BUILD_SHARED_LIBRARY) diff --git a/android/hardware/aw/wireless/hwinfo/hwinfo.rc b/android/hardware/aw/wireless/hwinfo/hwinfo.rc index 43e2724..764769f 100755 --- a/android/hardware/aw/wireless/hwinfo/hwinfo.rc +++ b/android/hardware/aw/wireless/hwinfo/hwinfo.rc @@ -4,3 +4,10 @@ group system capabilities BLOCK_SUSPEND NET_ADMIN oneshot + +on boot + chmod 0660 /sys/class/rfkill/rfkill0/state + write /sys/class/rfkill/rfkill0/state 1 + +on property:init.svc.wl_info=stopped + write /sys/class/rfkill/rfkill0/state 0 diff --git a/android/hardware/aw/wireless/hwinfo/libhwinfo.c b/android/hardware/aw/wireless/hwinfo/libhwinfo.c index 12653bd..dababcb 100755 --- a/android/hardware/aw/wireless/hwinfo/libhwinfo.c +++ b/android/hardware/aw/wireless/hwinfo/libhwinfo.c @@ -99,6 +99,8 @@ {"ssv", {"libwifi-hal-ssv.so" }}, {"sprd", {"libwifi-hal-sprd.so" }}, {"aic", {"libwifi-hal-aic.so" }}, + {"seekwave", {"libwifi-hal-skw.so" }}, + {"seekwave_lite",{"libwifi-hal-skw.so" }}, }; static const struct info_t libbt_name[] = { @@ -108,6 +110,8 @@ {"qualcomm", {"libbt-qualcomm.so"}}, {"sprd", {"libbt-sprd.so" }}, {"aic", {"libbt-aic.so" }}, + {"seekwave", {"libbt-skw.so" }}, + {"seekwave_lite", {"libbt-skw.so" }}, }; static const struct info_t wifi_drv_para[] = { @@ -155,6 +159,8 @@ {0x13030, "ssv6x5x", "ssv6x5x", "ssv6x5x", "ssv", 0}, {0x10000, "uwe5622", "sprdwl_ng", "sprdwl_ng", "sprd", 1}, {0x10145, "aic8800", "aic8800_fdrv","aic8800_fdrv","aic", 1}, + {0x10000, "skw", "skw", "skw", "seekwave", 1}, + {0x16621, "skw6160_lite", "swt6621s_wifi", "swt6621s_wifi", "seekwave_lite", 1}, }; /* default select invalid if get wifi_hardware_info failed */ diff --git a/android/hardware/aw/wireless/wlan/config/init.wlan.common.rc b/android/hardware/aw/wireless/wlan/config/init.wlan.common.rc index c90e13c..3d37ee8 100755 --- a/android/hardware/aw/wireless/wlan/config/init.wlan.common.rc +++ b/android/hardware/aw/wireless/wlan/config/init.wlan.common.rc @@ -35,3 +35,9 @@ on property:persist.vendor.overlay.wlan_vendor=aic setprop wifi.direct.interface p2p-dev-wlan0 + +on property:persist.vendor.overlay.wlan_vendor=seekwave + setprop wifi.direct.interface p2p-dev-wlan0 + +on property:persist.vendor.overlay.wlan_vendor=seekwave_lite + setprop wifi.direct.interface p2p-dev-wlan0 diff --git a/android/hardware/aw/wireless/wlan/config/p2p_supplicant_overlay.conf b/android/hardware/aw/wireless/wlan/config/p2p_supplicant_overlay.conf index e44c477..4939705 100755 --- a/android/hardware/aw/wireless/wlan/config/p2p_supplicant_overlay.conf +++ b/android/hardware/aw/wireless/wlan/config/p2p_supplicant_overlay.conf @@ -1,3 +1,4 @@ +p2p_no_group_iface=1 disable_scan_offload=1 wowlan_triggers=any p2p_no_go_freq=5170-5740 diff --git a/android/hardware/aw/wireless/wlan/wifi_hal/common/Android.mk b/android/hardware/aw/wireless/wlan/wifi_hal/common/Android.mk index 68932b9..d497860 100755 --- a/android/hardware/aw/wireless/wlan/wifi_hal/common/Android.mk +++ b/android/hardware/aw/wireless/wlan/wifi_hal/common/Android.mk @@ -43,5 +43,7 @@ libwifi-hal-ssv \ libwifi-hal-xradio \ libwifi-hal-rtk \ - libwifi-hal-bcm + libwifi-hal-bcm \ + libwifi-hal-skw + include $(BUILD_PHONY_PACKAGE) diff --git a/android/hardware/aw/wireless/wlan/wifi_hal/vendor/seekwave/Android.mk b/android/hardware/aw/wireless/wlan/wifi_hal/vendor/seekwave/Android.mk new file mode 100755 index 0000000..a1abfbe --- /dev/null +++ b/android/hardware/aw/wireless/wlan/wifi_hal/vendor/seekwave/Android.mk @@ -0,0 +1,56 @@ +# Copyright (C) 2011 The Android Open Source Project +# +# 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. + +LOCAL_PATH := hardware/seekwave/wlan/wifi_hal + +# Make the HAL library +# ============================================================ +include $(CLEAR_VARS) + +LOCAL_CFLAGS := -Wall \ + -Werror \ + -Wno-format \ + -Wno-reorder \ + -Wno-unused-function \ + -Wno-unused-parameter \ + -Wno-unused-private-field \ + -Wno-unused-variable \ + -Wno-unused-parameter + +LOCAL_C_INCLUDES += external/libnl/include \ + $(call include-path-for, libhardware_legacy)/hardware_legacy \ + external/wpa_supplicant_8/src/drivers \ + external/boringssl/include \ + external/boringssl/src/crypto/digest \ + external/boringssl/src/crypto/evp/ + +LOCAL_HEADER_LIBRARIES := libutils_headers liblog_headers + +LOCAL_SRC_FILES := main.cpp \ + wifi_command.cpp + +LOCAL_SHARED_LIBRARIES := \ + libnl \ + libutils \ + liblog + +LOCAL_MODULE := libwifi-hal-skw +LOCAL_PROPRIETARY_MODULE := true +#LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 +#LOCAL_LICENSE_CONDITIONS := notice +#LOCAL_NOTICE_FILE := $(LOCAL_PATH)/NOTICE + +include $(BUILD_SHARED_LIBRARY) + + diff --git a/android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/common/Android.mk b/android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/common/Android.mk index 598d6f1..aaa347f 100755 --- a/android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/common/Android.mk +++ b/android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/common/Android.mk @@ -67,6 +67,8 @@ LOCAL_WHOLE_STATIC_LIBRARIES += lib_driver_cmd_ssv LOCAL_WHOLE_STATIC_LIBRARIES += lib_driver_cmd_sprd LOCAL_WHOLE_STATIC_LIBRARIES += lib_driver_cmd_aic +LOCAL_WHOLE_STATIC_LIBRARIES += lib_driver_cmd_skw + LOCAL_CFLAGS := $(L_CFLAGS) LOCAL_SRC_FILES := $(WPA_SRC_FILE) LOCAL_C_INCLUDES := $(WPA_SUPPL_DIR_INCLUDE) diff --git a/android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/common/driver_cmd_nl80211.c b/android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/common/driver_cmd_nl80211.c index e2463ab..5c4d6dc 100755 --- a/android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/common/driver_cmd_nl80211.c +++ b/android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/common/driver_cmd_nl80211.c @@ -12,6 +12,7 @@ extern driver_cmd_nl80211_cb ssv_nl80211_cb; extern driver_cmd_nl80211_cb sprd_nl80211_cb; extern driver_cmd_nl80211_cb aic_nl80211_cb; +extern driver_cmd_nl80211_cb seekwave_nl80211_cb; static driver_cmd_nl80211_cb *pcb = NULL; @@ -38,6 +39,8 @@ pcb = &sprd_nl80211_cb; else if (strcmp(vendor_name, "aic") == 0) pcb = &aic_nl80211_cb; + else if (strcmp(vendor_name, "seekwave") == 0) + pcb = &seekwave_nl80211_cb; else return -1; diff --git a/android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/common/driver_cmd_wext.c b/android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/common/driver_cmd_wext.c index a4de396..f69ed22 100755 --- a/android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/common/driver_cmd_wext.c +++ b/android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/common/driver_cmd_wext.c @@ -11,6 +11,7 @@ extern driver_cmd_wext_cb xr_wext_cb; extern driver_cmd_wext_cb ssv_wext_cb; extern driver_cmd_wext_cb aic_wext_cb; +extern driver_cmd_wext_cb seekwave_wext_cb; static driver_cmd_wext_cb *pcb = NULL; @@ -35,6 +36,8 @@ pcb = &ssv_wext_cb; else if (strcmp(vendor_name, "aic") == 0) pcb = &aic_wext_cb; + else if (strcmp(vendor_name, "seekwave") == 0) + pcb = &seekwave_wext_cb; else return -1; diff --git a/android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/vendor/seekwave/Android.mk b/android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/vendor/seekwave/Android.mk new file mode 100755 index 0000000..c0282f9 --- /dev/null +++ b/android/hardware/aw/wireless/wlan/wpa_supplicant_8_lib/vendor/seekwave/Android.mk @@ -0,0 +1,93 @@ +# +# Copyright (C) 2008 The Android Open Source Project +# +# 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. +# +LOCAL_PATH := $(call my-dir) + +ifeq ($(WPA_SUPPLICANT_VERSION),VER_0_8_X) + +ifneq ($(BOARD_WPA_SUPPLICANT_DRIVER),) + CONFIG_DRIVER_$(BOARD_WPA_SUPPLICANT_DRIVER) := y +endif + +WPA_SUPPL_DIR = external/wpa_supplicant_8 +WPA_SRC_FILE := + +include $(WPA_SUPPL_DIR)/wpa_supplicant/android.config + +WPA_SUPPL_DIR_INCLUDE = $(WPA_SUPPL_DIR)/src \ + $(WPA_SUPPL_DIR)/src/common \ + $(WPA_SUPPL_DIR)/src/drivers \ + $(WPA_SUPPL_DIR)/src/l2_packet \ + $(WPA_SUPPL_DIR)/src/utils \ + $(WPA_SUPPL_DIR)/src/wps \ + $(WPA_SUPPL_DIR)/wpa_supplicant + +ifdef CONFIG_DRIVER_NL80211 +WPA_SUPPL_DIR_INCLUDE += external/libnl/include +WPA_SRC_FILE += driver_cmd_nl80211.c +endif + +ifdef CONFIG_DRIVER_WEXT +WPA_SRC_FILE += driver_cmd_wext.c +endif + +ifeq ($(TARGET_ARCH),arm) +# To force sizeof(enum) = 4 +L_CFLAGS += -mabi=aapcs-linux +endif + +ifdef CONFIG_ANDROID_LOG +L_CFLAGS += -DCONFIG_ANDROID_LOG +endif + +ifdef CONFIG_P2P +L_CFLAGS += -DCONFIG_P2P +endif +######################## + +include $(CLEAR_VARS) +LOCAL_MODULE := lib_driver_cmd_skw +LOCAL_SHARED_LIBRARIES := libc libcutils +LOCAL_CFLAGS := $(L_CFLAGS) +#LOCAL_SRC_FILES := $(WPA_SRC_FILE) +LOCAL_C_INCLUDES := $(WPA_SUPPL_DIR_INCLUDE) +LOCAL_PROPRIETARY_MODULE := true + +LOCAL_C_INCLUDES += hardware/aw/wireless/wlan/wpa_supplicant_8_lib/common +LOCAL_MODULE_CLASS := STATIC_LIBRARIES + +SCRIPT_PATH := hardware/aw/wireless/wlan/wpa_supplicant_8_lib/vendor +VENDOR_PATH := hardware/seekwave/wlan/wpa_supplicant_8_lib + +ifdef CONFIG_DRIVER_NL80211 +LOCAL_GENERATED_SOURCES := $(local-generated-sources-dir)/driver_cmd_nl80211.c +LOCAL_GENERATED_SOURCES += $(local-generated-sources-dir)/driver_cmd_nl80211.h +LOCAL_GENERATED_SOURCES += $(local-generated-sources-dir)/rtw_version.h +endif + +ifdef CONFIG_DRIVER_WEXT +LOCAL_GENERATED_SOURCES += $(local-generated-sources-dir)/driver_cmd_wext.c +LOCAL_GENERATED_SOURCES += $(local-generated-sources-dir)/driver_cmd_wext.h +endif + +$(LOCAL_GENERATED_SOURCES): $(SCRIPT_PATH)/auto-gen-source.sh $(VENDOR_PATH) + @echo "Generator: $@" + @./$< $^ seekwave $@ + +include $(BUILD_STATIC_LIBRARY) + +######################## + +endif diff --git a/android/hardware/seekwave/firmware/SDIO-Fimware/EA6521QF_SEEKWAVE_R00005.bin b/android/hardware/seekwave/firmware/SDIO-Fimware/EA6521QF_SEEKWAVE_R00005.bin new file mode 100755 index 0000000..4b472d6 --- /dev/null +++ b/android/hardware/seekwave/firmware/SDIO-Fimware/EA6521QF_SEEKWAVE_R00005.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/SDIO-Fimware/EA6521QF_SEEKWAVE_R00005.ini b/android/hardware/seekwave/firmware/SDIO-Fimware/EA6521QF_SEEKWAVE_R00005.ini new file mode 100755 index 0000000..8f38b28 --- /dev/null +++ b/android/hardware/seekwave/firmware/SDIO-Fimware/EA6521QF_SEEKWAVE_R00005.ini @@ -0,0 +1,181 @@ +;****************************************************************************** +; Wifi Limit Setup file +;****************************************************************************** +[VERSION] +WT_VERSION = EA6521QF_20230728 +;优化TX EVM +;----------------------------------------------------------------------------- +[CAL_POWER_INFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理txpower,s(8,2) +;发送给DUT之后,DUT会进行 <<Qnum 的操作,这里的数据不要提前移位 赋值的数值必须是10进制,与DUT侧对应 +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2 = 17, 17, 17, 17 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 15 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 13, 13, 12, 12 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 12, 12, 12, 15, 15, 15, 15, 15, 15, 15, 14, 13, 13, 11, 11, 11 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2 = 00, 00 + +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2_DELTA = 00, 00, 00, 00 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2_DELTA = 00, 00 +;----------------------------------------------------------------------------- +[CHAN_POWER_COMPINFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理。按频点补偿txpower,s(8,2),正数表示加功率,负数表示减功率 +;cbw20,2g 14个channel 1,2,3,4,5,6,7,8,9,10,11,12,13,14 +G_COMPCHANTXPWR2G_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,2g 9个channel 3,4,5,6,7,8,9,10,11 +G_COMPCHANTXPWR2G_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +G_COMPCHANTXPWR5G_LOW_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +G_COMPCHANTXPWR5G_MID_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +G_COMPCHANTXPWR5G_HIGH_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw40,5g low band 4个channel 38,46,54,62 +G_COMPCHANTXPWR5G_LOW_CBW40_SQ2 = 0,0,0,0 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +G_COMPCHANTXPWR5G_MID_CBW40_SQ2 = 0,0,0,0,0,0 +;cbw40,5g high band 4个 channel 151,159,167,175 +G_COMPCHANTXPWR5G_HIGH_CBW40_SQ2 = 0,0,0,0 +;cbw80,5g low band 2个 channel 42,58 +G_COMPCHANTXPWR5G_LOW_CBW80_SQ2 = 0,0 +;cbw80,5g mid band 3个 channel 106,122,138 +G_COMPCHANTXPWR5G_MID_CBW80_SQ2 = 0,0,0 +;cbw80,5g high band 2个 channel 155,171 +G_COMPCHANTXPWR5G_HIGH_CBW80_SQ2 = 0,0 + +;----------------------------------------------------------------------------- +[RegAddr1] +;----------------------------------------------------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;RegAddr1,start_bit, stop_bit = 0x401420C0,4,0 +RegAddr_Config = 0x401420C0,4,0 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 11,11,11 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 11,11,11 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 20, 20, 20, 19, 19, 19, 17, 17 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 10, 10 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 10, 10, 10, 10, 10, 10, 10, 10 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 20, 19, 19, 17 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 13, 13, 13, 13, 11, 10 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 10, 10, 10, 10 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 20, 19 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 13, 13, 10 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 10, 10 + +;------------------------------------------------------------------------------ +[RegAddr2] +;----------------------------------------------------------------------------- +;RegAddr2,start_bit, stop_bit = 0x40142080,4,1 +RegAddr_Config = 0x40142080,4,1 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 7, 7, 7 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 7, 7, 7 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 6, 6, 6, 5, 5, 5, 6, 6 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 6, 6, 8, 8, 4, 4, 4, 4 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 6, 5, 5, 6 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 5, 5, 5, 5, 6, 6 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 6, 8, 4, 4 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 6, 5 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 5, 5, 6 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 8, 4 + +;------------------------------------------------------------------------------ +[RegAddr3] +;----------------------------------------------------------------------------- +;RegAddr3,start_bit, stop_bit = 0x40142080,16,12 +RegAddr_Config = 0x40142080,16,12 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 4, 4, 4 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 4, 4, 4 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 4, 4, 4, 4, 4, 4, 4, 4 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 8, 8, 6, 6, 6, 6, 6, 6, 8, 8, 4, 4 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 7, 7, 4, 4, 6, 6, 6, 6 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 4, 4, 4, 4 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 8, 6, 6, 6, 8, 4 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 7, 4, 6, 6 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 4, 4 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 8, 6, 4 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 4, 6 +;------------------------------------------------------------------------------ + + +;------------------------------------------------------------------------------ + + + + + + + + diff --git a/android/hardware/seekwave/firmware/SDIO-Fimware/EA6521QT_SEEKWAVE_R00005.bin b/android/hardware/seekwave/firmware/SDIO-Fimware/EA6521QT_SEEKWAVE_R00005.bin new file mode 100755 index 0000000..16c90dc --- /dev/null +++ b/android/hardware/seekwave/firmware/SDIO-Fimware/EA6521QT_SEEKWAVE_R00005.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/SDIO-Fimware/EA6521QT_SEEKWAVE_R00005.ini b/android/hardware/seekwave/firmware/SDIO-Fimware/EA6521QT_SEEKWAVE_R00005.ini new file mode 100755 index 0000000..7ece14e --- /dev/null +++ b/android/hardware/seekwave/firmware/SDIO-Fimware/EA6521QT_SEEKWAVE_R00005.ini @@ -0,0 +1,183 @@ +;****************************************************************************** +; Wifi Limit Setup file +;****************************************************************************** +[VERSION] +WT_VERSION = EA6521QT_20230728 +;增加2.4G PA寄存器优化兼容配置 +;----------------------------------------------------------------------------- +[CAL_POWER_INFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理txpower,s(8,2) +;发送给DUT之后,DUT会进行 <<Qnum 的操作,这里的数据不要提前移位 赋值的数值必须是10进制,与DUT侧对应 +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2 = 17, 17, 17, 17 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 15 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 13, 13, 12, 12 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 12, 12, 12, 15, 15, 15, 15, 15, 15, 15, 14, 13, 13, 11, 11, 11 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2 = 00, 00 + +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2_DELTA = 5.5, 5.5, 5.5, 4 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2_DELTA = 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2_DELTA = 4.5, 5.5, 4.5, 4.5, 4.5, 4.5, 5, 4.5, 5.5, 5, 5, 4.5, 5.3, 4.5, 5.5, 4.5, 4.5, 4.5, 4.5, 5, 5, 5.5, 4.5, 5.5, 4.5, 5.5 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3_DELTA = 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2_DELTA = 4.5, 4.5 +;----------------------------------------------------------------------------- +[CHAN_POWER_COMPINFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理。按频点补偿txpower,s(8,2),正数表示加功率,负数表示减功率 +;cbw20,2g 14个channel 1,2,3,4,5,6,7,8,9,10,11,12,13,14 +G_COMPCHANTXPWR2G_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,2g 9个channel 3,4,5,6,7,8,9,10,11 +G_COMPCHANTXPWR2G_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +G_COMPCHANTXPWR5G_LOW_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +G_COMPCHANTXPWR5G_MID_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +G_COMPCHANTXPWR5G_HIGH_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw40,5g low band 4个channel 38,46,54,62 +G_COMPCHANTXPWR5G_LOW_CBW40_SQ2 = 0,0,0,0 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +G_COMPCHANTXPWR5G_MID_CBW40_SQ2 = 0,0,0,0,0,0 +;cbw40,5g high band 4个 channel 151,159,167,175 +G_COMPCHANTXPWR5G_HIGH_CBW40_SQ2 = 0,0,0,0 +;cbw80,5g low band 2个 channel 42,58 +G_COMPCHANTXPWR5G_LOW_CBW80_SQ2 = 0,0 +;cbw80,5g mid band 3个 channel 106,122,138 +G_COMPCHANTXPWR5G_MID_CBW80_SQ2 = 0,0,0 +;cbw80,5g high band 2个 channel 155,171 +G_COMPCHANTXPWR5G_HIGH_CBW80_SQ2 = 0,0 + +;----------------------------------------------------------------------------- +[RegAddr1] +;----------------------------------------------------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;RegAddr1,start_bit, stop_bit= 0x401420C0,4,0(5G RegAddr) +RegAddr_Config = 0x401420C0,4,0 +;cbw20/cbw40 2g 3个channel 3,7,11 +;RegAddr1,start_bit, stop_bit= 0x401420C8,3,0(2G RegAddr) +RegAddr_2G_CBW20 = 14,14,15 +;标志位,RegAddr_2G_CBW40 = version, reserved, reserved +;version = 11:2G采用缺省配置; version = 20: 2G采用配置文件定义值 +RegAddr_2G_CBW40 = 20,11,11 +;cbw20,5g low band 8个channel 36, 40, 44, 48, 52, 56, 60, 64 +RegAddr_5G_LOW_CBW20 = 23, 24, 21, 21, 24, 22, 22, 20 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 11, 13, 11, 13, 13, 13, 15, 15, 13, 13, 12, 12 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 12, 14, 12, 12, 11, 11, 11, 11 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 20, 17, 19, 17 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 13, 11, 13, 14, 13, 12 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 13, 13, 10, 10 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 19, 19 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 11, 14, 11 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 12, 10 + +;------------------------------------------------------------------------------ +[RegAddr2] +;----------------------------------------------------------------------------- +;RegAddr2,start_bit, stop_bit (5G RegAddr) +RegAddr_Config = 0x40142080,4,1 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420A8,4,1 +RegAddr_2G_CBW20 = 9, 9, 9 +;cbw40/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420AC,4,1 +RegAddr_2G_CBW40 = 9, 9, 9 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 6, 6, 6, 5, 5, 5, 6, 6 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 7, 7, 7, 10, 10, 10, 10, 10, 8, 8, 8, 8 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 12, 12, 12, 12, 10, 10, 10, 10 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 6, 5, 5, 6 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 7, 5, 5, 10, 8, 8 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 8, 8, 4, 4 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 6, 5 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 8, 10, 8 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 9, 4 + +;------------------------------------------------------------------------------ +[RegAddr3] +;----------------------------------------------------------------------------- +;RegAddr3,start_bit, stop_bit (5G RegAddr) +RegAddr_Config = 0x40142080,16,12 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420A8,16,12 +RegAddr_2G_CBW20 = 18, 18, 18 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420AC,16,12 +RegAddr_2G_CBW40 = 18, 18, 18 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 4, 4, 4, 4, 4, 4, 4, 4 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 8, 8, 12, 10, 10, 10, 12, 12, 13, 13, 10, 10 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 16, 16, 12, 12, 12, 12, 12, 12 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 4, 4, 4, 4 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 10, 10, 6, 13, 10, 10 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 11, 11, 6, 6 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 4, 4 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 10, 12, 12 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 13, 6 +;------------------------------------------------------------------------------ + + +;------------------------------------------------------------------------------ + + + + + + + + diff --git a/android/hardware/seekwave/firmware/SDIO-Fimware/EA6621QT_SEEKWAVE_R00005.bin b/android/hardware/seekwave/firmware/SDIO-Fimware/EA6621QT_SEEKWAVE_R00005.bin new file mode 100755 index 0000000..16c90dc --- /dev/null +++ b/android/hardware/seekwave/firmware/SDIO-Fimware/EA6621QT_SEEKWAVE_R00005.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/SDIO-Fimware/EA6621QT_SEEKWAVE_R00005.ini b/android/hardware/seekwave/firmware/SDIO-Fimware/EA6621QT_SEEKWAVE_R00005.ini new file mode 100755 index 0000000..d0e942d --- /dev/null +++ b/android/hardware/seekwave/firmware/SDIO-Fimware/EA6621QT_SEEKWAVE_R00005.ini @@ -0,0 +1,183 @@ +;****************************************************************************** +; Wifi Limit Setup file +;****************************************************************************** +[VERSION] +WT_VERSION = EA6621QT_20230728 +;增加2.4G PA寄存器优化兼容配置 +;----------------------------------------------------------------------------- +[CAL_POWER_INFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理txpower,s(8,2) +;发送给DUT之后,DUT会进行 <<Qnum 的操作,这里的数据不要提前移位 赋值的数值必须是10进制,与DUT侧对应 +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2 = 17, 17, 17, 17 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 15 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 13, 13, 12, 12 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 12, 12, 12, 15, 15, 15, 15, 15, 15, 15, 14, 13, 13, 11, 11, 11 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2 = 00, 00 + +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2_DELTA = 5.5, 5.5, 5.5, 4 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2_DELTA = 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2_DELTA = 4.5, 5.5, 4.5, 4.5, 4.5, 4.5, 5, 4.5, 5.5, 5, 5, 4.5, 5.3, 4.5, 5.5, 4.5, 4.5, 4.5, 4.5, 5, 5, 5.5, 4.5, 5.5, 4.5, 5.5 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3_DELTA = 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2_DELTA = 4.5, 4.5 +;----------------------------------------------------------------------------- +[CHAN_POWER_COMPINFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理。按频点补偿txpower,s(8,2),正数表示加功率,负数表示减功率 +;cbw20,2g 14个channel 1,2,3,4,5,6,7,8,9,10,11,12,13,14 +G_COMPCHANTXPWR2G_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,2g 9个channel 3,4,5,6,7,8,9,10,11 +G_COMPCHANTXPWR2G_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +G_COMPCHANTXPWR5G_LOW_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +G_COMPCHANTXPWR5G_MID_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +G_COMPCHANTXPWR5G_HIGH_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw40,5g low band 4个channel 38,46,54,62 +G_COMPCHANTXPWR5G_LOW_CBW40_SQ2 = 0,0,0,0 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +G_COMPCHANTXPWR5G_MID_CBW40_SQ2 = 0,0,0,0,0,0 +;cbw40,5g high band 4个 channel 151,159,167,175 +G_COMPCHANTXPWR5G_HIGH_CBW40_SQ2 = 0,0,0,0 +;cbw80,5g low band 2个 channel 42,58 +G_COMPCHANTXPWR5G_LOW_CBW80_SQ2 = 0,0 +;cbw80,5g mid band 3个 channel 106,122,138 +G_COMPCHANTXPWR5G_MID_CBW80_SQ2 = 0,0,0 +;cbw80,5g high band 2个 channel 155,171 +G_COMPCHANTXPWR5G_HIGH_CBW80_SQ2 = 0,0 + +;----------------------------------------------------------------------------- +[RegAddr1] +;----------------------------------------------------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;RegAddr1,start_bit, stop_bit= 0x401420C0,4,0(5G RegAddr) +RegAddr_Config = 0x401420C0,4,0 +;cbw20/cbw40 2g 3个channel 3,7,11 +;RegAddr1,start_bit, stop_bit= 0x401420C8,3,0(2G RegAddr) +RegAddr_2G_CBW20 = 14,14,15 +;标志位,RegAddr_2G_CBW40 = version, reserved, reserved +;version = 11:2G采用缺省配置; version = 20: 2G采用配置文件定义值 +RegAddr_2G_CBW40 = 20,11,11 +;cbw20,5g low band 8个channel 36, 40, 44, 48, 52, 56, 60, 64 +RegAddr_5G_LOW_CBW20 = 23, 24, 21, 21, 24, 22, 22, 20 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 11, 13, 11, 13, 13, 13, 15, 15, 13, 13, 12, 12 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 12, 14, 12, 12, 11, 11, 11, 11 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 20, 17, 19, 17 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 13, 11, 13, 14, 13, 12 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 13, 13, 10, 10 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 19, 19 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 11, 14, 11 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 12, 10 + +;------------------------------------------------------------------------------ +[RegAddr2] +;----------------------------------------------------------------------------- +;RegAddr2,start_bit, stop_bit (5G RegAddr) +RegAddr_Config = 0x40142080,4,1 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420A8,4,1 +RegAddr_2G_CBW20 = 9, 9, 9 +;cbw40/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420AC,4,1 +RegAddr_2G_CBW40 = 9, 9, 9 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 6, 6, 6, 5, 5, 5, 6, 6 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 7, 7, 7, 10, 10, 10, 10, 10, 8, 8, 8, 8 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 12, 12, 12, 12, 10, 10, 10, 10 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 6, 5, 5, 6 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 7, 5, 5, 10, 8, 8 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 8, 8, 4, 4 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 6, 5 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 8, 10, 8 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 9, 4 + +;------------------------------------------------------------------------------ +[RegAddr3] +;----------------------------------------------------------------------------- +;RegAddr3,start_bit, stop_bit (5G RegAddr) +RegAddr_Config = 0x40142080,16,12 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420A8,16,12 +RegAddr_2G_CBW20 = 18, 18, 18 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420AC,16,12 +RegAddr_2G_CBW40 = 18, 18, 18 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 4, 4, 4, 4, 4, 4, 4, 4 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 8, 8, 12, 10, 10, 10, 12, 12, 13, 13, 10, 10 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 16, 16, 12, 12, 12, 12, 12, 12 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 4, 4, 4, 4 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 10, 10, 6, 13, 10, 10 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 11, 11, 6, 6 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 4, 4 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 10, 12, 12 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 13, 6 +;------------------------------------------------------------------------------ + + +;------------------------------------------------------------------------------ + + + + + + + + diff --git a/android/hardware/seekwave/firmware/SDIO-Fimware/EA6621Q_SEEKWAVE_R00005.bin b/android/hardware/seekwave/firmware/SDIO-Fimware/EA6621Q_SEEKWAVE_R00005.bin new file mode 100755 index 0000000..4b472d6 --- /dev/null +++ b/android/hardware/seekwave/firmware/SDIO-Fimware/EA6621Q_SEEKWAVE_R00005.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/SDIO-Fimware/EA6621Q_SEEKWAVE_R00005.ini b/android/hardware/seekwave/firmware/SDIO-Fimware/EA6621Q_SEEKWAVE_R00005.ini new file mode 100755 index 0000000..9b2c945 --- /dev/null +++ b/android/hardware/seekwave/firmware/SDIO-Fimware/EA6621Q_SEEKWAVE_R00005.ini @@ -0,0 +1,181 @@ +;****************************************************************************** +; Wifi Limit Setup file +;****************************************************************************** +[VERSION] +WT_VERSION = EA6621QF_20230728 +;优化TX EVM +;----------------------------------------------------------------------------- +[CAL_POWER_INFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理txpower,s(8,2) +;发送给DUT之后,DUT会进行 <<Qnum 的操作,这里的数据不要提前移位 赋值的数值必须是10进制,与DUT侧对应 +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2 = 17, 17, 17, 17 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 15 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 13, 13, 12, 12 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 12, 12, 12, 15, 15, 15, 15, 15, 15, 15, 14, 13, 13, 11, 11, 11 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2 = 00, 00 + +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2_DELTA = 00, 00, 00, 00 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2_DELTA = 00, 00 +;----------------------------------------------------------------------------- +[CHAN_POWER_COMPINFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理。按频点补偿txpower,s(8,2),正数表示加功率,负数表示减功率 +;cbw20,2g 14个channel 1,2,3,4,5,6,7,8,9,10,11,12,13,14 +G_COMPCHANTXPWR2G_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,2g 9个channel 3,4,5,6,7,8,9,10,11 +G_COMPCHANTXPWR2G_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +G_COMPCHANTXPWR5G_LOW_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +G_COMPCHANTXPWR5G_MID_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +G_COMPCHANTXPWR5G_HIGH_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw40,5g low band 4个channel 38,46,54,62 +G_COMPCHANTXPWR5G_LOW_CBW40_SQ2 = 0,0,0,0 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +G_COMPCHANTXPWR5G_MID_CBW40_SQ2 = 0,0,0,0,0,0 +;cbw40,5g high band 4个 channel 151,159,167,175 +G_COMPCHANTXPWR5G_HIGH_CBW40_SQ2 = 0,0,0,0 +;cbw80,5g low band 2个 channel 42,58 +G_COMPCHANTXPWR5G_LOW_CBW80_SQ2 = 0,0 +;cbw80,5g mid band 3个 channel 106,122,138 +G_COMPCHANTXPWR5G_MID_CBW80_SQ2 = 0,0,0 +;cbw80,5g high band 2个 channel 155,171 +G_COMPCHANTXPWR5G_HIGH_CBW80_SQ2 = 0,0 + +;----------------------------------------------------------------------------- +[RegAddr1] +;----------------------------------------------------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;RegAddr1,start_bit, stop_bit = 0x401420C0,4,0 +RegAddr_Config = 0x401420C0,4,0 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 11,11,11 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 11,11,11 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 20, 20, 20, 19, 19, 19, 17, 17 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 10, 10 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 10, 10, 10, 10, 10, 10, 10, 10 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 20, 19, 19, 17 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 13, 13, 13, 13, 11, 10 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 10, 10, 10, 10 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 20, 19 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 13, 13, 10 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 10, 10 + +;------------------------------------------------------------------------------ +[RegAddr2] +;----------------------------------------------------------------------------- +;RegAddr2,start_bit, stop_bit = 0x40142080,4,1 +RegAddr_Config = 0x40142080,4,1 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 7, 7, 7 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 7, 7, 7 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 6, 6, 6, 5, 5, 5, 6, 6 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 6, 6, 8, 8, 4, 4, 4, 4 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 6, 5, 5, 6 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 5, 5, 5, 5, 6, 6 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 6, 8, 4, 4 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 6, 5 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 5, 5, 6 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 8, 4 + +;------------------------------------------------------------------------------ +[RegAddr3] +;----------------------------------------------------------------------------- +;RegAddr3,start_bit, stop_bit = 0x40142080,16,12 +RegAddr_Config = 0x40142080,16,12 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 4, 4, 4 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 4, 4, 4 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 4, 4, 4, 4, 4, 4, 4, 4 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 8, 8, 6, 6, 6, 6, 6, 6, 8, 8, 4, 4 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 7, 7, 4, 4, 6, 6, 6, 6 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 4, 4, 4, 4 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 8, 6, 6, 6, 8, 4 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 7, 4, 6, 6 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 4, 4 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 8, 6, 4 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 4, 6 +;------------------------------------------------------------------------------ + + +;------------------------------------------------------------------------------ + + + + + + + + diff --git a/android/hardware/seekwave/firmware/SDIO-Fimware/RAM_RW_KERNEL_DRAM.bin b/android/hardware/seekwave/firmware/SDIO-Fimware/RAM_RW_KERNEL_DRAM.bin new file mode 100755 index 0000000..b905f8d --- /dev/null +++ b/android/hardware/seekwave/firmware/SDIO-Fimware/RAM_RW_KERNEL_DRAM.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/SDIO-Fimware/ROM_EXEC_KERNEL_IRAM.bin b/android/hardware/seekwave/firmware/SDIO-Fimware/ROM_EXEC_KERNEL_IRAM.bin new file mode 100755 index 0000000..f51c69d --- /dev/null +++ b/android/hardware/seekwave/firmware/SDIO-Fimware/ROM_EXEC_KERNEL_IRAM.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_DRAM_SDIO.bin b/android/hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_DRAM_SDIO.bin new file mode 100755 index 0000000..d4da86f --- /dev/null +++ b/android/hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_DRAM_SDIO.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_IRAM_SDIO.bin b/android/hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_IRAM_SDIO.bin new file mode 100755 index 0000000..d564762 --- /dev/null +++ b/android/hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_IRAM_SDIO.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_SEEKWAVE_R00001.bin b/android/hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_SEEKWAVE_R00001.bin new file mode 100755 index 0000000..7746053 --- /dev/null +++ b/android/hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_SEEKWAVE_R00001.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_SEEKWAVE_R00001.ini b/android/hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_SEEKWAVE_R00001.ini new file mode 100755 index 0000000..da3da52 --- /dev/null +++ b/android/hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_SEEKWAVE_R00001.ini @@ -0,0 +1,591 @@ +;****************************************************************************** +; Wifi Limit Setup file +;****************************************************************************** +[VERSION] +WT_VERSION = XW_SDIO_V3.0 +;优化TX EVM +;----------------------------------------------------------------------------- + +[CAL_POWER_INFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理txpower,s(8,2) +;发送给DUT之后,DUT会进行 <<Qnum 的操作,这里的数据不要提前移位 赋值的数值必须是10进制,与DUT侧对应 +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2 = 22, 22, 22, 22 +;G_TXPWR11B_UQ2_DIV = 22, 22, 22, 22 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2 = 21, 21, 21, 21, 21, 21, 21, 19 +;G_TXPWRNONHTDUP2G_UQ2_DIV = 21, 21, 21, 21, 21, 21, 21, 19 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2 = 21, 21, 21, 21, 21, 21, 21, 19, 21, 21, 21, 21, 21, 21, 21, 19 +;G_TXPWRNONHTDUP5G_UQ2_DIV = 21, 21, 21, 21, 21, 21, 21, 19, 21, 21, 21, 21, 21, 21, 21, 19 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2 = 20, 20, 20, 20, 20, 20, 20, 18, 18, 15, 15, 12, 12, 20, 20, 20, 20, 20, 20, 20, 18, 18, 15, 15, 12, 12 +;G_TXPWRMCS2G_UQ2_DIV = 20, 20, 20, 20, 20, 20, 20, 18, 18, 15, 15, 12, 12, 20, 20, 20, 20, 20, 20, 20, 18, 18, 15, 15, 12, 12 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2 = 19, 19, 19, 19, 19, 19, 19, 17, 17, 14, 14, 12, 12, 19, 19, 19, 19, 19, 19, 19, 17, 17, 14, 14, 12, 12, 18, 18, 18, 18, 18, 18, 18, 16, 16, 13, 13, 11, 11 +;G_TXPWRMCS5G_UQ2_DIV = 19, 19, 19, 19, 19, 19, 19, 17, 17, 14, 14, 12, 12, 19, 19, 19, 19, 19, 19, 19, 17, 17, 14, 14, 12, 12, 18, 18, 18, 18, 18, 18, 18, 16, 16, 13, 13, 11, 11 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3 = 21, 21, 21, 21, 21, 21, 21, 21, 19, 19, 17, 16, 15, 21, 21, 21, 21, 21, 21, 21, 21, 19, 19, 17, 16, 15, 21, 21, 21, 21, 21, 21, 21, 21, 19, 19, 17, 16, 15 +;TBMAXTXPWR5G_UQ3_DIV = 21, 21, 21, 21, 21, 21, 21, 21, 19, 19, 17, 16, 15, 21, 21, 21, 21, 21, 21, 21, 21, 19, 19, 17, 16, 15, 21, 21, 21, 21, 21, 21, 21, 21, 19, 19, 17, 16, 15 +TBMAXTXPWR2G_UQ3 = 21, 21, 21, 21, 21, 21, 21, 21, 19, 19, 17, 16, 15, 21, 21, 21, 21, 21, 21, 21, 21, 19, 19, 17, 16, 15, 21, 21, 21, 21, 21, 21, 21, 21, 19, 19, 17, 16, 15 +;TBMAXTXPWR2G_UQ3_DIV = 21, 21, 21, 21, 21, 21, 21, 21, 19, 19, 17, 16, 15, 21, 21, 21, 21, 21, 21, 21, 21, 19, 19, 17, 16, 15, 21, 21, 21, 21, 21, 21, 21, 21, 19, 19, 17, 16, 15 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2 = 00, 00 +;TBMINTXPWR_SQ2_DIV = 00, 00 +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2_DELTA = 00, 00, 00, 00 +;G_TXPWR11B_UQ2_DELTA_DIV = 00, 00, 00, 00 +G_TXPWRNONHTDUP2G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00 +;G_TXPWRNONHTDUP2G_UQ2_DELTA_DIV = 00, 00, 00, 00, 00, 00, 00, 00 +G_TXPWRNONHTDUP5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;G_TXPWRNONHTDUP5G_UQ2_DELTA_DIV = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +G_TXPWRMCS2G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;G_TXPWRMCS2G_UQ2_DELTA_DIV = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +G_TXPWRMCS5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;G_TXPWRMCS5G_UQ2_DELTA_DIV = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +TBMAXTXPWR5G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;TBMAXTXPWR5G_UQ3_DELTA_DIV = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +TBMAXTXPWR2G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;TBMAXTXPWR2G_UQ3_DELTA_DIV = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +TBMINTXPWR_SQ2_DELTA = 00, 00 +;TBMINTXPWR_SQ2_DELTA_DIV = 00, 00 + +[CHAN_POWER_COMPINFO] +;----------------------------------------------------------------------------- +;---------------Primary------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理。按频点补偿txpower,s(8,2),正数表示加功率,负数表示减功率 +;cbw20,2g 14个channel 1,2,3,4,5,6,7,8,9,10,11,12,13,14 +G_COMPCHANTXPWR2G_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,2g 9个channel 3,4,5,6,7,8,9,10,11 +G_COMPCHANTXPWR2G_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +G_COMPCHANTXPWR5G_LOW_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +G_COMPCHANTXPWR5G_MID_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +G_COMPCHANTXPWR5G_HIGH_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw40,5g low band 4个channel 38,46,54,62 +G_COMPCHANTXPWR5G_LOW_CBW40_SQ2 = 0,0,0,0 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +G_COMPCHANTXPWR5G_MID_CBW40_SQ2 = 0,0,0,0,0,0 +;cbw40,5g high band 4个 channel 151,159,167,175 +G_COMPCHANTXPWR5G_HIGH_CBW40_SQ2 = 0,0,0,0 +;cbw80,5g low band 2个 channel 42,58 +G_COMPCHANTXPWR5G_LOW_CBW80_SQ2 = 0,0 +;cbw80,5g mid band 3个 channel 106,122,138 +G_COMPCHANTXPWR5G_MID_CBW80_SQ2 = 0,0,0 +;cbw80,5g high band 2个 channel 155,171 +G_COMPCHANTXPWR5G_HIGH_CBW80_SQ2 = 0,0 +;cbw20,6g low band 20个channel 187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263, +G_COMPCHANTXPWR6G_LOW_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,6g mid band 20个 channel 267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343, +G_COMPCHANTXPWR6G_MID_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,6g high band 20个 channel 347,351,355,359,363,367,371,375,379,383,387,391,395,399,403,407,411,415,419,423, +G_COMPCHANTXPWR6G_HIGH_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,6g low band 20个channel 193,201,209,217,225,233,241,249,257,265,273,281,289,297,305,313,321,329,337,345, +G_COMPCHANTXPWR6G_LOW_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,6g mid band 9个 channel 353,361,369,377,385,393,401,409,417, +G_COMPCHANTXPWR6G_MID_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0 +;cbw80,6g low band 14个 channel 197,213,229,245,261,277,293,309,325,341,357,373,389,405, +G_COMPCHANTXPWR6G_LOW_CBW80_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0 + +[CHAN_RSSI_COMPINFO] +;----------------------------------------------------------------------------- +;---------------Primary------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理。按频点补偿RSSI,s(8,2),正数表示加功率,负数表示减功率 +;cbw20,2g 14个channel 1,2,3,4,5,6,7,8,9,10,11,12,13,14 +G_COMPCHANRSSI2G_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,2g 9个channel 3,4,5,6,7,8,9,10,11 +G_COMPCHANRSSI2G_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +G_COMPCHANRSSI5G_LOW_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +G_COMPCHANRSSI5G_MID_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +G_COMPCHANRSSI5G_HIGH_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw40,5g low band 4个channel 38,46,54,62 +G_COMPCHANRSSI5G_LOW_CBW40_SQ2 = 0,0,0,0 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +G_COMPCHANRSSI5G_MID_CBW40_SQ2 = 0,0,0,0,0,0 +;cbw40,5g high band 4个 channel 151,159,167,175 +G_COMPCHANRSSI5G_HIGH_CBW40_SQ2 = 0,0,0,0 +;cbw80,5g low band 2个 channel 42,58 +G_COMPCHANRSSI5G_LOW_CBW80_SQ2 = 0,0 +;cbw80,5g mid band 3个 channel 106,122,138 +G_COMPCHANRSSI5G_MID_CBW80_SQ2 = 0,0,0 +;cbw80,5g high band 2个 channel 155,171 +G_COMPCHANRSSI5G_HIGH_CBW80_SQ2 = 0,0 +;cbw20,6g low band 20个channel 187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263, +G_COMPCHANRSSI6G_LOW_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,6g mid band 20个 channel 267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343, +G_COMPCHANRSSI6G_MID_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,6g high band 20个 channel 347,351,355,359,363,367,371,375,379,383,387,391,395,399,403,407,411,415,419,423, +G_COMPCHANRSSI6G_HIGH_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,6g low band 20个channel 193,201,209,217,225,233,241,249,257,265,273,281,289,297,305,313,321,329,337,345, +G_COMPCHANRSSI6G_LOW_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,6g mid band 9个 channel 353,361,369,377,385,393,401,409,417, +G_COMPCHANRSSI6G_MID_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0 +;cbw80,6g low band 14个 channel 197,213,229,245,261,277,293,309,325,341,357,373,389,405, +G_COMPCHANRSSI6G_LOW_CBW80_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0 + +[RegAddr1] +;---------------------------PRI_5GTX_PAInMatchH1------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;PRI_5GTX_PAInMatchH1 -- 40148894 [21 = 17] +RegAddr_Config = 0x40148894,21,17 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 22, 22, 22, 21, 21, 21, 20, 20 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 18, 17, 17, 16, 16, 16, 15, 15, 15, 15, 14, 14 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 14, 13, 13, 13, 12, 13, 13, 13 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 22, 21, 21, 20 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 17, 17, 16, 15, 15, 14 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 13, 13, 13, 13 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 21, 20 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 17, 16, 15 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 13, 13 +;cbw20,6g low band 20个channel 187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263, +RegAddr_6G_LOW_CBW20 = 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 9 +;cbw20,6g mid band 20个 channel 267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343, +RegAddr_6G_MID_CBW20 = 9, 9, 9, 9, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 5 +;cbw20,6g high band 20个 channel 347,351,355,359,363,367,371,375,379,383,387,391,395,399,403,407,411,415,419,423, +RegAddr_6G_HIGH_CBW20 = 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1 +;cbw40,6g low band 20个channel 193,201,209,217,225,233,241,249,257,265,273,281,289,297,305,313,321,329,337,345, +RegAddr_6G_LOW_CBW40 = 12, 12, 12, 12, 11, 11, 10, 10, 10, 9, 9, 8, 8, 8, 7, 7, 6, 6, 6, 5 +;cbw40,6g mid band 9个 channel 353,361,369,377,385,393,401,409,417, +RegAddr_6G_MID_CBW40 = 5, 4, 4, 4, 3, 3, 2, 2, 2 +;cbw80,6g low band 14个 channel 197,213,229,245,261,277,293,309,325,341,357,373,389,405, +RegAddr_6G_LOW_CBW80 = 12, 12, 11, 10, 9, 9, 8, 7, 6, 5, 5, 4, 3, 2 +;----------------------------------------------------------------------------- + +[RegAddr2] +;---------------------------PRI_5GTX_PAInMatchL1------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;PRI_5GTX_PAInMatchL1 -- 40144890 [26 = 22] +RegAddr_Config = 0x40148890,21,17 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 22, 22, 22, 21, 21, 21, 20, 20 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 18, 17, 17, 16, 16, 16, 15, 15, 15, 15, 14, 14 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 14, 13, 13, 13, 13, 13, 13, 13 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 22, 21, 21, 20 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 17, 17, 16, 15, 15, 14 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 13, 13, 13, 13 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 21, 20 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 17, 16, 15 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 13, 13 +;cbw20,6g low band 20个channel 187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263, +RegAddr_6G_LOW_CBW20 = 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 9 +;cbw20,6g mid band 20个 channel 267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343, +RegAddr_6G_MID_CBW20 = 9, 9, 9, 9, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 5 +;cbw20,6g high band 20个 channel 347,351,355,359,363,367,371,375,379,383,387,391,395,399,403,407,411,415,419,423, +RegAddr_6G_HIGH_CBW20 = 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1 +;cbw40,6g low band 20个channel 193,201,209,217,225,233,241,249,257,265,273,281,289,297,305,313,321,329,337,345, +RegAddr_6G_LOW_CBW40 = 12, 12, 12, 12, 11, 11, 10, 10, 10, 9, 9, 8, 8, 8, 7, 7, 6, 6, 6, 5 +;cbw40,6g mid band 9个 channel 353,361,369,377,385,393,401,409,417, +RegAddr_6G_MID_CBW40 = 5, 4, 4, 4, 3, 3, 2, 2, 2 +;cbw80,6g low band 14个 channel 197,213,229,245,261,277,293,309,325,341,357,373,389,405, +RegAddr_6G_LOW_CBW80 = 12, 12, 11, 10, 9, 9, 8, 7, 6, 5, 5, 4, 3, 2 +;----------------------------------------------------------------------------- + +[RegAddr3] +;---------------------------PRI_5GTX_PABiasH1--------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;PRI_5GTX_PABiasH1 -- 4014888C [11 = 7] +RegAddr_Config = 0x4014888C,11,7 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 15, 16, 14, 15, 16, 14, 14, 16 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 10, 10, 13, 10, 7, 9, 8, 5, 5, 6, 3, 2 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 3, 25, 0, 25, 1, 2, 2, 11 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 16, 14, 16, 15 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 11, 12, 8, 7, 6, 3 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 2, 2, 11, 11 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 15, 14 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 11, 8, 5 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 25, 11 +;cbw20,6g low band 20个channel 187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263, +RegAddr_6G_LOW_CBW20 = 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13 +;cbw20,6g mid band 20个 channel 267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343, +RegAddr_6G_MID_CBW20 = 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 18, 18, 18, 18, 18, 18 +;cbw20,6g high band 20个 channel 347,351,355,359,363,367,371,375,379,383,387,391,395,399,403,407,411,415,419,423, +RegAddr_6G_HIGH_CBW20 = 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 +;cbw40,6g low band 20个channel 193,201,209,217,225,233,241,249,257,265,273,281,289,297,305,313,321,329,337,345, +RegAddr_6G_LOW_CBW40 = 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 18, 18, 18, 18 +;cbw40,6g mid band 9个 channel 353,361,369,377,385,393,401,409,417, +RegAddr_6G_MID_CBW40 = 18, 18, 18, 18, 18, 18, 18, 18, 18 +;cbw80,6g low band 14个 channel 197,213,229,245,261,277,293,309,325,341,357,373,389,405, +RegAddr_6G_LOW_CBW80 = 13, 13, 13, 13, 13, 13, 13, 13, 18, 18, 18, 18, 18, 18 +;----------------------------------------------------------------------------- + +[RegAddr4] +;-------------------------PRI_5GTX_PABiasH2----------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;PRI_5GTX_PABiasH2 -- 4014888C [23 = 20] +RegAddr_Config = 0x4014888C,23,20 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 11, 11, 11, 11, 11, 10, 11, 12 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 8, 8, 9, 6, 6, 8, 5, 4, 6, 6, 3, 4 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 5, 3, 3, 5, 4, 6, 6, 6 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 12, 11, 10, 11 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 8, 8, 7, 5, 6, 3 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 5, 5, 6, 6 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 10, 9 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 8, 7, 5 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 4, 6 +;cbw20,6g low band 20个channel 187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263, +RegAddr_6G_LOW_CBW20 = 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 +;cbw20,6g mid band 20个 channel 267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343, +RegAddr_6G_MID_CBW20 = 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7 +;cbw20,6g high band 20个 channel 347,351,355,359,363,367,371,375,379,383,387,391,395,399,403,407,411,415,419,423, +RegAddr_6G_HIGH_CBW20 = 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 +;cbw40,6g low band 20个channel 193,201,209,217,225,233,241,249,257,265,273,281,289,297,305,313,321,329,337,345, +RegAddr_6G_LOW_CBW40 = 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 7, 7 +;cbw40,6g mid band 9个 channel 353,361,369,377,385,393,401,409,417, +RegAddr_6G_MID_CBW40 = 7, 7, 7, 7, 7, 7, 7, 7, 7 +;cbw80,6g low band 14个 channel 197,213,229,245,261,277,293,309,325,341,357,373,389,405, +RegAddr_6G_LOW_CBW80 = 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7 +;----------------------------------------------------------------------------- + +[RegAddr5] +;---------------------------PRI_5GTX_PABiasH3--------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;PRI_5GTX_PABiasH3 -- 4014888C [30] +RegAddr_Config = 0x4014888C,24,24 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 1, 1, 1, 1, 1, 1, 1, 1 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 1, 1, 1, 1, 1, 1, 1, 1 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 1, 1, 1, 1 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 1, 1, 1, 1, 1, 1 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 1, 1, 1, 1 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 1, 1 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 1, 1, 1 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 1, 1 +;cbw20,6g low band 20个channel 187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263, +RegAddr_6G_LOW_CBW20 = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +;cbw20,6g mid band 20个 channel 267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343, +RegAddr_6G_MID_CBW20 = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +;cbw20,6g high band 20个 channel 347,351,355,359,363,367,371,375,379,383,387,391,395,399,403,407,411,415,419,423, +RegAddr_6G_HIGH_CBW20 = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +;cbw40,6g low band 20个channel 193,201,209,217,225,233,241,249,257,265,273,281,289,297,305,313,321,329,337,345, +RegAddr_6G_LOW_CBW40 = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +;cbw40,6g mid band 9个 channel 353,361,369,377,385,393,401,409,417, +RegAddr_6G_MID_CBW40 = 1, 1, 1, 1, 1, 1, 1, 1, 1 +;cbw80,6g low band 14个 channel 197,213,229,245,261,277,293,309,325,341,357,373,389,405, +RegAddr_6G_LOW_CBW80 = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +;----------------------------------------------------------------------------- + +[RegAddr6] +;--------------------------PRI_5GTX_PABiasH4---------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;PRI_5GTX_PABiasH4 -- 4014888C [6 = 4] +RegAddr_Config = 0x4014888C,6,4 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 3, 3, 3, 3, 3, 3, 3, 3 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 3, 1, 3, 1, 3, 2, 2, 2 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 3, 3, 3, 3 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 3, 3, 3, 3, 3, 3 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 3, 3, 2, 2 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 3, 3 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 3, 3, 3 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 1, 2 +;cbw20,6g low band 20个channel 187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263, +RegAddr_6G_LOW_CBW20 = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +;cbw20,6g mid band 20个 channel 267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343, +RegAddr_6G_MID_CBW20 = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +;cbw20,6g high band 20个 channel 347,351,355,359,363,367,371,375,379,383,387,391,395,399,403,407,411,415,419,423, +RegAddr_6G_HIGH_CBW20 = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +;cbw40,6g low band 20个channel 193,201,209,217,225,233,241,249,257,265,273,281,289,297,305,313,321,329,337,345, +RegAddr_6G_LOW_CBW40 = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +;cbw40,6g mid band 9个 channel 353,361,369,377,385,393,401,409,417, +RegAddr_6G_MID_CBW40 = 2, 2, 2, 2, 2, 2, 2, 2, 2 +;cbw80,6g low band 14个 channel 197,213,229,245,261,277,293,309,325,341,357,373,389,405, +RegAddr_6G_LOW_CBW80 = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +;----------------------------------------------------------------------------- + +[RegAddr7] +;--------------------------PRI_5GTX_PABiasL1---------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;PRI_5GTX_PABiasL1 -- 40144888 [11 = 7] +RegAddr_Config = 0x40148888,11,7 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 15, 16, 14, 15, 16, 14, 14, 16 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 10, 10, 13, 10, 7, 9, 8, 5, 5, 6, 3, 2 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 28, 25, 0, 1, 25, 11, 11, 11 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 16, 14, 16, 15 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 11, 12, 8, 7, 6, 3 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 2, 2, 11, 11 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 15, 14 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 11, 8, 5 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 25, 11 +;cbw20,6g low band 20个channel 187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263, +RegAddr_6G_LOW_CBW20 = 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13 +;cbw20,6g mid band 20个 channel 267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343, +RegAddr_6G_MID_CBW20 = 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 18, 18, 18, 18, 18, 18 +;cbw20,6g high band 20个 channel 347,351,355,359,363,367,371,375,379,383,387,391,395,399,403,407,411,415,419,423, +RegAddr_6G_HIGH_CBW20 = 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 +;cbw40,6g low band 20个channel 193,201,209,217,225,233,241,249,257,265,273,281,289,297,305,313,321,329,337,345, +RegAddr_6G_LOW_CBW40 = 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 18, 18, 18, 18 +;cbw40,6g mid band 9个 channel 353,361,369,377,385,393,401,409,417, +RegAddr_6G_MID_CBW40 = 18, 18, 18, 18, 18, 18, 18, 18, 18 +;cbw80,6g low band 14个 channel 197,213,229,245,261,277,293,309,325,341,357,373,389,405, +RegAddr_6G_LOW_CBW80 = 13, 13, 13, 13, 13, 13, 13, 13, 18, 18, 18, 18, 18, 18 +;----------------------------------------------------------------------------- + +[RegAddr8] +;-------------------------PRI_5GTX_PABiasL2----------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;PRI_5GTX_PABiasL2 -- 40144888 [29 = 26] +RegAddr_Config = 0x40148888,23,20 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 11, 11, 11, 11, 11, 10, 11, 12 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 8, 8, 9, 6, 6, 8, 5, 4, 6, 6, 3, 4 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 5, 3, 3, 4, 4, 6, 6, 6 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 12, 11, 10, 11 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 8, 8, 7, 5, 6, 3 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 5, 5, 6, 6 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 10, 9 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 8, 7, 5 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 4, 6 +;cbw20,6g low band 20个channel 187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263, +RegAddr_6G_LOW_CBW20 = 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 +;cbw20,6g mid band 20个 channel 267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343, +RegAddr_6G_MID_CBW20 = 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7 +;cbw20,6g high band 20个 channel 347,351,355,359,363,367,371,375,379,383,387,391,395,399,403,407,411,415,419,423, +RegAddr_6G_HIGH_CBW20 = 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 +;cbw40,6g low band 20个channel 193,201,209,217,225,233,241,249,257,265,273,281,289,297,305,313,321,329,337,345, +RegAddr_6G_LOW_CBW40 = 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 7, 7 +;cbw40,6g mid band 9个 channel 353,361,369,377,385,393,401,409,417, +RegAddr_6G_MID_CBW40 = 7, 7, 7, 7, 7, 7, 7, 7, 7 +;cbw80,6g low band 14个 channel 197,213,229,245,261,277,293,309,325,341,357,373,389,405, +RegAddr_6G_LOW_CBW80 = 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7 +;----------------------------------------------------------------------------- + +[RegAddr9] +;------------------------PRI_5GTX_PABiasL3------------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;PRI_5GTX_PABiasL3 -- 40144888 [30] +RegAddr_Config = 0x40148888,24,24 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 1, 1, 1, 1, 1, 1, 1, 1 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 1, 1, 1, 1, 1, 1, 1, 1 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 1, 1, 1, 1 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 1, 1, 1, 1, 1, 1 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 1, 1, 1, 1 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 1, 1 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 1, 1, 1 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 1, 1 +;cbw20,6g low band 20个channel 187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263, +RegAddr_6G_LOW_CBW20 = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +;cbw20,6g mid band 20个 channel 267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343, +RegAddr_6G_MID_CBW20 = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +;cbw20,6g high band 20个 channel 347,351,355,359,363,367,371,375,379,383,387,391,395,399,403,407,411,415,419,423, +RegAddr_6G_HIGH_CBW20 = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +;cbw40,6g low band 20个channel 193,201,209,217,225,233,241,249,257,265,273,281,289,297,305,313,321,329,337,345, +RegAddr_6G_LOW_CBW40 = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +;cbw40,6g mid band 9个 channel 353,361,369,377,385,393,401,409,417, +RegAddr_6G_MID_CBW40 = 1, 1, 1, 1, 1, 1, 1, 1, 1 +;cbw80,6g low band 14个 channel 197,213,229,245,261,277,293,309,325,341,357,373,389,405, +RegAddr_6G_LOW_CBW80 = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +;----------------------------------------------------------------------------- + +[RegAddr10] +;------------------------PRI_5GTX_PABiasL4------------------------------------ +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;PRI_5GTX_PABiasL4 -- 40144888 [11 = 9] +RegAddr_Config = 0x40148888,6,4 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 3, 3, 3, 3, 3, 3, 3, 3 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 1, 1, 3, 3, 1, 2, 2, 2 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 3, 3, 3, 3 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 3, 3, 3, 3, 3, 3 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 3, 3, 2, 2 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 3, 3 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 3, 3, 3 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 1, 2 +;cbw20,6g low band 20个channel 187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263, +RegAddr_6G_LOW_CBW20 = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +;cbw20,6g mid band 20个 channel 267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343, +RegAddr_6G_MID_CBW20 = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +;cbw20,6g high band 20个 channel 347,351,355,359,363,367,371,375,379,383,387,391,395,399,403,407,411,415,419,423, +RegAddr_6G_HIGH_CBW20 = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +;cbw40,6g low band 20个channel 193,201,209,217,225,233,241,249,257,265,273,281,289,297,305,313,321,329,337,345, +RegAddr_6G_LOW_CBW40 = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +;cbw40,6g mid band 9个 channel 353,361,369,377,385,393,401,409,417, +RegAddr_6G_MID_CBW40 = 2, 2, 2, 2, 2, 2, 2, 2, 2 +;cbw80,6g low band 14个 channel 197,213,229,245,261,277,293,309,325,341,357,373,389,405, +RegAddr_6G_LOW_CBW80 = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +;------------------------------------------------------------------------------ +;----------------------------------------------------------------------------- + +[RegAddr25] +;------------------------PRI_2GTX_PAInMatch HP------------------------------------ +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;PRI_2GTX_PAInMatch -- 401448BC [21 = 17] +RegAddr_Config = 0x401488BC,21,17 +;cbw20 2g 3个channel段 1~4,5~9,10~13 +RegAddr_2G_CBW20 = 21, 20, 19 +;cbw40 2g 3个channel段 3~4,5~9,10~11 +RegAddr_2G_CBW40 = 21, 20, 19 +;----------------------------------------------------------------------------- + +[RegAddr26] +;------------------------PRI_2GTX_HP_PABias1------------------------------------ +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;PRI_2GTX_PABias1 -- 401448B4 [17 = 13] +RegAddr_Config = 0x401488B4,11,7 +;cbw20 2g 3个channel段 1~4,5~9,10~13 +RegAddr_2G_CBW20 = 10, 11, 14 +;cbw40 2g 3个channel段 3~4,5~9,10~11 +RegAddr_2G_CBW40 = 10, 11, 14 +;----------------------------------------------------------------------------- + +[RegAddr27] +;------------------------PRI_2GTX_HP_PABias2------------------------------------ +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;PRI_2GTX_PABias2 -- 401448B4 [29 = 26] +RegAddr_Config = 0x401488B4,23,20 +;cbw20 2g 3个channel段 1~4,5~9,10~13 +RegAddr_2G_CBW20 = 7, 7, 10 +;cbw40 2g 3个channel段 3~4,5~9,10~11 +RegAddr_2G_CBW40 = 7, 7, 10 +;----------------------------------------------------------------------------- + +[RegAddr28] +;------------------------PRI_2GTX_HP_PABias3------------------------------------ +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;PRI_2GTX_PABias2 -- 401448B4 [29 = 26] +RegAddr_Config = 0x401488B4,24,24 +;cbw20 2g 3个channel段 1~4,5~9,10~13 +RegAddr_2G_CBW20 = 1, 1, 1 +;cbw40 2g 3个channel段 3~4,5~9,10~11 +RegAddr_2G_CBW40 = 1, 1, 1 +;----------------------------------------------------------------------------- + +[RegAddr29] +;------------------------PRI_2GTX_HP_PABias4------------------------------------ +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;PRI_2GTX_PABias2 -- 401448B4 [29 = 26] +RegAddr_Config = 0x401488B4,6,4 +;cbw20 2g 3个channel段 1~4,5~9,10~13 +RegAddr_2G_CBW20 = 2, 2, 2 +;cbw40 2g 3个channel段 3~4,5~9,10~11 +RegAddr_2G_CBW40 = 2, 2, 2 +;----------------------------------------------------------------------------- +;------------------------------------------------------------------------------ + +[CAL_RESULT_INFO_EN] +;----------------------------------------------------------------------------- +;0:配置文件中[CAL_RESULT_INFO]参数不生效 +;1:配置文件中[CAL_RESULT_INFO]参数生效 +;uint8 +CAL_RESULT_INFO_EN = 0 + +[CAL_RESULT_INFO] +;----------------------------------------------------------------------------- +;CAL_RESULT_BITMAP = FFFFFFFF bitmap是用于指示是否写入efuse以及如何写入的,第一次传递过去必须是0,表示不写入,后续校准结束后根据校准结果写入 +;赋值的数值必须是16进制,并且需要字符将所有位置填满,比如16位的0需要写成0000,32位的3需要写出00000003 +RSV0 = 00 +DCXO = 40 +TEMPTURE = 0000 +;2.4G +B2_TX_DELTA_GAIN = 04, 01, 01, 01, FC, FD, F9, F9, F3, F8, F1, F0 +;B2_MIMO_TX_GAIN_DIFF = 04, 01, 01, 01 +B2_RX_LIMIT_DELTA_GAIN = 22, 20, 23, 21, 25, 21 +B2_RX_NORMAL_DELTA_GAIN = 20, 20, 20, 20, 23, 24, 22 +;B2_MIMO_RX_GAIN_DIFF = 04, 01, 01, 01, 20, 23, 21, 25, 21 +;5G&6G +B5_TX_DELTA_GAIN = F9, F8, F8, FA, EF, EE, EE, F0, F4, F2, F3, F4, FA, F9, FA, FA, F8, F6, F6, F6, F4, F1, F0, F1, F7, F5, F5, F5, FB, F8, F7, F7, FA, F7, F7, F7, F7, F4, F4, F4, F6, F3, F4, F4, F9, F8, F8, FA, EF, EE, EE, F0, F4, F2, F3, F4, FA, F9, FA, FA, F8, F6, F6, F6, F4, F1, F0, F1, F7, F5, F5, F5, FB, F8, F7, F7, FA, F7, F7, F7, F7, F4, F4, F4, F6, F3, F4, F4 +;B5_MIMO_TX_GAIN_DIFF = 04, 01, 01, 01, 20, 20, 20, 23, 24, 22, 24, 22, 04, 01, 01, 01, 20, 20, 20, 23, 24, 22, 24, 22 +B5_RX_LIMIT_DELTA_GAIN = 0B, 12, 08, 12, 08, 12, 03, 0E, FC, 0B, FC, 09, FA, 09, F9, 06, F7, 04, F6, 03, F5, 00, 0B, 12, 08, 12, 08, 12, 03, 0E, FC, 0B, FC, 09, FA, 09, F9, 06, F7, 04, F6, 03, F5, 00 +B5_RX_NORMAL_DELTA_GAIN = 0E, 0D, 11, 0D, 0F, 1A, 18, 05, 05, 0C, 0F, 0E, 11, 10, FA, FA, 02, 09, 07, 04, 04, 0E, 0D, 11, 0D, 0F, 1A, 18, 05, 05, 0C, 0F, 0E, 11, 10, FA, FA, 02, 09, 07, 04, 04 +;B5_MIMO_RX_GAIN_DIFF = 0B, 12, 08, 12, 08, 12, 03, 0E, FC, 0B, FC, 09, FA, 09, F9, 06, F7, 04, F6, 03, F5, 00, 20, 20, 23, 24, 22, 0B, 12, 08, 12, 08, 12, 03, 0E, FC, 0B, FC, 09, FA, 09, F9, 06, F7, 04, F6, 03, F5, 00, 20, 20, 23, 24, 22 +RSV1 = 00, 00, 00,00,00 +;------------------------------------------------------------------------------ + diff --git a/android/hardware/seekwave/firmware/SDIO-Fimware/md5.txt b/android/hardware/seekwave/firmware/SDIO-Fimware/md5.txt new file mode 100755 index 0000000..081b639 --- /dev/null +++ b/android/hardware/seekwave/firmware/SDIO-Fimware/md5.txt @@ -0,0 +1,2 @@ +324299e2905e6dcc7efdf845a0b9c74d RAM_RW_KERNEL_DRAM.bin +bfcf9d462a2082e9b75d1495a869b8b1 ROM_EXEC_KERNEL_IRAM.bin diff --git a/android/hardware/seekwave/firmware/USB-Firmware/EA6521QF_SEEKWAVE_R00005.bin b/android/hardware/seekwave/firmware/USB-Firmware/EA6521QF_SEEKWAVE_R00005.bin new file mode 100755 index 0000000..4b472d6 --- /dev/null +++ b/android/hardware/seekwave/firmware/USB-Firmware/EA6521QF_SEEKWAVE_R00005.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/USB-Firmware/EA6521QF_SEEKWAVE_R00005.ini b/android/hardware/seekwave/firmware/USB-Firmware/EA6521QF_SEEKWAVE_R00005.ini new file mode 100755 index 0000000..8f38b28 --- /dev/null +++ b/android/hardware/seekwave/firmware/USB-Firmware/EA6521QF_SEEKWAVE_R00005.ini @@ -0,0 +1,181 @@ +;****************************************************************************** +; Wifi Limit Setup file +;****************************************************************************** +[VERSION] +WT_VERSION = EA6521QF_20230728 +;优化TX EVM +;----------------------------------------------------------------------------- +[CAL_POWER_INFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理txpower,s(8,2) +;发送给DUT之后,DUT会进行 <<Qnum 的操作,这里的数据不要提前移位 赋值的数值必须是10进制,与DUT侧对应 +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2 = 17, 17, 17, 17 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 15 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 13, 13, 12, 12 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 12, 12, 12, 15, 15, 15, 15, 15, 15, 15, 14, 13, 13, 11, 11, 11 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2 = 00, 00 + +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2_DELTA = 00, 00, 00, 00 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2_DELTA = 00, 00 +;----------------------------------------------------------------------------- +[CHAN_POWER_COMPINFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理。按频点补偿txpower,s(8,2),正数表示加功率,负数表示减功率 +;cbw20,2g 14个channel 1,2,3,4,5,6,7,8,9,10,11,12,13,14 +G_COMPCHANTXPWR2G_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,2g 9个channel 3,4,5,6,7,8,9,10,11 +G_COMPCHANTXPWR2G_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +G_COMPCHANTXPWR5G_LOW_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +G_COMPCHANTXPWR5G_MID_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +G_COMPCHANTXPWR5G_HIGH_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw40,5g low band 4个channel 38,46,54,62 +G_COMPCHANTXPWR5G_LOW_CBW40_SQ2 = 0,0,0,0 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +G_COMPCHANTXPWR5G_MID_CBW40_SQ2 = 0,0,0,0,0,0 +;cbw40,5g high band 4个 channel 151,159,167,175 +G_COMPCHANTXPWR5G_HIGH_CBW40_SQ2 = 0,0,0,0 +;cbw80,5g low band 2个 channel 42,58 +G_COMPCHANTXPWR5G_LOW_CBW80_SQ2 = 0,0 +;cbw80,5g mid band 3个 channel 106,122,138 +G_COMPCHANTXPWR5G_MID_CBW80_SQ2 = 0,0,0 +;cbw80,5g high band 2个 channel 155,171 +G_COMPCHANTXPWR5G_HIGH_CBW80_SQ2 = 0,0 + +;----------------------------------------------------------------------------- +[RegAddr1] +;----------------------------------------------------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;RegAddr1,start_bit, stop_bit = 0x401420C0,4,0 +RegAddr_Config = 0x401420C0,4,0 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 11,11,11 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 11,11,11 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 20, 20, 20, 19, 19, 19, 17, 17 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 10, 10 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 10, 10, 10, 10, 10, 10, 10, 10 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 20, 19, 19, 17 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 13, 13, 13, 13, 11, 10 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 10, 10, 10, 10 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 20, 19 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 13, 13, 10 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 10, 10 + +;------------------------------------------------------------------------------ +[RegAddr2] +;----------------------------------------------------------------------------- +;RegAddr2,start_bit, stop_bit = 0x40142080,4,1 +RegAddr_Config = 0x40142080,4,1 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 7, 7, 7 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 7, 7, 7 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 6, 6, 6, 5, 5, 5, 6, 6 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 6, 6, 8, 8, 4, 4, 4, 4 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 6, 5, 5, 6 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 5, 5, 5, 5, 6, 6 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 6, 8, 4, 4 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 6, 5 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 5, 5, 6 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 8, 4 + +;------------------------------------------------------------------------------ +[RegAddr3] +;----------------------------------------------------------------------------- +;RegAddr3,start_bit, stop_bit = 0x40142080,16,12 +RegAddr_Config = 0x40142080,16,12 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 4, 4, 4 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 4, 4, 4 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 4, 4, 4, 4, 4, 4, 4, 4 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 8, 8, 6, 6, 6, 6, 6, 6, 8, 8, 4, 4 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 7, 7, 4, 4, 6, 6, 6, 6 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 4, 4, 4, 4 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 8, 6, 6, 6, 8, 4 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 7, 4, 6, 6 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 4, 4 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 8, 6, 4 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 4, 6 +;------------------------------------------------------------------------------ + + +;------------------------------------------------------------------------------ + + + + + + + + diff --git a/android/hardware/seekwave/firmware/USB-Firmware/EA6521QT_SEEKWAVE_R00005.bin b/android/hardware/seekwave/firmware/USB-Firmware/EA6521QT_SEEKWAVE_R00005.bin new file mode 100755 index 0000000..16c90dc --- /dev/null +++ b/android/hardware/seekwave/firmware/USB-Firmware/EA6521QT_SEEKWAVE_R00005.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/USB-Firmware/EA6521QT_SEEKWAVE_R00005.ini b/android/hardware/seekwave/firmware/USB-Firmware/EA6521QT_SEEKWAVE_R00005.ini new file mode 100755 index 0000000..7ece14e --- /dev/null +++ b/android/hardware/seekwave/firmware/USB-Firmware/EA6521QT_SEEKWAVE_R00005.ini @@ -0,0 +1,183 @@ +;****************************************************************************** +; Wifi Limit Setup file +;****************************************************************************** +[VERSION] +WT_VERSION = EA6521QT_20230728 +;增加2.4G PA寄存器优化兼容配置 +;----------------------------------------------------------------------------- +[CAL_POWER_INFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理txpower,s(8,2) +;发送给DUT之后,DUT会进行 <<Qnum 的操作,这里的数据不要提前移位 赋值的数值必须是10进制,与DUT侧对应 +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2 = 17, 17, 17, 17 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 15 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 13, 13, 12, 12 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 12, 12, 12, 15, 15, 15, 15, 15, 15, 15, 14, 13, 13, 11, 11, 11 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2 = 00, 00 + +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2_DELTA = 5.5, 5.5, 5.5, 4 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2_DELTA = 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2_DELTA = 4.5, 5.5, 4.5, 4.5, 4.5, 4.5, 5, 4.5, 5.5, 5, 5, 4.5, 5.3, 4.5, 5.5, 4.5, 4.5, 4.5, 4.5, 5, 5, 5.5, 4.5, 5.5, 4.5, 5.5 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3_DELTA = 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2_DELTA = 4.5, 4.5 +;----------------------------------------------------------------------------- +[CHAN_POWER_COMPINFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理。按频点补偿txpower,s(8,2),正数表示加功率,负数表示减功率 +;cbw20,2g 14个channel 1,2,3,4,5,6,7,8,9,10,11,12,13,14 +G_COMPCHANTXPWR2G_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,2g 9个channel 3,4,5,6,7,8,9,10,11 +G_COMPCHANTXPWR2G_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +G_COMPCHANTXPWR5G_LOW_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +G_COMPCHANTXPWR5G_MID_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +G_COMPCHANTXPWR5G_HIGH_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw40,5g low band 4个channel 38,46,54,62 +G_COMPCHANTXPWR5G_LOW_CBW40_SQ2 = 0,0,0,0 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +G_COMPCHANTXPWR5G_MID_CBW40_SQ2 = 0,0,0,0,0,0 +;cbw40,5g high band 4个 channel 151,159,167,175 +G_COMPCHANTXPWR5G_HIGH_CBW40_SQ2 = 0,0,0,0 +;cbw80,5g low band 2个 channel 42,58 +G_COMPCHANTXPWR5G_LOW_CBW80_SQ2 = 0,0 +;cbw80,5g mid band 3个 channel 106,122,138 +G_COMPCHANTXPWR5G_MID_CBW80_SQ2 = 0,0,0 +;cbw80,5g high band 2个 channel 155,171 +G_COMPCHANTXPWR5G_HIGH_CBW80_SQ2 = 0,0 + +;----------------------------------------------------------------------------- +[RegAddr1] +;----------------------------------------------------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;RegAddr1,start_bit, stop_bit= 0x401420C0,4,0(5G RegAddr) +RegAddr_Config = 0x401420C0,4,0 +;cbw20/cbw40 2g 3个channel 3,7,11 +;RegAddr1,start_bit, stop_bit= 0x401420C8,3,0(2G RegAddr) +RegAddr_2G_CBW20 = 14,14,15 +;标志位,RegAddr_2G_CBW40 = version, reserved, reserved +;version = 11:2G采用缺省配置; version = 20: 2G采用配置文件定义值 +RegAddr_2G_CBW40 = 20,11,11 +;cbw20,5g low band 8个channel 36, 40, 44, 48, 52, 56, 60, 64 +RegAddr_5G_LOW_CBW20 = 23, 24, 21, 21, 24, 22, 22, 20 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 11, 13, 11, 13, 13, 13, 15, 15, 13, 13, 12, 12 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 12, 14, 12, 12, 11, 11, 11, 11 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 20, 17, 19, 17 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 13, 11, 13, 14, 13, 12 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 13, 13, 10, 10 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 19, 19 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 11, 14, 11 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 12, 10 + +;------------------------------------------------------------------------------ +[RegAddr2] +;----------------------------------------------------------------------------- +;RegAddr2,start_bit, stop_bit (5G RegAddr) +RegAddr_Config = 0x40142080,4,1 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420A8,4,1 +RegAddr_2G_CBW20 = 9, 9, 9 +;cbw40/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420AC,4,1 +RegAddr_2G_CBW40 = 9, 9, 9 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 6, 6, 6, 5, 5, 5, 6, 6 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 7, 7, 7, 10, 10, 10, 10, 10, 8, 8, 8, 8 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 12, 12, 12, 12, 10, 10, 10, 10 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 6, 5, 5, 6 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 7, 5, 5, 10, 8, 8 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 8, 8, 4, 4 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 6, 5 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 8, 10, 8 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 9, 4 + +;------------------------------------------------------------------------------ +[RegAddr3] +;----------------------------------------------------------------------------- +;RegAddr3,start_bit, stop_bit (5G RegAddr) +RegAddr_Config = 0x40142080,16,12 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420A8,16,12 +RegAddr_2G_CBW20 = 18, 18, 18 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420AC,16,12 +RegAddr_2G_CBW40 = 18, 18, 18 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 4, 4, 4, 4, 4, 4, 4, 4 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 8, 8, 12, 10, 10, 10, 12, 12, 13, 13, 10, 10 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 16, 16, 12, 12, 12, 12, 12, 12 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 4, 4, 4, 4 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 10, 10, 6, 13, 10, 10 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 11, 11, 6, 6 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 4, 4 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 10, 12, 12 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 13, 6 +;------------------------------------------------------------------------------ + + +;------------------------------------------------------------------------------ + + + + + + + + diff --git a/android/hardware/seekwave/firmware/USB-Firmware/EA6621QT_SEEKWAVE_R00005.bin b/android/hardware/seekwave/firmware/USB-Firmware/EA6621QT_SEEKWAVE_R00005.bin new file mode 100755 index 0000000..16c90dc --- /dev/null +++ b/android/hardware/seekwave/firmware/USB-Firmware/EA6621QT_SEEKWAVE_R00005.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/USB-Firmware/EA6621QT_SEEKWAVE_R00005.ini b/android/hardware/seekwave/firmware/USB-Firmware/EA6621QT_SEEKWAVE_R00005.ini new file mode 100755 index 0000000..d0e942d --- /dev/null +++ b/android/hardware/seekwave/firmware/USB-Firmware/EA6621QT_SEEKWAVE_R00005.ini @@ -0,0 +1,183 @@ +;****************************************************************************** +; Wifi Limit Setup file +;****************************************************************************** +[VERSION] +WT_VERSION = EA6621QT_20230728 +;增加2.4G PA寄存器优化兼容配置 +;----------------------------------------------------------------------------- +[CAL_POWER_INFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理txpower,s(8,2) +;发送给DUT之后,DUT会进行 <<Qnum 的操作,这里的数据不要提前移位 赋值的数值必须是10进制,与DUT侧对应 +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2 = 17, 17, 17, 17 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 15 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 13, 13, 12, 12 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 12, 12, 12, 15, 15, 15, 15, 15, 15, 15, 14, 13, 13, 11, 11, 11 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2 = 00, 00 + +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2_DELTA = 5.5, 5.5, 5.5, 4 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2_DELTA = 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2_DELTA = 4.5, 5.5, 4.5, 4.5, 4.5, 4.5, 5, 4.5, 5.5, 5, 5, 4.5, 5.3, 4.5, 5.5, 4.5, 4.5, 4.5, 4.5, 5, 5, 5.5, 4.5, 5.5, 4.5, 5.5 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3_DELTA = 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2_DELTA = 4.5, 4.5 +;----------------------------------------------------------------------------- +[CHAN_POWER_COMPINFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理。按频点补偿txpower,s(8,2),正数表示加功率,负数表示减功率 +;cbw20,2g 14个channel 1,2,3,4,5,6,7,8,9,10,11,12,13,14 +G_COMPCHANTXPWR2G_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,2g 9个channel 3,4,5,6,7,8,9,10,11 +G_COMPCHANTXPWR2G_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +G_COMPCHANTXPWR5G_LOW_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +G_COMPCHANTXPWR5G_MID_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +G_COMPCHANTXPWR5G_HIGH_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw40,5g low band 4个channel 38,46,54,62 +G_COMPCHANTXPWR5G_LOW_CBW40_SQ2 = 0,0,0,0 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +G_COMPCHANTXPWR5G_MID_CBW40_SQ2 = 0,0,0,0,0,0 +;cbw40,5g high band 4个 channel 151,159,167,175 +G_COMPCHANTXPWR5G_HIGH_CBW40_SQ2 = 0,0,0,0 +;cbw80,5g low band 2个 channel 42,58 +G_COMPCHANTXPWR5G_LOW_CBW80_SQ2 = 0,0 +;cbw80,5g mid band 3个 channel 106,122,138 +G_COMPCHANTXPWR5G_MID_CBW80_SQ2 = 0,0,0 +;cbw80,5g high band 2个 channel 155,171 +G_COMPCHANTXPWR5G_HIGH_CBW80_SQ2 = 0,0 + +;----------------------------------------------------------------------------- +[RegAddr1] +;----------------------------------------------------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;RegAddr1,start_bit, stop_bit= 0x401420C0,4,0(5G RegAddr) +RegAddr_Config = 0x401420C0,4,0 +;cbw20/cbw40 2g 3个channel 3,7,11 +;RegAddr1,start_bit, stop_bit= 0x401420C8,3,0(2G RegAddr) +RegAddr_2G_CBW20 = 14,14,15 +;标志位,RegAddr_2G_CBW40 = version, reserved, reserved +;version = 11:2G采用缺省配置; version = 20: 2G采用配置文件定义值 +RegAddr_2G_CBW40 = 20,11,11 +;cbw20,5g low band 8个channel 36, 40, 44, 48, 52, 56, 60, 64 +RegAddr_5G_LOW_CBW20 = 23, 24, 21, 21, 24, 22, 22, 20 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 11, 13, 11, 13, 13, 13, 15, 15, 13, 13, 12, 12 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 12, 14, 12, 12, 11, 11, 11, 11 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 20, 17, 19, 17 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 13, 11, 13, 14, 13, 12 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 13, 13, 10, 10 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 19, 19 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 11, 14, 11 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 12, 10 + +;------------------------------------------------------------------------------ +[RegAddr2] +;----------------------------------------------------------------------------- +;RegAddr2,start_bit, stop_bit (5G RegAddr) +RegAddr_Config = 0x40142080,4,1 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420A8,4,1 +RegAddr_2G_CBW20 = 9, 9, 9 +;cbw40/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420AC,4,1 +RegAddr_2G_CBW40 = 9, 9, 9 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 6, 6, 6, 5, 5, 5, 6, 6 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 7, 7, 7, 10, 10, 10, 10, 10, 8, 8, 8, 8 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 12, 12, 12, 12, 10, 10, 10, 10 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 6, 5, 5, 6 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 7, 5, 5, 10, 8, 8 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 8, 8, 4, 4 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 6, 5 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 8, 10, 8 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 9, 4 + +;------------------------------------------------------------------------------ +[RegAddr3] +;----------------------------------------------------------------------------- +;RegAddr3,start_bit, stop_bit (5G RegAddr) +RegAddr_Config = 0x40142080,16,12 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420A8,16,12 +RegAddr_2G_CBW20 = 18, 18, 18 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420AC,16,12 +RegAddr_2G_CBW40 = 18, 18, 18 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 4, 4, 4, 4, 4, 4, 4, 4 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 8, 8, 12, 10, 10, 10, 12, 12, 13, 13, 10, 10 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 16, 16, 12, 12, 12, 12, 12, 12 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 4, 4, 4, 4 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 10, 10, 6, 13, 10, 10 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 11, 11, 6, 6 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 4, 4 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 10, 12, 12 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 13, 6 +;------------------------------------------------------------------------------ + + +;------------------------------------------------------------------------------ + + + + + + + + diff --git a/android/hardware/seekwave/firmware/USB-Firmware/EA6621Q_SEEKWAVE_R00005.bin b/android/hardware/seekwave/firmware/USB-Firmware/EA6621Q_SEEKWAVE_R00005.bin new file mode 100755 index 0000000..4b472d6 --- /dev/null +++ b/android/hardware/seekwave/firmware/USB-Firmware/EA6621Q_SEEKWAVE_R00005.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/USB-Firmware/EA6621Q_SEEKWAVE_R00005.ini b/android/hardware/seekwave/firmware/USB-Firmware/EA6621Q_SEEKWAVE_R00005.ini new file mode 100755 index 0000000..9b2c945 --- /dev/null +++ b/android/hardware/seekwave/firmware/USB-Firmware/EA6621Q_SEEKWAVE_R00005.ini @@ -0,0 +1,181 @@ +;****************************************************************************** +; Wifi Limit Setup file +;****************************************************************************** +[VERSION] +WT_VERSION = EA6621QF_20230728 +;优化TX EVM +;----------------------------------------------------------------------------- +[CAL_POWER_INFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理txpower,s(8,2) +;发送给DUT之后,DUT会进行 <<Qnum 的操作,这里的数据不要提前移位 赋值的数值必须是10进制,与DUT侧对应 +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2 = 17, 17, 17, 17 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 15 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 13, 13, 12, 12 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 12, 12, 12, 15, 15, 15, 15, 15, 15, 15, 14, 13, 13, 11, 11, 11 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2 = 00, 00 + +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2_DELTA = 00, 00, 00, 00 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2_DELTA = 00, 00 +;----------------------------------------------------------------------------- +[CHAN_POWER_COMPINFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理。按频点补偿txpower,s(8,2),正数表示加功率,负数表示减功率 +;cbw20,2g 14个channel 1,2,3,4,5,6,7,8,9,10,11,12,13,14 +G_COMPCHANTXPWR2G_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,2g 9个channel 3,4,5,6,7,8,9,10,11 +G_COMPCHANTXPWR2G_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +G_COMPCHANTXPWR5G_LOW_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +G_COMPCHANTXPWR5G_MID_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +G_COMPCHANTXPWR5G_HIGH_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw40,5g low band 4个channel 38,46,54,62 +G_COMPCHANTXPWR5G_LOW_CBW40_SQ2 = 0,0,0,0 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +G_COMPCHANTXPWR5G_MID_CBW40_SQ2 = 0,0,0,0,0,0 +;cbw40,5g high band 4个 channel 151,159,167,175 +G_COMPCHANTXPWR5G_HIGH_CBW40_SQ2 = 0,0,0,0 +;cbw80,5g low band 2个 channel 42,58 +G_COMPCHANTXPWR5G_LOW_CBW80_SQ2 = 0,0 +;cbw80,5g mid band 3个 channel 106,122,138 +G_COMPCHANTXPWR5G_MID_CBW80_SQ2 = 0,0,0 +;cbw80,5g high band 2个 channel 155,171 +G_COMPCHANTXPWR5G_HIGH_CBW80_SQ2 = 0,0 + +;----------------------------------------------------------------------------- +[RegAddr1] +;----------------------------------------------------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;RegAddr1,start_bit, stop_bit = 0x401420C0,4,0 +RegAddr_Config = 0x401420C0,4,0 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 11,11,11 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 11,11,11 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 20, 20, 20, 19, 19, 19, 17, 17 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 10, 10 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 10, 10, 10, 10, 10, 10, 10, 10 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 20, 19, 19, 17 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 13, 13, 13, 13, 11, 10 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 10, 10, 10, 10 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 20, 19 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 13, 13, 10 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 10, 10 + +;------------------------------------------------------------------------------ +[RegAddr2] +;----------------------------------------------------------------------------- +;RegAddr2,start_bit, stop_bit = 0x40142080,4,1 +RegAddr_Config = 0x40142080,4,1 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 7, 7, 7 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 7, 7, 7 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 6, 6, 6, 5, 5, 5, 6, 6 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 6, 6, 8, 8, 4, 4, 4, 4 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 6, 5, 5, 6 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 5, 5, 5, 5, 6, 6 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 6, 8, 4, 4 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 6, 5 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 5, 5, 6 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 8, 4 + +;------------------------------------------------------------------------------ +[RegAddr3] +;----------------------------------------------------------------------------- +;RegAddr3,start_bit, stop_bit = 0x40142080,16,12 +RegAddr_Config = 0x40142080,16,12 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 4, 4, 4 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 4, 4, 4 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 4, 4, 4, 4, 4, 4, 4, 4 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 8, 8, 6, 6, 6, 6, 6, 6, 8, 8, 4, 4 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 7, 7, 4, 4, 6, 6, 6, 6 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 4, 4, 4, 4 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 8, 6, 6, 6, 8, 4 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 7, 4, 6, 6 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 4, 4 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 8, 6, 4 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 4, 6 +;------------------------------------------------------------------------------ + + +;------------------------------------------------------------------------------ + + + + + + + + diff --git a/android/hardware/seekwave/firmware/USB-Firmware/RAM_RW_KERNEL_DRAM.bin b/android/hardware/seekwave/firmware/USB-Firmware/RAM_RW_KERNEL_DRAM.bin new file mode 100755 index 0000000..0ae42c6 --- /dev/null +++ b/android/hardware/seekwave/firmware/USB-Firmware/RAM_RW_KERNEL_DRAM.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/USB-Firmware/ROM_EXEC_KERNEL_IRAM.bin b/android/hardware/seekwave/firmware/USB-Firmware/ROM_EXEC_KERNEL_IRAM.bin new file mode 100755 index 0000000..3127d06 --- /dev/null +++ b/android/hardware/seekwave/firmware/USB-Firmware/ROM_EXEC_KERNEL_IRAM.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/USB-Firmware/md5.txt b/android/hardware/seekwave/firmware/USB-Firmware/md5.txt new file mode 100755 index 0000000..3c76ee8 --- /dev/null +++ b/android/hardware/seekwave/firmware/USB-Firmware/md5.txt @@ -0,0 +1,2 @@ +03dc64c52e487c360615e221ea57ce9f RAM_RW_KERNEL_DRAM.bin +96b1e5009e1376d2bf9c7cc8a1b2ced1 ROM_EXEC_KERNEL_IRAM.bin diff --git a/android/hardware/seekwave/firmware/calib/EA6521QF_SEEKWAVE_R00005.bin b/android/hardware/seekwave/firmware/calib/EA6521QF_SEEKWAVE_R00005.bin new file mode 100755 index 0000000..4b472d6 --- /dev/null +++ b/android/hardware/seekwave/firmware/calib/EA6521QF_SEEKWAVE_R00005.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/calib/EA6521QF_SEEKWAVE_R00005.ini b/android/hardware/seekwave/firmware/calib/EA6521QF_SEEKWAVE_R00005.ini new file mode 100755 index 0000000..8f38b28 --- /dev/null +++ b/android/hardware/seekwave/firmware/calib/EA6521QF_SEEKWAVE_R00005.ini @@ -0,0 +1,181 @@ +;****************************************************************************** +; Wifi Limit Setup file +;****************************************************************************** +[VERSION] +WT_VERSION = EA6521QF_20230728 +;优化TX EVM +;----------------------------------------------------------------------------- +[CAL_POWER_INFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理txpower,s(8,2) +;发送给DUT之后,DUT会进行 <<Qnum 的操作,这里的数据不要提前移位 赋值的数值必须是10进制,与DUT侧对应 +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2 = 17, 17, 17, 17 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 15 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 13, 13, 12, 12 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 12, 12, 12, 15, 15, 15, 15, 15, 15, 15, 14, 13, 13, 11, 11, 11 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2 = 00, 00 + +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2_DELTA = 00, 00, 00, 00 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2_DELTA = 00, 00 +;----------------------------------------------------------------------------- +[CHAN_POWER_COMPINFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理。按频点补偿txpower,s(8,2),正数表示加功率,负数表示减功率 +;cbw20,2g 14个channel 1,2,3,4,5,6,7,8,9,10,11,12,13,14 +G_COMPCHANTXPWR2G_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,2g 9个channel 3,4,5,6,7,8,9,10,11 +G_COMPCHANTXPWR2G_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +G_COMPCHANTXPWR5G_LOW_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +G_COMPCHANTXPWR5G_MID_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +G_COMPCHANTXPWR5G_HIGH_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw40,5g low band 4个channel 38,46,54,62 +G_COMPCHANTXPWR5G_LOW_CBW40_SQ2 = 0,0,0,0 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +G_COMPCHANTXPWR5G_MID_CBW40_SQ2 = 0,0,0,0,0,0 +;cbw40,5g high band 4个 channel 151,159,167,175 +G_COMPCHANTXPWR5G_HIGH_CBW40_SQ2 = 0,0,0,0 +;cbw80,5g low band 2个 channel 42,58 +G_COMPCHANTXPWR5G_LOW_CBW80_SQ2 = 0,0 +;cbw80,5g mid band 3个 channel 106,122,138 +G_COMPCHANTXPWR5G_MID_CBW80_SQ2 = 0,0,0 +;cbw80,5g high band 2个 channel 155,171 +G_COMPCHANTXPWR5G_HIGH_CBW80_SQ2 = 0,0 + +;----------------------------------------------------------------------------- +[RegAddr1] +;----------------------------------------------------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;RegAddr1,start_bit, stop_bit = 0x401420C0,4,0 +RegAddr_Config = 0x401420C0,4,0 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 11,11,11 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 11,11,11 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 20, 20, 20, 19, 19, 19, 17, 17 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 10, 10 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 10, 10, 10, 10, 10, 10, 10, 10 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 20, 19, 19, 17 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 13, 13, 13, 13, 11, 10 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 10, 10, 10, 10 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 20, 19 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 13, 13, 10 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 10, 10 + +;------------------------------------------------------------------------------ +[RegAddr2] +;----------------------------------------------------------------------------- +;RegAddr2,start_bit, stop_bit = 0x40142080,4,1 +RegAddr_Config = 0x40142080,4,1 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 7, 7, 7 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 7, 7, 7 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 6, 6, 6, 5, 5, 5, 6, 6 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 6, 6, 8, 8, 4, 4, 4, 4 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 6, 5, 5, 6 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 5, 5, 5, 5, 6, 6 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 6, 8, 4, 4 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 6, 5 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 5, 5, 6 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 8, 4 + +;------------------------------------------------------------------------------ +[RegAddr3] +;----------------------------------------------------------------------------- +;RegAddr3,start_bit, stop_bit = 0x40142080,16,12 +RegAddr_Config = 0x40142080,16,12 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 4, 4, 4 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 4, 4, 4 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 4, 4, 4, 4, 4, 4, 4, 4 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 8, 8, 6, 6, 6, 6, 6, 6, 8, 8, 4, 4 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 7, 7, 4, 4, 6, 6, 6, 6 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 4, 4, 4, 4 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 8, 6, 6, 6, 8, 4 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 7, 4, 6, 6 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 4, 4 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 8, 6, 4 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 4, 6 +;------------------------------------------------------------------------------ + + +;------------------------------------------------------------------------------ + + + + + + + + diff --git a/android/hardware/seekwave/firmware/calib/EA6521QT_SEEKWAVE_R00005.bin b/android/hardware/seekwave/firmware/calib/EA6521QT_SEEKWAVE_R00005.bin new file mode 100755 index 0000000..16c90dc --- /dev/null +++ b/android/hardware/seekwave/firmware/calib/EA6521QT_SEEKWAVE_R00005.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/calib/EA6521QT_SEEKWAVE_R00005.ini b/android/hardware/seekwave/firmware/calib/EA6521QT_SEEKWAVE_R00005.ini new file mode 100755 index 0000000..7ece14e --- /dev/null +++ b/android/hardware/seekwave/firmware/calib/EA6521QT_SEEKWAVE_R00005.ini @@ -0,0 +1,183 @@ +;****************************************************************************** +; Wifi Limit Setup file +;****************************************************************************** +[VERSION] +WT_VERSION = EA6521QT_20230728 +;增加2.4G PA寄存器优化兼容配置 +;----------------------------------------------------------------------------- +[CAL_POWER_INFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理txpower,s(8,2) +;发送给DUT之后,DUT会进行 <<Qnum 的操作,这里的数据不要提前移位 赋值的数值必须是10进制,与DUT侧对应 +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2 = 17, 17, 17, 17 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 15 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 13, 13, 12, 12 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 12, 12, 12, 15, 15, 15, 15, 15, 15, 15, 14, 13, 13, 11, 11, 11 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2 = 00, 00 + +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2_DELTA = 5.5, 5.5, 5.5, 4 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2_DELTA = 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2_DELTA = 4.5, 5.5, 4.5, 4.5, 4.5, 4.5, 5, 4.5, 5.5, 5, 5, 4.5, 5.3, 4.5, 5.5, 4.5, 4.5, 4.5, 4.5, 5, 5, 5.5, 4.5, 5.5, 4.5, 5.5 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3_DELTA = 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2_DELTA = 4.5, 4.5 +;----------------------------------------------------------------------------- +[CHAN_POWER_COMPINFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理。按频点补偿txpower,s(8,2),正数表示加功率,负数表示减功率 +;cbw20,2g 14个channel 1,2,3,4,5,6,7,8,9,10,11,12,13,14 +G_COMPCHANTXPWR2G_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,2g 9个channel 3,4,5,6,7,8,9,10,11 +G_COMPCHANTXPWR2G_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +G_COMPCHANTXPWR5G_LOW_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +G_COMPCHANTXPWR5G_MID_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +G_COMPCHANTXPWR5G_HIGH_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw40,5g low band 4个channel 38,46,54,62 +G_COMPCHANTXPWR5G_LOW_CBW40_SQ2 = 0,0,0,0 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +G_COMPCHANTXPWR5G_MID_CBW40_SQ2 = 0,0,0,0,0,0 +;cbw40,5g high band 4个 channel 151,159,167,175 +G_COMPCHANTXPWR5G_HIGH_CBW40_SQ2 = 0,0,0,0 +;cbw80,5g low band 2个 channel 42,58 +G_COMPCHANTXPWR5G_LOW_CBW80_SQ2 = 0,0 +;cbw80,5g mid band 3个 channel 106,122,138 +G_COMPCHANTXPWR5G_MID_CBW80_SQ2 = 0,0,0 +;cbw80,5g high band 2个 channel 155,171 +G_COMPCHANTXPWR5G_HIGH_CBW80_SQ2 = 0,0 + +;----------------------------------------------------------------------------- +[RegAddr1] +;----------------------------------------------------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;RegAddr1,start_bit, stop_bit= 0x401420C0,4,0(5G RegAddr) +RegAddr_Config = 0x401420C0,4,0 +;cbw20/cbw40 2g 3个channel 3,7,11 +;RegAddr1,start_bit, stop_bit= 0x401420C8,3,0(2G RegAddr) +RegAddr_2G_CBW20 = 14,14,15 +;标志位,RegAddr_2G_CBW40 = version, reserved, reserved +;version = 11:2G采用缺省配置; version = 20: 2G采用配置文件定义值 +RegAddr_2G_CBW40 = 20,11,11 +;cbw20,5g low band 8个channel 36, 40, 44, 48, 52, 56, 60, 64 +RegAddr_5G_LOW_CBW20 = 23, 24, 21, 21, 24, 22, 22, 20 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 11, 13, 11, 13, 13, 13, 15, 15, 13, 13, 12, 12 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 12, 14, 12, 12, 11, 11, 11, 11 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 20, 17, 19, 17 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 13, 11, 13, 14, 13, 12 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 13, 13, 10, 10 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 19, 19 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 11, 14, 11 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 12, 10 + +;------------------------------------------------------------------------------ +[RegAddr2] +;----------------------------------------------------------------------------- +;RegAddr2,start_bit, stop_bit (5G RegAddr) +RegAddr_Config = 0x40142080,4,1 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420A8,4,1 +RegAddr_2G_CBW20 = 9, 9, 9 +;cbw40/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420AC,4,1 +RegAddr_2G_CBW40 = 9, 9, 9 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 6, 6, 6, 5, 5, 5, 6, 6 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 7, 7, 7, 10, 10, 10, 10, 10, 8, 8, 8, 8 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 12, 12, 12, 12, 10, 10, 10, 10 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 6, 5, 5, 6 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 7, 5, 5, 10, 8, 8 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 8, 8, 4, 4 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 6, 5 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 8, 10, 8 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 9, 4 + +;------------------------------------------------------------------------------ +[RegAddr3] +;----------------------------------------------------------------------------- +;RegAddr3,start_bit, stop_bit (5G RegAddr) +RegAddr_Config = 0x40142080,16,12 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420A8,16,12 +RegAddr_2G_CBW20 = 18, 18, 18 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420AC,16,12 +RegAddr_2G_CBW40 = 18, 18, 18 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 4, 4, 4, 4, 4, 4, 4, 4 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 8, 8, 12, 10, 10, 10, 12, 12, 13, 13, 10, 10 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 16, 16, 12, 12, 12, 12, 12, 12 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 4, 4, 4, 4 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 10, 10, 6, 13, 10, 10 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 11, 11, 6, 6 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 4, 4 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 10, 12, 12 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 13, 6 +;------------------------------------------------------------------------------ + + +;------------------------------------------------------------------------------ + + + + + + + + diff --git a/android/hardware/seekwave/firmware/calib/EA6621QT_SEEKWAVE_R00005.bin b/android/hardware/seekwave/firmware/calib/EA6621QT_SEEKWAVE_R00005.bin new file mode 100755 index 0000000..16c90dc --- /dev/null +++ b/android/hardware/seekwave/firmware/calib/EA6621QT_SEEKWAVE_R00005.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/calib/EA6621QT_SEEKWAVE_R00005.ini b/android/hardware/seekwave/firmware/calib/EA6621QT_SEEKWAVE_R00005.ini new file mode 100755 index 0000000..d0e942d --- /dev/null +++ b/android/hardware/seekwave/firmware/calib/EA6621QT_SEEKWAVE_R00005.ini @@ -0,0 +1,183 @@ +;****************************************************************************** +; Wifi Limit Setup file +;****************************************************************************** +[VERSION] +WT_VERSION = EA6621QT_20230728 +;增加2.4G PA寄存器优化兼容配置 +;----------------------------------------------------------------------------- +[CAL_POWER_INFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理txpower,s(8,2) +;发送给DUT之后,DUT会进行 <<Qnum 的操作,这里的数据不要提前移位 赋值的数值必须是10进制,与DUT侧对应 +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2 = 17, 17, 17, 17 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 15 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 13, 13, 12, 12 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 12, 12, 12, 15, 15, 15, 15, 15, 15, 15, 14, 13, 13, 11, 11, 11 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2 = 00, 00 + +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2_DELTA = 5.5, 5.5, 5.5, 4 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2_DELTA = 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2_DELTA = 4.5, 5.5, 4.5, 4.5, 4.5, 4.5, 5, 4.5, 5.5, 5, 5, 4.5, 5.3, 4.5, 5.5, 4.5, 4.5, 4.5, 4.5, 5, 5, 5.5, 4.5, 5.5, 4.5, 5.5 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3_DELTA = 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2_DELTA = 4.5, 4.5 +;----------------------------------------------------------------------------- +[CHAN_POWER_COMPINFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理。按频点补偿txpower,s(8,2),正数表示加功率,负数表示减功率 +;cbw20,2g 14个channel 1,2,3,4,5,6,7,8,9,10,11,12,13,14 +G_COMPCHANTXPWR2G_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,2g 9个channel 3,4,5,6,7,8,9,10,11 +G_COMPCHANTXPWR2G_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +G_COMPCHANTXPWR5G_LOW_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +G_COMPCHANTXPWR5G_MID_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +G_COMPCHANTXPWR5G_HIGH_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw40,5g low band 4个channel 38,46,54,62 +G_COMPCHANTXPWR5G_LOW_CBW40_SQ2 = 0,0,0,0 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +G_COMPCHANTXPWR5G_MID_CBW40_SQ2 = 0,0,0,0,0,0 +;cbw40,5g high band 4个 channel 151,159,167,175 +G_COMPCHANTXPWR5G_HIGH_CBW40_SQ2 = 0,0,0,0 +;cbw80,5g low band 2个 channel 42,58 +G_COMPCHANTXPWR5G_LOW_CBW80_SQ2 = 0,0 +;cbw80,5g mid band 3个 channel 106,122,138 +G_COMPCHANTXPWR5G_MID_CBW80_SQ2 = 0,0,0 +;cbw80,5g high band 2个 channel 155,171 +G_COMPCHANTXPWR5G_HIGH_CBW80_SQ2 = 0,0 + +;----------------------------------------------------------------------------- +[RegAddr1] +;----------------------------------------------------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;RegAddr1,start_bit, stop_bit= 0x401420C0,4,0(5G RegAddr) +RegAddr_Config = 0x401420C0,4,0 +;cbw20/cbw40 2g 3个channel 3,7,11 +;RegAddr1,start_bit, stop_bit= 0x401420C8,3,0(2G RegAddr) +RegAddr_2G_CBW20 = 14,14,15 +;标志位,RegAddr_2G_CBW40 = version, reserved, reserved +;version = 11:2G采用缺省配置; version = 20: 2G采用配置文件定义值 +RegAddr_2G_CBW40 = 20,11,11 +;cbw20,5g low band 8个channel 36, 40, 44, 48, 52, 56, 60, 64 +RegAddr_5G_LOW_CBW20 = 23, 24, 21, 21, 24, 22, 22, 20 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 11, 13, 11, 13, 13, 13, 15, 15, 13, 13, 12, 12 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 12, 14, 12, 12, 11, 11, 11, 11 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 20, 17, 19, 17 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 13, 11, 13, 14, 13, 12 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 13, 13, 10, 10 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 19, 19 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 11, 14, 11 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 12, 10 + +;------------------------------------------------------------------------------ +[RegAddr2] +;----------------------------------------------------------------------------- +;RegAddr2,start_bit, stop_bit (5G RegAddr) +RegAddr_Config = 0x40142080,4,1 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420A8,4,1 +RegAddr_2G_CBW20 = 9, 9, 9 +;cbw40/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420AC,4,1 +RegAddr_2G_CBW40 = 9, 9, 9 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 6, 6, 6, 5, 5, 5, 6, 6 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 7, 7, 7, 10, 10, 10, 10, 10, 8, 8, 8, 8 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 12, 12, 12, 12, 10, 10, 10, 10 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 6, 5, 5, 6 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 7, 5, 5, 10, 8, 8 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 8, 8, 4, 4 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 6, 5 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 8, 10, 8 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 9, 4 + +;------------------------------------------------------------------------------ +[RegAddr3] +;----------------------------------------------------------------------------- +;RegAddr3,start_bit, stop_bit (5G RegAddr) +RegAddr_Config = 0x40142080,16,12 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420A8,16,12 +RegAddr_2G_CBW20 = 18, 18, 18 +;cbw20/cbw40 2g 3个channel 3,7,11, RegAddr = 0x401420AC,16,12 +RegAddr_2G_CBW40 = 18, 18, 18 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 4, 4, 4, 4, 4, 4, 4, 4 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 8, 8, 12, 10, 10, 10, 12, 12, 13, 13, 10, 10 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 16, 16, 12, 12, 12, 12, 12, 12 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 4, 4, 4, 4 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 10, 10, 6, 13, 10, 10 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 11, 11, 6, 6 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 4, 4 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 10, 12, 12 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 13, 6 +;------------------------------------------------------------------------------ + + +;------------------------------------------------------------------------------ + + + + + + + + diff --git a/android/hardware/seekwave/firmware/calib/EA6621Q_SEEKWAVE_R00005.bin b/android/hardware/seekwave/firmware/calib/EA6621Q_SEEKWAVE_R00005.bin new file mode 100755 index 0000000..4b472d6 --- /dev/null +++ b/android/hardware/seekwave/firmware/calib/EA6621Q_SEEKWAVE_R00005.bin Binary files differ diff --git a/android/hardware/seekwave/firmware/calib/EA6621Q_SEEKWAVE_R00005.ini b/android/hardware/seekwave/firmware/calib/EA6621Q_SEEKWAVE_R00005.ini new file mode 100755 index 0000000..9b2c945 --- /dev/null +++ b/android/hardware/seekwave/firmware/calib/EA6621Q_SEEKWAVE_R00005.ini @@ -0,0 +1,181 @@ +;****************************************************************************** +; Wifi Limit Setup file +;****************************************************************************** +[VERSION] +WT_VERSION = EA6621QF_20230728 +;优化TX EVM +;----------------------------------------------------------------------------- +[CAL_POWER_INFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理txpower,s(8,2) +;发送给DUT之后,DUT会进行 <<Qnum 的操作,这里的数据不要提前移位 赋值的数值必须是10进制,与DUT侧对应 +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2 = 17, 17, 17, 17 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 15 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 13, 13, 12, 12 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 12, 12, 12, 15, 15, 15, 15, 15, 15, 15, 14, 13, 13, 11, 11, 11 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3 = 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12, 16, 16, 16, 16, 16, 16, 16, 15, 14, 13, 13, 12, 12 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3 = 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13, 17, 17, 17, 17, 17, 17, 17, 15, 15, 14, 14, 13, 13 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2 = 00, 00 + +;注释:11b rate 1M,2M,5.5M,11M +G_TXPWR11B_UQ2_DELTA = 00, 00, 00, 00 +;注释:non-ht 2g cbw40 rate 6M/9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP2G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht 5g cbw40 rate 6M,9M,12M,18M,24M,36M,48M,54M; cbw80 rate 6M,9M,12M,18M,24M,36M,48M,54M +G_TXPWRNONHTDUP5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;注释:non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS2G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释non-ht/ht/vht/he cbw20 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw40 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;ht/vht/he cbw80 rate dcmMCS0,DCMMCS1/mcs0/6m/9m,DCMMCS3/12M/mcs1,DCMMCS4/18M/mcs2,24M/mcs3,36M/mcs4,48M/mcs5,54M/mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +G_TXPWRMCS5G_UQ2_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR5G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释he TB SMALL RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +;he TB BIG RU BIG POWER rate dcmMCS0,DCMMCS1/mcs0,DCMMCS3/mcs1,DCMMCS4/mcs2,mcs3,mcs4,mcs5,mcs6,mcs7,mcs8,mcs9,mcs10,mcs11, +TBMAXTXPWR2G_UQ3_DELTA = 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 +;写注释 5G,2G MIN TX POWER +TBMINTXPWR_SQ2_DELTA = 00, 00 +;----------------------------------------------------------------------------- +[CHAN_POWER_COMPINFO] +;----------------------------------------------------------------------------- +;设置浮点数,工具会自动做浮点转定点数的处理。按频点补偿txpower,s(8,2),正数表示加功率,负数表示减功率 +;cbw20,2g 14个channel 1,2,3,4,5,6,7,8,9,10,11,12,13,14 +G_COMPCHANTXPWR2G_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;cbw40,2g 9个channel 3,4,5,6,7,8,9,10,11 +G_COMPCHANTXPWR2G_CBW40_SQ2 = 0,0,0,0,0,0,0,0,0 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +G_COMPCHANTXPWR5G_LOW_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +G_COMPCHANTXPWR5G_MID_CBW20_SQ2 = 0,0,0,0,0,0,0,0,0,0,0,0 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +G_COMPCHANTXPWR5G_HIGH_CBW20_SQ2 = 0,0,0,0,0,0,0,0 +;cbw40,5g low band 4个channel 38,46,54,62 +G_COMPCHANTXPWR5G_LOW_CBW40_SQ2 = 0,0,0,0 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +G_COMPCHANTXPWR5G_MID_CBW40_SQ2 = 0,0,0,0,0,0 +;cbw40,5g high band 4个 channel 151,159,167,175 +G_COMPCHANTXPWR5G_HIGH_CBW40_SQ2 = 0,0,0,0 +;cbw80,5g low band 2个 channel 42,58 +G_COMPCHANTXPWR5G_LOW_CBW80_SQ2 = 0,0 +;cbw80,5g mid band 3个 channel 106,122,138 +G_COMPCHANTXPWR5G_MID_CBW80_SQ2 = 0,0,0 +;cbw80,5g high band 2个 channel 155,171 +G_COMPCHANTXPWR5G_HIGH_CBW80_SQ2 = 0,0 + +;----------------------------------------------------------------------------- +[RegAddr1] +;----------------------------------------------------------------------------- +;寄存器配置,RegAddr是寄存器地址,每个信道对应一个寄存器值 +;RegAddr1,start_bit, stop_bit = 0x401420C0,4,0 +RegAddr_Config = 0x401420C0,4,0 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 11,11,11 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 11,11,11 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 20, 20, 20, 19, 19, 19, 17, 17 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 10, 10 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 10, 10, 10, 10, 10, 10, 10, 10 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 20, 19, 19, 17 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 13, 13, 13, 13, 11, 10 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 10, 10, 10, 10 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 20, 19 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 13, 13, 10 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 10, 10 + +;------------------------------------------------------------------------------ +[RegAddr2] +;----------------------------------------------------------------------------- +;RegAddr2,start_bit, stop_bit = 0x40142080,4,1 +RegAddr_Config = 0x40142080,4,1 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 7, 7, 7 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 7, 7, 7 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 6, 6, 6, 5, 5, 5, 6, 6 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 6, 6, 8, 8, 4, 4, 4, 4 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 6, 5, 5, 6 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 5, 5, 5, 5, 6, 6 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 6, 8, 4, 4 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 6, 5 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 5, 5, 6 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 8, 4 + +;------------------------------------------------------------------------------ +[RegAddr3] +;----------------------------------------------------------------------------- +;RegAddr3,start_bit, stop_bit = 0x40142080,16,12 +RegAddr_Config = 0x40142080,16,12 +;cbw20 2g 3个channel 3,7,11 +RegAddr_2G_CBW20 = 4, 4, 4 +;cbw40 2g 3个channel 3,7,11 +RegAddr_2G_CBW40 = 4, 4, 4 +;cbw20,5g low band 8个channel 36,40,44,48,52,56,60,64 +RegAddr_5G_LOW_CBW20 = 4, 4, 4, 4, 4, 4, 4, 4 +;cbw20,5g mid band 12个 channel 100,104,108,112,116,120,124,128,132,136,140,144 +RegAddr_5G_MID_CBW20 = 8, 8, 6, 6, 6, 6, 6, 6, 8, 8, 4, 4 +;cbw20,5g high band 8个 channel 149,153,157,161,165,169,173,177 +RegAddr_5G_HIGH_CBW20 = 7, 7, 4, 4, 6, 6, 6, 6 +;cbw40,5g low band 4个channel 38,46,54,62 +RegAddr_5G_LOW_CBW40 = 4, 4, 4, 4 +;cbw40,5g mid band 6个 channel 102,110,118,126,134,142 +RegAddr_5G_MID_CBW40 = 8, 6, 6, 6, 8, 4 +;cbw40,5g high band 4个 channel 151,159,167,175 +RegAddr_5G_HIGH_CBW40 = 7, 4, 6, 6 +;cbw80,5g low band 2个 channel 42,58 +RegAddr_5G_LOW_CBW80 = 4, 4 +;cbw80,5g mid band 3个 channel 106,122,138 +RegAddr_5G_MID_CBW80 = 8, 6, 4 +;cbw80,5g high band 2个 channel 155,171 +RegAddr_5G_HIGH_CBW80 = 4, 6 +;------------------------------------------------------------------------------ + + +;------------------------------------------------------------------------------ + + + + + + + + diff --git a/android/hardware/seekwave/firmware/device-skw.mk b/android/hardware/seekwave/firmware/device-skw.mk new file mode 100755 index 0000000..2138833 --- /dev/null +++ b/android/hardware/seekwave/firmware/device-skw.mk @@ -0,0 +1,24 @@ +# +# Copyright (C) 2008 The Android Open Source Project +# +# 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. +# + +######################## + +PRODUCT_COPY_FILES += \ + #hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_IRAM_SDIO.bin:$(TARGET_COPY_OUT_VENDOR)/etc/firmware/SWT6621S_IRAM_SDIO.bin \ + #hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_DRAM_SDIO.bin:$(TARGET_COPY_OUT_VENDOR)/etc/firmware/SWT6621S_DRAM_SDIO.bin \ + #hardware/seekwave/firmware/SDIO-Fimware/SWT6621S_SEEKWAVE_R00001.bin:$(TARGET_COPY_OUT_VENDOR)/etc/firmware/SWT6621S_SEEKWAVE_R00001.bin +PRODUCT_COPY_FILES += $(call find-copy-subdir-files,*,hardware/seekwave/firmware/SDIO-Fimware,$(TARGET_COPY_OUT_VENDOR)/etc/firmware) +######################## diff --git a/android/hardware/seekwave/skwbt/Android.mk b/android/hardware/seekwave/skwbt/Android.mk new file mode 100755 index 0000000..02e0043 --- /dev/null +++ b/android/hardware/seekwave/skwbt/Android.mk @@ -0,0 +1,43 @@ + +LOCAL_PATH := $(call my-dir) + +ifneq ($(BOARD_HAVE_BLUETOOTH_SEEKWAVE),) + +include $(CLEAR_VARS) + +BDROID_DIR := $(TOP_DIR)system/bt +ifeq ($(PLATFORM_VERSION),13) +BDROID_DIR := $(TOP_DIR)packages/modules/Bluetooth/system +else ifeq ($(PLATFORM_VERSION),14) +BDROID_DIR := $(TOP_DIR)packages/modules/Bluetooth/system +endif + +LOCAL_SRC_FILES := \ + src/bt_vendor_skw.c \ + src/scom_vendor.c \ + src/skw_log.c \ + src/skw_gen_addr.c \ + src/skw_ext.c \ + src/skw_btsnoop.c + +LOCAL_C_INCLUDES += \ + $(LOCAL_PATH)/include \ + $(BDROID_DIR)/hci/include + +LOCAL_C_INCLUDES += $(bdroid_C_INCLUDES) +LOCAL_CFLAGS += $(bdroid_CFLAGS) + +LOCAL_SHARED_LIBRARIES := \ + libcutils \ + libutils \ + liblog + +LOCAL_MODULE := libbt-vendor +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_CLASS := SHARED_LIBRARIES +LOCAL_MODULE_OWNER := seekwave +LOCAL_PROPRIETARY_MODULE := true + +include $(BUILD_SHARED_LIBRARY) + +endif #BOARD_HAVE_BLUETOOTH_SEEKWAVE diff --git a/android/hardware/seekwave/skwbt/include/bt_vendor_skw.h b/android/hardware/seekwave/skwbt/include/bt_vendor_skw.h new file mode 100755 index 0000000..625e119 --- /dev/null +++ b/android/hardware/seekwave/skwbt/include/bt_vendor_skw.h @@ -0,0 +1,64 @@ +/****************************************************************************** + * + * Copyright (C) 2020-2021 SeekWave Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * + ******************************************************************************/ + +#ifndef __BT_VENDOR_SKW_H__ +#define __BT_VENDOR_SKW_H__ + + +#include "bt_vendor_lib.h" +#include <string.h> +#include <fcntl.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <dirent.h> +#include <sys/stat.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/ioctl.h> +#include <sys/epoll.h> +#include <sys/eventfd.h> +#include <unistd.h> +#include <ctype.h> +#include <cutils/properties.h> + + +#define SKW_LIBBT_VERSION "0.2" + +#define SKWBT_TRANS_TYPE_H4 0x01 +#define SKWBT_TRANS_TYPE_UART 0x10 +#define SKWBT_TRANS_TYPE_SDIO 0x20 +#define SKWBT_TRANS_TYPE_USB 0x40 + + +#define SKW_CHIPID_6316 0x5301 +#define SKW_CHIPID_6160 0x0017 +#define SKW_CHIPID_6160_LITE 0x5302 + + +//#define IOCTL_CMD_WAKEUP_ADV_EN 0x01 +#define IOCTL_CMD_LOG_EN_GET _IOWR('S', 2, uint8_t *) + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + + +extern bt_vendor_callbacks_t *bt_vendor_cbacks; +extern char skwbt_transtype; +extern char skwbtuartonly; +extern char skwbtNoSleep; +extern int btboot_fp; +extern int btpw_fp; + +#endif /*BT_UNUSED_H*/ diff --git a/android/hardware/seekwave/skwbt/include/scom_vendor.h b/android/hardware/seekwave/skwbt/include/scom_vendor.h new file mode 100755 index 0000000..7e44071 --- /dev/null +++ b/android/hardware/seekwave/skwbt/include/scom_vendor.h @@ -0,0 +1,219 @@ +/****************************************************************************** + * + * Copyright (C) 2020-2021 SeekWave Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * + ******************************************************************************/ + +#ifndef __SCOM_VENDOR_H__ +#define __SCOM_VENDOR_H__ + +#include <sys/types.h> + + +/* Structure used to configure serial port during open */ +typedef struct +{ + uint16_t fmt; /* Data format */ + uint8_t baud; /* Baud rate */ + uint8_t hw_fctrl; /*hardware flowcontrol*/ +} tUSERIAL_CFG; + + +/* Hardware Configuration State */ +enum { + HW_CFG_INIT = 0x00, + HW_CFG_START, + HW_CFG_WRITE_OS_TYPE, + HW_CFG_READ_HCI_VERSION, + HW_CFG_NV_SEND, + HW_CFG_NV_SEND_CMPL, + HW_CFG_WRITE_BD_ADDR, + HW_CFG_WRITE_WAKEUP_ADV_DATA, + HW_RESET_CONTROLLER, + HARDWARE_INIT_COMPLETE +}; + +#define HCI_CMD_MAX_LEN 258 + +#define NV_FILE_RD_BLOCK_SIZE 252 +#define DEVICE_NODE_MAX_LEN 64 + +#define NV_TAG_BD_ADDR 0x01 +#define NV_TAG_DSP_LOG_SETTING 0x05 + +#define SCOM_READ_BUFFER_LEN 2056 + +enum{ + BT_COM_PORT_CMDEVT = 0x0,//CMD/Evet, in case of UART:ACL + AUDIO + BT_COM_PORT_ACL,//ACL IN/OUT + BT_COM_PORT_AUDIO,//AUDIO IN/OUT + BT_COM_PORT_ISO, + BT_COM_PORT_SIZE +}; + + +typedef struct +{ + uint32_t baudrate; //for UART + uint8_t state; /* Hardware configuration state mechine*/ + uint8_t file_offset;//for nv + FILE * nv_fp; +} bt_hw_cfg_cb_st; + +typedef struct +{ + int fd; // + int socket_fd[2]; + int signal_fd[2]; + int epoll_fd; + struct termios termios; /* serial terminal of BT port */ + char port_name[DEVICE_NODE_MAX_LEN]; + pthread_t thread_socket_id; + pthread_t thread_uart_id; + char thread_running; + char recv_comm_thread_running; + char is_busying; + char read_retry; + + volatile char driver_state; + int mode; +} scomm_vnd_st; + +typedef struct{ + int fd; // the file descriptor to monitor for events. + void *context; // a context that's passed back to the *_ready functions.. + pthread_mutex_t lock; // protects the lifetime of this object and all variables. + + void (*read_ready)(void *context); // function to call when the file descriptor becomes readable. + void (*write_ready)(void *context); // function to call when the file descriptor becomes writeable. +}skw_socket_object_st; + + + +#define HCI_CMD_PREAMBLE_SIZE 3 +#define HCI_EVT_CMD_CMPL_OPCODE_OFFSET 3 //opcode's offset in HCI_Command_Complete Event +#define HCI_EVT_CMD_CMPL_STATUS_OFFSET 5 //status's offset in HCI_Command_Complete Event + + + +/* + * Definitions for HCI groups +*/ +#define HCI_GRP_LINK_CONTROL_CMDS (0x01 << 10) /* 0x0400 */ +#define HCI_GRP_LINK_POLICY_CMDS (0x02 << 10) /* 0x0800 */ +#define HCI_GRP_HOST_CONT_BASEBAND_CMDS (0x03 << 10) /* 0x0C00 */ +#define HCI_GRP_INFORMATIONAL_PARAMS (0x04 << 10) /* 0x1000 */ +#define HCI_GRP_STATUS_PARAMS (0x05 << 10) /* 0x1400 */ +#define HCI_GRP_TESTING_CMDS (0x06 << 10) /* 0x1800 */ +#define HCI_GRP_BLE_CMDS (0x08 << 10) /* 0x2000 (LE Commands) */ + +#define HCI_GRP_VENDOR_SPECIFIC (0x3F << 10) /* 0xFC00 */ + +/* Group occupies high 6 bits of the HCI command rest is opcode itself */ +#define HCI_OGF(p) (uint8_t)((0xFC00 & (p)) >> 10) +#define HCI_OCF(p) (0x3FF & (p)) + + +#define HCI_RESET (0x0003 | HCI_GRP_HOST_CONT_BASEBAND_CMDS) +#define HCI_READ_LOCAL_VERSION_INFO (0x0001 | HCI_GRP_INFORMATIONAL_PARAMS) + +#define HCI_CMD_SKW_BT_NVDS 0xFC80 +#define HCI_CMD_WRITE_BD_ADDR 0xFC82 +#define HCI_CMD_WRITE_OS_TYPE 0xFC83 +#define HCI_CMD_WRITE_WAKEUP_ADV_DATA 0xFC84 +#define HCI_CMD_WRITE_WAKEUP_ADV_ENABLE 0xFC85 + + +#define HCI_COMMAND_COMPLETE_EVENT 0x0E +#define HCI_COMMAND_STATUS_EVENT 0x0F +#define HCI_HARDWARE_ERROR_EVENT 0x10 + +#define HWERR_CODE_CP_ERROR 0x10 + +#define CP_ERR_ENOTCONN -107 //Transport endpoint + + +#define HCI_COMMAND_PKT_PREAMBLE_SIZE 0x03 +#define HCI_ACLDATA_PKT_PREAMBLE_SIZE 0x04 +#define HCI_SCODATA_PKT_PREAMBLE_SIZE 0x03 +#define HCI_EVENT_PKT_PREAMBLE_SIZE 0x02 +#define HCI_ISODATA_PKT_PREAMBLE_SIZE 0x04 +#define HCI_EVENT_SKWLOG_PREAMBLE_SIZE 0x03 + +#define HCI_COMMON_DATA_LENGTH_INDEX 0x03 +#define HCI_EVENT_DATA_LENGTH_INDEX 0x02 +#define HCI_SKWLOG_DATA_LENGTH_INDEX 0x02 + + + +//---------------------UART Para Start-------------------------// + +/**** 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) + + +#define USERIAL_HW_FLOW_CTRL_OFF 0 +#define USERIAL_HW_FLOW_CTRL_ON 1 + + +//---------------------UART Para End-------------------------// + + + +void scomm_vendor_init(); + +void scomm_vendor_set_port_name(uint8_t port_index, char *port_name, int mode); + +uint8_t scomm_vendor_check_port_valid(uint8_t port_index); + +int scomm_vendor_uart_open(uint8_t port_index); + +int scomm_vendor_usbsdio_open(uint8_t port_index); + +int scomm_vendor_socket_open(uint8_t port_index); + +void scomm_vendor_close(); + +void scomm_vendor_config_start(); + +void scomm_vendor_write_bt_state(); + +void scomm_vendor_parse_wakeup_adv_conf(char *data_str); + + +#endif diff --git a/android/hardware/seekwave/skwbt/include/skw_btsnoop.h b/android/hardware/seekwave/skwbt/include/skw_btsnoop.h new file mode 100755 index 0000000..4b7fd10 --- /dev/null +++ b/android/hardware/seekwave/skwbt/include/skw_btsnoop.h @@ -0,0 +1,49 @@ +/****************************************************************************** + * + * Copyright (C) 2020-2021 SeekWave Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * + ******************************************************************************/ + + +#ifndef __SKW_BTSNOOP_H__ +#define __SKW_BTSNOOP_H__ + + +#include <assert.h> +#include <errno.h> +#include <netinet/in.h> +#include <pthread.h> +#include <stdbool.h> +#include <string.h> +#include <sys/prctl.h> +#include <sys/socket.h> +#include <sys/types.h> +#include <time.h> +#include <utils/Log.h> +#include <sys/stat.h> +#include <stdio.h> +#include <stdlib.h> +#include <fcntl.h> + + + + +/* HCI Packet types */ +#define HCI_COMMAND_PKT 0x01 +#define HCI_ACLDATA_PKT 0x02 +#define HCI_SCODATA_PKT 0x03 +#define HCI_EVENT_PKT 0x04 +#define HCI_ISO_PKT 0x05 +#define HCI_EVENT_SKWLOG 0x07 + + +void skw_btsnoop_init(); +void skw_btsnoop_close(void); +void skw_btsnoop_capture(const uint8_t *packet, char is_received); + + + + +#endif diff --git a/android/hardware/seekwave/skwbt/include/skw_common.h b/android/hardware/seekwave/skwbt/include/skw_common.h new file mode 100755 index 0000000..072e70e --- /dev/null +++ b/android/hardware/seekwave/skwbt/include/skw_common.h @@ -0,0 +1,47 @@ +/****************************************************************************** + * + * Copyright (C) 2020-2021 SeekWave Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * + ******************************************************************************/ + +#ifndef __SKW_COMMON_H__ +#define __SKW_COMMON_H__ + +#define SKW_UNUSED(x) (void)(x) +//#define SKW_UNUSED(x) (x = x) + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + + +#ifndef UINT8_TO_STREAM +#define UINT8_TO_STREAM(p, u8) {*(p)++ = (uint8_t)(u8);} +#endif + + +#ifndef UINT16_TO_STREAM +#define UINT16_TO_STREAM(p, u16) {*(p)++ = (uint8_t)(u16); *(p)++ = (uint8_t)((u16) >> 8);} +#endif + +#ifndef STREAM_TO_UINT16 +#define STREAM_TO_UINT16(u16, p) {u16 = ((uint16_t)(*(p)) + (((uint16_t)(*((p) + 1))) << 8)); (p) += 2;} +#endif + + +#define RW_NO_INTR(func) do {} while (((func) == -1) && (errno == EINTR)) + + +extern char skwdriverlog_en; +#define SKWBT_LOG(fmt, args...) do{if(skwdriverlog_en){ALOGD("[SKWBT]:" fmt, ## args);}}while(0) + +#define SKW_LOG_DEFAULT_SIZE (100 * 1024 * 1024)//300M + + +#endif diff --git a/android/hardware/seekwave/skwbt/include/skw_ext.h b/android/hardware/seekwave/skwbt/include/skw_ext.h new file mode 100755 index 0000000..3264a2f --- /dev/null +++ b/android/hardware/seekwave/skwbt/include/skw_ext.h @@ -0,0 +1,41 @@ +/****************************************************************************** + * + * Copyright (C) 2020-2021 SeekWave Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * + ******************************************************************************/ +#ifndef __SKW_EXT_H__ +#define __SKW_EXT_H__ + +#define BLE_ADV_WAKEUP_ENABLE 1 + + + +#define BLE_ADV_WAKEUP_GRP_NUMS 3 + +typedef struct +{ + uint8_t grp_len; + uint8_t addr_offset; + uint8_t data[32]; + uint8_t mask[32]; +} Wakeup_ADV_Grp_St; + +typedef struct +{ + uint8_t gpio_no; + uint8_t level; + uint8_t data_len;//total len + uint8_t grp_nums; + Wakeup_ADV_Grp_St adv_group[BLE_ADV_WAKEUP_GRP_NUMS]; +} Wakeup_ADV_Info_St; + + +void skw_ext_inotify_thread_init(void); + +void skw_ext_inotify_thread_exit(void); + + + +#endif diff --git a/android/hardware/seekwave/skwbt/include/skw_gen_addr.h b/android/hardware/seekwave/skwbt/include/skw_gen_addr.h new file mode 100755 index 0000000..e71aa11 --- /dev/null +++ b/android/hardware/seekwave/skwbt/include/skw_gen_addr.h @@ -0,0 +1,19 @@ +/****************************************************************************** + * + * Copyright (C) 2020-2021 SeekWave Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * + ******************************************************************************/ + +#ifndef __SKW_GEN_ADDR_H__ +#define __SKW_GEN_ADDR_H__ + +void skw_addr_gen_init(); + +void skw_addr_get(unsigned char *buffer); + +char skw_addr_from_ap(unsigned char *bd_addr); + + +#endif diff --git a/android/hardware/seekwave/skwbt/include/skw_log.h b/android/hardware/seekwave/skwbt/include/skw_log.h new file mode 100755 index 0000000..02ab369 --- /dev/null +++ b/android/hardware/seekwave/skwbt/include/skw_log.h @@ -0,0 +1,23 @@ +/****************************************************************************** + * + * Copyright (C) 2020-2021 SeekWave Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * + ******************************************************************************/ + +#ifndef __SKW_LOG_H__ +#define __SKW_LOG_H__ + +void skwlog_init(); + +void skwlog_reopen(char new_file); + +void skwlog_print_current_time(); + +void skwlog_write(unsigned char *buffer, unsigned int length); + +void skwlog_close(); + + +#endif diff --git a/android/hardware/seekwave/skwbt/skwbt.mk b/android/hardware/seekwave/skwbt/skwbt.mk new file mode 100755 index 0000000..5c1cbc9 --- /dev/null +++ b/android/hardware/seekwave/skwbt/skwbt.mk @@ -0,0 +1,8 @@ + +CUR_PATH := hardware/seekwave/skwbt + + +PRODUCT_COPY_FILES += $(call find-copy-subdir-files,*,$(CUR_PATH)/vendor/etc/bluetooth,vendor/etc/bluetooth) + + +$(call inherit-product, hardware/seekwave/firmware/device-skw.mk) diff --git a/android/hardware/seekwave/skwbt/src/bt_vendor_skw.c b/android/hardware/seekwave/skwbt/src/bt_vendor_skw.c new file mode 100755 index 0000000..33eaae8 --- /dev/null +++ b/android/hardware/seekwave/skwbt/src/bt_vendor_skw.c @@ -0,0 +1,545 @@ +/****************************************************************************** + * + * Copyright (C) 2020-2021 SeekWave Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * + ******************************************************************************/ + +/****************************************************************************** + * + * Filename: bt_vendor_skw.c + * + * Description: SeekWave vendor specific library implementation + * + ******************************************************************************/ + +#undef NDEBUG +#define LOG_TAG "libbt_vendor" + + +#include <utils/Log.h> +#include "bt_vendor_skw.h" +#include "scom_vendor.h" +#include "skw_btsnoop.h" +#include "skw_log.h" +#include "skw_gen_addr.h" +#include "skw_common.h" +#include <cutils/properties.h> +#include "skw_ext.h" + +#define SKWBT_CONFIG_FILE "/vendor/etc/bluetooth/skwbt.conf" + +bt_vendor_callbacks_t *bt_vendor_cbacks = NULL; +uint8_t vnd_local_bd_addr[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +uint8_t port_cnts = 0; + +char skwbt_transtype = 0; +static char skwbt_device_node[BT_COM_PORT_SIZE][DEVICE_NODE_MAX_LEN + 1]; + +int btboot_fp = -1; +int btpw_fp = -1; +char btsnoop_log_en = FALSE; +char btcp_log_en = FALSE; +char skwlog_slice = FALSE; +char skwdriverlog_en = TRUE; +char skwbtuartonly = TRUE; +char skwbtNoSleep = FALSE; //No Sleep + +extern char skw_btsnoop_path[]; +extern char btsnoop_save_log; +extern Wakeup_ADV_Info_St wakeup_ADV_Info; + +static char *trim(char *str) +{ + while (isspace(*str)) + { + ++str; + } + + if (!*str) + { + return str; + } + + char *end_str = str + strlen(str) - 1; + while (end_str > str && isspace(*end_str)) + { + --end_str; + } + + end_str[1] = '\0'; + return str; +} + + +static void load_skwbt_conf() +{ + memset(skwbt_device_node, 0, sizeof(skwbt_device_node)); + FILE *fp = fopen(SKWBT_CONFIG_FILE, "rt"); + if (!fp) + { + //ALOGE("%s unable to open file '%s': %s", __func__, SKWBT_CONFIG_FILE, strerror(errno)); + strcpy(skwbt_device_node[0], "/dev/ttyS0"); + return ; + } + + char *split; + char line[1024]; + int port_index = BT_COM_PORT_CMDEVT; + + while (fgets(line, sizeof(line), fp)) + { + char *line_ptr = trim(line); + + // Skip blank and comment lines. + if (*line_ptr == '\0' || *line_ptr == '#' || *line_ptr == '[') + { + continue; + } + + split = strchr(line_ptr, '='); + if (!split) + { + ALOGE("%s no key/value separator found", __func__); + fclose(fp); + return; + } + + *split = '\0'; + split ++; + if((!strcmp(trim(line_ptr), "BtDeviceNode")) && (port_index < BT_COM_PORT_SIZE)) + { + int mode = O_RDWR; + char *str_ptr = trim(split); + int len = strlen(str_ptr); +#if 0 + if(strstr(split, "BTDATA")) + { + port_index = BT_COM_PORT_ACL; + } + else if(strstr(split, "BTAUDIO")) + { + port_index = BT_COM_PORT_AUDIO; + } + else if(strstr(split, "BTISOC")) + { + port_index = BT_COM_PORT_ISO; + } +#endif + if(len > DEVICE_NODE_MAX_LEN) + { + len = DEVICE_NODE_MAX_LEN; + str_ptr[DEVICE_NODE_MAX_LEN] = 0x00; + } + memcpy(skwbt_device_node[port_index], str_ptr, len); + scomm_vendor_set_port_name(port_index, skwbt_device_node[port_index], mode); + + port_index ++; + } + } + + + fclose(fp); + + skwbt_transtype = SKWBT_TRANS_TYPE_H4; + if(skwbt_device_node[0][0] == '?') + { + int i = 0; + while(skwbt_device_node[0][i] != '\0') + { + skwbt_device_node[0][i] = skwbt_device_node[0][i + 1]; + i++; + } + scomm_vendor_set_port_name(0, skwbt_device_node[0], O_RDWR); + skwbt_transtype |= SKWBT_TRANS_TYPE_UART; + } +} + +char skwbt_boot_open() +{ + btboot_fp = open("/dev/BTBOOT", O_RDWR); + if (btboot_fp < 0) + { + ALOGE("%s: unable to open : %s", __func__, strerror(errno)); + return FALSE; + } + return TRUE; +} + + +static void load_skwbt_stack_conf() +{ + FILE *fp = fopen(SKWBT_CONFIG_FILE, "rt"); + if (!fp) + { + ALOGE("%s unable to open file '%s': %s", __func__, SKWBT_CONFIG_FILE, strerror(errno)); + return; + } + char *split; + int line_num = 0; + char line[1024]; + while (fgets(line, sizeof(line), fp)) + { + char *line_ptr = trim(line); + ++line_num; + + // Skip blank and comment lines. + if (*line_ptr == '\0' || *line_ptr == '#' || *line_ptr == '[') + { + continue; + } + + split = strchr(line_ptr, '='); + if (!split) + { + ALOGE("%s no key/value separator found on line %d.", __func__, line_num); + continue; + } + + *split = '\0'; + + if(!strcmp(trim(line_ptr), "SkwBtsnoopDump")) + { + if(!strcmp(trim(split + 1), "true")) + { + btsnoop_log_en = TRUE; + } + else + { + btsnoop_log_en = FALSE; + } + } + else if(!strcmp(trim(line_ptr), "BtSnoopFileName")) + { + sprintf(skw_btsnoop_path, "%s", trim(split + 1)); + } + else if(!strcmp(trim(line_ptr), "BtSnoopSaveLog")) + { + if(!strcmp(trim(split + 1), "true")) + { + btsnoop_save_log = TRUE; + } + else + { + btsnoop_save_log = FALSE; + } + } + else if(!strcmp(trim(line_ptr), "SkwBtcplog")) + { + if(!strcmp(trim(split + 1), "true")) + { + btcp_log_en = TRUE; + } + else + { + btcp_log_en = FALSE; + } + } + else if(!strcmp(trim(line_ptr), "SkwLogSlice")) + { + if(!strcmp(trim(split + 1), "true")) + { + skwlog_slice = TRUE; + } + else + { + skwlog_slice = FALSE; + } + } + else if(!strcmp(trim(line_ptr), "SkwBtDrvlog")) + { + if(!strcmp(trim(split + 1), "false")) + { + skwdriverlog_en = FALSE; + } + } + else if(!strcmp(trim(line_ptr), "SkwBtUartOnly")) + { + if(!strcmp(trim(split + 1), "false"))//SkwBtUartOnly is false + { + skwbtuartonly = FALSE; + } + } + else if(!strcmp(trim(line_ptr), "SkwBtNoSleep")) + { + if(strcmp(trim(split + 1), "true") == 0)//SkwBtNoSleep is true + { + skwbtNoSleep = TRUE; + } + } + else if(!strcmp(trim(line_ptr), "WakeupADVData")) + { + char *data_str = trim(split + 1); + if(data_str) + { + scomm_vendor_parse_wakeup_adv_conf(data_str); + } + } + + + } + + fclose(fp); +} + + + + +/***************************************************************************** +** +** BLUETOOTH VENDOR INTERFACE LIBRARY FUNCTIONS +** +*****************************************************************************/ + + + +/** initialise **/ +static int init(const bt_vendor_callbacks_t *p_cb, unsigned char *local_bdaddr) +{ + ALOGI("SeekWave BlueTooth Version: %s", SKW_LIBBT_VERSION); + if (p_cb == NULL) + { + ALOGE("init failed with no user callbacks!"); + return -1; + } + + scomm_vendor_init(); + + load_skwbt_conf(); + load_skwbt_stack_conf(); + skwlog_init(); + + + bt_vendor_cbacks = (bt_vendor_callbacks_t *) p_cb;//save callback + memcpy(vnd_local_bd_addr, local_bdaddr, 6); + + if(btsnoop_log_en) + { + //enable btsnoop log + skw_btsnoop_init(); + } + skw_addr_gen_init(); + + return 0; +} + +/** operations **/ +static int op(bt_vendor_opcode_t opcode, void *param) +{ + int retval = 0; + + ALOGD("op for %d", opcode); + + switch(opcode) + { + case BT_VND_OP_POWER_CTRL: + { + if(skwbt_transtype & SKWBT_TRANS_TYPE_UART) + { + int *state = (int *) param; + if (*state == BT_VND_PWR_OFF) + { + usleep(200000); + ALOGD("set power off and delay 200ms"); + } + else if (*state == BT_VND_PWR_ON) + { + usleep(200000); + ALOGD("set power on and delay 200ms"); + } + } + } + break; + + case BT_VND_OP_FW_CFG: + { + scomm_vendor_config_start(); + } + break; + + case BT_VND_OP_SCO_CFG: + { + retval = -1; + } + break; + + case BT_VND_OP_USERIAL_OPEN: + { + int fd = -1, idx = 0; + int (*fd_array)[] = (int (*)[]) param; + + + if(skwbt_transtype & SKWBT_TRANS_TYPE_UART) + { + if(skwbtuartonly == FALSE) + { + SKWBT_LOG("open boot"); + if(!skwbt_boot_open()) + { + retval = 0; + break; + } + btpw_fp = open("/dev/BTDATA", O_RDWR); + } + if(scomm_vendor_uart_open(0) != -1) + { + retval = 1; + fd = scomm_vendor_socket_open(0); + } + } + else + { + int tFd = -1; + //uint8_t log_enable = 0; + if(!skwbt_boot_open()) + { + retval = 0; + break; + } +#if 0 + if(ioctl(btboot_fp, IOCTL_CMD_LOG_EN_GET, &log_enable) == 0) + { + ALOGD("SKWBT log_enable res:%d, btcp_log_en:%d, btsnoop_log_en:%d", log_enable, btcp_log_en, btsnoop_log_en); + if(btcp_log_en && log_enable)//0:default, 1:release version; 2:debug version + { + btcp_log_en = log_enable == 2; + } + if(btsnoop_log_en && log_enable) + { + btsnoop_log_en = log_enable == 2; + } + } +#endif + +#ifdef IOCTL_CMD_WAKEUP_ADV_EN + if(wakeup_ADV_Info.grp_nums > 0) + { + int res = ioctl(btboot_fp, IOCTL_CMD_WAKEUP_ADV_EN); + ALOGD("%s, wakeup adv en res:%d", __func__, res); + } +#endif + for (idx = 0; idx < BT_COM_PORT_SIZE; idx++) + { + if(scomm_vendor_check_port_valid(idx) == FALSE) + { + continue; + } + if(scomm_vendor_usbsdio_open(idx) != -1) + { + tFd = scomm_vendor_socket_open(idx); + + ALOGD("idx:%d, tFd:%d, fd:%d", idx, tFd, fd); + if((tFd != -1) && (fd == -1)) + { + fd = tFd; + } + } + else + { + break; + } + } + + if(idx <= BT_COM_PORT_ACL) + { + skwbt_transtype |= SKWBT_TRANS_TYPE_USB; + } + else + { + skwbt_transtype |= SKWBT_TRANS_TYPE_SDIO; + } + } + ALOGD("retval:%d, fd:%d, idx:%d", retval, fd, idx); + + if (fd != -1) + { + retval = 1; + for (idx = 0; idx < CH_MAX; idx++) + { + (*fd_array)[idx] = fd; + } + skw_ext_inotify_thread_init(); + property_set("SKWBT.OPEN.STATE", "1"); + } + else + { + retval = 0; + } + } + break; + + case BT_VND_OP_USERIAL_CLOSE: + { + if(btboot_fp > 0) + { + scomm_vendor_write_bt_state(); + close(btboot_fp); + btboot_fp = -1; + } + scomm_vendor_close(); + skw_ext_inotify_thread_exit(); + property_set("SKWBT.OPEN.STATE", "0"); + } + break; + + case BT_VND_OP_GET_LPM_IDLE_TIMEOUT: + { + + } + break; + + case BT_VND_OP_LPM_SET_MODE: + { + + } + break; + + case BT_VND_OP_LPM_WAKE_SET_STATE: + { + + } + break; + case BT_VND_OP_EPILOG: + { + if(bt_vendor_cbacks) + { + bt_vendor_cbacks->epilog_cb(BT_VND_OP_RESULT_SUCCESS); + } + } + break; + + default: + break; + } + + return retval; +} + + +/** Close **/ +static void cleanup( void ) +{ + ALOGD("bt_vendor_skw.c cleanup"); + + if(btsnoop_log_en) + { + skw_btsnoop_close(); + } + skwlog_close(); + + btsnoop_log_en = FALSE; + bt_vendor_cbacks = NULL; + skwbt_transtype = 0; +} + + + +// Entry point +const bt_vendor_interface_t BLUETOOTH_VENDOR_LIB_INTERFACE = {sizeof(bt_vendor_interface_t), + init, + op, + cleanup + }; + + diff --git a/android/hardware/seekwave/skwbt/src/scom_vendor.c b/android/hardware/seekwave/skwbt/src/scom_vendor.c new file mode 100755 index 0000000..c2d2e4d --- /dev/null +++ b/android/hardware/seekwave/skwbt/src/scom_vendor.c @@ -0,0 +1,1747 @@ +/****************************************************************************** + * + * Copyright (C) 2020-2021 SeekWave Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * + ******************************************************************************/ + +/****************************************************************************** + * + * Filename: scom_vendor.c + * + * Description: serials communication operation + * + ******************************************************************************/ + +#include <pthread.h> +#include <utils/Log.h> +#include <termios.h> +#include <fcntl.h> +#include <errno.h> +#include <stdio.h> +#include <sys/eventfd.h> +#include <cutils/sockets.h> +#include <sys/poll.h> +#include <assert.h> +#include "scom_vendor.h" +#include "bt_hci_bdroid.h" +#include "skw_common.h" +#include "bt_vendor_skw.h" +#include "skw_btsnoop.h" +#include "skw_log.h" +#include "skw_gen_addr.h" +#include "skw_ext.h" + + + +bt_hw_cfg_cb_st hw_cfg_cb; +scomm_vnd_st scomm_vnd[BT_COM_PORT_SIZE]; +skw_socket_object_st skw_socket_object; +uint8_t recvSocketBuf[4096]; +static pthread_mutex_t write2host_lock; +uint16_t chip_version = 0; +Wakeup_ADV_Info_St wakeup_ADV_Info = {0}; +extern char btcp_log_en; + + +#define SKWBT_NV_FILE_PATH "/vendor/etc/bluetooth" + + +static const uint8_t hci_preamble_sizes[] = +{ + 0, + HCI_COMMAND_PKT_PREAMBLE_SIZE, + HCI_ACLDATA_PKT_PREAMBLE_SIZE, + HCI_SCODATA_PKT_PREAMBLE_SIZE, + HCI_EVENT_PKT_PREAMBLE_SIZE, + HCI_ISODATA_PKT_PREAMBLE_SIZE, + 0, + HCI_EVENT_SKWLOG_PREAMBLE_SIZE +}; + + +static tUSERIAL_CFG userial_H4_cfg = +{ + (USERIAL_DATABITS_8 | USERIAL_PARITY_NONE | USERIAL_STOPBITS_1), + //USERIAL_BAUD_115200, + USERIAL_BAUD_3M, + //USERIAL_BAUD_1_5M, + USERIAL_HW_FLOW_CTRL_ON +}; + + +char hex2char(int num) +{ + char ch; + if(num >= 0 && num <= 9) + { + ch = num + 48; + } + else if(num > 9 && num <= 15) + { + ch = (num - 10) + 65; + } + else + { + ch = '\0'; + } + return ch; +} + +void hex2String(unsigned char hex[], unsigned char str[], int N) +{ + int i = 0, j; + for(i = 0, j = 0; i < N; i++, j += 2) + { + str[j] = hex2char((hex[i] & 0xF0) >> 4); + str[j + 1] = hex2char(hex[i] & 0x0F); + } + str[N << 1] = 0; +} + +unsigned char char2hex(char ch) +{ + unsigned char num = 0; + if(ch >= '0' && ch <= '9') + { + num = ch - 48;//0:48 + } + else if(ch >= 'a' && ch <= 'f') + { + num = ch + 10 - 97;//a:97 + } + else if(ch >= 'A' && ch <= 'F') + { + num = ch + 10 - 65;//A:65 + } + return num; +} + +void scomm_vendor_init() +{ + uint8_t i; + for(i = 0; i < BT_COM_PORT_SIZE; i++) + { + memset(&scomm_vnd[i], 0, sizeof(scomm_vnd_st)); + scomm_vnd[i].fd = -1; + scomm_vnd[i].driver_state = FALSE; + scomm_vnd[i].mode = O_RDWR; + } + + pthread_mutex_init(&write2host_lock, NULL); +} + +void scomm_vendor_set_port_name(uint8_t port_index, char *port_name, int mode) +{ + int len = strlen(port_name); + memset(scomm_vnd[port_index].port_name, 0, DEVICE_NODE_MAX_LEN); + if(len < DEVICE_NODE_MAX_LEN) + { + memcpy(scomm_vnd[port_index].port_name, port_name, len); + } + scomm_vnd[port_index].mode = mode; + + ALOGD("skwbt_device_node:%s, port:%d", port_name, port_index); +} + + +/******************************************************************************* +** +** Function scomm_vendor_tcio_baud +** +** Description helper function converts USERIAL baud rates into TCIO +** conforming baud rates +** +** Returns TRUE/FALSE +** +*******************************************************************************/ +uint8_t scomm_vendor_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_1_5M) + { + *baud = B1500000; + } + 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; +} + + +/******************************************************************************* +** +** Function scomm_vendor_uart_open +** +** Description Uart Open +** +** Returns None +** +*******************************************************************************/ +int scomm_vendor_uart_open(uint8_t port_index) +{ + tUSERIAL_CFG *p_cfg = &userial_H4_cfg; + uint32_t baud; + uint8_t data_bits; + uint16_t parity; + uint8_t stop_bits; + + scomm_vnd[port_index].fd = -1; + + if (!scomm_vendor_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,baud:%d", scomm_vnd[port_index].port_name, p_cfg->baud); + + if ((scomm_vnd[port_index].fd = open(scomm_vnd[port_index].port_name, O_RDWR)) == -1) + { + ALOGE("userial vendor open: unable to open %s, %s", scomm_vnd[port_index].port_name, strerror(errno)); + return -1; + } + + tcflush(scomm_vnd[port_index].fd, TCIOFLUSH); + + tcgetattr(scomm_vnd[port_index].fd, &scomm_vnd[port_index].termios); + cfmakeraw(&scomm_vnd[port_index].termios); + + if(p_cfg->hw_fctrl == USERIAL_HW_FLOW_CTRL_ON) + { + ALOGI("userial vendor open: with HW flowctrl ON"); + scomm_vnd[port_index].termios.c_cflag |= (CRTSCTS | stop_bits | parity); + } + else + { + ALOGI("userial vendor open: with HW flowctrl OFF"); + scomm_vnd[port_index].termios.c_cflag &= ~CRTSCTS; + scomm_vnd[port_index].termios.c_cflag |= (stop_bits | parity); + + } + + tcsetattr(scomm_vnd[port_index].fd, TCSANOW, &scomm_vnd[port_index].termios); + tcflush(scomm_vnd[port_index].fd, TCIOFLUSH); + + tcsetattr(scomm_vnd[port_index].fd, TCSANOW, &scomm_vnd[port_index].termios); + tcflush(scomm_vnd[port_index].fd, TCIOFLUSH); + tcflush(scomm_vnd[port_index].fd, TCIOFLUSH); + + /* set input/output baudrate */ + cfsetospeed(&scomm_vnd[port_index].termios, baud); + cfsetispeed(&scomm_vnd[port_index].termios, baud); + tcsetattr(scomm_vnd[port_index].fd, TCSANOW, &scomm_vnd[port_index].termios); + + + ALOGE("UART device fd = %d Open", scomm_vnd[port_index].fd); + + + return scomm_vnd[port_index].fd; + +} + + +/******************************************************************************* +** +** Function scomm_vendor_usbsdio_open +** +** Description check port name valid +** +** Returns None +** +*******************************************************************************/ +uint8_t scomm_vendor_check_port_valid(uint8_t port_index) +{ + if(scomm_vnd[port_index].port_name[0] == 0) + { + return FALSE; + } + return TRUE; +} + + + +/******************************************************************************* +** +** Function scomm_vendor_usbsdio_open +** +** Description USB/SDIO Open +** +** Returns None +** +*******************************************************************************/ +int scomm_vendor_usbsdio_open(uint8_t port_index) +{ + if ((scomm_vnd[port_index].fd = open(scomm_vnd[port_index].port_name, O_RDWR)) == -1) + { + ALOGE("%s: unable to open %s: %s", __func__, scomm_vnd[port_index].port_name, strerror(errno)); + return -1; + } + ALOGD("USB/SDIO device[%d], %s fd = %d open", port_index, scomm_vnd[port_index].port_name, scomm_vnd[port_index].fd); + + return scomm_vnd[port_index].fd; +} + + +/******************************************************************************* +** +** Function scomm_vendor_recv_rawdata +** +** Description recv data from host and process +** +** Returns None +** +*******************************************************************************/ +uint8_t pkt_cnts = 0; +static void scomm_vendor_recv_rawdata(void *context) +{ + SKW_UNUSED(context); + uint8_t port_index = 0;//(uint8_t)context; + ssize_t bytes_read = 0; + uint8_t pkt_type = 0, offset = 1; + uint16_t need_read_lens = 0, total_len = 0; + int16_t rev_len = 0; + + //SKWBT_LOG("%s [%d] start", __func__, port_index); + + //do{ + + //-----------type-------------// + //do + { + rev_len = read(scomm_vnd[port_index].socket_fd[1], recvSocketBuf, 1); + if(rev_len <= 0) + { + ALOGE("%s type read err, rev_len:%d", __func__, rev_len); + return ; + } + bytes_read += rev_len; + } + //while (bytes_read < 1); + + total_len = 1; + pkt_type = recvSocketBuf[0]; + if((pkt_type == HCI_COMMAND_PKT) || (pkt_type == HCI_ACLDATA_PKT) || (pkt_type == HCI_SCODATA_PKT) || (pkt_type == HCI_ISO_PKT)) + { + need_read_lens = hci_preamble_sizes[pkt_type]; + } + else + { + ALOGE("%s invalid data type: %d", __func__, pkt_type); + assert(0); + } + offset += need_read_lens; + + //SKWBT_LOG("pkt_type:%d, bytes_read:%zd, offset:%d", pkt_type, bytes_read, offset); + + //-----------header-------------// + bytes_read = 0; + offset = 1; + do + { + rev_len = read(scomm_vnd[port_index].socket_fd[1], recvSocketBuf + offset + bytes_read, need_read_lens); + if(rev_len < 0) + { + ALOGE("%s header read err, rev_len:%d", __func__, rev_len); + return ; + } + bytes_read += rev_len; + //SKWBT_LOG("header bytes_read:%zd, need_read_lens:%d", bytes_read, need_read_lens); + } while (bytes_read < need_read_lens); + offset += need_read_lens; + + total_len += need_read_lens; + //get payload length + if((pkt_type == HCI_ACLDATA_PKT) || (pkt_type == HCI_ISO_PKT)) + { + need_read_lens = *(uint16_t *)&recvSocketBuf[HCI_COMMON_DATA_LENGTH_INDEX]; + } + else if((pkt_type == HCI_EVENT_PKT) || (pkt_type == HCI_EVENT_SKWLOG)) + { + need_read_lens = recvSocketBuf[HCI_EVENT_DATA_LENGTH_INDEX]; + } + else//cmd/sco + { + need_read_lens = recvSocketBuf[HCI_COMMON_DATA_LENGTH_INDEX]; + } + //-----------payload-------------// + bytes_read = 0; + if(need_read_lens > 0) + { + do + { + rev_len = read(scomm_vnd[port_index].socket_fd[1], recvSocketBuf + offset + bytes_read, need_read_lens); + if(rev_len < 0) + { + ALOGE("%s header read err, rev_len:%d", __func__, rev_len); + return ; + } + bytes_read += rev_len; + //SKWBT_LOG("payload bytes_read:%zd, need_read_lens:%d", bytes_read, need_read_lens); + } while (bytes_read < need_read_lens); + total_len += need_read_lens; + } + + + uint8_t str_buffer[200] = {0}; + hex2String(recvSocketBuf, str_buffer, (total_len > 64) ? 64 : total_len); + + if((skwbt_transtype & SKWBT_TRANS_TYPE_UART) && (skwbtuartonly == FALSE) && (skwbtNoSleep == FALSE) && (btpw_fp > 0))//uart + { + char tmp_buf[6] = {0}; + int r_len; + + tmp_buf[0] = pkt_cnts ++; + r_len = write(btpw_fp, tmp_buf, 1); + SKWBT_LOG("r_len:%d, btpw_fp:%d, pkt_cnts:%d", r_len, btpw_fp, pkt_cnts); + } + + uint16_t length = total_len; + uint16_t transmitted_length = 0; + uint8_t send_port = BT_COM_PORT_CMDEVT; + if(skwbt_transtype & SKWBT_TRANS_TYPE_SDIO) + { + switch(recvSocketBuf[0]) + { + case HCI_ACLDATA_PKT: + send_port = BT_COM_PORT_ACL; + break; + case HCI_SCODATA_PKT: + send_port = BT_COM_PORT_AUDIO; + break; + case HCI_ISO_PKT: + send_port = BT_COM_PORT_ISO; + break; + default: + send_port = BT_COM_PORT_CMDEVT; + break; + } + } + + + SKWBT_LOG("total_len:%d, port:%d, %s", total_len, send_port, str_buffer); + + skw_btsnoop_capture(recvSocketBuf, FALSE); + + + + while((length > 0) && scomm_vnd[send_port].driver_state) + { + ssize_t ret = write(scomm_vnd[send_port].fd, recvSocketBuf + transmitted_length, length); + + switch (ret) + { + case -1: + ALOGE("In %s, error writing to the scomm: %s", __func__, strerror(errno)); + return ; + //break; + case 0: + ALOGE("%s, ret %zd", __func__, ret); + break; + default: + transmitted_length += ret; + length -= ret; + //break; + } + } + + //SKWBT_LOG("%s [%d] end", __func__, port_index); +} + +static void *scomm_vendor_recv_socket_thread(void *arg) +{ + //SKW_UNUSED(arg); + int port_index = (int)((long)arg);//for error: cast from pointer to integer of different size + struct epoll_event events[32]; + scomm_vnd_st *scomm = &scomm_vnd[0]; + int j, ret; + + ALOGD("%s [%d] start", __func__, port_index); + + while(scomm->thread_running) + { + do + { + ret = epoll_wait(scomm->epoll_fd, events, 32, 500); + + //ALOGE("recv_socket_thread ret:%d, state:%d", ret, scomm->thread_running); + + } while(scomm->thread_running && (ret == -1) && (errno == EINTR)); + + if (ret < 0) + { + ALOGE("%s error in epoll_wait:%d, %s", __func__, ret, strerror(errno)); + break; + } + for (j = 0; (j < ret) && (scomm->thread_running); ++j) + { + skw_socket_object_st *object = (skw_socket_object_st *)events[j].data.ptr; + if (object == NULL) + { + continue; + } + else + { + if (events[j].events & (EPOLLIN | EPOLLHUP | EPOLLRDHUP | EPOLLERR) && object->read_ready) + { + object->read_ready(object->context); + //object->read_ready(port_index); + } + } + } + } + //scomm_vnd[port_index].thread_socket_id = -1; + + ALOGD("%s [%d] exit", __func__, port_index); + return NULL; +} + + +/******************************************************************************* +** +** Function scomm_vendor_send_to_host +** +** Description send data to host +** +** Returns None +** +*******************************************************************************/ +static void scomm_vendor_send_to_host(uint8_t port_index, unsigned char *buffer, unsigned int total_length) +{ + unsigned int length = total_length; + uint16_t transmitted_length = 0; + ssize_t ret; + + + pthread_mutex_lock(&write2host_lock); + while ((length > 0) && scomm_vnd[port_index].thread_running) + { + RW_NO_INTR(ret = write(scomm_vnd[port_index].socket_fd[1], buffer + transmitted_length, length)); + + //SKWBT_LOG("write to host ret:%zd", ret); + switch (ret) + { + case -1: + ALOGE("In %s, error writing to socket: %s", __func__, strerror(errno)); + break; + case 0: + break; + default: + transmitted_length += ret; + length -= ret; + break; + } + } + pthread_mutex_unlock(&write2host_lock); + + SKWBT_LOG("write to host[%d] total_length:%d, ret:%zd", port_index, total_length, ret); +} + + +/******************************************************************************* +** +** Function scomm_vendor_send_hw_error +** +** Description send HCI_HW_ERR command to hsot +** +** Returns None +** +*******************************************************************************/ + +void scomm_vendor_send_hw_error() +{ + unsigned char p_buf[10]; + + ALOGE("%s, CP Error", __func__); + + p_buf[0] = HCI_EVENT_PKT;//event + p_buf[1] = HCI_HARDWARE_ERROR_EVENT;//hardware error + p_buf[2] = 0x01;//len + p_buf[3] = HWERR_CODE_CP_ERROR;//userial error code + scomm_vendor_send_to_host(0, p_buf, 4); +} + +/******************************************************************************* +** +** Function scomm_vendor_find_valid_type +** +** Description find the index of valid packet type +** +** Returns None +** +*******************************************************************************/ +int scomm_vendor_find_valid_type(uint8_t *buffer, uint16_t len) +{ + int i; + for(i = 0; i < len; i++) + { + switch(buffer[i]) + { + case HCI_EVENT_PKT: + case HCI_ACLDATA_PKT: + case HCI_SCODATA_PKT: + //case HCI_COMMAND_PKT: + case HCI_EVENT_SKWLOG: + return i; + default: + break; + } +#if 0 + if((HCI_EVENT_PKT == buffer[i]) || (HCI_ACLDATA_PKT == buffer[i]) || (HCI_SCODATA_PKT == buffer[i]) || (HCI_COMMAND_PKT == buffer[i]) + || (HCI_EVENT_SKWLOG == buffer[i])) + { + return i; + } +#endif + } + return len; +} + + +/******************************************************************************* +** +** Function scomm_vendor_recv_scomm_thread +** +** Description recv data from UART/USB/SDIO and process +** +** Returns None +** +*******************************************************************************/ +static void *scomm_vendor_recv_scomm_thread(void *arg) +{ + //SKW_UNUSED(arg); + int port_index = (int)((long)arg); + struct pollfd pfd[2]; + scomm_vnd_st *scomm = &scomm_vnd[port_index]; + pfd[0].events = POLLIN | POLLHUP | POLLERR | POLLRDHUP; + pfd[0].fd = scomm->signal_fd[1]; + pfd[1].events = POLLIN | POLLHUP | POLLERR | POLLRDHUP; + pfd[1].fd = scomm->fd; + + uint8_t read_buffer[SCOM_READ_BUFFER_LEN + 1] = {0}; + uint8_t str_buffer[SCOM_READ_BUFFER_LEN + 1] = {0}; + ssize_t bytes_read; + uint16_t last_len = 0, rev_len = 0; + int ret, is_uart = (skwbt_transtype & SKWBT_TRANS_TYPE_UART); + + scomm->recv_comm_thread_running = TRUE; + scomm->read_retry = 0; + ALOGD("%s [%d] start, is_uart:%d", __func__, port_index, is_uart); + + while(scomm->thread_running) + { + if(is_uart) + { + do + { + ret = poll(pfd, 2, 500); + } while(ret == -1 && errno == EINTR && scomm->thread_running); + //exit signal is always at first index + if(pfd[0].revents && !scomm->thread_running) + { + ALOGE("receive exit signal and stop thread "); + break; + } + if (pfd[1].revents & (POLLERR | POLLHUP)) + { + ALOGE("%s poll error, fd : %d", __func__, scomm->fd); + scomm->driver_state = FALSE; + close(scomm->fd); + break; + } + if(!(pfd[1].revents & POLLIN)) + { + continue; + } + } + + + scomm->is_busying = FALSE; + bytes_read = read(scomm->fd, read_buffer + last_len, SCOM_READ_BUFFER_LEN - last_len); + scomm->is_busying = TRUE; + + if(bytes_read == 0) + { + if(scomm->thread_running) + { + continue; + } + break; + } + if(bytes_read < 0) + { + ALOGE("%s, read fail, thread[%d] state:%d, error code:%zd, %s, read_retry:%d", __func__, port_index, (scomm->thread_running), bytes_read, strerror(errno), scomm->read_retry); + if((scomm->thread_running) && (0 == port_index)) + { + if(scomm->read_retry == 0) + { + scomm->read_retry = 1; + usleep(200000); + continue; + } + scomm_vendor_send_hw_error(); + } + break; + } + if(read_buffer[0] != HCI_EVENT_SKWLOG) + { + hex2String(read_buffer + last_len, str_buffer, (bytes_read > 64) ? 64 : bytes_read); + SKWBT_LOG("scomm[%d] read:%zd, last_len:%d, %s", port_index, bytes_read, last_len, str_buffer); + } + + //data parse for get a commplete packet and capture the snoop log + rev_len = bytes_read + last_len; + do + { + uint8_t pkt_type = read_buffer[0]; + if((pkt_type == HCI_EVENT_PKT) || (pkt_type == HCI_ACLDATA_PKT) || (pkt_type == HCI_SCODATA_PKT) || (pkt_type == HCI_EVENT_SKWLOG) || (pkt_type == HCI_ISO_PKT)) + { + uint16_t hdr_lens = hci_preamble_sizes[pkt_type] + 1; + if(rev_len >= hdr_lens) + { + uint16_t pkt_len = 0; + //get payload length + if((pkt_type == HCI_ACLDATA_PKT) || (pkt_type == HCI_ISO_PKT)) + { + pkt_len = *(uint16_t *)&read_buffer[HCI_COMMON_DATA_LENGTH_INDEX]; + } + else if(pkt_type == HCI_EVENT_PKT) + { + pkt_len = read_buffer[HCI_EVENT_DATA_LENGTH_INDEX]; + } + else if(pkt_type == HCI_EVENT_SKWLOG) + { + pkt_len = *(uint16_t *)&read_buffer[HCI_SKWLOG_DATA_LENGTH_INDEX]; + } + else//cmd/sco + { + pkt_len = read_buffer[HCI_COMMON_DATA_LENGTH_INDEX]; + } + + SKWBT_LOG("rev_len:%d, pkt_type:%d, hdr_lens:%d, pkt_len:%d", rev_len, pkt_type, hdr_lens, pkt_len); + + pkt_len += hdr_lens; + if(rev_len >= pkt_len) + { + if(pkt_type == HCI_EVENT_SKWLOG) + { + skwlog_write(read_buffer, pkt_len); + } + else// + { + + skw_btsnoop_capture(read_buffer, TRUE); + scomm_vendor_send_to_host(0, read_buffer, pkt_len); + } + last_len = rev_len - pkt_len; + if((pkt_len + last_len) <= SCOM_READ_BUFFER_LEN) + { + memcpy(read_buffer, read_buffer + pkt_len, last_len); + } + else + { + ALOGE("%s, err packet, pkt_len:%d, last_len:%d", __func__, pkt_len, last_len); + } + if(last_len >= 4) + { + rev_len = last_len; + SKWBT_LOG(" more packet, rev_len:%d ", rev_len); + continue; + } + + } + else + { + last_len = rev_len; + SKWBT_LOG("need more, rev_len:%d, pkt_len:%d, last_len:%d", rev_len, pkt_len, last_len); + } + } + else + { + last_len = rev_len; + } + } + else//invalid data, discard + { + int vLen = scomm_vendor_find_valid_type(read_buffer, rev_len); + ALOGE("invalid type:%02X, vLen:%d", pkt_type, vLen); + + last_len = rev_len - vLen; + if(vLen < rev_len) + { + memcpy(read_buffer, read_buffer + vLen, last_len); + } + } + + break; + } while (1); + } + + + scomm->is_busying = FALSE; + scomm->thread_uart_id = -1; + + ALOGD("%s [%d] exit", __func__, port_index); + return NULL; +} + + +/******************************************************************************* +** +** Function scomm_vendor_socket_open +** +** Description USB/SDIO Open +** +** Returns None +** +*******************************************************************************/ +int scomm_vendor_socket_open(uint8_t port_index) +{ + int ret = 0; + struct epoll_event event; + if((ret = socketpair(AF_UNIX, SOCK_STREAM, 0, scomm_vnd[port_index].socket_fd)) < 0) + { + ALOGE("%s, errno : %s", __func__, strerror(errno)); + return ret; + } + + if((ret = socketpair(AF_UNIX, SOCK_STREAM, 0, scomm_vnd[port_index].signal_fd)) < 0) + { + ALOGE("%s, errno : %s", __func__, strerror(errno)); + return ret; + } + + scomm_vnd[port_index].epoll_fd = epoll_create(4); + if (scomm_vnd[port_index].epoll_fd == -1) + { + ALOGE("%s unable to create epoll instance: %s", __func__, strerror(errno)); + return -1; + } + + scomm_vnd[port_index].thread_running = TRUE; + scomm_vnd[port_index].recv_comm_thread_running = FALSE; + scomm_vnd[port_index].thread_socket_id = -1; + + pthread_attr_t thread_attr; + pthread_attr_init(&thread_attr); + pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_JOINABLE); + + memset(&event, 0, sizeof(event)); + event.events = EPOLLIN | EPOLLHUP | EPOLLRDHUP | EPOLLERR; + event.data.ptr = (void *)&skw_socket_object; + if (epoll_ctl(scomm_vnd[port_index].epoll_fd, EPOLL_CTL_ADD, scomm_vnd[port_index].socket_fd[1], &event) == -1) + { + ALOGE("%s unable to register fd %d to epoll set: %s", __func__, scomm_vnd[port_index].socket_fd[1], strerror(errno)); + close(scomm_vnd[port_index].epoll_fd); + scomm_vnd[port_index].epoll_fd = -1; + scomm_vnd[port_index].thread_running = FALSE; + return -1; + } + + event.data.ptr = NULL; + if (epoll_ctl(scomm_vnd[port_index].epoll_fd, EPOLL_CTL_ADD, scomm_vnd[port_index].signal_fd[0], &event) == -1) + { + ALOGE("%s unable to register signal0 fd %d to epoll set: %s", __func__, scomm_vnd[port_index].signal_fd[0], strerror(errno)); + close(scomm_vnd[port_index].epoll_fd); + scomm_vnd[port_index].epoll_fd = -1; + scomm_vnd[port_index].thread_running = FALSE; + return -1; + } + + + if(port_index == 0) + { + skw_socket_object.fd = scomm_vnd[port_index].socket_fd[1]; + skw_socket_object.read_ready = scomm_vendor_recv_rawdata; + skw_socket_object.write_ready = NULL; + + if (pthread_create(&scomm_vnd[port_index].thread_socket_id, &thread_attr, scomm_vendor_recv_socket_thread, (void *)(long)port_index) != 0 ) + { + ALOGE("pthread_create : %s", strerror(errno)); + close(scomm_vnd[port_index].epoll_fd); + scomm_vnd[port_index].epoll_fd = -1; + scomm_vnd[port_index].thread_socket_id = -1; + scomm_vnd[port_index].thread_running = FALSE; + return -1; + } + } + + + if (pthread_create(&scomm_vnd[port_index].thread_uart_id, &thread_attr, scomm_vendor_recv_scomm_thread, (void *)(long)port_index) != 0 ) + { + ALOGE("pthread_create : %s", strerror(errno)); + close(scomm_vnd[port_index].epoll_fd); + scomm_vnd[port_index].thread_running = FALSE; + pthread_join(scomm_vnd[port_index].thread_socket_id, NULL); + scomm_vnd[port_index].thread_socket_id = -1; + return -1; + } + while(!scomm_vnd[port_index].recv_comm_thread_running) + { + usleep(20); + } + + scomm_vnd[port_index].driver_state = TRUE; + + ret = scomm_vnd[port_index].socket_fd[0]; + + ALOGD("%s socket_fd:%d", __func__, ret); + return ret; +} + + +/******************************************************************************* +** +** Function scomm_vendor_socket_close +** +** Description socket close +** +** Returns None +** +*******************************************************************************/ +static void scomm_vendor_socket_close(uint8_t port_index) +{ + int result; + + ALOGE( "%s [%d], thread_socket_id:0x%X", __func__, port_index, (int)scomm_vnd[port_index].thread_socket_id); + + if ((scomm_vnd[port_index].socket_fd[0] > 0) && (result = close(scomm_vnd[port_index].socket_fd[0])) < 0) + { + ALOGE( "%s (fd:%d) FAILED result:%d", __func__, scomm_vnd[port_index].socket_fd[0], result); + } + + if (epoll_ctl(scomm_vnd[port_index].epoll_fd, EPOLL_CTL_DEL, scomm_vnd[port_index].socket_fd[1], NULL) == -1) + { + ALOGE("%s unable to unregister fd %d from epoll set: %s", __func__, scomm_vnd[port_index].socket_fd[1], strerror(errno)); + } + if (epoll_ctl(scomm_vnd[port_index].epoll_fd, EPOLL_CTL_DEL, scomm_vnd[port_index].signal_fd[0], NULL) == -1) + { + ALOGE("%s unable to unregister signal0 fd %d from epoll set: %s", __func__, scomm_vnd[port_index].signal_fd[0], strerror(errno)); + } + + if(scomm_vnd[port_index].epoll_fd > 0) + { + close(scomm_vnd[port_index].epoll_fd); + } + + if(scomm_vnd[port_index].thread_socket_id != -1) + { + if ((result = pthread_join(scomm_vnd[port_index].thread_socket_id, NULL)) < 0) + { + ALOGE( "data thread pthread_join() scomm_vnd[port_index].thread_socket_id failed result:%d", result); + } + else + { + scomm_vnd[port_index].thread_socket_id = -1; + ALOGE( "data thread pthread_join() scomm_vnd[port_index].thread_socket_id pthread_join_success result:%d", result); + } + } + + if ((scomm_vnd[port_index].socket_fd[1] > 0) && (result = close(scomm_vnd[port_index].socket_fd[1])) < 0) + { + ALOGE( "%s (fd:%d) FAILED result:%d", __func__, scomm_vnd[port_index].socket_fd[1], result); + } + + if ((scomm_vnd[port_index].signal_fd[0] > 0) && (result = close(scomm_vnd[port_index].signal_fd[0])) < 0) + { + ALOGE( "%s (signal fd[0]:%d) FAILED result:%d", __func__, scomm_vnd[port_index].signal_fd[0], result); + } + if ((scomm_vnd[port_index].signal_fd[1] > 0) && (result = close(scomm_vnd[port_index].signal_fd[1])) < 0) + { + ALOGE( "%s (signal fd[1]:%d) FAILED result:%d", __func__, scomm_vnd[port_index].signal_fd[1], result); + } + + scomm_vnd[port_index].epoll_fd = -1; + scomm_vnd[port_index].socket_fd[0] = -1; + scomm_vnd[port_index].socket_fd[1] = -1; + scomm_vnd[port_index].signal_fd[0] = -1; + scomm_vnd[port_index].signal_fd[1] = -1; + ALOGE( "%s [%d] end", __func__, port_index); +} + + +void scomm_vendor_write_bt_state() +{ + //if(skwbt_transtype & SKWBT_TRANS_TYPE_USB) + if(chip_version == SKW_CHIPID_6160) + { + char buffer[10] = {0x01, 0x80, 0xFE, 0x01, 0x00}; + scomm_vnd_st *scomm = &scomm_vnd[0]; + write(scomm->fd, buffer, 5); + usleep(15000); + } +} + +/******************************************************************************* +** +** Function scomm_vendor_port_close +** +** Description Conduct vendor-specific close works +** +** Returns None +** +*******************************************************************************/ +void scomm_vendor_port_close(uint8_t port_index) +{ + //send close signal + unsigned char close_signal = 1; + ssize_t ret; + int res, i; + scomm_vnd_st *scomm = &scomm_vnd[port_index]; + ALOGD( "%s [%d] start, fd:%d, busy:%d", __func__, port_index, scomm->fd, scomm->is_busying); + + if(scomm->fd == -1) + { + return; + } + + scomm->thread_running = FALSE; + scomm->driver_state = FALSE; + + while(scomm->is_busying) + { + usleep(20); + } + + res = ioctl(scomm->fd, 0); + //ALOGE("res:%d, %s", res, strerror(errno)); + + ALOGE("%s signal_fd:%d", __func__, scomm->signal_fd[1]); + RW_NO_INTR(ret = write(scomm->signal_fd[1], &close_signal, 1)); + + usleep(300);//wait + for(i = 0; (skwbt_transtype & SKWBT_TRANS_TYPE_SDIO) && (i < 2) && (scomm->thread_uart_id != -1); i++) + { + res = ioctl(scomm->fd, 0);//try again + usleep(200); + ALOGD("%s,%d times:%d, res:%d, %s", __func__, port_index, i, res, strerror(errno)); + } + + //scomm close + if ((scomm->fd > 0) && (res = close(scomm->fd)) < 0) + { + ALOGE( "%s (fd:%d) FAILED result:%d", __func__, scomm->fd, res); + } + + ALOGD("Run Here"); + + if(scomm->thread_uart_id != -1) + { + pthread_join(scomm->thread_uart_id, NULL); + scomm->thread_uart_id = -1; + } + + scomm_vendor_socket_close(port_index); + + //close(scomm_vnd[port_index].fd); + scomm->fd = -1; + + + ALOGD( "%s [%d] finish", __func__, port_index); + +} + +/******************************************************************************* +** +** Function scomm_vendor_close +** +** Description Conduct vendor-specific close works +** +** Returns None +** +*******************************************************************************/ +void scomm_vendor_close() +{ + int idx = 0; + for(idx = 0; idx < BT_COM_PORT_SIZE; idx++) + { + scomm_vendor_port_close(idx); + } + if(btpw_fp > 0) + { + close(btpw_fp); + } +} + +/******************************************************************************* +** +** Function scomm_vendor_init_err +** +** Description init err +** +** Returns None +** +*******************************************************************************/ +void scomm_vendor_init_err(HC_BT_HDR *p_buf) +{ + hw_cfg_cb.state = HW_CFG_INIT; + bt_vendor_cbacks->dealloc(p_buf); + fclose(hw_cfg_cb.nv_fp); + hw_cfg_cb.nv_fp = NULL; + +} + +/******************************************************************************* +** +** Function scomm_vendor_config_callback +** +** Description Callback function for controller configuration +** +** Returns None +** +*******************************************************************************/ +void scomm_vendor_config_callback(void *p_mem) +{ + uint8_t status = 0; + uint16_t opcode = 0; + HC_BT_HDR *p_buf = NULL; + HC_BT_HDR *p_evt_buf = NULL; + + + if(p_mem != NULL) + { + p_evt_buf = (HC_BT_HDR *) p_mem; + status = *((uint8_t *)(p_evt_buf + 1) + HCI_EVT_CMD_CMPL_STATUS_OFFSET); + uint8_t *p = (uint8_t *)(p_evt_buf + 1) + HCI_EVT_CMD_CMPL_OPCODE_OFFSET; + STREAM_TO_UINT16(opcode, p); + } + + + ALOGD("%s status:%d ,opcode:%04X", __func__, status, opcode); + 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) + { + p_buf->event = MSG_STACK_TO_HC_HCI_CMD; + p_buf->offset = 0; + p_buf->len = 0; + p_buf->layer_specific = 0; + + ALOGD("hw_cfg_cb.state = %d", hw_cfg_cb.state); + + switch (hw_cfg_cb.state) + { + case HW_CFG_START: + { + uint8_t *ptr = (uint8_t *) (p_buf + 1); + UINT16_TO_STREAM(ptr, HCI_READ_LOCAL_VERSION_INFO); + UINT8_TO_STREAM(ptr, 0); + + p_buf->len = 3;//packet len + bt_vendor_cbacks->xmit_cb(HCI_READ_LOCAL_VERSION_INFO, p_buf, scomm_vendor_config_callback); + hw_cfg_cb.state = HW_CFG_READ_HCI_VERSION; + break; + } + case HW_CFG_READ_HCI_VERSION: + { + char file_name[128] = {0}; + uint8_t skip_header = 0; + uint8_t *p = (uint8_t *)(p_evt_buf + 1) + 7; + if(p == NULL) + { + ALOGE("%s invalid ptr", __func__); + bt_vendor_cbacks->fwcfg_cb(BT_VND_OP_RESULT_FAIL); + hw_cfg_cb.state = HW_CFG_INIT; + return ; + } + STREAM_TO_UINT16(chip_version, p); + + ALOGD("chip_version:0x%04X", chip_version); + + switch(chip_version) + { + case SKW_CHIPID_6316://0x6316 + { + skip_header = 1; + sprintf(file_name, "%s/sv6316.nvbin", SKWBT_NV_FILE_PATH); + break; + } + case SKW_CHIPID_6160_LITE: + { + skip_header = 1; + sprintf(file_name, "%s/sv6160lite.nvbin", SKWBT_NV_FILE_PATH); + break; + } + default: + { + sprintf(file_name, "%s/sv6160.nvbin", SKWBT_NV_FILE_PATH); + chip_version = SKW_CHIPID_6160; + break; + } + } + + hw_cfg_cb.nv_fp = fopen(file_name, "rb"); + if(!hw_cfg_cb.nv_fp) + { + ALOGE("%s unable to open nv file:%s: %s", __func__, file_name, strerror(errno)); + bt_vendor_cbacks->fwcfg_cb(BT_VND_OP_RESULT_FAIL); + hw_cfg_cb.state = HW_CFG_INIT; + return; + } + hw_cfg_cb.file_offset = 0; + hw_cfg_cb.state = HW_CFG_NV_SEND; + if(skip_header)//skip header + { + char buffer[6]; + fread(buffer, 1, 4, hw_cfg_cb.nv_fp); + } + } + case HW_CFG_NV_SEND: + { + uint8_t len = 0, res = 0; + uint8_t *ptr = (uint8_t *) (p_buf + 1);//skip header + UINT16_TO_STREAM(ptr, HCI_CMD_SKW_BT_NVDS); + + if((chip_version == SKW_CHIPID_6316) || (chip_version == SKW_CHIPID_6160_LITE))//0x6316 + { + uint8_t tmp_buffer[10] = {0}; + uint8_t *param_buf = ptr + 3; + uint8_t nv_tag = 0; + int nv_param_len = 0; + int total_len = 0; + char file_end = 0; + int file_ptr; + while(1) + { + file_ptr = ftell(hw_cfg_cb.nv_fp); + if(file_ptr < 0) + { + ALOGE("%s invalid file_ptr:%d", __func__, file_ptr); + bt_vendor_cbacks->fwcfg_cb(BT_VND_OP_RESULT_FAIL); + hw_cfg_cb.state = HW_CFG_INIT; + return ; + } + len = fread(tmp_buffer, 1, 3, hw_cfg_cb.nv_fp); + if((len < 3) || feof(hw_cfg_cb.nv_fp)) + { + file_end = 1; + break; + } + memcpy(param_buf + total_len, tmp_buffer, 3); + nv_param_len = tmp_buffer[2]; + nv_tag = tmp_buffer[0]; + ALOGD("tag:%d, nv_param_len:%d, file_ptr:%d", tmp_buffer[0], nv_param_len, file_ptr); + + if((nv_param_len + total_len + 3) > 252)//252 + 3 + { + fseek(hw_cfg_cb.nv_fp, file_ptr, SEEK_SET); + break; + } + total_len += 3; + if((nv_param_len > 0) && ((total_len + nv_param_len) < HCI_CMD_MAX_LEN)) + { + len = fread(param_buf + total_len, 1, nv_param_len, hw_cfg_cb.nv_fp); + if(len < nv_param_len) + { + ALOGE("%s, len:%d, nv_param_len:%d", __func__, len, nv_param_len); + scomm_vendor_init_err(p_buf); + break; + } + if(nv_tag == NV_TAG_BD_ADDR) + { + skw_addr_get(param_buf + total_len + 3); + } + else if(nv_tag == NV_TAG_DSP_LOG_SETTING) + { + *(param_buf + total_len) = btcp_log_en ? 0 : 1; + } + total_len += len; + } + } + if(total_len > 0) + { + ptr[0] = (total_len + 2);//payload len + ptr[1] = hw_cfg_cb.file_offset; + ptr[2] = total_len;//para len + p_buf->len = total_len + 2 + 3;//packet len + res = bt_vendor_cbacks->xmit_cb(HCI_CMD_SKW_BT_NVDS, p_buf, scomm_vendor_config_callback); + hw_cfg_cb.file_offset ++; + if(res == FALSE)//send error + { + scomm_vendor_init_err(p_buf); + break; + } + } + if(file_end) + { + hw_cfg_cb.state = HW_CFG_WRITE_OS_TYPE; + fclose(hw_cfg_cb.nv_fp); + hw_cfg_cb.nv_fp = NULL; + } + } + else + { + len = fread(ptr + 3, 1, NV_FILE_RD_BLOCK_SIZE, hw_cfg_cb.nv_fp); + ptr[0] = (len + 2);//payload len + ptr[1] = hw_cfg_cb.file_offset; + ptr[2] = len;//para len + p_buf->len = len + 2 + 3;//packet len + if(0 == hw_cfg_cb.file_offset) + { + //*(ptr + 3 + 3) = 'A'; + //byte7 + skw_addr_get(ptr + 3 + 7); + } + else if(1 == hw_cfg_cb.file_offset) + { + *(ptr + 3 + 62) |= 0x80; + *(ptr + 3 + 53) = btcp_log_en ? 0 : 1; + } + + res = bt_vendor_cbacks->xmit_cb(HCI_CMD_SKW_BT_NVDS, p_buf, scomm_vendor_config_callback); + + ALOGD("len:%d, file_offset:%d, plen:%d,%d res:%d", len, hw_cfg_cb.file_offset, p_buf->len, ptr[0], res); + + hw_cfg_cb.file_offset ++; + + if((len < NV_FILE_RD_BLOCK_SIZE) || (len == 0) || feof(hw_cfg_cb.nv_fp))//end of file + { + hw_cfg_cb.state = HW_CFG_WRITE_BD_ADDR; + fclose(hw_cfg_cb.nv_fp); + hw_cfg_cb.nv_fp = NULL; + } + if(res == FALSE)//send error + { + scomm_vendor_init_err(p_buf); + } + + } + break; + } + case HW_CFG_WRITE_OS_TYPE: + { + if(chip_version != SKW_CHIPID_6160) + { + uint8_t *ptr = (uint8_t *) (p_buf + 1); + UINT16_TO_STREAM(ptr, HCI_CMD_WRITE_OS_TYPE); + UINT8_TO_STREAM(ptr, 1); + UINT8_TO_STREAM(ptr, 1); + + p_buf->len = 3 + 1;//packet len + bt_vendor_cbacks->xmit_cb(HCI_CMD_WRITE_OS_TYPE, p_buf, scomm_vendor_config_callback); + hw_cfg_cb.state = HW_CFG_WRITE_BD_ADDR; + break; + } + } + case HW_CFG_WRITE_BD_ADDR: + { + uint8_t *ptr = (uint8_t *) (p_buf + 1); + UINT16_TO_STREAM(ptr, HCI_CMD_WRITE_BD_ADDR); + UINT8_TO_STREAM(ptr, 6); + + p_buf->len = 3 + 6;//packet len + if(skw_addr_from_ap(ptr)) + { + bt_vendor_cbacks->xmit_cb(HCI_CMD_WRITE_BD_ADDR, p_buf, scomm_vendor_config_callback); +#if BLE_ADV_WAKEUP_ENABLE + hw_cfg_cb.state = HW_CFG_WRITE_WAKEUP_ADV_DATA; +#else + hw_cfg_cb.state = HW_CFG_NV_SEND_CMPL; +#endif + break; + } + } +#if BLE_ADV_WAKEUP_ENABLE + case HW_CFG_WRITE_WAKEUP_ADV_DATA: + { + uint8_t adv_data_len = wakeup_ADV_Info.data_len; + if(adv_data_len > 0) + { + uint8_t *ptr = (uint8_t *) (p_buf + 1); + uint8_t i, adv_len; + uint8_t pld_len = adv_data_len + 4;//add the length of gpio & level & grp nums & total len + Wakeup_ADV_Grp_St *adv_grp; + UINT16_TO_STREAM(ptr, HCI_CMD_WRITE_WAKEUP_ADV_DATA); + UINT8_TO_STREAM(ptr, pld_len); + UINT8_TO_STREAM(ptr, wakeup_ADV_Info.gpio_no); + UINT8_TO_STREAM(ptr, wakeup_ADV_Info.level); + UINT8_TO_STREAM(ptr, wakeup_ADV_Info.grp_nums); + UINT8_TO_STREAM(ptr, adv_data_len); + for(i = 0; i < wakeup_ADV_Info.grp_nums; i++) + { + adv_grp = &wakeup_ADV_Info.adv_group[i]; + UINT8_TO_STREAM(ptr, adv_grp->grp_len); + UINT8_TO_STREAM(ptr, adv_grp->addr_offset); + adv_len = (adv_grp->grp_len - 2) >> 1; + + SKWBT_LOG("grp len:%d, adv_len:%d", adv_grp->grp_len, adv_len); + + memcpy(ptr, adv_grp->data, adv_len); + ptr += adv_len; + memcpy(ptr, adv_grp->mask, adv_len); + ptr += adv_len; + } + + p_buf->len = 3 + pld_len;//packet len + bt_vendor_cbacks->xmit_cb(HCI_CMD_WRITE_WAKEUP_ADV_DATA, p_buf, scomm_vendor_config_callback); + hw_cfg_cb.state = HW_CFG_NV_SEND_CMPL; + break; + } + } +#endif + case HW_CFG_NV_SEND_CMPL: + { + bt_vendor_cbacks->fwcfg_cb(BT_VND_OP_RESULT_SUCCESS); + bt_vendor_cbacks->dealloc(p_buf);//free buffer + hw_cfg_cb.state = HW_CFG_INIT; + break; + } + } + } + + + /* Free the RX event buffer */ + if ((bt_vendor_cbacks) && (p_evt_buf != NULL)) + { + bt_vendor_cbacks->dealloc(p_evt_buf); + } + + +} + +/******************************************************************************* +** +** Function scomm_vendor_config_start +** +** Description Kick off controller initialization process +** +** Returns None +** +*******************************************************************************/ +void scomm_vendor_config_start() +{ + memset(&hw_cfg_cb, 0, sizeof(bt_hw_cfg_cb_st)); + + HC_BT_HDR *p_buf = NULL; + uint8_t *p; + + hw_cfg_cb.state = HW_CFG_INIT; + + 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, scomm_vendor_config_callback); + } + else + { + ALOGE("%s buffer alloc fail", __func__); + } + } + else + { + ALOGE("%s call back func is null", __func__); + } +} + +/******************************************************************************* +** +** Function scomm_vendor_write_wakeup_adv_data_callback +** +** Description send wakeup adv data callback +** +** Returns None +** +*******************************************************************************/ +void scomm_vendor_write_wakeup_adv_data_callback(void *p_mem) +{ + uint8_t status = 0; + uint16_t opcode = 0; + HC_BT_HDR *p_evt_buf = NULL; + if(p_mem != NULL) + { + uint8_t *p; + p_evt_buf = (HC_BT_HDR *) p_mem; + status = *((uint8_t *)(p_evt_buf + 1) + HCI_EVT_CMD_CMPL_STATUS_OFFSET); + p = (uint8_t *)(p_evt_buf + 1) + HCI_EVT_CMD_CMPL_OPCODE_OFFSET; + STREAM_TO_UINT16(opcode, p); + + ALOGD("%s status:%d ,opcode:%04X", __func__, status, opcode); + + if(bt_vendor_cbacks) + { + bt_vendor_cbacks->dealloc(p_evt_buf); + } + } + else + { + ALOGE("%s pram is null", __func__); + } +} + +/******************************************************************************* +** +** Function scomm_vendor_write_wakeup_adv_enable +** +** Description send wakeup adv enable +** +** Returns None +** +*******************************************************************************/ +void scomm_vendor_write_wakeup_adv_enable() +{ + HC_BT_HDR *p_buf = (HC_BT_HDR *)bt_vendor_cbacks->alloc(HCI_CMD_MAX_LEN); + uint8_t *p; + + if(p_buf) + { + uint8_t param_len = 1; + 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); + UINT16_TO_STREAM(p, HCI_CMD_WRITE_WAKEUP_ADV_ENABLE); + UINT8_TO_STREAM(p, param_len); + UINT8_TO_STREAM(p, 0x01); + + p_buf->len = 3 + param_len;//packet len + + bt_vendor_cbacks->xmit_cb(HCI_CMD_WRITE_WAKEUP_ADV_ENABLE, p_buf, scomm_vendor_write_wakeup_adv_data_callback); + } + else + { + ALOGE("%s buffer alloc fail", __func__); + } + + +} + + +/* + data_str = "xxxx;...." +*/ +char *scomm_vendor_config_get_uint8(char *data_str, uint8_t *value) +{ + char *split0 = strchr(data_str, ';'); + uint8_t len = 0; + char buffer[8] = {0}; + if((split0 == NULL) || (split0 == data_str)) + { + return NULL; + } + len = split0 - data_str; + if(len > 4)//invalid + { + SKWBT_LOG("%s, invalid str , %s", __func__, data_str); + return NULL; + } + memcpy(buffer, data_str, len); + *value = atoi(buffer); + return split0 + 1;//skip ; +} + +void scomm_vendor_parse_wakeup_adv_conf(char *data_str) +{ + //WakeupADVData=GPIO_No(decimal);Level(decimal);addr offset(decimal);ADVData(Hex);Mask(Hex) + int str_len = strlen(data_str); + char *base_ptr = data_str; + char *split0, *split1; + uint8_t adv_grp_nums = 0, adv_len = 0, mask_len; + uint8_t gpio_no = 0, level = 0, addr_offset; + uint8_t i = 0, j = 0, k; + Wakeup_ADV_Grp_St *adv_grp; + int total_len = 0; + + wakeup_ADV_Info.data_len = 0; + if(str_len > 512) + { + SKWBT_LOG("%s, invalid config str, %s", __func__, data_str); + return ; + } + if((base_ptr = scomm_vendor_config_get_uint8(base_ptr, &gpio_no)) == NULL) + { + return ; + } + if((base_ptr = scomm_vendor_config_get_uint8(base_ptr, &level)) == NULL) + { + return ; + } + for(k = 0; k < BLE_ADV_WAKEUP_GRP_NUMS; k++) + { + //addr offset(decimal);ADVData(Hex);Mask(Hex) + if((base_ptr = scomm_vendor_config_get_uint8(base_ptr, &addr_offset)) == NULL) + { + break; + } + if((addr_offset == 1) || (addr_offset > 26)) + { + SKWBT_LOG("%s, invalid addr_offset , %s", __func__, data_str); + return ; + } + adv_grp = &wakeup_ADV_Info.adv_group[k]; + split0 = strchr(base_ptr, ';'); + if(split0 == NULL) + { + SKWBT_LOG("%s, invalid config , %s", __func__, data_str); + return ; + } + split1 = strchr(split0 + 1, ';'); + + adv_len = split0 - base_ptr; + adv_grp->addr_offset = addr_offset; + adv_grp->grp_len = adv_len + 2;//add addr_offset & self length + + split0 ++;//skip ; + if(split1 == NULL) + { + mask_len = data_str + str_len - split0; + } + else + { + mask_len = split1 - split0; + } + if(mask_len != adv_len) + { + SKWBT_LOG("%s, mask_len != adv_len , %s", __func__, data_str); + return ; + } + SKWBT_LOG("grp len:%d, adv_len:%d", adv_grp->grp_len, adv_len); + for(i = 0, j = 0; i < adv_len; j ++, i += 2) + { + adv_grp->data[j] = (char2hex(base_ptr[i]) << 4) | char2hex(base_ptr[i + 1]); + adv_grp->mask[j] = (char2hex(split0[i]) << 4) | char2hex(split0[i + 1]); + } + total_len += adv_grp->grp_len; + adv_grp_nums ++; + if(split1 == NULL) + { + break; + } + base_ptr = split1 + 1; + } + wakeup_ADV_Info.data_len = total_len;//not contain gpio & level + wakeup_ADV_Info.grp_nums = adv_grp_nums; + wakeup_ADV_Info.gpio_no = gpio_no; + wakeup_ADV_Info.level = level; + + SKWBT_LOG("ADV str len:%d, gpio:%d, level:%d, adv_grp_nums:%d, total_len:%d, Data:%s", str_len, gpio_no, level, adv_grp_nums, total_len, data_str); +} + + + diff --git a/android/hardware/seekwave/skwbt/src/skw_btsnoop.c b/android/hardware/seekwave/skwbt/src/skw_btsnoop.c new file mode 100755 index 0000000..f567147 --- /dev/null +++ b/android/hardware/seekwave/skwbt/src/skw_btsnoop.c @@ -0,0 +1,252 @@ +/****************************************************************************** + * + * Copyright (C) 2020-2021 SeekWave Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * + ******************************************************************************/ + +#define LOG_TAG "skw_btsnoop" + +#include "skw_btsnoop.h" +#include <unistd.h> +#include <sys/stat.h> +#include "skw_log.h" +#include "skw_common.h" + + + +char skw_btsnoop_path[1024] = {'\0'}; +static pthread_mutex_t btsnoop_log_lock; + +char btsnoop_save_log = FALSE; +static int hci_btsnoop_fd = -1; +static const uint64_t BTSNOOP_EPOCH_DELTA = 0x00dcddb30f2f8000ULL; +unsigned int btsnoop_cnts = 0; +unsigned int btsnoop_rev_length = 0; +extern char skwlog_slice; +extern char btsnoop_log_en; + +static uint64_t skw_btsnoop_timestamp(void) +{ + struct timeval tv; + gettimeofday(&tv, NULL); + + uint64_t timestamp = (tv.tv_sec * 1000LL * 1000LL) + tv.tv_usec + BTSNOOP_EPOCH_DELTA; + return timestamp; +} + +void skw_btsnoop_open() +{ + char last_log_path[PATH_MAX]; + uint64_t timestamp; + uint32_t usec; + char new_file = TRUE; + btsnoop_rev_length = 0; + + + if((hci_btsnoop_fd != -1) || (!btsnoop_log_en) || (strlen(skw_btsnoop_path) <= 0)) + { + ALOGE("%s btsnoop log file is already open. log_en:%d", __func__, btsnoop_log_en); + return; + } + + if(btsnoop_save_log) + { + struct stat buf; + int fd = -1; + if(stat(skw_btsnoop_path, &buf) == 0) + { + fd = open(skw_btsnoop_path, O_RDONLY); + } + + if(fd >= 0) + { + fstat(fd, &buf); + int file_zie = (int)buf.st_size; + close(fd); + ALOGD("%s btsnoop log file size:%d", __func__, file_zie); + if(skwlog_slice) + { + if(file_zie > SKW_LOG_DEFAULT_SIZE) + { + snprintf(last_log_path, PATH_MAX, "%s.last", skw_btsnoop_path); + remove(last_log_path); + if (!rename(skw_btsnoop_path, last_log_path) && (errno != ENOENT)) + { + ALOGE("%s unable to rename '%s' to btsnoop_hci: %s", __func__, skw_btsnoop_path, strerror(errno)); + return ; + } + skwlog_reopen(TRUE); + } + else + { + btsnoop_rev_length = file_zie; + if(file_zie < 16) + { + new_file = TRUE; + } + else + { + new_file = FALSE; + } + skwlog_reopen(new_file); + } + } + else + { + if(file_zie > 16) + { + time_t current_time = time(NULL); + struct tm *time_created = localtime(¤t_time); + char config_time_created[sizeof("YYYY-MM-DD-HHMMSS") + 1]; + strftime(config_time_created, sizeof("YYYY-MM-DD-HHMMSS"), "%Y-%m-%d-%H%M%S", time_created); + timestamp = skw_btsnoop_timestamp() - BTSNOOP_EPOCH_DELTA; + usec = (uint32_t)(timestamp % 1000000LL); + snprintf(last_log_path, PATH_MAX, "%s.%s_%d-%02d", skw_btsnoop_path, config_time_created, (int)usec, (int)btsnoop_cnts); + btsnoop_cnts ++; + if (!rename(skw_btsnoop_path, last_log_path) && (errno != ENOENT)) + { + ALOGE("%s unable to rename '%s' to '%s': %s", __func__, skw_btsnoop_path, last_log_path, strerror(errno)); + } + + } + } + + } + else if(skwlog_slice) + { + ALOGD("%s btsnoop log file not exist", __func__); + skwlog_reopen(TRUE); + } + + } + else + { + snprintf(last_log_path, PATH_MAX, "%s.last", skw_btsnoop_path); + if (!rename(skw_btsnoop_path, last_log_path) && errno != ENOENT) + { + ALOGE("%s unable to rename '%s' to '%s': %s", __func__, skw_btsnoop_path, last_log_path, strerror(errno)); + } + } + + hci_btsnoop_fd = open(skw_btsnoop_path, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH); + + if (hci_btsnoop_fd < 0) + { + ALOGE("%s unable to open '%s': %s", __func__, skw_btsnoop_path, strerror(errno)); + return; + } + + ALOGD("%s open '%s', fd:%d, is new:%d", __func__, skw_btsnoop_path, hci_btsnoop_fd, new_file); + //lseek(hci_btsnoop_fd, 0, SEEK_END); + if(new_file) + { + write(hci_btsnoop_fd, "btsnoop\0\0\0\0\1\0\0\x3\xea", 16); + + ALOGD("%s write header", __func__); + } +} + +void skw_btsnoop_init() +{ + pthread_mutex_init(&btsnoop_log_lock, NULL); + btsnoop_cnts = 0; + //ALOGD("%s btsnoop log file path:%s", __func__,skw_btsnoop_path); + skw_btsnoop_open(); +} + +void skw_btsnoop_close(void) +{ + pthread_mutex_destroy(&btsnoop_log_lock); + if (hci_btsnoop_fd != -1) + { + close(hci_btsnoop_fd); + } + hci_btsnoop_fd = -1; +} + +static void skw_btsnoop_write(const void *data, size_t length) +{ + if (hci_btsnoop_fd != -1) + { + write(hci_btsnoop_fd, data, length); + } +} + +void skw_btsnoop_capture(const uint8_t *packet, char is_received) +{ + int length_he = 0; + int length = 0; + int flags = 0; + int drops = 0; + if((!btsnoop_log_en) || (hci_btsnoop_fd == -1)) + { + return ; + } + + pthread_mutex_lock(&btsnoop_log_lock); + + uint8_t type = packet[0]; + switch (type) + { + case HCI_COMMAND_PKT: + length_he = packet[3] + 4; + flags = 2; + break; + case HCI_ACLDATA_PKT: + case HCI_ISO_PKT: + length_he = (packet[4] << 8) + packet[3] + 5; + flags = is_received; + break; + case HCI_SCODATA_PKT: + length_he = packet[3] + 4; + flags = is_received; + break; + case HCI_EVENT_PKT: + case HCI_EVENT_SKWLOG: + length_he = packet[2] + 3; + flags = 3; + break; + default: + pthread_mutex_unlock(&btsnoop_log_lock); + return; + //break; + } + + btsnoop_rev_length += length_he; + + //SKWBT_LOG("btsnoop_capture type:%d, len:%d", type, length_he); + + uint64_t timestamp = skw_btsnoop_timestamp(); + uint32_t time_hi = timestamp >> 32ul; + uint32_t time_lo = timestamp & 0xFFFFFFFF; + + length = htonl(length_he); + flags = htonl(flags); + drops = htonl(drops); + time_hi = htonl(time_hi); + time_lo = htonl(time_lo); + + skw_btsnoop_write(&length, 4); + skw_btsnoop_write(&length, 4); + skw_btsnoop_write(&flags, 4); + skw_btsnoop_write(&drops, 4); + skw_btsnoop_write(&time_hi, 4); + skw_btsnoop_write(&time_lo, 4); + + skw_btsnoop_write(packet, length_he); + + if(btsnoop_rev_length >= SKW_LOG_DEFAULT_SIZE) + { + close(hci_btsnoop_fd); + hci_btsnoop_fd = -1; + skw_btsnoop_open(); + //skwlog_reopen(TRUE); + } + + pthread_mutex_unlock(&btsnoop_log_lock); +} + + + diff --git a/android/hardware/seekwave/skwbt/src/skw_ext.c b/android/hardware/seekwave/skwbt/src/skw_ext.c new file mode 100755 index 0000000..4843201 --- /dev/null +++ b/android/hardware/seekwave/skwbt/src/skw_ext.c @@ -0,0 +1,263 @@ +/****************************************************************************** + * + * Copyright (C) 2020-2021 SeekWave Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * + ******************************************************************************/ + +#include <pthread.h> +#include <errno.h> +#include <utils/Log.h> +#include <sys/inotify.h> +#include <sys/epoll.h> +#include <sys/socket.h> + +#include <string.h> +#include <unistd.h> +#include "skw_common.h" +#include "skw_ext.h" + +#define SKW_EXT_BUF_SIZE 2048 + +typedef struct +{ + pthread_t thread_id; + char thread_running; + int epoll_fd; + int signal_fd[2]; +} skw_inotify_thread_info_st; + +skw_inotify_thread_info_st skw_inotify_thread_info; + + +extern void scomm_vendor_write_wakeup_adv_enable(); + + +/* +struct inotify_event { + int wd; // Watch descriptor + uint32_t mask; // Mask of events + uint32_t cookie; // Unique cookie associating related events (for rename(2)) + uint32_t len; // Size of name field + char name[]; // Optional null-terminated name +}; +*/ + +/******************************************************************************* +** +** Function skw_ext_inotify_thread +** +** Description inotify thread function +** +** Returns void * +** +*******************************************************************************/ +static void *skw_ext_inotify_thread(void *arg) +{ + int fd = -1; + int wd = -1; + int read_len = 0; + int event_pos = 0; + int event_size = 0; + char buffer[SKW_EXT_BUF_SIZE + 1] = {0}; + struct inotify_event *event = NULL; + skw_inotify_thread_info_st *thread_info = &skw_inotify_thread_info; + + int epfd = epoll_create(4); + struct epoll_event ev; + struct epoll_event events[20]; + + SKWBT_LOG("%s enter", __func__); + + SKW_UNUSED(arg); + fd = inotify_init1(IN_NONBLOCK); + if(fd < 0) + { + ALOGE("inotify_init1 failed: %s", strerror(errno)); + return NULL; + } + wd = inotify_add_watch(fd, "/dev", IN_CREATE); + if (wd < 0) + { + ALOGE("inotify_add_watch fail: %s\n", strerror(errno)); + return NULL; + } + if(socketpair(AF_UNIX, SOCK_STREAM, 0, thread_info->signal_fd) == -1) + { + ALOGE("signal socket creare fail: %s\n", strerror(errno)); + return NULL; + } + thread_info->epoll_fd = epfd; + + memset(&ev, 0, sizeof(ev)); + ev.data.fd = fd; + ev.events = EPOLLIN | EPOLLET; + epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &ev); + + + ev.events = EPOLLIN | EPOLLHUP | EPOLLRDHUP | EPOLLERR; + ev.data.fd = thread_info->signal_fd[0]; + if (epoll_ctl(epfd, EPOLL_CTL_ADD, ev.data.fd, &ev) == -1) + { + ALOGE("%s unable to register signal fd %d to epoll set: %s", __func__, ev.data.fd, strerror(errno)); + return NULL; + } + + while(thread_info->thread_running) + { + int nfds = epoll_wait(epfd, events, 20, 500); + for (int i = 0; i < nfds; ++i) + { + if(thread_info->thread_running == 0) + { + goto thread_exit; + } + if ((events[i].data.fd != fd) || (!(events[i].events & EPOLLIN))) + { + continue; + } + read_len = read(fd, buffer, SKW_EXT_BUF_SIZE); + + //SKWBT_LOG("select read_len:%d, nfds:%d", read_len, nfds); + + if(read_len <= 0) + { + continue; + } + event_pos = 0; + + while((read_len >= (int)sizeof(struct inotify_event)) && (event_pos < SKW_EXT_BUF_SIZE))//may receive multiple events + { + event = (struct inotify_event *)(buffer + event_pos); + if(event->len) + { + if(event->mask & IN_CREATE) + { + SKWBT_LOG("recv command msg mask:0x%X name:%s", event->mask, event->name); + if (((event->mask & IN_ISDIR) == 0) && (memcmp(event->name, "shutdown", 8) == 0)) + { + scomm_vendor_write_wakeup_adv_enable(); + + SKWBT_LOG("received shutdown command"); + goto thread_exit; + } + } + else + { + SKWBT_LOG("othre event, mask:0x%X, name: %s", event->mask, event->name); + } + } + + event_size = sizeof(struct inotify_event) + event->len; + read_len -= event_size; + event_pos += event_size; + } + + } + } + +thread_exit: + SKWBT_LOG("%s exit", __func__); + inotify_rm_watch(fd, wd); + close(fd); + thread_info->thread_running = FALSE; + return NULL; +} + +/******************************************************************************* +** +** Function skw_ext_inotify_thread_init +** +** Description inotify thread init +** +** Returns None +** +*******************************************************************************/ +void skw_ext_inotify_thread_init(void) +{ +#if BLE_ADV_WAKEUP_ENABLE + skw_inotify_thread_info_st *thread_info = &skw_inotify_thread_info; + pthread_attr_t thread_attr; + pthread_attr_init(&thread_attr); + pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_JOINABLE); + + memset(thread_info, 0, sizeof(skw_inotify_thread_info_st)); + SKWBT_LOG("%s enter", __func__); + + thread_info->signal_fd[0] = -1; + thread_info->signal_fd[1] = -1; + if(pthread_create(&thread_info->thread_id, &thread_attr, skw_ext_inotify_thread, NULL) != 0) + { + ALOGE("%s pthread_create : %s", __func__, strerror(errno)); + thread_info->thread_id = -1; + return ; + } + thread_info->thread_running = TRUE; +#else + SKW_UNUSED(skw_ext_inotify_thread); +#endif +} + +/******************************************************************************* +** +** Function skw_ext_inotify_thread_exit +** +** Description inotify thread exit +** +** Returns None +** +*******************************************************************************/ +void skw_ext_inotify_thread_exit(void) +{ +#if BLE_ADV_WAKEUP_ENABLE + char is_closed = 0; + skw_inotify_thread_info_st *thread_info = &skw_inotify_thread_info; + + if(thread_info->thread_running && (thread_info->thread_id != -1)) + { + unsigned char close_signal = 1; + thread_info->thread_running = FALSE; + if(thread_info->epoll_fd >= 0) + { + ssize_t ret; + RW_NO_INTR(ret = write(thread_info->signal_fd[1], &close_signal, 1)); + SKWBT_LOG("%s signal_fd:%d, ret:%d", __func__, thread_info->epoll_fd, (int)ret); + + epoll_ctl(thread_info->epoll_fd, EPOLL_CTL_DEL, thread_info->signal_fd[0], NULL); + close(thread_info->signal_fd[0]); + close(thread_info->signal_fd[1]); + + is_closed = 1; + } + pthread_join(thread_info->thread_id, NULL); + } + + if(is_closed == 0)//The thread may have exited + { + if(thread_info->signal_fd[0] != -1) + { + close(thread_info->signal_fd[0]); + } + if(thread_info->signal_fd[1] != -1) + { + close(thread_info->signal_fd[1]); + } + } + if(thread_info->epoll_fd >= 0) + { + if(is_closed == 0) + { + epoll_ctl(thread_info->epoll_fd, EPOLL_CTL_DEL, thread_info->signal_fd[0], NULL); + } + close(thread_info->epoll_fd); + } + thread_info->signal_fd[0] = -1; + thread_info->signal_fd[1] = -1; + thread_info->epoll_fd = -1; + + + SKWBT_LOG("%s exit", __func__); +#endif + +} diff --git a/android/hardware/seekwave/skwbt/src/skw_gen_addr.c b/android/hardware/seekwave/skwbt/src/skw_gen_addr.c new file mode 100755 index 0000000..447f447 --- /dev/null +++ b/android/hardware/seekwave/skwbt/src/skw_gen_addr.c @@ -0,0 +1,171 @@ +/****************************************************************************** + * + * Copyright (C) 2020-2021 SeekWave Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * + ******************************************************************************/ +#include <stdio.h> +#include <stdlib.h> +#include <time.h> +#include <string.h> +#include <utils/Log.h> +#include <fcntl.h> +#include <unistd.h> +#include <sys/ioctl.h> + +#define MACDEF_FOR_INCAR 1 + +#define BD_ADDR_LEN 6 + +unsigned char bdaddr_lap[3] = {0x12, 0x24, 0x56}; +char bdaddr_valid = 1; +extern char skw_btsnoop_path[]; + +extern void hex2String(unsigned char hex[], unsigned char str[], int N); + +void skw_addr_gen_init() +{ + char basepath[PATH_MAX] = {0}; + char filepath[PATH_MAX] = {0}; + int size = strlen(skw_btsnoop_path); + int i; + for(i = size - 1; i > 0; i--)//get log dir + { + char ch = skw_btsnoop_path[i]; + if((ch == '/') || (ch == '\\')) + { + memcpy(basepath, skw_btsnoop_path, i); + //ALOGD("cp:%d", i); + break; + } + } + snprintf(filepath, PATH_MAX, "%s/skwbdaddr.txt", basepath); + + ALOGD("%s, %s", __func__, filepath); + + FILE *fp = fopen(filepath, "r"); //read only + if(fp == NULL)//file not exist + { + fp = fopen(filepath, "w"); //file not exist, create it + srand(time(NULL)); + if(fp) + { + bdaddr_lap[0] = (unsigned char)(rand() & 0xFF); + bdaddr_lap[1] = (unsigned char)(rand() & 0xFF); + bdaddr_lap[2] = (unsigned char)(rand() & 0xFF); + fwrite(bdaddr_lap, 3, 1, fp); + fflush(fp); + fclose(fp); + } + else + { + bdaddr_valid = 0; + } + //else use default addr + } + else + { + fread(bdaddr_lap, 3, 1, fp); + fclose(fp); + } + + ALOGD("%s, addr valid:%d, %02X %02X %02X", __func__, bdaddr_valid, bdaddr_lap[0], bdaddr_lap[1], bdaddr_lap[2]); +} + + +#if MACDEF_FOR_INCAR + +#define VENDOR_REQ_TAG 0x56524551 +#define VENDOR_READ_IO _IOW('v', 0x01, unsigned int) +#define VENDOR_WRITE_IO _IOW('v', 0x02, unsigned int) + +#define VENDOR_SN_ID 1 +#define VENDOR_WIFI_MAC_ID 2 +#define VENDOR_LAN_MAC_ID 3 +#define VENDOR_BLUETOOTH_ID 4 + +struct rk_vendor_req +{ + uint32_t tag; + uint16_t id; + uint16_t len; + uint8_t data[1]; +}; + +int m_get_mac_address(uint8_t *local_addr) +{ + int ret ; + uint8_t p_buf[64]; + struct rk_vendor_req *req; + + req = (struct rk_vendor_req *)p_buf; + int sys_fd = open("/dev/vendor_storage", O_RDWR, 0); + if(sys_fd < 0) + { + ALOGE("vendor_storage open fail\n"); + return -1; + } + + req->tag = VENDOR_REQ_TAG; + req->id = VENDOR_BLUETOOTH_ID; + + req->len = 6; + ret = ioctl(sys_fd, VENDOR_READ_IO, req); + if (!ret) + { + //uint8_t str_buffer[32] = {0}; + int i = 0, j = BD_ADDR_LEN - 1; + for(; i < BD_ADDR_LEN; i++, j--) + { + local_addr[i] = req->data[j]; + } + //memcpy(local_addr, req->data, BD_ADDR_LEN); + //hex2String(local_addr, str_buffer, BD_ADDR_LEN); + //ALOGE("bt addr get ok:%s", str_buffer); + } + + close(sys_fd); + return 0; +} + + +#endif + +char skw_addr_check_valid(unsigned char *bd_addr) +{ + uint32_t addr_check = 0; + int i ; + for( i = 0; i < BD_ADDR_LEN; i++) + { + addr_check += bd_addr[i]; + } + return (addr_check > 0); +} + +/* +Get bd addr from AP +if address exist, return 1, else 0 +*/ +char skw_addr_from_ap(unsigned char *bd_addr) +{ + memset(bd_addr, 0, BD_ADDR_LEN); +#if MACDEF_FOR_INCAR + if(m_get_mac_address(bd_addr) == 0) + { + return skw_addr_check_valid(bd_addr); + } +#endif + return 0; +} + +void skw_addr_get(unsigned char *buffer) +{ + if(bdaddr_valid > 0) + { + buffer[0] = bdaddr_lap[0]; + buffer[1] = bdaddr_lap[1]; + buffer[2] = bdaddr_lap[2]; + } +} + diff --git a/android/hardware/seekwave/skwbt/src/skw_log.c b/android/hardware/seekwave/skwbt/src/skw_log.c new file mode 100755 index 0000000..b743352 --- /dev/null +++ b/android/hardware/seekwave/skwbt/src/skw_log.c @@ -0,0 +1,216 @@ +/****************************************************************************** + * + * Copyright (C) 2020-2021 SeekWave Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * + ******************************************************************************/ + +#include <time.h> +#include <stdio.h> +#include <pthread.h> +#include <fcntl.h> +#include <math.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <utils/Log.h> +#include <errno.h> +#include <sys/stat.h> +#include "skw_log.h" +#include "skw_common.h" + + +static pthread_mutex_t skwlog_lock; + +static int skwlog_fp = -1; +unsigned int skwlog_rev_length = 0; +unsigned int skwlog_cnts = 0; + +extern char skw_btsnoop_path[]; +extern char btcp_log_en; +extern char skwlog_slice; +extern char btsnoop_save_log; + + +void skwlog_open(char new_file) +{ + char log_path[PATH_MAX]; + char basepath[PATH_MAX] = {0}; + char lastpath[PATH_MAX] = {0}; + int i; + int size = strlen(skw_btsnoop_path); + if((!btcp_log_en) || (size <= 0)) + { + return ; + } + + for( i = size - 1; i > 0; i--)//get log dir + { + char ch = skw_btsnoop_path[i]; + if((ch == '/') || (ch == '\\')) + { + memcpy(basepath, skw_btsnoop_path, i); + //ALOGD("cp:%d", i); + break; + } + } + snprintf(log_path, PATH_MAX, "%s/skwlog.log", basepath); + + struct stat buf; + int fd = -1; + if(stat(log_path, &buf) == 0) + { + fd = open(log_path, O_RDONLY); + } + if(fd > 0) + { + fstat(fd, &buf); + int file_zie = (int)buf.st_size; + close(fd); + ALOGD("%s cp log file size:%d", __func__, file_zie); + if(skwlog_slice) + { + if(new_file) + { + snprintf(lastpath, PATH_MAX, "%s/skwlog-last.log", basepath); + remove(lastpath); + if (!rename(log_path, lastpath) && (errno != ENOENT)) + { + ALOGE("%s unable to rename '%s' to '%s': %s", __func__, log_path, lastpath, strerror(errno)); + } + } + else + { + skwlog_rev_length = (unsigned int)file_zie; + } + } + else + { + if(file_zie > (16 + 12)) + { + time_t current_time = time(NULL); + struct tm *time_created = localtime(¤t_time); + char config_time_created[sizeof("YYYY-MM-DD-HHMMSS") + 1]; + strftime(config_time_created, sizeof("YYYY-MM-DD-HHMMSS"), "%Y-%m-%d-%H%M%S", time_created); + + snprintf(lastpath, PATH_MAX, "%s/skwlog-%s_%03d-%02d.log", basepath, config_time_created, rand() % 1000, (int)skwlog_cnts); + + if (!rename(log_path, lastpath) && (errno != ENOENT)) + { + ALOGE("%s unable to rename '%s' to '%s': %s", __func__, log_path, lastpath, strerror(errno)); + } + + } + } + if(0 == file_zie) + { + new_file = TRUE; + } + } + else + { + new_file = TRUE; + } + + //ALOGD("basepath:%d, %s,%s",size, basepath, skw_btsnoop_path); + + ALOGD("skwlog:%s, %s", log_path, lastpath); + + skwlog_fp = open(log_path, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH); + + ALOGD("%s open '%s', fd:%d, is new:%d", __func__, log_path, skwlog_fp, new_file); + //lseek(skwlog_fp, 0, SEEK_END); + if(skwlog_fp > 0) + { + if(new_file) + { + write(skwlog_fp, "skwcplog\0\1\0\2\0\0\x3\xEA", 16); + } + //skwlog_print_current_time(); + } + skwlog_cnts ++; +} + +void skwlog_reopen(char new_file) +{ + pthread_mutex_lock(&skwlog_lock); + skwlog_rev_length = 0; + if (skwlog_fp != -1) + { + close(skwlog_fp); + } + skwlog_open(new_file); + pthread_mutex_unlock(&skwlog_lock); + if(skwlog_fp > 0) + { + skwlog_print_current_time(); + } +} + + +void skwlog_print_current_time() +{ + time_t current_time = time(NULL); + struct tm *time_created = localtime(¤t_time); + + // + unsigned char buffer[16] = {0x07, 0xFF, 0x08, 0x00, 0x01, 0xD0, 0x55, 0x55}; + buffer[8] = time_created->tm_sec;//[0,59] + buffer[9] = time_created->tm_min;//[0,59] + buffer[10] = time_created->tm_hour;//[0,23] + buffer[11] = time_created->tm_mday;//[1,31] + + skwlog_write(buffer, 12); +} + +void skwlog_init() +{ + pthread_mutex_init(&skwlog_lock, NULL); + skwlog_fp = -1; + skwlog_rev_length = 0; + skwlog_cnts = 0; + if(btcp_log_en && ((!btsnoop_save_log) || (!skwlog_slice))) + { + skwlog_open(TRUE); + if(skwlog_fp > 0) + { + skwlog_print_current_time(); + } + } + ALOGD("skwlog_init,en:%d, slice:%d, fd:%d", btcp_log_en, skwlog_slice, skwlog_fp); +} + + +void skwlog_write(unsigned char *buffer, unsigned int length) +{ + if(skwlog_fp > 0) + { + pthread_mutex_lock(&skwlog_lock); + + write(skwlog_fp, buffer, length); + skwlog_rev_length += length; + + if(skwlog_rev_length >= SKW_LOG_DEFAULT_SIZE) + { + skwlog_rev_length = 0; + close(skwlog_fp); + skwlog_fp = -1; + skwlog_open(TRUE); + } + pthread_mutex_unlock(&skwlog_lock); + } +} + +void skwlog_close() +{ + pthread_mutex_destroy(&skwlog_lock); + if (skwlog_fp != -1) + { + close(skwlog_fp); + } + skwlog_fp = -1; + skwlog_rev_length = 0; + skwlog_cnts = 0; +} + diff --git a/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/skw_logapp32 b/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/skw_logapp32 new file mode 100755 index 0000000..afabaf5 --- /dev/null +++ b/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/skw_logapp32 Binary files differ diff --git a/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/skw_logapp64 b/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/skw_logapp64 new file mode 100755 index 0000000..9b46195 --- /dev/null +++ b/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/skw_logapp64 Binary files differ diff --git a/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/skwbt.conf b/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/skwbt.conf new file mode 100755 index 0000000..f82ded8 --- /dev/null +++ b/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/skwbt.conf @@ -0,0 +1,30 @@ +# RELEASE NAME: 20210721_BT_ANDROID_10.0 +# Bluetooth Device Name +#Name=SeekWave Bluetooth + +#Indicate USB/SDIO or UART driver bluetooth +BtDeviceNode=/dev/BTCMD +BtDeviceNode=/dev/BTDATA +BtDeviceNode=/dev/BTAUDIO +BtDeviceNode=/dev/BTISOC +#BtDeviceNode=?/dev/ttyS0 + +# Enable BtSnoop logging function +# valid value : true, false +SkwBtUartOnly=false +#SkwBtNoSleep:just for uart mode +SkwBtNoSleep=false +SkwBtsnoopDump=true +SkwBtcplog=false +SkwBtDrvlog=false + +#WakeupADVData=gpio No;effactive level;ADVData;Mask ### ADVData size must be equal Mask size +#WakeupADVData=4;1;0;020106031980010FFF00112233AABBCCDD;0000FF0000FFFFFF000000000000000000 +WakeupADVData=4;1;0;020105031980010FFF00112233AABBCCDDFFFFFFFFFFFF;000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +# BtSnoop log output file +BtSnoopFileName=/data/misc/bluedroid/btsnoop_hci.cfa + + +# Preserve existing BtSnoop log before overwriting +BtSnoopSaveLog=true +SkwLogSlice=true diff --git a/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/sv6160.nvbin b/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/sv6160.nvbin new file mode 100755 index 0000000..70ab522 --- /dev/null +++ b/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/sv6160.nvbin Binary files differ diff --git a/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/sv6160lite.nvbin b/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/sv6160lite.nvbin new file mode 100755 index 0000000..19e9f3f --- /dev/null +++ b/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/sv6160lite.nvbin Binary files differ diff --git a/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/sv6316.nvbin b/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/sv6316.nvbin new file mode 100755 index 0000000..19e9f3f --- /dev/null +++ b/android/hardware/seekwave/skwbt/vendor/etc/bluetooth/sv6316.nvbin Binary files differ diff --git a/android/hardware/seekwave/wlan/Android.mk b/android/hardware/seekwave/wlan/Android.mk new file mode 100755 index 0000000..e0462ae --- /dev/null +++ b/android/hardware/seekwave/wlan/Android.mk @@ -0,0 +1,3 @@ +ifeq ($(BOARD_WLAN_DEVICE), seekwave) + include $(call all-subdir-makefiles) +endif diff --git a/android/hardware/seekwave/wlan/CleanSpec.mk b/android/hardware/seekwave/wlan/CleanSpec.mk new file mode 100755 index 0000000..b84e1b6 --- /dev/null +++ b/android/hardware/seekwave/wlan/CleanSpec.mk @@ -0,0 +1,49 @@ +# Copyright (C) 2007 The Android Open Source Project +# +# 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. +# + +# If you don't need to do a full clean build but would like to touch +# a file or delete some intermediate files, add a clean step to the end +# of the list. These steps will only be run once, if they haven't been +# run before. +# +# E.g.: +# $(call add-clean-step, touch -c external/sqlite/sqlite3.h) +# $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates) +# +# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with +# files that are missing or have been moved. +# +# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory. +# Use $(OUT_DIR) to refer to the "out" directory. +# +# If you need to re-do something that's already mentioned, just copy +# the command and add it to the bottom of the list. E.g., if a change +# that you made last week required touching a file and a change you +# made today requires touching the same file, just copy the old +# touch step and add it to the end of the list. +# +# ************************************************ +# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST +# ************************************************ + +# For example: +#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates) +#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates) +#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f) +#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*) + +# ************************************************ +# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST +# ************************************************ diff --git a/android/hardware/seekwave/wlan/METADATA b/android/hardware/seekwave/wlan/METADATA new file mode 100755 index 0000000..d97975c --- /dev/null +++ b/android/hardware/seekwave/wlan/METADATA @@ -0,0 +1,3 @@ +third_party { + license_type: NOTICE +} diff --git a/android/hardware/seekwave/wlan/configs/Android.mk b/android/hardware/seekwave/wlan/configs/Android.mk new file mode 100755 index 0000000..313a7ac --- /dev/null +++ b/android/hardware/seekwave/wlan/configs/Android.mk @@ -0,0 +1,31 @@ +# +# Copyright (C) 2008 The Android Open Source Project +# +# 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. +# +LOCAL_PATH := $(call my-dir) + +######################## + +WIFI_DRIVER_SOCKET_IFACE := wlan0 + +ifeq ($(strip $(WPA_SUPPLICANT_VERSION)),VER_0_8_X) + include external/wpa_supplicant_8/wpa_supplicant/wpa_supplicant_conf.mk +else +ifeq ($(strip $(WPA_SUPPLICANT_VERSION)),VER_0_6_X) + include external/wpa_supplicant_6/wpa_supplicant/wpa_supplicant_conf.mk +else + include external/wpa_supplicant/wpa_supplicant_conf.mk +endif +endif +####################### diff --git a/android/hardware/seekwave/wlan/configs/config-skw.mk b/android/hardware/seekwave/wlan/configs/config-skw.mk new file mode 100755 index 0000000..3de916e --- /dev/null +++ b/android/hardware/seekwave/wlan/configs/config-skw.mk @@ -0,0 +1,21 @@ +# Copyright (C) 2008 The Android Open Source Project +# +# 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. +# + +######################## + +PRODUCT_COPY_FILES += \ + hardware/seekwave/wlan/configs/wpa_supplicant_overlay.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/skw_wpa_supplicant_overlay.conf +# hardware/seekwave/wlan/configs/p2p_supplicant_overlay.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/skw_p2p_supplicant_overlay.conf +######################## diff --git a/android/hardware/seekwave/wlan/configs/wpa_supplicant_overlay.conf b/android/hardware/seekwave/wlan/configs/wpa_supplicant_overlay.conf new file mode 100755 index 0000000..133b527 --- /dev/null +++ b/android/hardware/seekwave/wlan/configs/wpa_supplicant_overlay.conf @@ -0,0 +1,6 @@ +disable_scan_offload=1 +wowlan_triggers=any +filter_rssi=-75 +p2p_disabled=1 +bgscan="simple:11:-70:105" +no_ctrl_interface= diff --git a/android/hardware/seekwave/wlan/wifi_hal/Android.mk b/android/hardware/seekwave/wlan/wifi_hal/Android.mk new file mode 100755 index 0000000..520b8d0 --- /dev/null +++ b/android/hardware/seekwave/wlan/wifi_hal/Android.mk @@ -0,0 +1,36 @@ +LOCAL_PATH := $(call my-dir) + +# Make the HAL library +# ============================================================ +include $(CLEAR_VARS) + +LOCAL_CFLAGS := -Wall \ + -Werror \ + -Wno-format \ + -Wno-reorder \ + -Wno-unused-function \ + -Wno-unused-parameter \ + -Wno-unused-private-field \ + -Wno-unused-variable \ + -Wno-unused-parameter + +LOCAL_C_INCLUDES += external/libnl/include \ + $(call include-path-for, libhardware_legacy)/hardware_legacy \ + external/wpa_supplicant_8/src/drivers \ + external/boringssl/include \ + external/boringssl/src/crypto/digest \ + external/boringssl/src/crypto/evp/ + +LOCAL_HEADER_LIBRARIES := libutils_headers liblog_headers + +LOCAL_SRC_FILES := main.cpp \ + wifi_command.cpp + +LOCAL_MODULE := libwifi-hal-skw +LOCAL_PROPRIETARY_MODULE := true +#LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 +#LOCAL_LICENSE_CONDITIONS := notice +#LOCAL_NOTICE_FILE := $(LOCAL_PATH)/NOTICE + +include $(BUILD_STATIC_LIBRARY) + diff --git a/android/hardware/seekwave/wlan/wifi_hal/NOTICE b/android/hardware/seekwave/wlan/wifi_hal/NOTICE new file mode 100755 index 0000000..f9d25ea --- /dev/null +++ b/android/hardware/seekwave/wlan/wifi_hal/NOTICE @@ -0,0 +1,43 @@ + +Copyright (c) 2005-2010, The Android Open Source Project +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * 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. + * Neither the name of The Android Open Source Project nor the names + of its contributors may be used to endorse or promote products + derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 THE +COPYRIGHT OWNER 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. + + * Copyright (c) 2002-2010, Jouni Malinen <j@w1.fi> + * Copyright (c) 2003-2004, Instant802 Networks, Inc. + * Copyright (c) 2005-2006, Devicescape Software, Inc. + * Copyright (c) 2007, Johannes Berg <johannes@sipsolutions.net> + * Copyright (c) 2009-2010, Atheros Communications + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. diff --git a/android/hardware/seekwave/wlan/wifi_hal/main.cpp b/android/hardware/seekwave/wlan/wifi_hal/main.cpp new file mode 100755 index 0000000..c080fba --- /dev/null +++ b/android/hardware/seekwave/wlan/wifi_hal/main.cpp @@ -0,0 +1,1895 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Portions copyright (C) 2017 + * + * 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. + */ + +#include <errno.h> +#include <netlink/netlink.h> +#include <netlink/genl/genl.h> +#include <netlink/genl/ctrl.h> +#include <sys/types.h> +#include <unistd.h> + +#include "main.h" +#include "wifi_command.h" + +#define SKW_BUFF_SIZE 256 +#define WIFI_HAL_SOCK_DEFAULT_PORT 644 +#define WIFI_HAL_SOCK_EVENT_PORT 645 +#define SOCK_BUFF_SIZE 0x40000 + +struct nl_sock *getSock(wifi_interface_handle handle) +{ + interface_info *info = (interface_info *)handle; + + return ((hal_info *)info->hal_handle)->nl_hal; +} + +int getFamily(wifi_interface_handle handle) +{ + interface_info *info = (interface_info *)handle; + + return ((hal_info *)info->hal_handle)->family_nl80211; +} + +void skw_wifi_get_error_info(wifi_error error, const char **chr) +{ + ALOGD("%s", __func__); +} + +wifi_error skw_wifi_get_supported_feature_set(wifi_interface_handle handle, feature_set *feature) +{ + + ALOGD("%s, feature: 0x%x", __func__, *feature); + + *feature = 0; + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_get_concurrency_matrix(wifi_interface_handle handle, int count, + feature_set *feature, int *args) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_set_scanning_mac_oui(wifi_interface_handle handle, unsigned char *oui) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_get_supported_channels(wifi_handle handle, int *num, wifi_channel *channels) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_is_epr_supported(wifi_handle handle) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +class GetInterfacesCommand : public WifiCommand { +private: + int index; + interface_info ifaces[SKW_NR_IFACE]; + +public: + GetInterfacesCommand(struct nl_sock *sk, int family, int flags, int nl80211_cmd) + : WifiCommand(sk, family, flags, nl80211_cmd) + { + index = 0; + memset(ifaces, 0x0, sizeof(interface_info)); + } + + virtual wifi_error build(wifi_interface_handle handle, void *param) + { + return WIFI_SUCCESS; + } + + virtual wifi_error parser(struct nlattr *attr[NL80211_ATTR_MAX]) + { + if (attr[NL80211_ATTR_IFINDEX]) + ifaces[index].iface_idx = nla_get_u32(attr[NL80211_ATTR_IFINDEX]); + else + ifaces[index].wdev_idx = nla_get_u32(attr[NL80211_ATTR_WDEV]); + + if (attr[NL80211_ATTR_IFNAME]) + strcpy(ifaces[index].name, nla_get_string(attr[NL80211_ATTR_IFNAME])); + + index++; + + return WIFI_SUCCESS; + } + + int getIfaceNum() + { + return index; + } + + interface_info *iface(int idx) + { + return &ifaces[idx]; + } +}; + +wifi_error skw_wifi_get_ifaces(wifi_handle handle, int *num, wifi_interface_handle **iface_handle) +{ + int i; + hal_info *hal = (hal_info *)handle; + GetInterfacesCommand cmd(hal->nl_hal, hal->family_nl80211, NLM_F_DUMP, NL80211_CMD_GET_INTERFACE); + + memset(hal->interfaces, 0x0, sizeof(hal->interfaces)); + + cmd.build(NULL, NULL); + cmd.send(); + + if (cmd.getIfaceNum() == 0) + return WIFI_ERROR_UNKNOWN; + + hal->nr_interfaces = cmd.getIfaceNum(); + + for (i = 0; i < hal->nr_interfaces; i++) { + strcpy(hal->interfaces[i].name, cmd.iface(i)->name); + hal->interfaces[i].iface_idx = cmd.iface(i)->iface_idx; + hal->interfaces[i].wdev_idx = cmd.iface(i)->wdev_idx; + hal->interfaces[i].hal_handle = handle; + + hal->interface_handle[i] = (wifi_interface_handle)(&hal->interfaces[i]); + } + + *iface_handle = &hal->interface_handle[0]; + *num = hal->nr_interfaces; + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_get_iface_name(wifi_interface_handle handle, char *name, size_t size) +{ + interface_info *iface = (interface_info *)handle; + + ALOGD("%s: name: %s", __func__, iface->name); + + strncpy(name, iface->name, size); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_set_iface_event_handler(wifi_request_id,wifi_interface_handle , + wifi_event_handler) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_reset_iface_event_handler(wifi_request_id, wifi_interface_handle) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_start_gscan(wifi_request_id id, wifi_interface_handle iface, + wifi_scan_cmd_params params, wifi_scan_result_handler handler) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_stop_gscan(wifi_request_id, wifi_interface_handle) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_get_cached_gscan_results(wifi_interface_handle, byte, int, + wifi_cached_scan_results *results, int *) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_set_bssid_hotlist(wifi_request_id, wifi_interface_handle, + wifi_bssid_hotlist_params, wifi_hotlist_ap_found_handler) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_reset_bssid_hotlist(wifi_request_id, wifi_interface_handle) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_set_significant_change_handler(wifi_request_id, wifi_interface_handle, + wifi_significant_change_params, wifi_significant_change_handler) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_reset_significant_change_handler(wifi_request_id id, wifi_interface_handle iface) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_get_gscan_capabilities(wifi_interface_handle iface, wifi_gscan_capabilities *capa) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_set_link_stats(wifi_interface_handle iface, wifi_link_layer_params params) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_get_link_stats(wifi_request_id id, wifi_interface_handle handle, + wifi_stats_result_handler result_handler) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_clear_link_stats(wifi_interface_handle,u32, u32 *, u8, u8 *) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +class GetValidChannelsCommand : public WifiCommand { +private: + wifi_channel *mChannels; + int max_channels, nr_channels; + +public: + GetValidChannelsCommand(struct nl_sock *sk, int family, int flags, int nl80211_cmd, + wifi_channel *channels, int max_chans) : WifiCommand(sk, family, flags, nl80211_cmd) + { + nr_channels = 0; + mChannels = channels; + max_channels = max_chans; + memset(channels, 0x0, max_chans * sizeof(*channels)); + } + + virtual wifi_error build(wifi_interface_handle handle, void *param) + { +#define SKW_ATTR_BAND 20 + struct nlattr *data; + interface_info *iface = (interface_info *)handle; + put_u32(NL80211_ATTR_VENDOR_ID, OUI_GOOGLE); + put_u32(NL80211_ATTR_VENDOR_SUBCMD, SKW_VCMD_GET_CHANNELS); + + if (iface->wdev_idx) + put_u32(NL80211_ATTR_WDEV, iface->wdev_idx); + else + put_u32(NL80211_ATTR_IFINDEX, iface->iface_idx); + + data =attr_start(); + + put_u32(SKW_ATTR_BAND, *(int *)param); + + attr_end(data); + + return WIFI_SUCCESS; + } + + virtual wifi_error parser(struct nlattr *attr[NL80211_ATTR_MAX]) + { +#define SKW_ATTR_NR_CAHNNELS 36 +#define SKW_ATTR_VALID_CHANNELS 37 + int left, type; + struct nlattr *nla; + struct nlattr *data = attr[NL80211_ATTR_VENDOR_DATA]; + + if (!data) + return WIFI_ERROR_NOT_AVAILABLE; + + nla_for_each_attr(nla, (struct nlattr *)nla_data(data), nla_len(data), left) { + type = nla_type(nla); + switch (type) { + case SKW_ATTR_NR_CAHNNELS: + nr_channels = nla_get_u32(nla); + break; + + case SKW_ATTR_VALID_CHANNELS: + memcpy(mChannels, nla_data(nla), nla_len(nla)); + break; + + default: + break; + } + } + + return WIFI_SUCCESS; + } + + int numChannels() + { + return nr_channels; + } +}; + +wifi_error skw_wifi_get_valid_channels(wifi_interface_handle iface, int band, + int max_channels, wifi_channel *channels, int *num_channels) +{ + int i; + wifi_error err = WIFI_ERROR_UNKNOWN; + + GetValidChannelsCommand cmd(getSock(iface), getFamily(iface), 0, NL80211_CMD_VENDOR, channels, max_channels); + + cmd.build(iface, &band); + err = cmd.send(); + + *num_channels = cmd.numChannels(); + + ALOGD("%s, BAND: %d, nr channels: %d", __func__, band, *num_channels); + + return err; +} + +wifi_error skw_wifi_rtt_range_request(wifi_request_id, wifi_interface_handle, unsigned, + wifi_rtt_config[], wifi_rtt_event_handler) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_rtt_range_cancel(wifi_request_id id, wifi_interface_handle iface, + unsigned range, mac_addr addr[]) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_get_rtt_capabilities(wifi_interface_handle handle, wifi_rtt_capabilities *capa) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_rtt_get_responder_info(wifi_interface_handle iface, + wifi_rtt_responder *responder_info) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_enable_responder(wifi_request_id id, wifi_interface_handle iface, + wifi_channel_info channel_hint, unsigned max_duration_seconds, + wifi_rtt_responder *responder_info) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_disable_responder(wifi_request_id id, wifi_interface_handle iface) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_set_nodfs_flag(wifi_interface_handle, u32) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_start_logging(wifi_interface_handle, u32, u32, u32, u32, char *) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_set_epno_list(wifi_request_id, wifi_interface_handle, + const wifi_epno_params *, wifi_epno_handler) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_reset_epno_list(wifi_request_id, wifi_interface_handle) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +class SetCountryCodeCommand : public WifiCommand { +public: + SetCountryCodeCommand(struct nl_sock *sk, int family, int flags, int nl80211_cmd) + : WifiCommand(sk, family, flags, nl80211_cmd) + { + } + + virtual wifi_error build(wifi_interface_handle handle, void *param) + { + struct nlattr *data; + interface_info *iface = (interface_info *)handle; + + put_u32(NL80211_ATTR_VENDOR_ID, OUI_GOOGLE); + put_u32(NL80211_ATTR_VENDOR_SUBCMD, SKW_VCMD_SET_COUNTRY); + + if (iface->wdev_idx) + put_u32(NL80211_ATTR_WDEV, iface->wdev_idx); + else + put_u32(NL80211_ATTR_IFINDEX, iface->iface_idx); + + data =attr_start(); + + put_string(5, (const char *)param); + + attr_end(data); + + return WIFI_SUCCESS; + } + + virtual wifi_error parser(struct nlattr *attr[NL80211_ATTR_MAX]) + { + return WIFI_SUCCESS; + } +}; + +static wifi_error skw_wifi_set_country_code(wifi_interface_handle handle, const char *country) +{ + SetCountryCodeCommand cmd(getSock(handle), getFamily(handle), 0, NL80211_CMD_VENDOR); + + ALOGD("%s, country: %s", __func__, country); + + cmd.build(handle, (void *)country); + + return cmd.send(); +} + +wifi_error skw_wifi_get_firmware_memory_dump( wifi_interface_handle iface, + wifi_firmware_memory_dump_handler handler) +{ + ALOGD("%s", __func__); + + return WIFI_ERROR_NOT_SUPPORTED; +} + +wifi_error skw_wifi_set_log_handler(wifi_request_id id, wifi_interface_handle iface, + wifi_ring_buffer_data_handler handler) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_reset_log_handler(wifi_request_id id, wifi_interface_handle iface) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_set_alert_handler(wifi_request_id id, wifi_interface_handle iface, + wifi_alert_handler handler) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_reset_alert_handler(wifi_request_id id, wifi_interface_handle iface) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +class GetVersionCommand : public WifiCommand { +private: + char buff[SKW_BUFF_SIZE]; + +public: + GetVersionCommand(struct nl_sock *sk, int family, int flags, int cmd) + : WifiCommand(sk, family, flags, cmd) + { + memset(buff, 0x0, sizeof(buff)); + } + + virtual wifi_error build(wifi_interface_handle handle, void *param) + { + struct nlattr *data; + interface_info *info = (interface_info *)handle; + + put_u32(NL80211_ATTR_VENDOR_ID, OUI_GOOGLE); + put_u32(NL80211_ATTR_VENDOR_SUBCMD, SKW_VCMD_GET_VERSION); + + if (info->wdev_idx) + put_u32(NL80211_ATTR_WDEV, info->wdev_idx); + else + put_u32(NL80211_ATTR_IFINDEX, info->iface_idx); + + data =attr_start(); + + put_u32(*(int *)param, 0); + + attr_end(data); + + return WIFI_SUCCESS; + } + + virtual wifi_error parser(struct nlattr *attr[NL80211_ATTR_MAX]) + { + if (attr[NL80211_ATTR_VENDOR_DATA]) + strncpy(buff, (char *)nla_data(attr[NL80211_ATTR_VENDOR_DATA]), sizeof(buff)); + + return WIFI_SUCCESS; + } + + char *getVersion() + { + return buff; + } +}; + + +wifi_error skw_wifi_get_firmware_version(wifi_interface_handle iface, + char *buffer, int buffer_size) +{ + int subcmd = SKW_FW_VERSION; + wifi_error err = WIFI_ERROR_UNKNOWN; + GetVersionCommand cmd(getSock(iface), getFamily(iface), 0, NL80211_CMD_VENDOR); + + cmd.build(iface, &subcmd); + err = cmd.send(); + + strncpy(buffer, cmd.getVersion(), buffer_size); + + ALOGD("%s: %s", __func__, buffer); + + return err; +} + +class GetRingBuffStatus : public WifiCommand +{ +private: + u32 *num; + wifi_ring_buffer_status *mStatus; + +public: + GetRingBuffStatus(struct nl_sock *sk, int family, int flags, + int nl80211_cmd, u32 *num_rings, wifi_ring_buffer_status *status) + : WifiCommand(sk, family, flags, nl80211_cmd) + { + *num_rings = 0; + num = num_rings; + mStatus = status; + } + + virtual wifi_error build(wifi_interface_handle handle, void *param) + { + interface_info *iface = (interface_info *)handle; + + put_u32(NL80211_ATTR_VENDOR_ID, OUI_GOOGLE); + put_u32(NL80211_ATTR_VENDOR_SUBCMD, SKW_VCMD_GET_RING_BUFFERS_STATUS); + + if (iface->wdev_idx) + put_u32(NL80211_ATTR_WDEV, iface->wdev_idx); + else + put_u32(NL80211_ATTR_IFINDEX, iface->iface_idx); + + return WIFI_SUCCESS; + + } + + virtual wifi_error parser(struct nlattr *attr[NL80211_ATTR_MAX]) + { + int type, left; + struct nlattr *nla, *data; + int i = 0, nr_buff = 0; +#define SKW_ATTR_RING_BUFFERS_STATUS 13 +#define SKW_ATTR_NUM_RING_BUFFERS 14 + + data = attr[NL80211_ATTR_VENDOR_DATA]; + if (!data) + return WIFI_ERROR_NOT_AVAILABLE; + + nla_for_each_attr(nla, (struct nlattr *)nla_data(data), nla_len(data), left) { + type = nla_type(nla); + switch (type) { + case SKW_ATTR_NUM_RING_BUFFERS: + nr_buff = nla_get_u32(nla); + break; + + case SKW_ATTR_RING_BUFFERS_STATUS: + if (nla_len(nla) == sizeof(wifi_ring_buffer_status)) { + memcpy(&mStatus[i++], nla_data(nla), nla_len(nla)); + *num = i; + } else { + ALOGE("wifi_ring_buffer_status not match"); + } + + break; + + default: + break; + } + } + + if (nr_buff != *(int *)num) + ALOGE("num of ring buffs not match, %d - %d", nr_buff, *num); + + return WIFI_SUCCESS; + } +}; + +// There are no flags for these 3 in the legacy feature set. Adding them to +// the set because all the current devices support it. +// *hidl_caps |= HidlChipCaps::DEBUG_RING_BUFFER_VENDOR_DATA; +// *hidl_caps |= HidlChipCaps::DEBUG_HOST_WAKE_REASON_STATS; +// *hidl_caps |= HidlChipCaps::DEBUG_ERROR_ALERTS; +wifi_error skw_wifi_get_ring_buffers_status(wifi_interface_handle iface, + u32 *num_rings, wifi_ring_buffer_status *status) +{ + GetRingBuffStatus cmd(getSock(iface), getFamily(iface), 0, + NL80211_CMD_VENDOR, num_rings, status); + cmd.build(iface, NULL); + cmd.send(); + + ALOGD("%s, num rings: %d", __func__, *num_rings); + + return WIFI_SUCCESS; +} + +class GetLoggerFeature : public WifiCommand +{ +private: + unsigned int mFeatures; + +public: + GetLoggerFeature(struct nl_sock *sk, int family, int flags, int nl80211_cmd) + : WifiCommand(sk, family, flags, nl80211_cmd) + { + mFeatures = 0; + } + + virtual wifi_error build(wifi_interface_handle handle, void *param) + { + interface_info *iface = (interface_info *)handle; + put_u32(NL80211_ATTR_VENDOR_ID, OUI_GOOGLE); + put_u32(NL80211_ATTR_VENDOR_SUBCMD, SKW_VCMD_GET_LOGGER_FEATURES); + + if (iface->wdev_idx) + put_u32(NL80211_ATTR_WDEV, iface->wdev_idx); + else + put_u32(NL80211_ATTR_IFINDEX, iface->iface_idx); + + return WIFI_SUCCESS; + } + + virtual wifi_error parser(struct nlattr *attr[NL80211_ATTR_MAX]) + { + struct nlattr *data = attr[NL80211_ATTR_VENDOR_DATA]; + + if (!data) + return WIFI_ERROR_NOT_AVAILABLE; + + mFeatures = nla_get_u32(data); + + return WIFI_SUCCESS; + } + + int features() + { + return mFeatures; + } +}; + +wifi_error skw_wifi_get_logger_supported_feature_set(wifi_interface_handle iface, + unsigned int *features) +{ + GetLoggerFeature cmd(getSock(iface), getFamily(iface), 0, NL80211_CMD_VENDOR); + cmd.build(iface, NULL); + cmd.send(); + + *features = cmd.features(); + + ALOGD("%s, features: 0x%x", __func__, *features); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_get_ring_data(wifi_interface_handle iface, char *ring_name) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_enable_tdls(wifi_interface_handle, mac_addr, wifi_tdls_params *, + wifi_tdls_handler) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_disable_tdls(wifi_interface_handle, mac_addr) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_get_tdls_status(wifi_interface_handle, mac_addr, wifi_tdls_status *) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_get_tdls_capabilities(wifi_interface_handle iface, + wifi_tdls_capabilities *capabilities) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_get_driver_version(wifi_interface_handle handle, char *buffer, + int buffer_size) +{ + int subcmd = SKW_DRV_VERSION; + wifi_error err = WIFI_ERROR_UNKNOWN; + GetVersionCommand cmd(getSock(handle), getFamily(handle), 0, NL80211_CMD_VENDOR); + + if (cmd.build(handle, &subcmd) == WIFI_SUCCESS) + err = cmd.send(); + + if (err == WIFI_SUCCESS) + strncpy(buffer, cmd.getVersion(), buffer_size); + + ALOGD("%s: %s", __func__, buffer); + + return err; +} + +wifi_error skw_wifi_set_passpoint_list(wifi_request_id id, wifi_interface_handle iface, + int num, wifi_passpoint_network *networks, wifi_passpoint_event_handler handler) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_reset_passpoint_list(wifi_request_id id, wifi_interface_handle iface) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_set_lci(wifi_request_id id, wifi_interface_handle iface, + wifi_lci_information *lci) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_set_lcr(wifi_request_id id, wifi_interface_handle iface, + wifi_lcr_information *lcr) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +#if 0 +wifi_error skw_wifi_start_sending_offloaded_packet(wifi_request_id id, + wifi_interface_handle iface, u16 ether_type, u8 *ip_packet, + u16 ip_packet_len, u8 *src_mac_addr, u8 *dst_mac_addr, + u32 period_msec) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} +#endif + +wifi_error skw_wifi_stop_sending_offloaded_packet(wifi_request_id id, + wifi_interface_handle iface) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_start_rssi_monitoring(wifi_request_id id, wifi_interface_handle + iface, s8 max_rssi, s8 min_rssi, wifi_rssi_event_handler eh) +{ + ALOGD("%s", __func__); + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_stop_rssi_monitoring(wifi_request_id id, wifi_interface_handle iface) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_get_wake_reason_stats(wifi_interface_handle iface, + WLAN_DRIVER_WAKE_REASON_CNT *wifi_wake_reason_cnt) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_configure_nd_offload(wifi_interface_handle iface, u8 enable) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_get_driver_memory_dump(wifi_interface_handle iface, + wifi_driver_memory_dump_callbacks callbacks) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_start_pkt_fate_monitoring(wifi_interface_handle iface) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_get_tx_pkt_fates(wifi_interface_handle handle, + wifi_tx_report *tx_report_bufs, size_t n_requested_fates, + size_t *n_provided_fates) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_get_rx_pkt_fates(wifi_interface_handle handle, + wifi_rx_report *rx_report_bufs, size_t n_requested_fates, + size_t *n_provided_fates) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +/* NAN functions */ +wifi_error skw_wifi_nan_enable_request(transaction_id id, + wifi_interface_handle iface, NanEnableRequest* msg) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_disable_request(transaction_id id, + wifi_interface_handle iface) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_publish_request(transaction_id id, + wifi_interface_handle iface, NanPublishRequest* msg) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_publish_cancel_request(transaction_id id, + wifi_interface_handle iface, NanPublishCancelRequest* msg) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_subscribe_request(transaction_id id, + wifi_interface_handle iface, NanSubscribeRequest* msg) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_subscribe_cancel_request(transaction_id id, + wifi_interface_handle iface, NanSubscribeCancelRequest* msg) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_transmit_followup_request(transaction_id id, + wifi_interface_handle iface, NanTransmitFollowupRequest* msg) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_stats_request(transaction_id id, + wifi_interface_handle iface, NanStatsRequest* msg) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_config_request(transaction_id id, + wifi_interface_handle iface, NanConfigRequest* msg) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_tca_request(transaction_id id, + wifi_interface_handle iface, NanTCARequest* msg) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_beacon_sdf_payload_request(transaction_id id, + wifi_interface_handle iface, NanBeaconSdfPayloadRequest* msg) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_register_handler(wifi_interface_handle iface, + NanCallbackHandler handlers) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_get_version(wifi_handle handle, + NanVersion* version) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_get_capabilities(transaction_id id, + wifi_interface_handle iface) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_data_interface_create(transaction_id id, + wifi_interface_handle iface, + char *iface_name) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_data_interface_delete(transaction_id id, + wifi_interface_handle iface, char *iface_name) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_data_request_initiator( + transaction_id id, wifi_interface_handle iface, + NanDataPathInitiatorRequest *msg) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_data_indication_response( + transaction_id id, wifi_interface_handle iface, + NanDataPathIndicationResponse *msg) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_nan_data_end(transaction_id id, + wifi_interface_handle iface, + NanDataPathEndRequest *msg) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_select_tx_power_scenario(wifi_interface_handle iface, + wifi_power_scenario scenario) +{ + ALOGD("%s", __func__); + + return WIFI_ERROR_NOT_SUPPORTED; +} + +wifi_error skw_wifi_reset_tx_power_scenario(wifi_interface_handle iface) +{ + ALOGD("%s", __func__); + + return WIFI_ERROR_NOT_SUPPORTED; +} + +/** + * Returns the chipset's hardware filtering capabilities: + * @param version pointer to version of the packet filter interpreter + * supported, filled in upon return. 0 indicates no support. + * @param max_len pointer to maximum size of the filter bytecode, filled in + * upon return. + */ +wifi_error skw_wifi_get_packet_filter_capabilities(wifi_interface_handle handle, + u32 *version, u32 *max_len) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} +/** + * Programs the packet filter. + * @param program pointer to the program byte-code. + * @param len length of the program byte-code. + */ +wifi_error skw_wifi_set_packet_filter(wifi_interface_handle handle, + const u8 *program, u32 len) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_read_packet_filter(wifi_interface_handle handle, + u32 src_offset, u8 *host_dst, + u32 length) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_get_roaming_capabilities(wifi_interface_handle handle, + wifi_roaming_capabilities *caps) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_enable_firmware_roaming(wifi_interface_handle handle, + fw_roaming_state_t state) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_configure_roaming(wifi_interface_handle handle, + wifi_roaming_config *roaming_config) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_set_radio_mode_change_handler(wifi_request_id id, wifi_interface_handle + iface, wifi_radio_mode_change_handler eh) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +#if __ANDROID_API__ > __ANDROID_API_Q__ +wifi_error skw_wifi_set_latency_mode(wifi_interface_handle iface, + wifi_latency_mode mode) +{ + ALOGD("%s", __func__); + + return WIFI_ERROR_NOT_SUPPORTED; +} + +wifi_error skw_wifi_set_thermal_mitigation_mode(wifi_handle handle, + wifi_thermal_mode mode, u32 completion_window) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_map_dscp_access_category(wifi_handle handle, + u32 start, u32 end, u32 access_category) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_reset_dscp_mapping(wifi_handle handle) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_virtual_interface_create(wifi_handle handle, const char* ifname, + wifi_interface_type iface_type) +{ + ALOGD("%s: ifname: %s, type: 0x%x", __func__, ifname, iface_type); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_virtual_interface_delete(wifi_handle handle, const char* ifname) +{ + ALOGD("%s: ifname: %s", __func__, ifname); + + return WIFI_SUCCESS; +} + +wifi_error skw_wifi_set_subsystem_restart_handler(wifi_handle handle, + wifi_subsystem_restart_handler handler) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +/** + * Allow vendor HAL to choose interface name when creating + * an interface. This can be implemented by chips with their + * own interface naming policy. + * If not implemented, the default naming will be used. + */ +wifi_error skw_wifi_get_supported_iface_name(wifi_handle handle, u32 iface_type, + char *name, size_t len) +{ + return WIFI_ERROR_NOT_AVAILABLE; +} + +/** + * Perform early initialization steps that are needed when WIFI + * is disabled. + * If the function returns failure, it means the vendor HAL is unusable + * (for example, if chip hardware is not installed) and no further + * functions should be called. + */ +wifi_error skw_wifi_early_initialize(void) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +/** + * Get supported feature set which are chip-global, that is + * not dependent on any created interface. + */ +wifi_error skw_wifi_get_chip_feature_set(wifi_handle handle, feature_set *set) +{ + ALOGD("%s: 0x%x", __func__, *set); + +#if 0 + *set |= WIFI_FEATURE_INFRA; + *set |= WIFI_FEATURE_INFRA_5G; + *set |= WIFI_FEATURE_P2P; + *set |= WIFI_FEATURE_SOFT_AP; +#endif + + return WIFI_SUCCESS; +} + +/** + * Invoked to indicate that the provided iface is the primary STA iface when there are more + * than 1 STA iface concurrently active. + */ +wifi_error skw_wifi_multi_sta_set_primary_connection(wifi_handle handle, + wifi_interface_handle iface) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +/** + * When there are 2 simultaneous STA connections, this use case hint + * indicates what STA + STA use-case is being enabled by the framework. + */ +wifi_error skw_wifi_multi_sta_set_use_case(wifi_handle handle, + wifi_multi_sta_use_case use_case) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +/** + * Invoked to indicate that the following list of wifi_coex_unsafe_channel should be avoided + * with the specified restrictions. + * @param unsafeChannels list of current |wifi_coex_unsafe_channel| to avoid. + * @param restrictions bitmask of |wifi_coex_restriction| indicating wifi interfaces to + * restrict from the current unsafe channels. + */ +wifi_error skw_wifi_set_coex_unsafe_channels(wifi_handle handle, u32 num_channels, + wifi_coex_unsafe_channel *unsafeChannels, u32 restrictions) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +/** + * Invoked to set voip optimization mode for the provided STA iface + */ +wifi_error skw_wifi_set_voip_mode(wifi_interface_handle iface, wifi_voip_mode mode) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +/**@brief twt_register_handler + * Request to register TWT callback before sending any TWT request + * @param wifi_interface_handle: + * @param TwtCallbackHandler: callback function pointers + * @return Synchronous wifi_error + */ +wifi_error skw_wifi_twt_register_handler(wifi_interface_handle iface, + TwtCallbackHandler handler) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +/**@brief twt_get_capability + * Request TWT capability + * @param wifi_interface_handle: + * @return Synchronous wifi_error and TwtCapabilitySet + */ +wifi_error skw_wifi_twt_get_capability(wifi_interface_handle iface, + TwtCapabilitySet* twt_cap_set) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +/**@brief twt_setup_request + * Request to send TWT setup frame + * @param wifi_interface_handle: + * @param TwtSetupRequest: detailed parameters of setup request + * @return Synchronous wifi_error + * @return Asynchronous EventTwtSetupResponse CB return TwtSetupResponse + */ +wifi_error skw_wifi_twt_setup_request(wifi_interface_handle iface, + TwtSetupRequest* msg) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +/**@brief twt_teardown_request + * Request to send TWT teardown frame + * @param wifi_interface_handle: + * @param TwtTeardownRequest: detailed parameters of teardown request + * @return Synchronous wifi_error + * @return Asynchronous EventTwtTeardownCompletion CB return TwtTeardownCompletion + * TwtTeardownCompletion may also be received due to other events + * like CSA, BTCX, TWT scheduler, MultiConnection, peer-initiated teardown, etc. + */ +wifi_error skw_wifi_twt_teardown_request(wifi_interface_handle iface, + TwtTeardownRequest* msg) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +/**@brief twt_info_frame_request + * Request to send TWT info frame + * @param wifi_interface_handle: + * @param TwtInfoFrameRequest: detailed parameters in info frame + * @return Synchronous wifi_error + * @return Asynchronous EventTwtInfoFrameReceived CB return TwtInfoFrameReceived + * Driver may also receive Peer-initiated TwtInfoFrame + */ +wifi_error skw_wifi_twt_info_frame_request(wifi_interface_handle iface, + TwtInfoFrameRequest* msg) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +/**@brief twt_get_stats + * Request to get TWT stats + * @param wifi_interface_handle: + * @param config_id: configuration ID of TWT request + * @return Synchronous wifi_error and TwtStats + */ +wifi_error skw_wifi_twt_get_stats(wifi_interface_handle iface, u8 config_id, + TwtStats* stats) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +/**@brief twt_clear_stats + * Request to clear TWT stats + * @param wifi_interface_handle: + * @param config_id: configuration ID of TWT request + * @return Synchronous wifi_error + */ +wifi_error skw_wifi_twt_clear_stats(wifi_interface_handle iface, u8 config_id) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +/** + * Invoked to set DTIM configuration when the host is in the suspend mode + * @param wifi_interface_handle: + * @param multiplier: when STA in the power saving mode, the wake up interval will be set to + * 1) multiplier * DTIM period if multiplier > 0. + * 2) the device default value if multiplier <=0 + * Some implementations may apply an additional cap to wake up interval in the case of 1). + */ +wifi_error skw_wifi_set_dtim_config(wifi_interface_handle handle, u32 multiplier) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +/**@brief wifi_get_usable_channels + * Request list of usable channels for the requested bands and modes. Usable + * implies channel is allowed as per regulatory for the current country code + * and not restricted due to other hard limitations (e.g. DFS, Coex) In + * certain modes (e.g. STA+SAP) there could be other hard restrictions + * since MCC operation many not be supported by SAP. This API also allows + * driver to return list of usable channels for each mode uniquely to + * distinguish cases where only a limited set of modes are allowed on + * a given channel e.g. srd channels may be supported for P2P but not + * for SAP or P2P-Client may be allowed on an indoor channel but P2P-GO + * may not be allowed. This API is not interface specific and will be + * used to query capabilities of driver in terms of what modes (STA, SAP, + * P2P_CLI, P2P_GO, NAN, TDLS) can be supported on each of the channels. + * @param handle global wifi_handle + * @param band_mask BIT MASK of WLAN_MAC* as represented by |wlan_mac_band| + * @param iface_mode_mask BIT MASK of BIT(WIFI_INTERFACE_*) represented by + * |wifi_interface_mode|. Bitmask respresents all the modes that the + * caller is interested in (e.g. STA, SAP, WFD-CLI, WFD-GO, TDLS, NAN). + * Note: Bitmask does not represent concurrency matrix. If the caller + * is interested in CLI, GO modes, the iface_mode_mask would be set + * to WIFI_INTERFACE_P2P_CLIENT|WIFI_INTERFACE_P2P_GO. + * @param filter_mask BIT MASK of WIFI_USABLE_CHANNEL_FILTER_* represented by + * |wifi_usable_channel_filter|. Indicates if the channel list should + * be filtered based on additional criteria. If filter_mask is not + * specified, driver should return list of usable channels purely + * based on regulatory constraints. + * @param max_size maximum number of |wifi_usable_channel| + * @param size actual number of |wifi_usable_channel| entries returned by driver + * @param channels list of usable channels represented by |wifi_usable_channel| + */ +wifi_error skw_wifi_get_usable_channels(wifi_handle handle, u32 band_mask, u32 iface_mode_mask, + u32 filter_mask, u32 max_size, u32* size, + wifi_usable_channel* channels) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} + +/** + * Trigger wifi subsystem restart to reload firmware + */ +wifi_error skw_wifi_trigger_subsystem_restart(wifi_handle handle) +{ + ALOGD("%s", __func__); + + return WIFI_SUCCESS; +} +#endif + +static nl_sock *skw_create_socket(int port) +{ + struct nl_sock * sock = NULL; + uint32_t pid = getpid() & 0x3FFFFF; + + sock = nl_socket_alloc(); + if (sock == NULL) { + ALOGE("%s: socked alloc failed", __func__); + + return NULL; + } + + nl_socket_set_local_port(sock, pid + (port << 22)); + if (nl_connect(sock, NETLINK_GENERIC)) { + ALOGE("%s: connect failed", __func__); + + nl_socket_free(sock); + + return NULL; + } + + if (nl_socket_set_buffer_size(sock, SOCK_BUFF_SIZE, 0) < 0) + ALOGE("cmd_sock: set RX buffer failed, %d", strerror(errno)); + + return sock; +} + +class GetMulticastId : public WifiCommand { +private: + char *group; + int mId; + +public: + GetMulticastId(struct nl_sock *sk, int family, int flags, int nl80211_cmd) + : WifiCommand(sk, family, flags, nl80211_cmd) + { + group = NULL; + mId = -1; + } + + virtual wifi_error build(wifi_interface_handle handle, void *param) + { + group = (char *)param; + put_string(CTRL_ATTR_FAMILY_NAME, "nl80211"); + + return WIFI_SUCCESS; + } + + virtual wifi_error parser(struct nlattr *attr[NL80211_ATTR_MAX]) + { + int i; + struct nlattr *mcgrp; + + if (!attr[CTRL_ATTR_MCAST_GROUPS]) + return WIFI_ERROR_UNKNOWN; + + skw_nla_for_each_nested(mcgrp, attr[CTRL_ATTR_MCAST_GROUPS], i) { + struct nlattr *tb2[CTRL_ATTR_MCAST_GRP_MAX + 1]; + + nla_parse(tb2, CTRL_ATTR_MCAST_GRP_MAX, (struct nlattr *)nla_data(mcgrp), + nla_len(mcgrp), NULL); + + if (!tb2[CTRL_ATTR_MCAST_GRP_NAME] || !tb2[CTRL_ATTR_MCAST_GRP_ID] || + strncmp((const char *)nla_data(tb2[CTRL_ATTR_MCAST_GRP_NAME]), + group, nla_len(tb2[CTRL_ATTR_MCAST_GRP_NAME])) != 0) + continue; + + mId = nla_get_u32(tb2[CTRL_ATTR_MCAST_GRP_ID]); + + break; + }; + + return WIFI_SUCCESS; + } + + int id() + { + return mId; + } +}; + +static int skw_get_multicast_id(struct nl_sock *sk, const char *group) +{ + GetMulticastId cmd(sk, genl_ctrl_resolve(sk, "nlctrl"), 0, CTRL_CMD_GETFAMILY); + if (cmd.build(NULL, (void *)group) == WIFI_SUCCESS) + cmd.send(); + + return cmd.id(); +} + +static int skw_add_membership(struct nl_sock *sk, const char *group) +{ + int id = skw_get_multicast_id(sk, group); + if (id < 0) { + ALOGE("Could not find group %s", group); + return id; + } + + int ret = nl_socket_add_membership(sk, id); + if (ret < 0) + ALOGE("Could not add membership to group %s", group); + + return ret; +} + +static int evtHandler(struct nl_msg *msg, void *arg) +{ + ALOGD("%s", __func__); + + return NL_SKIP; +} + +static wifi_error skw_wifi_event_init(hal_info *hal) +{ + int err; + + hal->nl_event = skw_create_socket(WIFI_HAL_SOCK_EVENT_PORT); + if (hal->nl_event == NULL) { + ALOGE("%s: create event socket failed", __func__); + + return WIFI_ERROR_UNKNOWN; + } + + //nl_socket_modify_cb(hal->nl_event, NL_CB_SEQ_CHECK, no_seq_check, &err); + nl_socket_modify_cb(hal->nl_event, NL_CB_VALID, NL_CB_CUSTOM, evtHandler, &err); + + skw_add_membership(hal->nl_event, "scan"); + skw_add_membership(hal->nl_event, "mlme"); + skw_add_membership(hal->nl_event, "vendor"); + skw_add_membership(hal->nl_event, "regulatory"); + + return WIFI_SUCCESS; +} + +static void skw_wifi_event_deinit(hal_info *hal) +{ + if (hal->nl_event) + nl_socket_free(hal->nl_event); +} + +static wifi_error skw_wifi_hal_init(hal_info *hal) +{ + hal->nl_hal = skw_create_socket(WIFI_HAL_SOCK_DEFAULT_PORT); + if (hal->nl_hal == NULL) { + ALOGE("%s: create command socket failed", __func__); + + return WIFI_ERROR_UNKNOWN; + } + + hal->family_nl80211 = genl_ctrl_resolve(hal->nl_hal, "nl80211"); + if (hal->family_nl80211 < 0) { + nl_socket_free(hal->nl_hal); + + ALOGE("%s: resolve nl80211 id failed", __func__); + + return WIFI_ERROR_UNKNOWN; + } + + return WIFI_SUCCESS; +} + +static void skw_wifi_hal_deinit(hal_info *hal) +{ + if (hal->nl_hal) + nl_socket_free(hal->nl_hal); +} + +static wifi_error skw_wifi_initialize(wifi_handle *handle) +{ + wifi_error err; + hal_info *hal = NULL; + + ALOGD("%s", __func__); + + hal = (hal_info *)malloc(sizeof(hal_info)); + if (hal == NULL) { + ALOGE("%s: alloc hal_info failed", __func__); + + return WIFI_ERROR_OUT_OF_MEMORY; + } + + memset(hal, 0, sizeof(*hal)); + + if (socketpair(AF_UNIX, SOCK_STREAM, 0, hal->exit_socks) == -1) { + ALOGE("socketpair failed"); + + free(hal); + + return WIFI_ERROR_UNKNOWN; + } + + err = skw_wifi_hal_init(hal); + if (err != WIFI_SUCCESS) { + free(hal); + return err; + } + + err = skw_wifi_event_init(hal); + if (err != WIFI_SUCCESS) { + skw_wifi_hal_deinit(hal); + free(hal); + + return err; + } + + *handle = (wifi_handle)hal; + + return WIFI_SUCCESS; +} + +static void skw_wifi_deinitialize(wifi_handle handle) +{ + hal_info *hal = (hal_info *)handle; + + if (hal->cleaned_up_handler) + (*(hal->cleaned_up_handler))(handle); + + skw_wifi_hal_deinit(hal); + skw_wifi_event_deinit(hal); + + if (hal->exit_socks[0]) + close(hal->exit_socks[0]); + + if (hal->exit_socks[1]) + close(hal->exit_socks[1]); + + free(hal); +} + +void skw_wifi_cleanup(wifi_handle handle, wifi_cleaned_up_handler clean_handler) +{ + hal_info *hal = (hal_info *)handle; + + ALOGD("%s", __func__); + + hal->cleaned_up_handler = clean_handler; + hal->exit = true; + + TEMP_FAILURE_RETRY(write(hal->exit_socks[0], "exit", 4)); +} + +static int skw_socket_handler(hal_info *hal, int events, struct nl_sock *sk) +{ + int ret; + struct nl_cb *cb = nl_socket_get_cb(sk); + + ret = nl_recvmsgs(sk, cb); + + nl_cb_put(cb); + + return ret; +} + +static void skw_wifi_event_loop(wifi_handle handle) +{ + pollfd fd[2]; + hal_info *hal = (hal_info *)handle; + + ALOGD("%s", __func__); + + memset(&fd[0], 0, sizeof(fd)); + + fd[0].fd = nl_socket_get_fd(hal->nl_event); + fd[0].events = POLLIN; + + fd[1].fd = hal->exit_socks[1]; + fd[1].events = POLLIN; + + do { + fd[0].revents = 0; + fd[1].revents = 0; + + if (poll(fd, 2, -1) > 0) { + if (fd[0].revents & POLLIN) { + skw_socket_handler(hal, fd[0].revents, hal->nl_event); + } + } + + } while (!hal->exit); + + skw_wifi_deinitialize(handle); +} + +#define POLL_DRIVER_DURATION_US (100000) +#define POLL_DRIVER_MAX_TIME_MS (10000) +static wifi_error skw_wifi_wait_for_driver_ready(void) +{ + int count = (POLL_DRIVER_MAX_TIME_MS * 1000) / POLL_DRIVER_DURATION_US; + + ALOGD("%s", __func__); + + do { + if ((access("/sys/class/net/wlan0", F_OK)) == 0) + return WIFI_SUCCESS; + + usleep(POLL_DRIVER_DURATION_US); + + } while(--count > 0); + + ALOGE("Time out waiting on Driver ready ... "); + + return WIFI_ERROR_TIMED_OUT; +} + +wifi_error init_wifi_vendor_hal_func_table(wifi_hal_fn *fn) +{ + if (!fn) { + ALOGE("invalid parameter fn"); + return WIFI_ERROR_UNINITIALIZED; + } + + fn->wifi_initialize = skw_wifi_initialize; + fn->wifi_wait_for_driver_ready = skw_wifi_wait_for_driver_ready; + fn->wifi_cleanup = skw_wifi_cleanup; + fn->wifi_event_loop = skw_wifi_event_loop; + fn->wifi_get_error_info = skw_wifi_get_error_info; + fn->wifi_get_supported_feature_set = skw_wifi_get_supported_feature_set; + fn->wifi_get_concurrency_matrix = skw_wifi_get_concurrency_matrix; + fn->wifi_set_scanning_mac_oui = skw_wifi_set_scanning_mac_oui; + fn->wifi_get_supported_channels = skw_wifi_get_supported_channels; + fn->wifi_is_epr_supported = skw_wifi_is_epr_supported; + fn->wifi_get_ifaces = skw_wifi_get_ifaces; + fn->wifi_get_iface_name = skw_wifi_get_iface_name; + fn->wifi_set_iface_event_handler = skw_wifi_set_iface_event_handler; + fn->wifi_reset_iface_event_handler = skw_wifi_reset_iface_event_handler; + fn->wifi_start_gscan = skw_wifi_start_gscan; + fn->wifi_stop_gscan = skw_wifi_stop_gscan; + fn->wifi_get_cached_gscan_results = skw_wifi_get_cached_gscan_results; + fn->wifi_set_bssid_hotlist = skw_wifi_set_bssid_hotlist; + fn->wifi_reset_bssid_hotlist = skw_wifi_reset_bssid_hotlist; + fn->wifi_set_significant_change_handler = skw_wifi_set_significant_change_handler; + fn->wifi_reset_significant_change_handler = skw_wifi_reset_significant_change_handler; + fn->wifi_get_gscan_capabilities = skw_wifi_get_gscan_capabilities; + fn->wifi_set_link_stats = skw_wifi_set_link_stats; + fn->wifi_get_link_stats = skw_wifi_get_link_stats; + fn->wifi_clear_link_stats = skw_wifi_clear_link_stats; + fn->wifi_get_valid_channels = skw_wifi_get_valid_channels; + fn->wifi_rtt_range_request = skw_wifi_rtt_range_request; + fn->wifi_rtt_range_cancel = skw_wifi_rtt_range_cancel; + fn->wifi_get_rtt_capabilities = skw_wifi_get_rtt_capabilities; + fn->wifi_rtt_get_responder_info = skw_wifi_rtt_get_responder_info; + fn->wifi_enable_responder = skw_wifi_enable_responder; + fn->wifi_disable_responder = skw_wifi_disable_responder; + fn->wifi_set_nodfs_flag = skw_wifi_set_nodfs_flag; + fn->wifi_start_logging = skw_wifi_start_logging; + fn->wifi_set_epno_list = skw_wifi_set_epno_list; + fn->wifi_reset_epno_list = skw_wifi_reset_epno_list; + fn->wifi_set_country_code = skw_wifi_set_country_code; + fn->wifi_get_firmware_memory_dump = skw_wifi_get_firmware_memory_dump; + fn->wifi_set_log_handler = skw_wifi_set_log_handler; + fn->wifi_reset_log_handler = skw_wifi_reset_log_handler; + fn->wifi_set_alert_handler = skw_wifi_set_alert_handler; + fn->wifi_reset_alert_handler = skw_wifi_reset_alert_handler; + fn->wifi_get_firmware_version = skw_wifi_get_firmware_version; + fn->wifi_get_ring_buffers_status = skw_wifi_get_ring_buffers_status; + fn->wifi_get_logger_supported_feature_set = skw_wifi_get_logger_supported_feature_set; + fn->wifi_get_ring_data = skw_wifi_get_ring_data; + fn->wifi_enable_tdls = skw_wifi_enable_tdls; + fn->wifi_disable_tdls = skw_wifi_disable_tdls; + fn->wifi_get_tdls_status = skw_wifi_get_tdls_status; + fn->wifi_get_tdls_capabilities = skw_wifi_get_tdls_capabilities; + fn->wifi_get_driver_version = skw_wifi_get_driver_version; + fn->wifi_set_passpoint_list = skw_wifi_set_passpoint_list; + fn->wifi_reset_passpoint_list = skw_wifi_reset_passpoint_list; + fn->wifi_set_lci = skw_wifi_set_lci; + fn->wifi_set_lcr = skw_wifi_set_lcr; + // fn->wifi_start_sending_offloaded_packet = skw_wifi_start_sending_offloaded_packet; + fn->wifi_stop_sending_offloaded_packet = skw_wifi_stop_sending_offloaded_packet; + fn->wifi_start_rssi_monitoring = skw_wifi_start_rssi_monitoring; + fn->wifi_stop_rssi_monitoring = skw_wifi_stop_rssi_monitoring; + fn->wifi_get_wake_reason_stats = skw_wifi_get_wake_reason_stats; + fn->wifi_configure_nd_offload = skw_wifi_configure_nd_offload; + fn->wifi_get_driver_memory_dump = skw_wifi_get_driver_memory_dump; + fn->wifi_start_pkt_fate_monitoring = skw_wifi_start_pkt_fate_monitoring; + fn->wifi_get_tx_pkt_fates = skw_wifi_get_tx_pkt_fates; + fn->wifi_get_rx_pkt_fates = skw_wifi_get_rx_pkt_fates; + fn->wifi_nan_enable_request = skw_wifi_nan_enable_request; + fn->wifi_nan_disable_request = skw_wifi_nan_disable_request; + fn->wifi_nan_publish_request = skw_wifi_nan_publish_request; + fn->wifi_nan_publish_cancel_request = skw_wifi_nan_publish_cancel_request; + fn->wifi_nan_subscribe_request = skw_wifi_nan_subscribe_request; + fn->wifi_nan_subscribe_cancel_request = skw_wifi_nan_subscribe_cancel_request; + fn->wifi_nan_transmit_followup_request = skw_wifi_nan_transmit_followup_request; + fn->wifi_nan_stats_request = skw_wifi_nan_stats_request; + fn->wifi_nan_config_request = skw_wifi_nan_config_request; + fn->wifi_nan_tca_request = skw_wifi_nan_tca_request; + fn->wifi_nan_beacon_sdf_payload_request = skw_wifi_nan_beacon_sdf_payload_request; + fn->wifi_nan_register_handler = skw_wifi_nan_register_handler; + fn->wifi_nan_get_version = skw_wifi_nan_get_version; + fn->wifi_nan_get_capabilities = skw_wifi_nan_get_capabilities; + fn->wifi_nan_data_interface_create = skw_wifi_nan_data_interface_create; + fn->wifi_nan_data_interface_delete = skw_wifi_nan_data_interface_delete; + fn->wifi_nan_data_request_initiator = skw_wifi_nan_data_request_initiator; + fn->wifi_nan_data_indication_response = skw_wifi_nan_data_indication_response; + fn->wifi_nan_data_end = skw_wifi_nan_data_end; + fn->wifi_select_tx_power_scenario = skw_wifi_select_tx_power_scenario; + fn->wifi_reset_tx_power_scenario = skw_wifi_reset_tx_power_scenario; + fn->wifi_get_packet_filter_capabilities = skw_wifi_get_packet_filter_capabilities; + fn->wifi_set_packet_filter = skw_wifi_set_packet_filter; + fn->wifi_read_packet_filter = skw_wifi_read_packet_filter; + fn->wifi_get_roaming_capabilities = skw_wifi_get_roaming_capabilities; + fn->wifi_enable_firmware_roaming = skw_wifi_enable_firmware_roaming; + fn->wifi_configure_roaming = skw_wifi_configure_roaming; + fn->wifi_set_radio_mode_change_handler = skw_wifi_set_radio_mode_change_handler; +#if __ANDROID_API__ > __ANDROID_API_Q__ + fn->wifi_set_latency_mode = skw_wifi_set_latency_mode; + fn->wifi_set_thermal_mitigation_mode = skw_wifi_set_thermal_mitigation_mode; + fn->wifi_map_dscp_access_category = skw_wifi_map_dscp_access_category; + fn->wifi_reset_dscp_mapping = skw_wifi_reset_dscp_mapping; + fn->wifi_virtual_interface_create = skw_wifi_virtual_interface_create; + fn->wifi_virtual_interface_delete = skw_wifi_virtual_interface_delete; + fn->wifi_set_subsystem_restart_handler = skw_wifi_set_subsystem_restart_handler; + fn->wifi_get_supported_iface_name = skw_wifi_get_supported_iface_name; + fn->wifi_early_initialize = skw_wifi_early_initialize; + fn->wifi_get_chip_feature_set = skw_wifi_get_chip_feature_set; + fn->wifi_multi_sta_set_primary_connection = skw_wifi_multi_sta_set_primary_connection; + fn->wifi_multi_sta_set_use_case = skw_wifi_multi_sta_set_use_case; + fn->wifi_set_coex_unsafe_channels = skw_wifi_set_coex_unsafe_channels; + fn->wifi_set_voip_mode = skw_wifi_set_voip_mode; + fn->wifi_twt_register_handler = skw_wifi_twt_register_handler; + fn->wifi_twt_get_capability = skw_wifi_twt_get_capability; + fn->wifi_twt_setup_request = skw_wifi_twt_setup_request; + fn->wifi_twt_teardown_request = skw_wifi_twt_teardown_request; + fn->wifi_twt_info_frame_request = skw_wifi_twt_info_frame_request; + fn->wifi_twt_get_stats = skw_wifi_twt_get_stats; + fn->wifi_twt_clear_stats = skw_wifi_twt_clear_stats; + fn->wifi_set_dtim_config = skw_wifi_set_dtim_config; + fn->wifi_get_usable_channels = skw_wifi_get_usable_channels; + fn->wifi_trigger_subsystem_restart = skw_wifi_trigger_subsystem_restart; +#endif + + return WIFI_SUCCESS; +} diff --git a/android/hardware/seekwave/wlan/wifi_hal/main.h b/android/hardware/seekwave/wlan/wifi_hal/main.h new file mode 100755 index 0000000..e7a829d --- /dev/null +++ b/android/hardware/seekwave/wlan/wifi_hal/main.h @@ -0,0 +1,53 @@ +#ifndef __MAIN_H__ +#define __MAIN_H__ + +#define LOG_TAG "SKW_WiFiHAL" +#include <log/log.h> + +#include "wifi_hal.h" + +#define OUI_GOOGLE 0x001A11 +#define SKW_NR_IFACE 8 + +#define skw_nla_for_each_nested(pos, nla, rem) \ + for (pos = (nlattr *)nla_data(nla), rem = nla_len(nla); \ + nla_ok(pos, rem); \ + pos = (nlattr *)nla_next(pos, &(rem))) + +typedef struct { + int iface_idx; // id to use when talking to driver + int wdev_idx; // id to use when talking to driver + wifi_handle hal_handle; // handle to wifi data + char name[IFNAMSIZ+1]; // interface name + trailing null +} interface_info; + +typedef struct { + struct nl_sock *nl_hal; // command socket object + struct nl_sock *nl_event; // event socket object + int family_nl80211; // family id for 80211 driver + + bool exit; // Indication to exit since cleanup has started + int exit_socks[2]; // sockets used to implement wifi_cleanup + wifi_cleaned_up_handler cleaned_up_handler; + + bool in_event_loop; // Indicates that event loop is active + + pthread_mutex_t cb_lock; // mutex for the event_cb access + + int num_cmd; // number of commands + int alloc_cmd; // number of commands allocated + + int nr_interfaces; + interface_info interfaces[SKW_NR_IFACE]; + wifi_interface_handle interface_handle[SKW_NR_IFACE]; + + int max_num_interfaces; // max number of interfaces + + // add other details +} hal_info; + +static inline hal_info *getHalInfo(wifi_interface_handle handle) +{ + return (hal_info *)(((interface_info *)handle)->hal_handle); +} +#endif diff --git a/android/hardware/seekwave/wlan/wifi_hal/wifi_command.cpp b/android/hardware/seekwave/wlan/wifi_hal/wifi_command.cpp new file mode 100755 index 0000000..e594438 --- /dev/null +++ b/android/hardware/seekwave/wlan/wifi_hal/wifi_command.cpp @@ -0,0 +1,87 @@ +#include <netlink/genl/genl.h> + +#include "wifi_command.h" + +static int ackHandler(struct nl_msg *msg, void *arg) +{ + *((int *)arg) = 0; + + return NL_STOP; +} + +static int finishHandler(struct nl_msg *msg, void *arg) +{ + *((int *)arg) = 0; + + return NL_SKIP; +} + +static int errorHandler(struct sockaddr_nl *nla, struct nlmsgerr *err, void *arg) +{ + *((int *)arg) = 0; + + return NL_SKIP; +} + +static int msgHandler(struct nl_msg *msg, void *arg) +{ + struct nlattr *attr[NL80211_ATTR_MAX + 1]; + WifiCommand *cmd = (WifiCommand *)arg; + struct genlmsghdr *gnlh = (struct genlmsghdr *)nlmsg_data(nlmsg_hdr(msg)); + + nla_parse(attr, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0), + genlmsg_attrlen(gnlh, 0), NULL); + + cmd->parser(attr); + + return NL_SKIP; +} + +wifi_error sendMsg(struct nl_sock *sk, struct nl_msg *msg, void *arg) +{ + int err; + struct nl_cb *cb; + + cb = nl_cb_alloc(NL_CB_DEFAULT); + if (cb == NULL) { + ALOGE("%s: alloc cb failed"); + return WIFI_ERROR_OUT_OF_MEMORY; + } + + nl_cb_err(cb, NL_CB_CUSTOM, errorHandler, &err); + nl_cb_set(cb, NL_CB_FINISH, NL_CB_CUSTOM, finishHandler, &err); + nl_cb_set(cb, NL_CB_ACK, NL_CB_CUSTOM, ackHandler, &err); + nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, msgHandler, arg); + + err = nl_send_auto_complete(sk, msg); + while (err > 0) { + int res = nl_recvmsgs(sk, cb); + if (res < 0) + ALOGE("%s: recv msg failed: %d", res); + } + + nl_cb_put(cb); + + return err ? WIFI_ERROR_UNKNOWN : WIFI_SUCCESS; +} + +wifi_error WifiCommand::send() +{ + return sendMsg(sock, nlmsg(), (void *)this); +} + +WifiCommand::~WifiCommand() +{ + nlmsg_free(msg); +} + +WifiCommand::WifiCommand(struct nl_sock *sk, int family_id, int flags, int nl80211_cmd) +{ + sock = sk; + + msg = nlmsg_alloc(); + if (msg) + genlmsg_put(msg, 0, 0, family_id, 0, flags, nl80211_cmd, 0); + else + ALOGE("nlmsg alloc failed, nl80211 cmd: %d", nl80211_cmd); +} diff --git a/android/hardware/seekwave/wlan/wifi_hal/wifi_command.h b/android/hardware/seekwave/wlan/wifi_hal/wifi_command.h new file mode 100755 index 0000000..8c73da4 --- /dev/null +++ b/android/hardware/seekwave/wlan/wifi_hal/wifi_command.h @@ -0,0 +1,99 @@ +#ifndef __WIFI_COMMAND_H__ +#define __WIFI_COMMAND_H__ + +#include "main.h" +#include "nl80211_copy.h" + +#define SKW_VCMD_GET_CHANNELS 0x1009 +#define SKW_VCMD_SET_COUNTRY 0x100E +#define SKW_VCMD_GET_VERSION 0x1403 +#define SKW_VCMD_GET_RING_BUFFERS_STATUS 0x1404 +#define SKW_VCMD_GET_LOGGER_FEATURES 0x1406 +enum SKW_SUBCMD_GET_VERSION { + SKW_DRV_VERSION = 1, + SKW_FW_VERSION, +}; + +class WifiCommand { +private: + struct nl_msg *msg; + struct nl_sock *sock; + int id; + +public: + WifiCommand(struct nl_sock *sk, int family_id, int flags, int nl80211_cmd); + wifi_error send(); + + virtual ~WifiCommand(); + virtual wifi_error build(wifi_interface_handle handle, void *param) = 0; + // virtual wifi_error parser(struct nl_msg *msg) = 0; + virtual wifi_error parser(struct nlattr *attr[]) = 0; + // virtual wifi_error parser(struct nlattr *tb[CTRL_ATTR_MAX]) + + struct nl_msg *nlmsg() + { + return msg; + } + + int put_s8(int attribute, int8_t value) + { + return nla_put(nlmsg(), attribute, sizeof(int8_t), &value); + } + + int put_u8(int attribute, uint8_t value) + { + return nla_put(nlmsg(), attribute, sizeof(uint8_t), &value); + } + + int put_s16(int attribute, int16_t value) + { + return nla_put(nlmsg(), attribute, sizeof(int16_t), &value); + } + + int put_u16(int attribute, uint16_t value) + { + return nla_put(nlmsg(), attribute, sizeof(uint16_t), &value); + } + + int put_s32(int attribute, int32_t value) + { + return nla_put(nlmsg(), attribute, sizeof(int32_t), &value); + } + + int put_u32(int attribute, uint32_t value) + { + return nla_put(nlmsg(), attribute, sizeof(uint32_t), &value); + } + + int put_s64(int attribute, int64_t value) + { + return nla_put(nlmsg(), attribute, sizeof(int64_t), &value); + } + + int put_u64(int attribute, uint64_t value) + { + return nla_put(nlmsg(), attribute, sizeof(uint64_t), &value); + } + + int put_string(int attribute, const char *value) + { + return nla_put(nlmsg(), attribute, strlen(value) + 1, value); + } + + int put_addr(int attribute, mac_addr value) + { + return nla_put(nlmsg(), attribute, sizeof(mac_addr), value); + } + + struct nlattr *attr_start() + { + return nla_nest_start(nlmsg(), NL80211_ATTR_VENDOR_DATA); + } + + void attr_end(struct nlattr *attribute) + { + nla_nest_end(nlmsg(), attribute); + } +}; + +#endif diff --git a/android/hardware/seekwave/wlan/wpa_supplicant_8_lib/Android.mk b/android/hardware/seekwave/wlan/wpa_supplicant_8_lib/Android.mk new file mode 100755 index 0000000..20e27f0 --- /dev/null +++ b/android/hardware/seekwave/wlan/wpa_supplicant_8_lib/Android.mk @@ -0,0 +1,64 @@ +# Copyright (C) 2008 The Android Open Source Project +# +# 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. +# +LOCAL_PATH := $(call my-dir) + +ifeq ($(BOARD_WLAN_DEVICE), seekwave) + +WPA_SRC_DIR = external/wpa_supplicant_8 + +SKW_LIB_INC = $(WPA_SRC_DIR)/src \ + $(WPA_SRC_DIR)/src/common \ + $(WPA_SRC_DIR)/src/drivers \ + $(WPA_SRC_DIR)/src/l2_packet \ + $(WPA_SRC_DIR)/src/utils \ + $(WPA_SRC_DIR)/src/wps \ + $(WPA_SRC_DIR)/wpa_supplicant + +SKW_LIB_INC += external/libnl/include +SKW_LIB_SRC = driver_cmd_nl80211.c + +include $(WPA_SRC_DIR)/wpa_supplicant/android.config +L_CFLAGS += -Wall -Werror -Wno-unused-parameter -Wno-macro-redefined + +ifeq ($(TARGET_ARCH),arm) +# To force sizeof(enum) = 4 +L_CFLAGS += -mabi=aapcs-linux +endif + +ifdef CONFIG_ANDROID_LOG +L_CFLAGS += -DCONFIG_ANDROID_LOG +endif + +ifdef CONFIG_P2P +L_CFLAGS += -DCONFIG_P2P +endif + +######################## + +include $(CLEAR_VARS) +LOCAL_MODULE := lib_driver_cmd_skw +LOCAL_LICENSE_KINDS := SPDX-license-identifier-BSD +LOCAL_LICENSE_CONDITIONS := notice +LOCAL_NOTICE_FILE := $(LOCAL_PATH)/NOTICE +LOCAL_SHARED_LIBRARIES := libc libcutils +LOCAL_CFLAGS := $(L_CFLAGS) +LOCAL_SRC_FILES := $(SKW_LIB_SRC) +LOCAL_C_INCLUDES := $(SKW_LIB_INC) +LOCAL_VENDOR_MODULE := true +include $(BUILD_STATIC_LIBRARY) + +######################## + +endif diff --git a/android/hardware/seekwave/wlan/wpa_supplicant_8_lib/MODULE_LICENSE_BSD b/android/hardware/seekwave/wlan/wpa_supplicant_8_lib/MODULE_LICENSE_BSD new file mode 100755 index 0000000..e69de29 --- /dev/null +++ b/android/hardware/seekwave/wlan/wpa_supplicant_8_lib/MODULE_LICENSE_BSD diff --git a/android/hardware/seekwave/wlan/wpa_supplicant_8_lib/NOTICE b/android/hardware/seekwave/wlan/wpa_supplicant_8_lib/NOTICE new file mode 100755 index 0000000..b523c01 --- /dev/null +++ b/android/hardware/seekwave/wlan/wpa_supplicant_8_lib/NOTICE @@ -0,0 +1,42 @@ +Copyright (c) 2005-2010, The Android Open Source Project +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * 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. + * Neither the name of The Android Open Source Project nor the names + of its contributors may be used to endorse or promote products + derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 THE +COPYRIGHT OWNER 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. + + * Copyright (c) 2002-2010, Jouni Malinen <j@w1.fi> + * Copyright (c) 2003-2004, Instant802 Networks, Inc. + * Copyright (c) 2005-2006, Devicescape Software, Inc. + * Copyright (c) 2007, Johannes Berg <johannes@sipsolutions.net> + * Copyright (c) 2009-2010, Atheros Communications + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. diff --git a/android/hardware/seekwave/wlan/wpa_supplicant_8_lib/driver_cmd_nl80211.c b/android/hardware/seekwave/wlan/wpa_supplicant_8_lib/driver_cmd_nl80211.c new file mode 100755 index 0000000..eda244e --- /dev/null +++ b/android/hardware/seekwave/wlan/wpa_supplicant_8_lib/driver_cmd_nl80211.c @@ -0,0 +1,169 @@ +/* + * Driver interaction with extended Linux CFG8021 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + */ + +#include "includes.h" +#include <sys/types.h> +#include <fcntl.h> +#include <net/if.h> + +#include "common.h" +#include "linux_ioctl.h" +#include "driver_nl80211.h" +#include "wpa_supplicant_i.h" +#include "config.h" +#ifdef ANDROID +#include "android_drv.h" +#endif + +typedef struct android_wifi_priv_cmd { + char *bufaddr; + int used_len; + int total_len; +} android_wifi_priv_cmd; + +static int drv_errors = 0; + +static void wpa_driver_send_hang_msg(struct wpa_driver_nl80211_data *drv) +{ + drv_errors++; + if (drv_errors > DRV_NUMBER_SEQUENTIAL_ERRORS) { + drv_errors = 0; + wpa_msg(drv->ctx, MSG_INFO, WPA_EVENT_DRIVER_STATE "HANGED"); + } +} + +static void wpa_driver_notify_country_change(void *ctx, char *cmd) +{ + if ((os_strncasecmp(cmd, "COUNTRY", 7) == 0) || + (os_strncasecmp(cmd, "SETBAND", 7) == 0)) { + union wpa_event_data event; + + os_memset(&event, 0, sizeof(event)); + event.channel_list_changed.initiator = REGDOM_SET_BY_USER; + if (os_strncasecmp(cmd, "COUNTRY", 7) == 0) { + event.channel_list_changed.type = REGDOM_TYPE_COUNTRY; + if (os_strlen(cmd) > 9) { + event.channel_list_changed.alpha2[0] = cmd[8]; + event.channel_list_changed.alpha2[1] = cmd[9]; + } + } else { + event.channel_list_changed.type = REGDOM_TYPE_UNKNOWN; + } + wpa_supplicant_event(ctx, EVENT_CHANNEL_LIST_CHANGED, &event); + } +} + +int wpa_driver_nl80211_driver_cmd(void *priv, char *cmd, char *buf, + size_t buf_len ) +{ + struct i802_bss *bss = priv; + struct wpa_driver_nl80211_data *drv = bss->drv; + struct ifreq ifr; + android_wifi_priv_cmd priv_cmd; + int ret = 0; + + if (bss->ifindex <= 0 && bss->wdev_id > 0) { + /* DRIVER CMD received on the DEDICATED P2P Interface which doesn't + * have an NETDEVICE associated with it. So we have to re-route the + * command to the parent NETDEVICE + */ + struct wpa_supplicant *wpa_s = (struct wpa_supplicant *)(drv->ctx); + + wpa_printf(MSG_DEBUG, "Re-routing DRIVER cmd to parent iface"); + if (wpa_s && wpa_s->parent) { + /* Update the nl80211 pointers corresponding to parent iface */ + bss = wpa_s->parent->drv_priv; + if (bss) { + drv = bss->drv; + } else { + wpa_printf(MSG_DEBUG, "bss invalid, command : %s", cmd); + return -1; + } + + wpa_printf(MSG_DEBUG, "Re-routing command to iface: %s" + " cmd (%s)", bss->ifname, cmd); + } + } + + if (os_strcasecmp(cmd, "STOP") == 0) { + linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, 0); + wpa_msg(drv->ctx, MSG_INFO, WPA_EVENT_DRIVER_STATE "STOPPED"); + } else if (os_strcasecmp(cmd, "START") == 0) { + linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, 1); + wpa_msg(drv->ctx, MSG_INFO, WPA_EVENT_DRIVER_STATE "STARTED"); + } else if (os_strcasecmp(cmd, "MACADDR") == 0) { + u8 macaddr[ETH_ALEN] = {}; + + ret = linux_get_ifhwaddr(drv->global->ioctl_sock, bss->ifname, macaddr); + if (!ret) + ret = os_snprintf(buf, buf_len, + "Macaddr = " MACSTR "\n", MAC2STR(macaddr)); + } else { /* Use private command */ + os_memcpy(buf, cmd, strlen(cmd) + 1); + memset(&ifr, 0, sizeof(ifr)); + memset(&priv_cmd, 0, sizeof(priv_cmd)); + os_strlcpy(ifr.ifr_name, bss->ifname, IFNAMSIZ); + + priv_cmd.bufaddr = buf; + + priv_cmd.used_len = buf_len; + priv_cmd.total_len = buf_len; + ifr.ifr_data = &priv_cmd; + + if ((ret = ioctl(drv->global->ioctl_sock, SIOCDEVPRIVATE + 1, &ifr)) < 0) { + wpa_printf(MSG_ERROR, "%s: failed to issue private command: %s", __func__, cmd); + wpa_driver_send_hang_msg(drv); + } else { + drv_errors = 0; + ret = 0; + if ((os_strcasecmp(cmd, "LINKSPEED") == 0) || + (os_strcasecmp(cmd, "RSSI") == 0) || + (os_strcasecmp(cmd, "GETBAND") == 0) || + (os_strncasecmp(cmd, "WLS_BATCHING", 12) == 0)) + ret = strlen(buf); + wpa_driver_notify_country_change(drv->ctx, cmd); + wpa_printf(MSG_DEBUG, "%s %s len = %d, %zu", __func__, buf, ret, strlen(buf)); + } + } + return ret; +} + +int wpa_driver_set_p2p_noa(void *priv, u8 count, int start, int duration) +{ + wpa_printf(MSG_DEBUG, "%s: count: %d, start: %d, duration: %d", + __func__, count, start, duration); + + return 0; +} + +int wpa_driver_get_p2p_noa(void *priv __unused, u8 *buf __unused, size_t len __unused) +{ + wpa_printf(MSG_DEBUG, "%s: priv: 0x%p, buf: 0x%p, len: %zu", + __func__, priv, buf, len); + + return 0; +} + +int wpa_driver_set_p2p_ps(void *priv, int legacy_ps, int opp_ps, int ctwindow) +{ + wpa_printf(MSG_DEBUG, "%s: legacy_ps: %d, opp_ps: %d, ctw: %d", + __func__, legacy_ps, opp_ps, ctwindow); + + return 0; +} + +int wpa_driver_set_ap_wps_p2p_ie(void *priv, const struct wpabuf *beacon, + const struct wpabuf *proberesp, + const struct wpabuf *assocresp) +{ + return 0; +} diff --git a/longan/device/config/chips/a133/configs/c3/kickpi-k5c.dts b/longan/device/config/chips/a133/configs/c3/kickpi-k5c.dts index 35b6b40..e64033c 100755 --- a/longan/device/config/chips/a133/configs/c3/kickpi-k5c.dts +++ b/longan/device/config/chips/a133/configs/c3/kickpi-k5c.dts @@ -941,7 +941,7 @@ /*sd-uhs-sdr25*/ sd-uhs-sdr50; sd-uhs-ddr50; - sd-uhs-sdr104; + //sd-uhs-sdr104; // kickpi //sunxi-power-save-mode; /*sunxi-dis-signal-vol-sw;*/ diff --git a/longan/kernel/linux-4.9/drivers/misc/seekwaveplatform_lite/sdio/skw_sdio_main.c b/longan/kernel/linux-4.9/drivers/misc/seekwaveplatform_lite/sdio/skw_sdio_main.c index 31e34fb..11f8d71 100755 --- a/longan/kernel/linux-4.9/drivers/misc/seekwaveplatform_lite/sdio/skw_sdio_main.c +++ b/longan/kernel/linux-4.9/drivers/misc/seekwaveplatform_lite/sdio/skw_sdio_main.c @@ -2605,22 +2605,22 @@ struct sdio_func *func1 = skw_sdio->sdio_func[FUNC_1]; struct mmc_host *host = func1->card->host; - if ((SKW_SDIO_INBAND_IRQ == skw_sdio->irq_type) && (0 == (host->caps & MMC_CAP_SDIO_IRQ))) { - skw_sdio_err("Please add cap-sdio-irq to dts! irq_type=%d caps=0x%x\n", skw_sdio->irq_type, host->caps); - ret = -EPERM; - } else if ((host->ios.clock > 50000000UL) && (0 == (host->caps & MMC_CAP_UHS_SDR104))) { - skw_sdio_err("please add sd-uhs-sdr104 to dts! clock=%d cap=0x%x\n", host->ios.clock, host->caps); - ret = -EPERM; - } else if ((host->ios.clock <= 50000000UL) && (0 != (host->caps & MMC_CAP_UHS_SDR104))) { - skw_sdio_err("please remove sd-uhs-sdr104 from dts! clock=%d cap=0x%x\n", host->ios.clock, host->caps); - ret = -EPERM; - } else if (host->ios.clock != host->f_max) { - skw_sdio_err("actual clock is not equal to max clock! clock=%d f_max=%d\n", host->ios.clock, host->f_max); - ret = -EPERM; - } else if (host->ios.timing != MMC_TIMING_UHS_SDR104) { - skw_sdio_err("actual timing is not equal to max timing! timing=%d t_max=%d\n", host->ios.timing, MMC_TIMING_UHS_SDR104); - ret = -EPERM; - } + // if ((SKW_SDIO_INBAND_IRQ == skw_sdio->irq_type) && (0 == (host->caps & MMC_CAP_SDIO_IRQ))) { + // skw_sdio_err("Please add cap-sdio-irq to dts! irq_type=%d caps=0x%x\n", skw_sdio->irq_type, host->caps); + // ret = -EPERM; + // } else if ((host->ios.clock > 50000000UL) && (0 == (host->caps & MMC_CAP_UHS_SDR104))) { + // skw_sdio_err("please add sd-uhs-sdr104 to dts! clock=%d cap=0x%x\n", host->ios.clock, host->caps); + // ret = -EPERM; + // } else if ((host->ios.clock <= 50000000UL) && (0 != (host->caps & MMC_CAP_UHS_SDR104))) { + // skw_sdio_err("please remove sd-uhs-sdr104 from dts! clock=%d cap=0x%x\n", host->ios.clock, host->caps); + // ret = -EPERM; + // } else if (host->ios.clock != host->f_max) { + // skw_sdio_err("actual clock is not equal to max clock! clock=%d f_max=%d\n", host->ios.clock, host->f_max); + // ret = -EPERM; + // } else if (host->ios.timing != MMC_TIMING_UHS_SDR104) { + // skw_sdio_err("actual timing is not equal to max timing! timing=%d t_max=%d\n", host->ios.timing, MMC_TIMING_UHS_SDR104); + // ret = -EPERM; + // } return ret; } -- Gitblit v1.6.2