2025-04-23 14:25:35 +08:00
2025-04-23 14:25:35 +08:00
2024-01-25 13:11:24 +08:00
2024-07-10 17:21:16 +08:00

IRIS通讯协议 V1.0

帧格式:

帧头 命令类型 长度 Data Check
0x55 0xAA Command 1字节 两字节 Data crc校验 2字节
  • 帧头固定的0x55 0xAA 两个字节
  • 命令类型:一个字节
    • 0x01: 命令为字符串 即Data要转换为字符串
    • 0x00: 命令为json数据应用json解析Data
    • 0x02-0xff:自定义二进制通讯数据Data的解析应改按照Communication_Protocol中约定进行
  • 长度Data的长度
  • Check:Data的 CRC校验 算法在Communication_Protocol提供了如果Data过长光谱数据可以不计算但是得提供此时提供内容为0xEE 0xEE
  • 均采用小端方式存储

json 定义

json定义比较灵活 但是根对象必须提供如下:

  • command: 命令名称

  • PA:命令参数 //可选

    返回时应提供相应状态

  • STOK //可选

发送示例:

{
	"command":"SetCamerTime",
	"PA":{
		"time1":1000,
		"time2":1000
	},
	"Other":"自己定义"
}

接收示例

{
	"command":"SetCamerTime",
	"Other":"自己定义",
	"ST":"OK"
}

Communication_Protocol.h及.c

该文件主要定义了命令的名称 以#define方式进行。并且在末尾提供了一些通用函数 如下

#ifndef COMMUNICATION_PROTOCOL_H
#define COMMUNICATION_PROTOCOL_H


#include <stdint.h>
#include <Communication_struct.h>
// DEFINE The protocol Here
//Forexample
//  #define MYCOMAN 0x02  //命令全大写
// todo : define your protocol here
/*-------------------------------------------------------------------------------------------------------------*/











/*-------------------------------------------------------------------------------------------------------------*/
/*
在此之下开始定义一些函数




*/
#define ERROR_NOT_ENOUGH_DATA -200
#define ERROR_HEADER -300
#define ERROR_COMMAND -400
#define ERROR_INPUT -500
#define ERROR_CRC -600


// 成功返回打包后的数据长度
// -1: Error
// 成功返回打包后的数据长度
int32_t IRIS_Protocol_Pack(uint8_t Command,uint16_t LenthofIn, uint8_t *BufferIn, uint8_t *PackData);

// 解包函数 PackData 是接收到的数据 LenthofIn 是数据长度 Command 是命令 BufferOut 是输出
// 下位机使用的打包函数 Command 是输出
// 成功返回解包后的数据长度 
// 0: 该命令返回无参数
// 错误返回ERRor
// 成功返回解包后的数据长度
int32_t IRIS_STM32_Protocol_Unpack(uint8_t *PackData, uint16_t LenthofIn, uint8_t *Command, uint8_t *BufferOut);

// 解包函数 PackData 是接收到的数据 LenthofIn 是数据长度 Command 是命令输入 BufferOut 是输出 上位机使用
// 成功返回解包后的数据长度
// 0: 该命令返回无参数
// 错误返回ERRor
// 成功返回解包后的数据长度
int32_t IRIS_Protocol_Unpack(uint8_t *PackData, uint16_t LenthofIn, uint8_t Command, uint8_t *BufferOut);

// 定义裁切命令
// 成功返回裁切后的数据长度 
// -1: Error
int32_t IRIS_Cut_Befor_Header(uint8_t *PackData, uint16_t LenthofIn );

// 检查数据是否有效
// 有效返回值1 
// 错误返回ERRor
int32_t IRIS_Check_Data_Valid(uint8_t *PackData, uint16_t LenthofIn );


// 返回CRC校验值
uint16_t IRIS_calcCRC(const void *pBuffer, uint16_t bufferSize);
#endif

Communication_struct.h

该文件主要定义了命令相关参数部分的定义 所有参数都应该以结构体定义 无需参数的不定义 具体如下

#ifndef COMMUNICATION_STRUCT_H
#define COMMUNICATION_STRUCT_H

// Define your communication structures here
// For example:
/*
如果发送和接受的数据结构一样,那么就定义一个结构体
struct MyComan_struct //对应的命令结构体 小驼峰命名法+struct
{
    uint8_t Command;
    uint16_t LenthofIn;
};



如果发送和接受的数据结构不一样,那么就分开定义
struct MyComan_Send_struct //对应的命令结构体 小驼峰命名法+Send_struct
{
    uint8_t Command;
    uint16_t LenthofIn;

};

struct MyComan_Recv_struct //对应的命令结构体 小驼峰命名法+Recv_struct
{
    uint8_t Command;
    uint16_t LenthofOut;

};
*/



#endif // COMMUNICATION_STRUCT_H

Description
No description provided
Readme 51 KiB
Languages
C++ 56.2%
C 43.8%