Skip to content

Commit 7c0ba2b

Browse files
committed
Rework read-register examples
1 parent 4f27a83 commit 7c0ba2b

File tree

4 files changed

+124
-140
lines changed

4 files changed

+124
-140
lines changed

examples/read-registers/common.js

Lines changed: 44 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -20,49 +20,58 @@
2020
* SOFTWARE.
2121
*/
2222

23-
const EventEmitter = require("events");
24-
const DAPjs = require("../../");
23+
const DAPjs = require('../../');
2524

26-
// Emit keyboard input
27-
const inputEmitter = new EventEmitter();
28-
process.stdin.setRawMode(true);
29-
process.stdin.setEncoding("utf8");
30-
process.stdin.on("readable", () => {
31-
let input;
32-
while (input = process.stdin.read()) {
33-
if (input === "\u0003") {
34-
process.exit();
35-
} else if (input !== null) {
36-
let index = parseInt(input);
37-
inputEmitter.emit("input", index);
38-
}
25+
// Select a device from the list
26+
const selectDevice = async (devices) => {
27+
if (devices.length === 0) {
28+
throw new Error('No devices found');
3929
}
40-
});
30+
31+
console.log('Select a device to read registers:');
32+
devices.forEach((device, index) => {
33+
console.log(`${index + 1}: ${device.name}`);
34+
});
35+
36+
const device = await new Promise(resolve => {
37+
process.stdin.setRawMode(true);
38+
process.stdin.setEncoding('utf8');
39+
process.stdin.on('readable', () => {
40+
let input;
41+
while (input = process.stdin.read()) {
42+
if (input === '\u0003') {
43+
process.exit();
44+
} else if (input !== null) {
45+
let index = parseInt(input);
46+
if (index <= devices.length) {
47+
resolve(devices[index - 1]);
48+
}
49+
}
50+
}
51+
});
52+
});
53+
54+
return device;
55+
}
4156

4257
// Read device registers
43-
function readRegisters(transport) {
58+
const readRegisters = async transport => {
4459
const processor = new DAPjs.CortexM(transport);
4560

46-
return processor.connect()
47-
.then(() => {
48-
return processor.halt();
49-
})
50-
.then(() => {
51-
const registers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
52-
return processor.readCoreRegisters(registers);
53-
})
54-
.then(registers => {
55-
registers.forEach((register, index) => {
56-
console.log(`R${index}: ${("00000000" + register.toString(16)).slice(-8)}`);
57-
});
58-
return processor.resume();
59-
})
60-
.then(() => {
61-
return processor.disconnect();
61+
await processor.connect();
62+
await processor.halt();
63+
const registers = await processor.readCoreRegisters([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]);
64+
65+
registers.forEach((register, index) => {
66+
console.log(`R${index}: ${('00000000' + register.toString(16)).slice(-8)}`);
6267
});
68+
69+
await processor.resume();
70+
await processor.disconnect();
6371
}
6472

6573
module.exports = {
66-
inputEmitter: inputEmitter,
67-
readRegisters: readRegisters
74+
DAPLINK_VENDOR: 0xD28,
75+
selectDevice,
76+
readRegisters
6877
};

examples/read-registers/hid.js

Lines changed: 23 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -20,41 +20,30 @@
2020
* SOFTWARE.
2121
*/
2222

23-
const hid = require("node-hid");
24-
const common = require("./common");
25-
const DAPjs = require("../../");
23+
const hid = require('node-hid');
24+
const common = require('./common');
25+
const DAPjs = require('../../');
2626

27-
// Allow user to select a device
28-
function selectDevice(vendorID) {
29-
return new Promise((resolve, reject) => {
30-
let devices = hid.devices();
31-
devices = devices.filter(device => device.vendorId === vendorID);
27+
// List all devices
28+
const getDevices = (vendorID) => {
29+
let devices = hid.devices();
30+
devices = devices.filter(device => device.vendorId === vendorID);
3231

33-
if (devices.length === 0) {
34-
return reject("No devices found");
35-
}
36-
37-
common.inputEmitter.addListener("input", index => {
38-
if (index <= devices.length) resolve(devices[index - 1]);
39-
});
40-
41-
console.log("Select a device to read registers:");
42-
devices.forEach((device, index) => {
43-
console.log(`${index + 1}: ${device.product}`);
44-
});
45-
});
32+
return devices.map(device => ({
33+
...device,
34+
name: device.product
35+
}));
4636
}
4737

48-
49-
selectDevice(0xD28)
50-
.then(device => {
51-
const transport = new DAPjs.HID(device);
52-
return common.readRegisters(transport);
53-
})
54-
.then(() => {
55-
process.exit();
56-
})
57-
.catch(error => {
58-
console.error(error.message || error);
59-
process.exit();
60-
});
38+
(async () => {
39+
try {
40+
const devices = getDevices(common.DAPLINK_VENDOR);
41+
const device = await common.selectDevice(devices);
42+
const transport = new DAPjs.HID(device);
43+
await common.readRegisters(transport);
44+
} catch(error) {
45+
console.error(error.message || error);
46+
} finally {
47+
process.exit();
48+
}
49+
})();

examples/read-registers/usb.js

Lines changed: 35 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -20,59 +20,51 @@
2020
* SOFTWARE.
2121
*/
2222

23-
const usb = require("usb");
24-
const common = require("./common");
25-
const DAPjs = require("../../");
23+
const usb = require('usb');
24+
const common = require('./common');
25+
const DAPjs = require('../../');
2626

2727
// Read USB device descriptor
28-
function getStringDescriptor(device, index) {
28+
const getStringDescriptor = async (device, index) => {
29+
try {
30+
device.open();
31+
} catch (_e) {
32+
return '';
33+
}
34+
2935
return new Promise((resolve, reject) => {
30-
try {
31-
device.open();
32-
} catch (_e) {
33-
resolve("");
34-
}
3536
device.getStringDescriptor(index, (error, buffer) => {
3637
device.close();
37-
if (error) return reject(error);
38-
resolve(buffer.toString());
38+
if (error) {
39+
reject(new Error(error));
40+
} else {
41+
resolve(buffer.toString());
42+
}
3943
});
4044
});
4145
}
4246

43-
// Allow user to select a device
44-
function selectDevice(vendorID) {
45-
return new Promise((resolve, reject) => {
46-
let devices = usb.getDeviceList();
47-
devices = devices.filter(device => device.deviceDescriptor.idVendor === vendorID);
47+
// List all devices
48+
const getDevices = async (vendorID) => {
49+
let devices = usb.getDeviceList();
50+
devices = devices.filter(device => device.deviceDescriptor.idVendor === vendorID);
4851

49-
if (devices.length === 0) {
50-
return reject("No devices found");
51-
}
52+
for (device of devices) {
53+
device.name = await getStringDescriptor(device, device.deviceDescriptor.iProduct);
54+
}
5255

53-
common.inputEmitter.addListener("input", index => {
54-
if (index <= devices.length) resolve(devices[index - 1]);
55-
});
56-
57-
console.log("Select a device to read registers:");
58-
devices.forEach((device, index) => {
59-
getStringDescriptor(device, device.deviceDescriptor.iProduct)
60-
.then(name => {
61-
console.log(`${index + 1}: ${name}`);
62-
});
63-
});
64-
});
56+
return devices;
6557
}
6658

67-
selectDevice(0xD28)
68-
.then(device => {
69-
const transport = new DAPjs.USB(device);
70-
return common.readRegisters(transport);
71-
})
72-
.then(() => {
73-
process.exit();
74-
})
75-
.catch(error => {
76-
console.error(error.message || error);
77-
process.exit();
78-
});
59+
(async () => {
60+
try {
61+
const devices = await getDevices(common.DAPLINK_VENDOR);
62+
const device = await common.selectDevice(devices);
63+
const transport = new DAPjs.USB(device);
64+
await common.readRegisters(transport);
65+
} catch(error) {
66+
console.error(error.message || error);
67+
} finally {
68+
process.exit();
69+
}
70+
})();

examples/read-registers/webusb.js

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,37 +20,31 @@
2020
* SOFTWARE.
2121
*/
2222

23-
const USB = require("webusb").USB;
24-
const common = require("./common");
25-
const DAPjs = require("../../");
23+
const USB = require('webusb').USB;
24+
const common = require('./common');
25+
const DAPjs = require('../../');
2626

2727
// Allow user to select a device
28-
function handleDevicesFound(devices, selectFn) {
29-
common.inputEmitter.addListener("input", index => {
30-
if (index <= devices.length) selectFn(devices[index - 1]);
31-
});
28+
const devicesFound = async (devices) => {
29+
for (device of devices) {
30+
device.name = device.productName || device.serialNumber;
31+
}
3232

33-
console.log("Select a device to read registers:");
34-
devices.forEach((device, index) => {
35-
console.log(`${index + 1}: ${device.productName || device.serialNumber}`);
36-
});
33+
return common.selectDevice(devices);
3734
}
3835

39-
let usb = new USB({
40-
devicesFound: handleDevicesFound
41-
});
36+
const usb = new USB({ devicesFound });
4237

43-
usb.requestDevice({
44-
filters: [{vendorId: 0xD28}]
45-
})
46-
.then(device => {
47-
const transport = new DAPjs.WebUSB(device);
48-
return common.readRegisters(transport);
49-
})
50-
.then(() => {
51-
process.exit();
52-
})
53-
.catch(error => {
54-
console.error(error.message || error);
55-
process.exit();
56-
});
38+
(async () => {
39+
try {
40+
const device = await usb.requestDevice({
41+
filters: [{vendorId: common.DAPLINK_VENDOR}]
42+
})
43+
const transport = new DAPjs.WebUSB(device);
44+
await common.readRegisters(transport);
45+
} catch(error) {
46+
console.error(error.message || error);
47+
} finally {
48+
process.exit();
49+
}
50+
})();

0 commit comments

Comments
 (0)