Add EEPROM stress testing scripts.
This commit is contained in:
3
usb/eeprom-stress-test-wrapper.sh
Executable file
3
usb/eeprom-stress-test-wrapper.sh
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
sh ./eeprom-stress-test.sh 2>&1 | tee eeprom-stress-test.log
|
||||||
27
usb/eeprom-stress-test.sh
Normal file
27
usb/eeprom-stress-test.sh
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e # fail on the first error
|
||||||
|
set -x # show expanded variables
|
||||||
|
|
||||||
|
userConfigSize=`./get-config-size.js`
|
||||||
|
hardwareConfigSize=`./get-config-size.js h`
|
||||||
|
|
||||||
|
iter=1
|
||||||
|
while true; do
|
||||||
|
echo iter $iter
|
||||||
|
|
||||||
|
dd if=/dev/urandom of=hardware-config.write bs=1 count=$hardwareConfigSize
|
||||||
|
./write-config.js h
|
||||||
|
./eeprom.js writeHardwareConfig
|
||||||
|
./eeprom.js readHardwareConfig
|
||||||
|
./read-config.js h
|
||||||
|
diff hardware-config.read hardware-config.write
|
||||||
|
|
||||||
|
dd if=/dev/urandom of=user-config.write bs=1 count=$userConfigSize
|
||||||
|
./write-config.js
|
||||||
|
./eeprom.js writeUserConfig
|
||||||
|
./eeprom.js readUserConfig
|
||||||
|
./read-config.js
|
||||||
|
diff user-config.read user-config.write
|
||||||
|
|
||||||
|
iter=$((iter+1))
|
||||||
|
done
|
||||||
32
usb/eeprom.js
Executable file
32
usb/eeprom.js
Executable file
@@ -0,0 +1,32 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
let fs = require('fs');
|
||||||
|
let uhk = require('./uhk');
|
||||||
|
|
||||||
|
let eepromTransferType = process.argv[2];
|
||||||
|
let eepromTransferId = uhk.eepromTransfer[eepromTransferType];
|
||||||
|
|
||||||
|
if (eepromTransferId === undefined) {
|
||||||
|
console.error(`Gotta provide one of ${Object.keys(uhk.eepromTransfer).join(', ')}`);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
let isFirstSend = true;
|
||||||
|
let isFirstReceive = true;
|
||||||
|
let isEepromBusy = true;
|
||||||
|
|
||||||
|
uhk.sendUsbPacketsByCallback(() => {
|
||||||
|
if (isFirstSend) {
|
||||||
|
isFirstSend = false;
|
||||||
|
return new Buffer([uhk.usbCommands.launchEepromTransfer, eepromTransferId]);
|
||||||
|
} else {
|
||||||
|
return isEepromBusy ? new Buffer([uhk.usbCommands.getKeyboardState]) : null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
uhk.registerReceiveCallback((buffer) => {
|
||||||
|
if (isFirstReceive) {
|
||||||
|
isFirstReceive = false;
|
||||||
|
} else {
|
||||||
|
isEepromBusy = buffer[1] === 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
17
usb/get-config-size.js
Executable file
17
usb/get-config-size.js
Executable file
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
let uhk = require('./uhk');
|
||||||
|
let process = require('process');
|
||||||
|
|
||||||
|
uhk.silent = true;
|
||||||
|
let isHardwareConfig = process.argv[2] === 'h';
|
||||||
|
let configTypeString = isHardwareConfig ? 'hardware' : 'user';
|
||||||
|
|
||||||
|
uhk.sendUsbPacketsByCallback(() => {
|
||||||
|
return new Buffer([uhk.usbCommands.getProperty, isHardwareConfig ? uhk.systemPropertyIds.hardwareConfigSize : uhk.systemPropertyIds.userConfigSize]);
|
||||||
|
});
|
||||||
|
|
||||||
|
uhk.registerReceiveCallback((buffer) => {
|
||||||
|
configSize = buffer[1] + (buffer[2]<<8);
|
||||||
|
console.log(configSize);
|
||||||
|
process.exit(0);
|
||||||
|
});
|
||||||
@@ -10,7 +10,7 @@ let isFirstSend = true;
|
|||||||
let isFirstReceive = true;
|
let isFirstReceive = true;
|
||||||
let configSize;
|
let configSize;
|
||||||
let offset = 0;
|
let offset = 0;
|
||||||
let configBuffer;
|
let configBuffer = new Buffer(0);
|
||||||
let chunkSizeToRead;
|
let chunkSizeToRead;
|
||||||
|
|
||||||
uhk.sendUsbPacketsByCallback(() => {
|
uhk.sendUsbPacketsByCallback(() => {
|
||||||
@@ -19,10 +19,11 @@ uhk.sendUsbPacketsByCallback(() => {
|
|||||||
return new Buffer([uhk.usbCommands.getProperty, isHardwareConfig ? uhk.systemPropertyIds.hardwareConfigSize : uhk.systemPropertyIds.userConfigSize]);
|
return new Buffer([uhk.usbCommands.getProperty, isHardwareConfig ? uhk.systemPropertyIds.hardwareConfigSize : uhk.systemPropertyIds.userConfigSize]);
|
||||||
} else {
|
} else {
|
||||||
chunkSizeToRead = Math.min(chunkSize, configSize - offset)
|
chunkSizeToRead = Math.min(chunkSize, configSize - offset)
|
||||||
let buffer = Buffer([uhk.usbCommands.readUserConfig, chunkSizeToRead, offset & 0xff, offset >> 8]);
|
let usbCommand = isHardwareConfig ? uhk.usbCommands.readHardwareConfig : uhk.usbCommands.readUserConfig;
|
||||||
|
let buffer = Buffer([usbCommand, chunkSizeToRead, offset & 0xff, offset >> 8]);
|
||||||
let bufferOrNull = offset >= configSize ? null : buffer;
|
let bufferOrNull = offset >= configSize ? null : buffer;
|
||||||
if (!bufferOrNull) {
|
if (!bufferOrNull) {
|
||||||
fs.writeFileSync(`${configTypeString}-config.out`, configBuffer, 'binary');
|
fs.writeFileSync(`${configTypeString}-config.read`, configBuffer);
|
||||||
}
|
}
|
||||||
offset += chunkSizeToRead;
|
offset += chunkSizeToRead;
|
||||||
return bufferOrNull;
|
return bufferOrNull;
|
||||||
@@ -34,7 +35,6 @@ uhk.registerReceiveCallback((buffer) => {
|
|||||||
isFirstReceive = false;
|
isFirstReceive = false;
|
||||||
configSize = buffer[1] + (buffer[2]<<8);
|
configSize = buffer[1] + (buffer[2]<<8);
|
||||||
console.log(`${configTypeString}configSize:`, configSize);
|
console.log(`${configTypeString}configSize:`, configSize);
|
||||||
configBuffer = new Buffer(0);
|
|
||||||
} else {
|
} else {
|
||||||
configBuffer = Buffer.concat([configBuffer, new Buffer(buffer.slice(1, chunkSizeToRead+1))]);
|
configBuffer = Buffer.concat([configBuffer, new Buffer(buffer.slice(1, chunkSizeToRead+1))]);
|
||||||
}
|
}
|
||||||
|
|||||||
16
usb/uhk.js
16
usb/uhk.js
@@ -66,7 +66,9 @@ function sendUsbPacketsByCallback(packetProvider, options={}) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('Sending: ', bufferToString(packet));
|
if (!moduleExports.silent) {
|
||||||
|
console.log('Sending: ', bufferToString(packet));
|
||||||
|
}
|
||||||
|
|
||||||
let [endpointIn, endpointOut] = usbEndpoints || getUsbEndpoints();
|
let [endpointIn, endpointOut] = usbEndpoints || getUsbEndpoints();
|
||||||
endpointOut.transfer(packet, function(err) {
|
endpointOut.transfer(packet, function(err) {
|
||||||
@@ -83,7 +85,9 @@ function sendUsbPacketsByCallback(packetProvider, options={}) {
|
|||||||
console.error("USB error: %s", err2);
|
console.error("USB error: %s", err2);
|
||||||
process.exit(2);
|
process.exit(2);
|
||||||
}
|
}
|
||||||
console.log('Received:', bufferToString(receivedBuffer));
|
if (!moduleExports.silent) {
|
||||||
|
console.log('Received:', bufferToString(receivedBuffer));
|
||||||
|
}
|
||||||
(receiveCallback || (()=>{}))(receivedBuffer);
|
(receiveCallback || (()=>{}))(receivedBuffer);
|
||||||
sendUsbPacketsByCallback(packetProvider);
|
sendUsbPacketsByCallback(packetProvider);
|
||||||
})
|
})
|
||||||
@@ -102,7 +106,7 @@ function sendUsbPackets(packets, options={}) {
|
|||||||
}, options)
|
}, options)
|
||||||
}
|
}
|
||||||
|
|
||||||
exports = module.exports = {
|
exports = module.exports = moduleExports = {
|
||||||
DelayMs,
|
DelayMs,
|
||||||
bufferToString,
|
bufferToString,
|
||||||
getUhkDevice,
|
getUhkDevice,
|
||||||
@@ -140,6 +144,12 @@ exports = module.exports = {
|
|||||||
hardwareConfigSize: 4,
|
hardwareConfigSize: 4,
|
||||||
userConfigSize: 5,
|
userConfigSize: 5,
|
||||||
},
|
},
|
||||||
|
eepromTransfer: {
|
||||||
|
readHardwareConfig: 0,
|
||||||
|
writeHardwareConfig: 1,
|
||||||
|
readUserConfig: 2,
|
||||||
|
writeUserConfig: 3,
|
||||||
|
},
|
||||||
leftLedDriverAddress: 0b1110100,
|
leftLedDriverAddress: 0b1110100,
|
||||||
rightLedDriverAddress: 0b1110111
|
rightLedDriverAddress: 0b1110111
|
||||||
}
|
}
|
||||||
|
|||||||
39
usb/write-config.js
Executable file
39
usb/write-config.js
Executable file
@@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
let fs = require('fs');
|
||||||
|
let uhk = require('./uhk');
|
||||||
|
|
||||||
|
const chunkSize = 60;
|
||||||
|
|
||||||
|
let isHardwareConfig = process.argv[2] === 'h';
|
||||||
|
let configTypeString = isHardwareConfig ? 'hardware' : 'user';
|
||||||
|
let isFirstSend = true;
|
||||||
|
let isFirstReceive = true;
|
||||||
|
let configSize;
|
||||||
|
let offset = 0;
|
||||||
|
let configBuffer = fs.readFileSync(`${configTypeString}-config.write`);
|
||||||
|
let chunkSizeToRead;
|
||||||
|
|
||||||
|
uhk.sendUsbPacketsByCallback(() => {
|
||||||
|
if (isFirstSend) {
|
||||||
|
isFirstSend = false;
|
||||||
|
return new Buffer([uhk.usbCommands.getProperty, isHardwareConfig ? uhk.systemPropertyIds.hardwareConfigSize : uhk.systemPropertyIds.userConfigSize]);
|
||||||
|
} else {
|
||||||
|
chunkSizeToRead = Math.min(chunkSize, configSize - offset)
|
||||||
|
let usbCommand = isHardwareConfig ? uhk.usbCommands.writeHardwareConfig : uhk.usbCommands.writeUserConfig;
|
||||||
|
let buffer = Buffer.concat([
|
||||||
|
new Buffer([usbCommand, chunkSizeToRead, offset & 0xff, offset >> 8]),
|
||||||
|
configBuffer.slice(offset, offset+chunkSizeToRead)
|
||||||
|
]);
|
||||||
|
let bufferOrNull = offset >= configSize ? null : buffer;
|
||||||
|
offset += chunkSizeToRead;
|
||||||
|
return bufferOrNull;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
uhk.registerReceiveCallback((buffer) => {
|
||||||
|
if (isFirstReceive) {
|
||||||
|
isFirstReceive = false;
|
||||||
|
configSize = buffer[1] + (buffer[2]<<8);
|
||||||
|
console.log(`${configTypeString}configSize:`, configSize);
|
||||||
|
}
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user