Skip to content

Commit

Permalink
Initial tests to permit write in devices properly
Browse files Browse the repository at this point in the history
  • Loading branch information
mapaiva committed Oct 21, 2016
1 parent 16da90f commit 80bb32b
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 6 deletions.
12 changes: 12 additions & 0 deletions UsbSerialDevice.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@

export default class UsbSerialDevice() {

constructor(UsbSerialModule, UsbSerialDevNativeObject) {
this.UsbSerialModule = UsbSerialModule;
this.UsbSerialDevNativeObject = UsbSerialDevNativeObject;
}

write(value = "") {
return UsbSerialModule.writeInDeviceAsync(UsbSerialDevNativeObject.id, value);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,12 @@
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;

public class ReactUsbSerialModule extends ReactContextBaseJavaModule {

private final HashMap<String, UsbSerialDevice> usbSerialDriverDict = new HashMap<>();

public ReactUsbSerialModule(ReactApplicationContext reactContext) {
super(reactContext);
}
Expand Down Expand Up @@ -73,7 +76,7 @@ public void openDeviceAsync(ReadableMap deviceObject, Promise p) {
UsbSerialDriver driver = getUsbSerialDriver(prodId, manager);

if (manager.hasPermission(driver.getDevice())) {
UsbSerialDevice usd = createUsbSerialDevice(manager, driver);
UsbSerialDevNativeObject usd = createUsbSerialDevice(manager, driver);

p.resolve(usd);
} else {
Expand All @@ -85,7 +88,27 @@ public void openDeviceAsync(ReadableMap deviceObject, Promise p) {
}
}

private UsbSerialDevice createUsbSerialDevice(UsbManager manager, UsbSerialDriver driver) throws IOException {
@ReactMethod
public void writeInDeviceAsync(String deviceId,
String value,
Promise p) {

try {
UsbSerialDevice usd = usbSerialDriverDict.get(deviceId);

if (usd == null) {
throw new Exception(String.format("No device opened for the id '%s'", deviceId));
}

usd.writeAsync(value, p);
} catch (Exception e) {
p.reject(e);
}
}

private UsbSerialDevNativeObject createUsbSerialDevice(UsbManager manager,
UsbSerialDriver driver) throws IOException {

UsbDeviceConnection connection = manager.openDevice(driver.getDevice());

// Most have just one port (port 0).
Expand All @@ -94,10 +117,18 @@ private UsbSerialDevice createUsbSerialDevice(UsbManager manager, UsbSerialDrive
port.open(connection);
port.setParameters(115200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);

return new UsbSerialDevice(port);
String id = generateId();
UsbSerialDevice usd = new UsbSerialDevice(port);

// Add UsbSerialDevice to the usbSerialDriverDict map
usbSerialDriverDict.put(id, usd);

return new UsbSerialDevNativeObject(id);
}

private void requestUsbPermission(UsbManager manager, UsbDevice device, Promise p) {
private void requestUsbPermission(UsbManager manager,
UsbDevice device,
Promise p) {

try {
ReactApplicationContext rAppContext = getReactApplicationContext();
Expand Down Expand Up @@ -157,7 +188,7 @@ public void onReceive(Context context, Intent intent) {
UsbManager manager = getUsbManager();

try {
UsbSerialDevice usd = createUsbSerialDevice(manager,
UsbSerialDevNativeObject usd = createUsbSerialDevice(manager,
getUsbSerialDriver(device.getProductId(), manager));

p.resolve(usd);
Expand All @@ -183,4 +214,8 @@ public void onReceive(Context context, Intent intent) {
private void unregisterReceiver(BroadcastReceiver receiver) {
getReactApplicationContext().unregisterReceiver(receiver);
}

private String generateId() {
return UUID.randomUUID().toString();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.bmateam.reactnativeusbserial;

import com.facebook.react.bridge.WritableNativeMap;

public class UsbSerialDevNativeObject extends WritableNativeMap {

public UsbSerialDevNativeObject(String id) {
super();

this.putString("id", id);
}
}
5 changes: 4 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
Platform,
NativeModules
} from 'react-native';
import UsbSerialDevice from './UsbSerialDevice';

const UsbSerialModule = NativeModules.UsbSerial;

Expand All @@ -20,7 +21,9 @@ class UsbSerial {
}

openDeviceAsync(deviceObject = {}) {
return UsbSerialModule.openDeviceAsync(deviceObject);
const usbSerialDevNativeObject = await UsbSerialModule.openDeviceAsync(deviceObject);

return new UsbSerialDevice(UsbSerialModule, usbSerialDevNativeObject);
}
}

Expand Down

0 comments on commit 80bb32b

Please sign in to comment.