Skip to content

i-evi/cmsg

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CMSG

CMSG 是遵从 ANSI C 规范实现的通信协议,原则上,CMSG 可以基于任何支持以流(stream)的形式操作的传输层,如串口,tcp,fifo 等。可以利用 CMSG 实现 IPC 或远程通信/调用。

                   /- serial port -\
data <-> CMSG <-> -|- tcp/udp/uds -| <-> CMSG <-> data
                   \-     ...     -/

CMSG 用于短数据的传输。CMSG 的单个数据包结构包括 length,type,data 和 sum 字段。它们分别是数据包的长度,数据包的类型,数据包的数据和校验和。

length | type | data | sum

length 是使用小端序存储的 8/16/32 位无符号整数,它表示整个数据包(包括 length,type,data 和 sum)的大小,可与通过CMSG_LEN_WIDTH控制。

type 是 8 位无符号整数,表示数据包的类型,其值由用户定义。

data 是数据包传输的数据,其内容由用户定义。

sum 是 8 位无符号整数,它是数据包的校验和(使用 BCC 校验)。

CMSG 是单头文件(single header)库,引入 cmsg.h 即可,在需要 API 实现的场合,应首先定义宏 CMSG_IMPL

通常,CMSG 是有应答机制的,即数据的发送方会受到接收方回复的数据,在基于 UDP 的通信场景下,发送端往往不要求接收端应答,通过定义宏 CMSG_NO_ACK 禁用 CMSG 的应答机制。

About

simple communication protocol

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages