Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,16 @@ add_library(WiFiDriver
hal/Hal8814_PostFwdlReplay.h
hal/Hal8814PwrSeq.c
hal/Hal8814PwrSeq.h
hal/Hal8821APwrSeq.c
hal/Hal8821APwrSeq.h
hal/Hal8821PhyReg.h
hal/basic_types.h
hal/hal8812a_fw.c
hal/hal8812a_fw.h
hal/hal8814a_fw.c
hal/hal8814a_fw.h
hal/hal8821a_fw.c
hal/hal8821a_fw.h
hal/hal_com_reg.h
hal/rtl8812a_hal.h
hal/rtl8812a_recv.h
Expand Down
35 changes: 29 additions & 6 deletions demo/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,28 +58,51 @@ int main() {
return rc;
}

libusb_set_option(ctx, LIBUSB_OPTION_LOG_LEVEL, LIBUSB_LOG_LEVEL_DEBUG);
/* libusb log level: DEBUG by default (matches historic behaviour); a single
* DEVOURER_USB_QUIET=1 knob downgrades to WARNING to keep capture logs
* manageable. DEBUG output runs ~7 MB per 15s run, which has filled /tmp
* and wedged the harness on previous sessions. */
libusb_set_option(ctx, LIBUSB_OPTION_LOG_LEVEL,
std::getenv("DEVOURER_USB_QUIET")
? LIBUSB_LOG_LEVEL_WARNING
: LIBUSB_LOG_LEVEL_DEBUG);

/* DEVOURER_PID env var (hex, e.g. "0x8813") restricts the open loop to a
* single PID. Useful when multiple Realtek adapters are plugged. */
* single PID. Useful when multiple Realtek adapters are plugged.
* DEVOURER_VID overrides the VID (default 0x0bda Realtek) — needed to reach
* OEM-rebadged Jaguar dongles like the TP-Link Archer T2U Plus (2357:0120). */
const char *pid_env = std::getenv("DEVOURER_PID");
uint16_t target_pid = 0;
if (pid_env != nullptr) {
target_pid = static_cast<uint16_t>(std::strtoul(pid_env, nullptr, 0));
logger->info("DEVOURER_PID={:04x} (limiting to this PID)", target_pid);
}
uint16_t target_vid = USB_VENDOR_ID;
if (const char *vid_env = std::getenv("DEVOURER_VID")) {
target_vid = static_cast<uint16_t>(std::strtoul(vid_env, nullptr, 0));
logger->info("DEVOURER_VID={:04x} (overriding default VID)", target_vid);
}
libusb_device_handle *dev_handle = nullptr;
for (uint16_t pid : kRealtekProductIds) {
if (target_pid != 0 && pid != target_pid) continue;
dev_handle = libusb_open_device_with_vid_pid(ctx, USB_VENDOR_ID, pid);
dev_handle = libusb_open_device_with_vid_pid(ctx, target_vid, pid);
if (dev_handle != NULL) {
logger->info("Opened Realtek device {:04x}:{:04x}", USB_VENDOR_ID, pid);
logger->info("Opened device {:04x}:{:04x}", target_vid, pid);
break;
}
}
/* DEVOURER_PID can name a PID not in kRealtekProductIds (e.g. 0x0120 for the
* T2U Plus). Try that direct combination once before giving up. */
if (dev_handle == NULL && target_pid != 0) {
dev_handle = libusb_open_device_with_vid_pid(ctx, target_vid, target_pid);
if (dev_handle != NULL) {
logger->info("Opened device {:04x}:{:04x} (via DEVOURER_PID)",
target_vid, target_pid);
}
}
if (dev_handle == NULL) {
logger->error("Cannot find any supported Realtek device under VID {:04x}",
USB_VENDOR_ID);
logger->error("Cannot find any supported device under VID {:04x}",
target_vid);
libusb_exit(ctx);
return 1;
}
Expand Down
86 changes: 86 additions & 0 deletions hal/Hal8821APwrSeq.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
/******************************************************************************
*
* Copyright(c) Semiconductor - 2017 Realtek Corporation.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of version 2 of the GNU General Public License as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
*****************************************************************************/



#include "Hal8821APwrSeq.h"
#include <rtl8812a_hal.h>


/*
drivers should parse below arrays and do the corresponding actions
*/
/* 3 Power on Array */
WLAN_PWR_CFG rtl8821A_power_on_flow[RTL8821A_TRANS_CARDEMU_TO_ACT_STEPS + RTL8821A_TRANS_END_STEPS] = {
RTL8821A_TRANS_CARDEMU_TO_ACT
RTL8821A_TRANS_END
};

/* 3Radio off GPIO Array */
WLAN_PWR_CFG rtl8821A_radio_off_flow[RTL8821A_TRANS_ACT_TO_CARDEMU_STEPS + RTL8821A_TRANS_END_STEPS] = {
RTL8821A_TRANS_ACT_TO_CARDEMU
RTL8821A_TRANS_END
};

/* 3Card Disable Array */
WLAN_PWR_CFG rtl8821A_card_disable_flow[RTL8821A_TRANS_ACT_TO_CARDEMU_STEPS + RTL8821A_TRANS_CARDEMU_TO_PDN_STEPS + RTL8821A_TRANS_END_STEPS] = {
RTL8821A_TRANS_ACT_TO_CARDEMU
RTL8821A_TRANS_CARDEMU_TO_CARDDIS
RTL8821A_TRANS_END
};

/* 3 Card Enable Array */
WLAN_PWR_CFG rtl8821A_card_enable_flow[RTL8821A_TRANS_CARDDIS_TO_CARDEMU_STEPS + RTL8821A_TRANS_CARDEMU_TO_ACT_STEPS + RTL8821A_TRANS_END_STEPS] = {
RTL8821A_TRANS_CARDDIS_TO_CARDEMU
RTL8821A_TRANS_CARDEMU_TO_ACT
RTL8821A_TRANS_END
};

/* 3Suspend Array */
WLAN_PWR_CFG rtl8821A_suspend_flow[RTL8821A_TRANS_ACT_TO_CARDEMU_STEPS + RTL8821A_TRANS_CARDEMU_TO_SUS_STEPS + RTL8821A_TRANS_END_STEPS] = {
RTL8821A_TRANS_ACT_TO_CARDEMU
RTL8821A_TRANS_CARDEMU_TO_SUS
RTL8821A_TRANS_END
};

/* 3 Resume Array */
WLAN_PWR_CFG rtl8821A_resume_flow[RTL8821A_TRANS_ACT_TO_CARDEMU_STEPS + RTL8821A_TRANS_CARDEMU_TO_SUS_STEPS + RTL8821A_TRANS_END_STEPS] = {
RTL8821A_TRANS_SUS_TO_CARDEMU
RTL8821A_TRANS_CARDEMU_TO_ACT
RTL8821A_TRANS_END
};



/* 3HWPDN Array */
WLAN_PWR_CFG rtl8821A_hwpdn_flow[RTL8821A_TRANS_ACT_TO_CARDEMU_STEPS + RTL8821A_TRANS_CARDEMU_TO_PDN_STEPS + RTL8821A_TRANS_END_STEPS] = {
RTL8821A_TRANS_ACT_TO_CARDEMU
RTL8821A_TRANS_CARDEMU_TO_PDN
RTL8821A_TRANS_END
};

/* 3 Enter LPS */
WLAN_PWR_CFG rtl8821A_enter_lps_flow[RTL8821A_TRANS_ACT_TO_LPS_STEPS + RTL8821A_TRANS_END_STEPS] = {
/* FW behavior */
RTL8821A_TRANS_ACT_TO_LPS
RTL8821A_TRANS_END
};

/* 3 Leave LPS */
WLAN_PWR_CFG rtl8821A_leave_lps_flow[RTL8821A_TRANS_LPS_TO_ACT_STEPS + RTL8821A_TRANS_END_STEPS] = {
/* FW behavior */
RTL8821A_TRANS_LPS_TO_ACT
RTL8821A_TRANS_END
};
Loading
Loading