Skip to content
Open
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
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
/node_modules/*
/node_modules/*
/usb_driver/*
50 changes: 50 additions & 0 deletions 0001-BeagleBoot.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
From 8c47edfd443b1f42d69f9f18eaed677f71b322d4 Mon Sep 17 00:00:00 2001
From: Parthiban <Parthiban>
Date: Sat, 1 Dec 2018 21:44:21 +0530
Subject: [PATCH] BeagleBoot

---
configs/am335x_evm_usbspl_defconfig | 2 +-
drivers/usb/gadget/ether.c | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/configs/am335x_evm_usbspl_defconfig b/configs/am335x_evm_usbspl_defconfig
index 88003b5852..d2765dcb46 100644
--- a/configs/am335x_evm_usbspl_defconfig
+++ b/configs/am335x_evm_usbspl_defconfig
@@ -5,7 +5,7 @@ CONFIG_AM33XX=y
CONFIG_SPL=y
CONFIG_DISTRO_DEFAULTS=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
-CONFIG_BOOTCOMMAND="if test ${boot_fit} -eq 1; then run update_to_fit; fi; run findfdt; run init_console; run envboot; run distro_bootcmd"
+CONFIG_BOOTCOMMAND="ums 0 mmc 1; ums 0 mmc 0;"
CONFIG_CONSOLE_MUX=y
CONFIG_SYS_CONSOLE_ENV_OVERWRITE=y
CONFIG_SYS_CONSOLE_INFO_QUIET=y
diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
index 8ab9b9fe56..38dcdc417b 100644
--- a/drivers/usb/gadget/ether.c
+++ b/drivers/usb/gadget/ether.c
@@ -97,7 +97,7 @@ static const char driver_desc[] = DRIVER_DESC;
|USB_CDC_PACKET_TYPE_PROMISCUOUS \
|USB_CDC_PACKET_TYPE_DIRECTED)

-#define USB_CONNECT_TIMEOUT (3 * CONFIG_SYS_HZ)
+#define USB_CONNECT_TIMEOUT (15 * CONFIG_SYS_HZ)

/*-------------------------------------------------------------------------*/

@@ -333,8 +333,8 @@ static char host_addr[18];
* to recharge batteries ...
*/

-#define DEV_CONFIG_VALUE 1 /* cdc or subset */
-#define DEV_RNDIS_CONFIG_VALUE 2 /* rndis; optional */
+#define DEV_CONFIG_VALUE 2 /* cdc or subset */
+#define DEV_RNDIS_CONFIG_VALUE 1 /* rndis; optional */

static struct usb_device_descriptor
device_desc = {
--
2.17.1

Binary file modified bin/u-boot-spl.bin
Binary file not shown.
Binary file modified bin/u-boot.img
Binary file not shown.
19 changes: 9 additions & 10 deletions lib/rndis_init/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,15 @@ module.exports = (server, emitterMod) => {
// http://www.beyondlogic.org/usbnutshell/usb6.shtml
const bmRequestType_send = 0x21; // USB_TYPE=CLASS | USB_RECIPIENT=INTERFACE
const bmRequestType_receive = 0xA1; // USB_DATA=DeviceToHost | USB_TYPE=CLASS | USB_RECIPIENT=INTERFACE

if(server.foundDevice === constants.SPL){
const iEndpoint = intf0.endpoint(intf0.endpoints[0].address);
iEndpoint.on('error', (error) => {
console.log(error);
})
iEndpoint.startPoll(1,256);
}

const iEndpoint = intf0.endpoint(intf0.endpoints[0].address);
iEndpoint.on('error', (error) => {
console.log(error);
});
iEndpoint.startPoll(1, 256);
// Sending rndis_init_msg (SEND_ENCAPSULATED_COMMAND)
server.device.controlTransfer(bmRequestType_send, 0, 0, 0, init_msg, (error) => {
if(error) emitterMod.emit('error', `Control transfer error on SEND_ENCAPSULATED ${error}`);
if (error) emitterMod.emit('error', `Control transfer error on SEND_ENCAPSULATED ${error}`);
});

// Receive rndis_init_cmplt (GET_ENCAPSULATED_RESPONSE)
Expand All @@ -34,11 +32,12 @@ module.exports = (server, emitterMod) => {

// Send rndis_set_msg (SEND_ENCAPSULATED_COMMAND)
server.device.controlTransfer(bmRequestType_send, 0, 0, 0, set_msg, (error) => {
if(error) emitterMod.emit('error', `Control transfer error on SEND_ENCAPSULATED ${error}`);
if (error) emitterMod.emit('error', `Control transfer error on SEND_ENCAPSULATED ${error}`);
});

// Receive rndis_init_cmplt (GET_ENCAPSULATED_RESPONSE)
server.device.controlTransfer(bmRequestType_receive, 0x01, 0, 0, CONTROL_BUFFER_SIZE, (error) => {
if (error) emitterMod.emit('error', `Control transfer error on GET_ENCAPSULATED ${error}`);
});
return iEndpoint;
};
21 changes: 11 additions & 10 deletions lib/server/setup.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,16 @@ module.exports.setup = (device, serverConfigs, emitterMod, transfer) => {
emitterMod.emit('connect', foundDevice);

// Setup servers
serverConfigs.forEach((serverConfig) => {
if (device === usb.findByIds(serverConfig.vid, serverConfig.pid) && foundDevice != constants.UMS) {
serverConfig.device = device;
serverConfig.foundDevice = foundDevice;
const timeout = (foundDevice == constants.SPL) ? 500 : 0;
setTimeout(() => {
transfer(serverConfig);
}, timeout);
}
});
serverConfigs.forEach((serverConfig) => {
if (device === usb.findByIds(serverConfig.vid, serverConfig.pid) && foundDevice != constants.UMS) {
serverConfig.device = device;
serverConfig.foundDevice = foundDevice;
const timeout = (foundDevice == constants.SPL) ? 500 : 0;
setTimeout(() => {
transfer(serverConfig);
}, timeout);
}
});

return foundDevice;
};
43 changes: 41 additions & 2 deletions main.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ const usbUtils = require('./lib/usb-utils');
const server = require('./lib/server');
const serial = require('./lib/usb_serial');

const winusbDriverGenerator = require('winusb-driver-generator');

const proxyConfig = {
Host: {},
BB: {},
Expand Down Expand Up @@ -57,8 +59,35 @@ exports.proxyServer = () => {
// Configuring Server to serve Client
exports.serveClient = (serverConfigs) => {
let foundDevice;
let winUSBInstallerFlag = true;

if (platform === 'win32') {
emitter.on('installWinUSB', () => {
if (winUSBInstallerFlag) {
for (const device of winusbDriverGenerator.listDriverlessDevices()) {
if (device.vid === constants.ROM_VID && device.pid === constants.ROM_PID) {
console.log('Installing WinUSB Driver for ROM Device');
winUSBInstallerFlag = false;
return winusbDriverGenerator.associate(device.vid, device.pid, 'BBB ROM Device');
}
if (device.vid === constants.SPL_VID && device.pid === constants.SPL_PID) {
console.log('Installing WinUSB Driver for SPL Device');
winUSBInstallerFlag = false;
return winusbDriverGenerator.associate(device.vid, device.pid, 'BBB SPL Device');
}
}
}
});
setInterval(() => { emitter.emit('installWinUSB'); }, 5000);
emitter.on('forceInstallWinUSB', (vid, pid, name) => {
console.log(`Force Installing WinUSB Driver for ${name} Device`);
return winusbDriverGenerator.update(vid, pid, `BBB ${name} Device`);
});
}

progress.increment = (100 / (serverConfigs.length * 10));
usb.on('attach', (device) => {
if (platform === 'win32') winUSBInstallerFlag = true;
foundDevice = server.setup(device, serverConfigs, emitterMod, runServer);
});

Expand All @@ -84,6 +113,14 @@ const runServer = (serverConfig) => {
serverConfig.device.open();
onOpen(serverConfig);
} catch (ex) {
if (platform === 'win32' && ex.toString() === 'Error: LIBUSB_ERROR_NOT_SUPPORTED') {
if (serverConfig.foundDevice === constants.ROM) {
emitter.emit('forceInstallWinUSB', constants.ROM_VID, constants.ROM_PID, serverConfig.foundDevice);
}
if (serverConfig.foundDevice === constants.SPL) {
emitter.emit('forceInstallWinUSB', constants.SPL_VID, constants.SPL_PID, serverConfig.foundDevice);
}
}
emitterMod.emit('error', `Can't open device ${ex}`);
}
};
Expand All @@ -93,7 +130,7 @@ const onOpen = (serverConfig) => {

// Initialize RNDIS device on Windows and OSX
if (platform != 'linux' && (serverConfig.foundDevice === constants.ROM || serverConfig.foundDevice === constants.SPL)) {
rndisInit(serverConfig, emitterMod);
serverConfig.iEndpoint = rndisInit(serverConfig, emitterMod);
}
usbUtils.claimInterface(serverConfig, emitterMod); // Claim USB interfaces
updateProgress('Interface claimed');
Expand Down Expand Up @@ -158,7 +195,9 @@ emitter.on('inTransfer', (serverConfig) => {
emitter.emit('outTransfer', serverConfig, processTFTP_Data(serverConfig), request);
} else {
updateProgress(`${serverConfig.foundDevice} TFTP transfer complete`);
if (serverConfig.foundDevice === constants.ROM) serverConfig.device.close();
if (platform != 'linux') {
serverConfig.iEndpoint.stopPoll();
}
serverConfig.inEndpoint.stopPoll();
}
break;
Expand Down
Loading