littlebot
Published on 2025-04-13 / 3 Visits
0

【源码】基于C语言的基础小消息协议通信项目

项目简介

本项目是基于 bsmp(基础小消息协议)库的应用项目,用于串行通信网络中设备的状态监控和控制。bsmp 是无状态、同步且轻量级的协议,专为小型嵌入式设备的串行通信网络设计,网络中有一个主设备。该协议处理变量、组、曲线和函数四种简单实体,能完成简单的数据交换任务,如读写设备的变量、曲线和函数等。

项目的主要特性和功能

  1. 实体管理:支持对变量、组、曲线和函数四种实体的管理。变量可读写或只读,组可批量读写变量,曲线可看作大容量变量,函数可实现远程过程调用。
  2. 客户端 - 服务器通信:包含客户端和服务器的实现,客户端负责发送请求并接收响应,服务器负责处理请求并返回结果。
  3. 错误处理:提供静态错误字符串数组和错误字符串函数,用于错误处理和调试信息输出。
  4. 数据加密:实现了MD5加密算法,用于数据的加密和校验,确保数据的安全性和完整性。

安装使用步骤

安装

假设已下载本项目的源码文件,安装 libbsmp 库,只需在项目根目录下执行以下命令: sh make sudo make install

使用

服务器端

构建服务器时的基本调用顺序如下: ```c

include // 包含所有必要函数的头文件

bsmp_server_t srv; // 服务器实例 bsmp_server_init(&srv); // 初始化实例

// 创建一个函数,用于在读取前和写入后进行干预(可选) void hook(enum bsmp_operation op, struct bsmp_var **list) { // 实现具体逻辑 }

bsmp_register_hook(&srv, hook); // 向服务器注册钩子函数

struct bsmp_var v = {...}; // 创建一个变量 bsmp_register_var(&srv, &v); // 向服务器注册变量

// 同样的方式处理 bsmp_curve 和 bsmp_function

// 一旦所有实体都注册完毕,进入循环处理消息 for(;;) { // 接收消息到 bsmp_raw_packet(这里是 recv_pkt) bsmp_process_packet(&srv, &recv_pkt, &send_pkt); // 发送响应消息(这里是 send_pkt) } ```

客户端

客户端的基本调用顺序如下: ```c

include // 包含所有必要函数的头文件

bsmp_client_t cli; // 客户端实例 bsmp_client_init(&cli, send_func, recv_func); // 初始化实例

// 获取服务器中的所有实体 struct bsmp_var_info_list *vars; bsmp_get_vars_list(&cli, &vars);

struct bsmp_group_list *groups; bsmp_get_groups_list(&cli, &groups);

struct bsmp_curve_info_list *curves; bsmp_get_curves_list(&cli, &curves);

struct bsmp_func_info_list *funcs; bsmp_get_funcs_list(&cli, &funcs);

// 操作实体

// 读取第一个变量 struct bsmp_var_info *first_var = &vars->list[0]; uint8_t first_var_value[first_var->size]; bsmp_read_var(&cli, first_var, first_var_value);

// 写入第一个变量 first_var_value[0] = 0x42; bsmp_write_var(&cli, first_var, first_var_value);

// 查看头文件以了解如何操作其他实体(组、曲线和函数) `` 此外,项目中examples/full_example` 文件夹提供了一个功能完整且有注释的示例,可参考该示例进行开发。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】