Skip to content

Commit 39bac6b

Browse files
committed
macOS: Deal with larger device descriptors
1 parent d47c2bd commit 39bac6b

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

.github/workflows/continuous-integration.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ jobs:
2626
steps:
2727
- uses: actions/checkout@v3
2828
- name: Setup Java
29-
uses: oracle-actions/setup-java@v1
29+
uses: actions/setup-java@v3
3030
with:
31-
website: jdk.java.net
32-
release: '21'
33-
version: latest
31+
distribution: 'zulu'
32+
java-version: '21'
33+
cache: 'maven'
3434
- name: Configure GPG key
3535
run: |
3636
echo -n "$GPG_SIGNING_KEY" | base64 --decode | gpg --import

java-does-usb/src/main/java/net/codecrete/usb/macos/MacosUSBDevice.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import net.codecrete.usb.macos.gen.iokit.IOUSBFindInterfaceRequest;
1717
import net.codecrete.usb.usbstandard.ConfigurationDescriptor;
1818
import net.codecrete.usb.usbstandard.Constants;
19-
import net.codecrete.usb.usbstandard.DeviceDescriptor;
2019

2120
import java.io.InputStream;
2221
import java.io.OutputStream;
@@ -159,17 +158,21 @@ synchronized void closeFully() {
159158
private void loadDescription(MemorySegment device) {
160159
try (var arena = Arena.ofConfined()) {
161160

162-
var data = arena.allocate(DeviceDescriptor.LAYOUT.byteSize());
163-
var ret = IoKitUSB.DeviceRequest(device, createDeviceRequest(arena, USBDirection.IN, new USBControlTransfer(
161+
// retrieve device descriptor using synchronous control transfer
162+
var data = arena.allocate(255);
163+
var deviceRequest = createDeviceRequest(arena, USBDirection.IN, new USBControlTransfer(
164164
USBRequestType.STANDARD,
165165
USBRecipient.DEVICE,
166166
6, // get descriptor
167167
Constants.DEVICE_DESCRIPTOR_TYPE << 8,
168168
0
169-
), data));
169+
), data);
170+
var ret = IoKitUSB.DeviceRequest(device, deviceRequest);
170171
if (ret != 0)
171172
throwException(ret, "querying device descriptor failed");
172-
rawDeviceDescriptor = data.toArray(JAVA_BYTE);
173+
174+
var len = IOUSBDevRequest.wLenDone$get(deviceRequest);
175+
rawDeviceDescriptor = data.asSlice(0, len).toArray(JAVA_BYTE);
173176

174177
configurationValue = 0;
175178

0 commit comments

Comments
 (0)