?? recv.h
字號(hào):
/******************************************************************************
* 頭文件名: recv.h *
******************************************************************************/
# ifndef __RECV_H__
# define __RECV_H__
/* 加載頭文件 */
# include "mcubas.h"
# include "lowlevel.h"
# define CMSioLeadLenMin 2 // 有效包至少有2個(gè)字節(jié)的引導(dǎo)字(丟1個(gè)FF)
# define CMSioLeadLen 3 // 正常情況下每個(gè)有效包有3個(gè)字節(jié)的引導(dǎo)字
# define CMSioLeadLenMax 4 // 有效包最多有4個(gè)字節(jié)的引導(dǎo)字(CRC2=FF)
/* 工作包類型 */
# define CMSioTypeUrgencyStop 0x01 // 接收包的類型為"緊急停車",未用!
# define CMSioTypeEmpty 0x00 // 接收包的類型為"空包"
# define CMSioTypeCtrlData 0x05 // 接收包的類型為"普通級(jí)控制數(shù)據(jù)"
# define CMSioTypeSetCurrent 0x06 // 接收包的類型為"閥電流設(shè)置"
# define CMSioTypeSetOilFlow 0x07 // 接收包的類型為"油泵排量電壓設(shè)置"
/* 調(diào)試包類型 */
# define CMSioTypeDebug 0x0D // 接收包的類型為"調(diào)試"
# define CMSioTypeDebugNoCRC 0xDC // 接收包的類型為"無CRC調(diào)試"
/* 接收包的第4個(gè)字節(jié):類型+序列 */
typedef union {
unsigned char sort;
struct {
unsigned char sern :4; // 低4位:序列
unsigned char type :4; // 高4位:類型
} types;
} SioPackHeadType;
/* 接收包的第17-18個(gè)字節(jié):CRC1+CRC2 */
typedef unsigned int SioPackCRC;
/* 接收包的第1-6個(gè)字節(jié) */
typedef struct {
unsigned char lead[CMSioLeadLen]; // 3個(gè)字節(jié)的包頭
SioPackHeadType type; // 1個(gè)字節(jié)的包類型+序列
unsigned int addr; // 2個(gè)字節(jié)的地址碼
} SioPackHead;
/* 接收包包頭部分的長(zhǎng)度 */
# define SioPackHeadLen sizeof(SioPackHead)
/* 接收到的數(shù)據(jù)控制包中的開關(guān)量控制信息,1有效 */
typedef union {
unsigned char byte;
struct {
unsigned char PumpBac :1; // bit0:反泵
unsigned char VSpeed :1; // bit1:快慢速
unsigned char EngOff :1; // bit2:發(fā)動(dòng)機(jī)熄火
unsigned char PumpRun :1; // bit3:泵送啟動(dòng)
unsigned char RPMInc :1; // bit4:RPM+
unsigned char RPMDec :1; // bit5:RPM-
unsigned char EFlute :1; // bit6:電笛
unsigned char PumpFor :1; // bit7:正泵
} sw;
} PackCtrlDatSwMSG;
/* 接收到的數(shù)據(jù)控制包中的控制信息 */
typedef struct {
// <b7> -- -- arm5 arm4 arm3 arm2 arm1 turn <b0>
unsigned char dirUp; // 標(biāo)志6路閥向上扳動(dòng)的狀態(tài),1有效
// <b7> -- -- arm5 arm4 arm3 arm2 arm1 turn <b0>
unsigned char dirDn; // 標(biāo)志6路閥向下扳動(dòng)的狀態(tài),1有效
// [0] turn arm1 arm2 arm3 arm4 arm5 flow [6]
unsigned char val[7]; // 7路模擬量的A/D轉(zhuǎn)換數(shù)值
PackCtrlDatSwMSG sw; // 標(biāo)志各開關(guān)量的狀態(tài)
} PackCtrlDatMSG;
/* 接收到的數(shù)據(jù)控制包 */
typedef struct {
SioPackHead head; // 包頭部分
PackCtrlDatMSG dat; // 控制數(shù)據(jù)部分
SioPackCRC crc; // CRC校驗(yàn)碼
} SioPackCtrlDat;
/* 接收到的閥電流設(shè)置包 */
typedef struct {
SioPackHead head; // 包頭部分
unsigned char cmd; // 指令:增大or減小or保存
unsigned char arm; // 臂號(hào):旋轉(zhuǎn)or1臂or2臂or3臂or4臂or5臂
unsigned char dir; // 方向:向上or向下
unsigned char lim; // 范圍:(設(shè)置)上限or下限
unsigned char res[6]; // 保留字節(jié)
SioPackCRC crc; // CRC校驗(yàn)碼
} SioPackSetCurrent;
/* 接收到的油泵排量電壓設(shè)置包 */
typedef struct {
SioPackHead head; // 包頭部分
unsigned char cmd; // 指令:增大or減小or保存
unsigned char lim; // 范圍:(設(shè)置)上限or下限
unsigned char res[8]; // 保留字節(jié)
SioPackCRC crc; // CRC校驗(yàn)碼
} SioPackSetOilFlow;
/* 半雙工通信時(shí)向發(fā)射機(jī)發(fā)送的包 */
typedef struct {
SioPackHead head; // 包頭部分
unsigned char dat[4]; // 數(shù)據(jù)部分(待定)
SioPackCRC crc; // CRC校驗(yàn)碼
} SioPackAck;
# define CMSioHeadLen sizeof(SioPackHead) // 包頭部分的長(zhǎng)度
# define CMSioCRCLen sizeof(SioPackCRC) // CRC校驗(yàn)碼的長(zhǎng)度
# define CMSioRecvPackLenMax CMUART0RxBufLenMax // 包最大長(zhǎng)度:接收緩沖區(qū)的最大長(zhǎng)度
# define CMSioRecvPackLenMin (CMSioHeadLen+CMSioCRCLen) // 包最小長(zhǎng)度:包頭部分長(zhǎng)度+CRC校驗(yàn)碼長(zhǎng)度
/* 各種類型接收包的聯(lián)合 */
typedef union {
unsigned char buf[CMSioRecvPackLenMax];
SioPackHead head;
SioPackCtrlDat ctrldat;
SioPackSetCurrent setcurrent;
SioPackSetOilFlow setoilflow;
SioPackAck ack;
} SioPackRecvBuf;
# ifdef TestCommDebug
# define CommDatRightTime 2000 // 10ms
# define CommDatRightTime0 1000 // 10ms
# else // TestCommDebug
# define CommDatRightTime 2000 // 10ms
# define CommDatRightTime0 1000 // 10ms
# endif // TestCommDebug
# define ConsecutiveRightPack 2
# define NoMachineAddr 0xFFFF // 未設(shè)置遙控器ID號(hào)
# define UniversalMachineAddr 0x0001 // 通用的遙控器ID號(hào)
/* 子函數(shù)聲明 */
void InitDataRecv(void);
void RecvMOnTime (void);
void UrgencyStop (void);
# endif // __RECV_H__
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -