rubybashserial-portxmodem

Automate xmodem file upload


I have a device where a software update is done by uploading a file through xmodem.

I was able to do this in two ways using the lrzsz (http://ohse.de/uwe/software/lrzsz.html) package.

1) Using screen

screen /dev/tty.myserialdevice 115200

and then

^A:exec !! sz -X file.bin

or

2) Using cu

cu -l /dev/tty.myserialdevice -s 115200

and then

~+lsz -X file.bin

Now I would like to write a script (preferably a ruby or a bash script) to automate the file upload.

Is there a way to pipe the file into screen or cu or use standard input? When I tried to write a script I only got to the point of opening a connection. But even then I had problems to properly close this connection again.


Solution

  • Not sure if you are still having this problem, but I just recently had to piece together something for a similar situation.

    I used screen to automate this portion, as it has some command line options to run in the background. First, I create a detached screen session, like this:

        screen -d -m /dev/tty.myserialdevice 115200
    

    Then, I can reference my created session with the -p0 option, and give it a command to execute with -X, which in this case is a command to screen itself to start an xmodem file transfer.

        screen -p0 -X exec \!\! sz -X filetosend
    

    I had noticed in other places on the web that .\!\! was also sometimes used, so keep this in mind to try if you still have problems.