中移物联4G-Cat.1模组ML302开发 | OpenCpu开发 | 自定义OTA功能

1、实现方案

在这里插入图片描述

2、制作差分包

1)差分包制作工具获取

百度网盘链接:https://pan.baidu.com/s/1pxNF7HJLKV43s1ZkpTpfow
提取码:owdj

2)生成差分包

  • 解压文件
  • 打开【开始】——》进入【命令提示符】——》进入到解压后的文件目录下——》txt文件中的指令
  • 最后得到的bin文件就是生成的差分包文件
    在这里插入图片描述

3、升级流程

1)将生成的bin文件上传到http服务器上,获取http的url

void cm_test_http2(char *fota_url)
{
	//HTTP client结构体
    httpclient_t client = {0};
	//HTTP client数据
    httpclient_data_t client_data = {0};
	//错误返回值
    HTTPCLIENT_RESULT ret = HTTPCLIENT_ERROR_CONN;
	//HTTP 响应数据缓冲区指针
    char *buf = NULL;
	//分配响应数据内存
    buf = malloc(CM_HTTP_RECV_SIZE);
	//如果分配失败,则退出
    if (buf == NULL) 
    {
        cm_printf("Malloc failed.\r\n");
		free(buf);
        return;
    }
	//清空缓冲区
    memset(buf, 0, sizeof(buf));
	//将缓冲区指针注册到数据结构体中
    client_data.response_buf = buf;  //Sets a buffer to store the result.
    cm_printf("start http test\n");
	//响应数据缓冲区长度
    client_data.response_buf_len = CM_HTTP_RECV_SIZE;  //Sets the buffer size.
    cm_printf("start connect\n");
	//启动连接
    ret = httpclient_connect(&client, fota_url);
	//如果连接成功
    if (ret == HTTPCLIENT_OK) {
		//发送GET请求
        cm_printf("start send request\n");
        ret = httpclient_send_request(&client, fota_url, HTTPCLIENT_GET, &client_data);
		//如果请求成功
        if (ret == HTTPCLIENT_OK) {
            cm_printf("start recv\n");
			//开始接收数据
            ret = httpclient_recv_response(&client, &client_data);
            // 删除之前保存的文件
            delete_file("/fota/fota.pack");
            // 将获取到的bin文件进行保存
            write_fota_file(client_data.response_buf, client_data.content_block_len);
            osDelay(50);
            // 触发升级,若返回0,则表示升级失败
            cm_fota_update();
        }
		else
		{
			cm_printf("send request fail,ret=%d\n",ret);
		}
    }
	else
	{
		cm_printf("connect fail,ret=%d\n",ret);
	}
    cm_printf("close\n");
	//关闭连接
    httpclient_close(&client);
	//释放缓冲区
	free(buf);
}

2)操作文件系统,将bin文件保存

// 将bin文件进行保存
void write_fota_file(unsigned char *message, unsigned int len)
{
	//先创建文件夹,否则创建文件可能会失败
	cm_fs_mkdir("/fota/");
	//创建文件并写入内容
	create_fota_file("/fota/fota.pack", message, len);
	
}

//创建文件并写入内容
void create_fota_file(char *file, unsigned char *message, unsigned int fota_data_len)
{
    int fd;
    int ret;
	//打开或创建测试文件
   //  fd = cm_fs_fopen("/param_config/param_config.txt",O_CREAT|O_RDWR);
	fd = cm_fs_fopen(file, O_CREAT | O_RDWR);
	//如果出错则退出
    if(fd < 0)
    {
        cm_printf("[FWRITE]file open failed\n");
        return;
    }
	//写入指定内容到文件内
    ret = cm_fs_fwrite(fd, message, fota_data_len);
	//如果出错,关闭文件后退出
	if(ret <0)
	{
		cm_printf("[FWRITE]file write failed\n");
		cm_fs_fclose(fd);  
		return;
	}
    cm_printf("[FWRITE]file write ok\n");
	//将缓冲写入到Flash
    cm_fs_fflush(fd);
	//关闭文件
    cm_fs_fclose(fd);
}

// 删除文件
void delete_file(char *file)
{
	// 返回0表示删除成功
    cm_printf("delete:%d\n",cm_fs_fdelete(file));
}

4、注意事项

  • 做 OTA 功能前,需要明确 SDK 的版本,每个版本的实现方式存在差异
  • 具体的版本还需要跟中移物联的技术支持获取
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值