# YModemForAndroid **Repository Path**: yudexi/YModemForAndroid ## Basic Information - **Project Name**: YModemForAndroid - **Description**: A ymodem implementation that suitable for android to transmit data with BLE devices. - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 3 - **Created**: 2018-10-30 - **Last Updated**: 2024-11-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # YModemForAndroid YModem For Android is a library that easy to transmit file data with some terminal devices like BloothLE using [ymodem protocol](https://en.wikipedia.org/wiki/YMODEM). ## Notice Though suitable, this library doesn't supply a ble component for transmitting data with terminal, it's your responsibility to encapsulate your own. ## Get Started Supported URI formats: ``` "file:///storage/emulated/0/filename.bin" // from SD card "assets://image.png" // from assets ``` ### Initiation ``` java ymodem = new YModem.Builder() .with(this) .filePath("assets://demo.bin") .fileName("demo.bin") .checkMd5("lsfjlhoiiw121241l241lgljaf") .callback(new YModemListener() { @Override public void onDataReady(byte[] data) { //send this data[] to your ble component here... } @Override public void onProgress(int currentSent, int total) { //the progress of the file data has transmitted } @Override public void onSuccess() { //we are well done with md5 checked } @Override public void onFailed(String reason) { //the task has failed for several times of trying } }).build(); ``` ### Start transmission ``` java ymodem.start(); ``` ### Received data from terminal When you received response from the ble terminal, tell ymodem to handle it: ``` java ymodem.onReceiveData(data); ``` The param data should be byte array. ### Stop ``` java ymodem.stop(); ``` Just enjoy it! ## About The concrete ymodem protocol implemented in this library: ``` * MY YMODEM IMPLEMTATION * *SENDER: ANDROID APP *------------------------------------------* RECEIVER: BLE DEVICE* * HELLO BOOTLOADER ---------------------------------------------->* * <---------------------------------------------------------------* C * SOH 00 FF filename0fileSizeInByte0MD5[90] ZERO[38] CRC CRC----->* * <---------------------------------------------------------------* ACK C * STX 01 FE data[1024] CRC CRC ---------------------------------->* * <---------------------------------------------------------------* ACK * STX 02 FF data[1024] CRC CRC ---------------------------------->* * <---------------------------------------------------------------* ACK * ... * ... *
* STX 08 F7 data[1000] CPMEOF[24] CRC CRC ----------------------->* * <---------------------------------------------------------------* ACK * EOT ----------------------------------------------------------->* * <---------------------------------------------------------------* ACK * SOH 00 FF ZERO[128] ------------------------------------------->* * <---------------------------------------------------------------* ACK * <---------------------------------------------------------------* MD5_OK ``` ## Reference [Wikipedia YMODEM](https://en.wikipedia.org/wiki/YMODEM) [xmodem、ymodem、zmodem](http://web.cecs.pdx.edu/~rootd/catdoc/guide/TheGuide_226.html) [aesirot ymodem on github](https://github.com/aesirot/ymodem) ## License MIT