cordovarduino icon indicating copy to clipboard operation
cordovarduino copied to clipboard

File Transfer

Open ndvalkov opened this issue 10 years ago • 7 comments

Hello,

Can I use the plugin to transfer files over RS232?

So far I just got to fetching a file object from a file input, making conversions to hexstring and passing it as a parameter to the writeHex() method, but I doubt that will work. I thought about using some javascript libs for binary data, or implementing xmodem file transfer protocol with java for possible solutions.

ndvalkov avatar Oct 21 '14 17:10 ndvalkov

You could, but it will be slow. Really slow.

etx avatar Oct 21 '14 19:10 etx

What about a separate cordova plugin with an xmodem implementation like this one?

https://code.google.com/p/roboworkbench/source/browse/trunk/uk.co.dancowan.robots.hal/src/uk/co/dancowan/robots/hal/core/XModem.java?r=245

I noticed it uses java.io libraries, vs java.nio in this plugin. And I guess it has to be compatible with the usb-serial-for-android drivers library.

I am not gonna be the one to write it, I'm just interested if you have any idea if it's doable or not.

ndvalkov avatar Oct 22 '14 09:10 ndvalkov

Hi,

Nice idea, as far I can see, the code sample is almost "plug and play", I suspect getChar and putCahr to be the only things to adapt to use the opened port.

Since I have no idea on how to handle file transfer in the arduino/whatever side, I'm not sure how to implement it.

Regards,

Xavier

xseignard avatar Oct 22 '14 10:10 xseignard

OK. Thanks.

ndvalkov avatar Oct 23 '14 08:10 ndvalkov

Hello,

Everyone is busy, so I decided to to add the XMODEM functionality to your plugin, instead of writing a separate one.

However, that particular implementation I shared seems a bit strange. For one, there's a broken while loop, at line 52, that should be do..while. There's a label for nested loops, that I think is unnecessary. So I abandoned it. Decided to reimplement the functionality, given in this example from stackoverflow.

http://stackoverflow.com/questions/606074/implementation-of-x-modem-protocol-in-java

He tends to name variables of type DataInputStream 'foo', but apart from that I think it is ok.

I added it to the plugin Java source, made the necessary adjustments.

But I've been having difficulties with the getchar() and putchar() methods. I have some sample Delphi xmodem from an old app, that sends the handshaking commands(NAK, ACK..) the way it sends standard command through serial. So I tried with the standard port.write() port.read(). I menaged to receive the content of a file, and get some (false)handshake response, but in some rare, uncontrolled, cases. Very far from a decent implementation.

Do you have any idea if I need to use inStream.read()/outStream.write() as given in the example?

Here's an app that uses the "usb-serial-for-android" library, and the guy has added some classes to the lib:

https://learn.adafruit.com/smart-cocktail-shaker/usb-communication

"Added an InputStream and OutputStream implementation to better integrate the USB serial device with other Java classes."

Here's the code, if you want to check it out:

https://gist.github.com/ndvalkov/738cf450097d08aa67b0

Thank you.

ndvalkov avatar Nov 19 '14 15:11 ndvalkov

Hi @ndvalkov,

I would love to try it, but I'm lacking time right now, and I think I don't have the matching devices.

Or maybe an arduino+sd shield would do the trick? If so please provide any info you have in order to be able to setup a test case on my side.

Regards,

Xavier

xseignard avatar Dec 02 '14 09:12 xseignard

I don't know. Still can't do it, and I started considering alternative options.

ndvalkov avatar Dec 04 '14 13:12 ndvalkov