Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

QuickDevelopers/flutter_ymodem

Open more actions menu

Repository files navigation

flutter_ymodem

support Android/iOS/Mac platform

Getting Started

The demo contains all the usage methods methodChannel or pigeon

iOS has been tested.

Android please you try again.

use

methodChannel

define

// define

var channel = const MethodChannel('com.flutter.guide.YModemChannel');

send ios/android data

// send ios/android data

channel.invokeMethod(
              "otaStart", {"fileName": state.fileName.value,"filePath":state.filePath.value, "otaStatus": q});

receive ios/android data

 receiveCallData(BuildContext context,BleModel model){
    channel.setMethodCallHandler((MethodCall call){
      var q = call.arguments["data"] ?? [];
      var current = call.arguments["current"] ?? 0;
      var total = call.arguments["total"] ?? 0;
      var msg = call.arguments['msg'] ?? "";

      // 打印q的值
      if(q != null){
        // ignore: avoid_print
        //print("q is write :"+Utils.instance.getTestHexArray(q));
        sendBleData(q);
        receiveChannelData(current, total, msg);

        // if(msg == "Finish"){
        //   //断开蓝牙
        //   disconnect(context, model);
        // }

      }else{
        Toast.toast(context,
            msg: "receive data error!",
            position: ToastPosition.bottom);
      }

      // 如果是停止ota
      if(msg == "stopOta"){
        //断开蓝牙
        disconnect(context, model);
      }
      return q;
    });
  }              

use pigeon

define

YmodemRequestApi api = YmodemRequestApi();

send data

YmodemResponse response = YmodemResponse();

    response.status = "otaBegin";

    api.getMessage(response);

receive data and send data

receiveData(BuildContext context,BleModel model,BluetoothCharacteristic character) async{

    await character.setNotifyValue(true);

    state.subscription = character.value.listen((event) {
      if(event.isNotEmpty) {
        //接收数据
        var q = Utils.instance.getOtaHexArray(event);
        // ignore: avoid_print
        print("q is :$q");
        // 开始的第一包
        if (q != "") {


          YmodemResponse response = YmodemResponse();

          response.filename = state.fileName.value;
          response.filepath = state.filePath.value;
          response.status = "otaStart";
          response.operate = q;
          response.start = true;
          response.stop = false;

          // send data
          YmodemRequest request = api.getMessage(response) as YmodemRequest;

          var qq = request.data as List<int>;
          var current = request.current;
          var total = request.total;
          var msg = request.msg;

          // 打印q的值
          if(qq.isNotEmpty){
            // ignore: avoid_print
            print("q is write :${Utils.instance.getTestHexArray(qq)}");
            sendBleData(qq);
            receiveChannelData(current!, total!, msg!);

          }else{
            Toast.toast(context,
                msg: "receive data error!",
                position: ToastPosition.bottom);
          }

          // if stop ota , only use ios/macos
          if(msg == "stopOta"){
            //断开蓝牙
            disconnect(context, model);
          }
        }
      }
    });
  }

update July 8 2022

  1. modify iOS params error

update July 7 2022

  1. Add macOS

  2. Add pigeon

    please check logic_pigeon.dart code

update july 6 2022

  1. Data transfer between Android and IOS via MethodChannel has been completed
  2. Please check the code for details

About

this is flutter_ymodel

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.