mapaiva / react-native-usbserial

A USB serial React Native bridge
MIT License
57 stars 35 forks source link

Read data from serial #7

Open nightmareindustries opened 7 years ago

nightmareindustries commented 7 years ago

Hello,

Are you planning on implementing serial read as well? It would make the library extremely useful and complete.

Thanks for your great work

stefan-beyer commented 6 years ago

How about just giving the port.read() method a fixed buffer? Or we specify the buffersize via param. The following code is completely untested:

    private static final int READ_BUFFER_SIZE = 256;
    ...
    public void readAsync(Promise promise) {
        if (port != null) {
            byte[] buffer = new byte[READ_BUFFER_SIZE];
            try {
                int bytesRead = port.read(buffer, SERIAL_TIMEOUT);
                String byteString = new String(buffer, 0, bytesRead);
                promise.resolve(byteString);
            } catch (IOException e) {
                promise.reject(e);
            }
        } else {
            promise.resolve(getNoPortErrorMessage());
        }
    }
wil93 commented 6 years ago

I studied the source code of this project a little bit and it looks like, for writing data, it just calls this:

return this.UsbSerialModule.writeInDeviceAsync(this.id, value);

Is it much harder to change this to 'read'? What exactly needs to be done to support reading from serial?

gabrielhpugliese commented 6 years ago

Hi guys, have anyone implemented it already? I'm willing to pay for it if needed.

GreenGI commented 6 years ago

Hey, yeah, we have a working fork for reading data. Nothing pretty, but it gets the job done: https://github.com/edvijaka/react-native-usbserial

gabrielhpugliese commented 6 years ago

Hey @GreenGI thank you. Is this usage correct?

        DeviceEventEmitter.addListener('newData', (e) => {
          console.log('newData', e);
        });
GreenGI commented 6 years ago

Basically - yes. This is how I use it on a component after mounting it:

componentWillMount() {
  this.getDeviceAsync().then(device => {
    if (device) {
      DeviceEventEmitter.addListener('newData', (e) => {
        console.log('newData', e);
      });
      this.readDevice(device.id);
    }
  });
}

getDeviceListAsync = () => {
  return UsbSerialModule.getDeviceListAsync();
};

readDevice = (id) => {
  UsbSerialModule.readDeviceAsync(id);
};
omatrot commented 5 years ago

Hi @GreenGI ! Is the code above still working in your fork? Could you provide the code for getDeviceAsync()? Thanks in advance.