Skip to content

Commit 9aa213e

Browse files
committed
Add --udc argument
Allow the user to specify which udc controller to use. DWC2 / usb-gadget / fe98000.usb is not the only one available.
1 parent 09a60f8 commit 9aa213e

File tree

3 files changed

+32
-10
lines changed

3 files changed

+32
-10
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ OPTIONS:
131131
-l, --logfile <LOGFILE> Log file path [default: /var/log/aa-proxy-rs.log]
132132
-s, --stats-interval <SECONDS> Interval of showing data transfer statistics (0 = disabled)
133133
[default: 0]
134+
-u, --udc <UDCNAME> Specify UDC Controller to use
134135
-V, --version Print version information
135136
```
136137
Most options are self explanatory, but these needs some more attention:<br>

src/main.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,14 @@ struct Args {
5757
/// Interval of showing data transfer statistics (0 = disabled)
5858
#[clap(short, long, value_name = "SECONDS", default_value_t = 0)]
5959
stats_interval: u16,
60+
61+
/// UDC Controller name
62+
#[clap(
63+
short,
64+
long
65+
)]
66+
udc: Option<String>,
67+
6068
}
6169

6270
fn logging_init(debug: bool, log_path: &PathBuf) {
@@ -106,6 +114,7 @@ async fn tokio_main(
106114
advertise: bool,
107115
legacy: bool,
108116
connect: Option<Address>,
117+
udc: Option<String>,
109118
need_restart: Arc<Notify>,
110119
tcp_start: Arc<Notify>,
111120
) {
@@ -117,7 +126,7 @@ async fn tokio_main(
117126
std::thread::spawn(|| uevent_listener(accessory_started_cloned));
118127
}
119128

120-
let mut usb = UsbGadgetState::new(legacy);
129+
let mut usb = UsbGadgetState::new(legacy, udc);
121130
loop {
122131
if let Err(e) = usb.init() {
123132
error!("{} 🔌 USB init error: {}", NAME, e);
@@ -203,6 +212,7 @@ fn main() {
203212
args.advertise,
204213
args.legacy,
205214
args.connect,
215+
args.udc,
206216
need_restart,
207217
tcp_start,
208218
)

src/usb_gadget.rs

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,27 +53,38 @@ pub struct UsbGadgetState {
5353
configfs_path: PathBuf,
5454
udc_name: String,
5555
legacy: bool,
56+
udc: Option<String>,
5657
}
5758

5859
impl UsbGadgetState {
59-
pub fn new(legacy: bool) -> UsbGadgetState {
60+
pub fn new(legacy: bool, udc: Option<String>) -> UsbGadgetState {
6061
let mut state = UsbGadgetState {
6162
configfs_path: PathBuf::from("/sys/kernel/config/usb_gadget"),
6263
udc_name: String::new(),
6364
legacy,
65+
udc
6466
};
6567

66-
let udc_dir = PathBuf::from("/sys/class/udc");
67-
if let Ok(entries) = fs::read_dir(&udc_dir) {
68-
for entry in entries {
69-
if let Ok(entry) = entry {
70-
info!("Using UDC: {:?}", entry.file_name());
71-
if let Ok(fname) = entry.file_name().into_string() {
72-
state.udc_name.push_str(fname.as_str());
73-
break;
68+
// If UDC argument is passed, use it, otherwise check sys
69+
match state.udc {
70+
None => {
71+
let udc_dir = PathBuf::from("/sys/class/udc");
72+
if let Ok(entries) = fs::read_dir(&udc_dir) {
73+
for entry in entries {
74+
if let Ok(entry) = entry {
75+
info!("Using UDC: {:?}", entry.file_name());
76+
if let Ok(fname) = entry.file_name().into_string() {
77+
state.udc_name.push_str(fname.as_str());
78+
break;
79+
}
80+
}
7481
}
7582
}
7683
}
84+
Some(ref udcname) => {
85+
info!("Using UDC: {:?}", udcname);
86+
state.udc_name.push_str(&udcname);
87+
}
7788
}
7889

7990
return state;

0 commit comments

Comments
 (0)