关于2.0蓝牙设备的空中升级

首先针对2.0的蓝牙设备对于数据的传送很有局限,每次只能传输20个字节,如果传输大数据还会特别不稳定,所以关于固件升级,能不通过蓝牙升级就不要通过蓝牙升级,但是有时候必须实现这种需求,就没办法,一定得入坑去研究了,最近在做的一个项目,设备需要两个空中升级的功能,一个是给CPU芯片软件升级,一个是给蓝牙芯片软件升级,但是升级方式是相同的,下面是一些示例代码:

首先还是得读懂文档看明白如何通信

1,有关蓝牙的配对连接请参考https://github.com/dingjikerbo/BluetoothKit  这个库对于蓝牙连接配对描述的很详细,也很好用。首先是蓝牙连接:

private void connectDevice() {

BleConnectOptions options =new BleConnectOptions.Builder().setConnectRetry(3).setConnectTimeout(10000).setServiceDiscoverRetry(3)

.setServiceDiscoverTimeout(10000).build();

  ClientManager.getClient().connect(mBluetoothDevice.getAddress(), options, new BleConnectResponse() {

@Override

      public void onResponse(int code, BleGattProfile profile) {

hideConnectDialog();

        if (code ==REQUEST_SUCCESS) {

mBluetoothDetailInfo =null;

            //mCustomToast.ShowToast(R.string.connect_success);

            if(mHandler !=null && profile !=null){

Listservices = profile.getServices();

              for (BleGattService service :services) {

if(Constant.BULETOOTH_SERVICE_UUID.equalsIgnoreCase(service.getUUID().toString())) {

Listcharacters =service.getCharacters();

                    for (BleGattCharacter character :characters) {

if(Constant.BULETOOTH_CHARACTER_UUID.equalsIgnoreCase(character.getUuid().toString())){

mBluetoothDetailInfo =new BluetoothDetailInfo();

                          mBluetoothDetailInfo.setBlueName(mBluetoothDevice.getName());

                          mBluetoothDetailInfo.setBlueMac(mBluetoothDevice.getAddress());

                          mBluetoothDetailInfo.setType(BluetoothDetailInfo.TYPE_CHARACTER);

                          mBluetoothDetailInfo.setCharacterUuid(character.getUuid());

                          mBluetoothDetailInfo.setServiceUuid(service.getUUID());

                          break;

                        }

}

break;

                  }

}

mHandler.sendEmptyMessage(ENTER_SATELLITE_ACTIVITY);

            }

}else{

mCustomToast.ShowToast(R.string.connect_failed);

        }

}

});

}

2,连接成功之后开始升级,

第一步:获取bin文件的长度,从服务器下载下来一般都存在sd卡中

public static int getCpuBinLength(String name) {

int length =0;

  try {

File file =new File(Constant.FILE_PATH,name);

      FileInputStream is =new FileInputStream(file);

      length =is.available();

      is.close();

  }catch (IOException e) {

e.printStackTrace();

  }

return length;

}

第二步,开始组装数据,我的项目通信协议是吧数据转成byte进行传输,//下面方法是读取指定长度的byte数据

public static byte[]getBleBinToByte(String name, long start, int len,int allLength ) {

try {

File file =new File(Constant.FILE_PATH,name);

      if (file.exists()&&len>0){

//拿出bin文件

FileInputStream inputStream =new FileInputStream(file);

//读到指定长度

        long curPos =inputStream.skip(start);

//判断最后一个数据是否满足指定的len,不够的话不用0补齐,剩下多少使用多少

        if ((curPos+len)>allLength){

len= (int) (allLength-curPos);

        }

byte[]bytes =new byte[len];

//从流中独处文件,转成byte

        inputStream.read(bytes);

        inputStream.close();

        if (start ==curPos)

{

return bytes;

        }

}

}catch (IOException e) {

e.printStackTrace();

  }

return null;

}

第三步:拿出指定长度的bin文件并转化成byte数组之后就可以进行发送了,在发送过程中对传输失败,以及超时未返回都要做相应的重发处理,但是不能无限制的重发,一般重发十次就可以了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,369评论 0 4
  • 一、流的概念和作用。 流是一种有顺序的,有起点和终点的字节集合,是对数据传输的总成或抽象。即数据在两设备之间的传输...
    布鲁斯不吐丝阅读 10,023评论 2 95
  • 慢慢的去学会不要太在乎别人对自己的看法,特别的无礼的语言,不尊重自己的语言都不要去在乎。不要害怕自己会说错什么,人...
    幸福空间阅读 573评论 0 1
  • 今天是教师节,本该放松一下,轻松美美的过一天。可我并不快乐,觉得很累很辛苦,最近孩子过敏哮喘,属于地区病,一到秋季...
    李旭玲的后花园阅读 166评论 2 5
  • 难忘的回忆 易霖 努力不一定成功,但唯有努力才能获得成功 ------题记 偶然路过湖边,看见三三两两的人在湖...
    易霖阅读 189评论 0 1