无线数据传输,是指用无线信道替代有线连接进行数据传输。无线数据传输技术是当代通信技术领域的一个重要分支,近年来,随着科学技术的飞速发展,特别是在全球信息技术及其产业化的推动下,无线数据传输技术得到了迅猛的发展。
透明数据传输是指:上位机与模块进行信息交换的数据格式,没有像指令字头、结束符等数据包信息,只要上位机串口有数据输出,模块就把串口的数据以无线方式编码发送,当接收模块接收到发射模块发送的无线数据信号后进行解码,把解码后的数据按发送端的格式从串口输出。也就是说模块对使用者是开放的,透明的,实际上,在点对多点的组网通信中,我们完全可以将无线数据透明传输方式等同于有线连接的总线方式。不同点是无线连接方式存在较大延时。
无线数据透明传输系统是指设计具有RS232、RS485等标准接口的无线数据透明传输模块,用该模块替代串口连接线,多个模块互相通过无线协议实现数据传输,形成一个无线数据传输系统。
在ZigBee无线数传替代串口连接线。PC通过RS 232串行接口发送数据给ZigBee无线数传模块,模块接收数据后通过射频收发器将数据转发给另一端的ZigBee无线数传模块,该模块通过射频收发器接收数据后直接发送到RS232串行接口供PC机接收。
#define SERIALAPP_MSG_RTRY_EVT 0x0001 //重发数据
#define SERIALAPP_RSP_RTRY_EVT 0x0002//重发响应信息
#define SERIALAPP_MSG_SEND_EVT 0x0004 //发送数据
#define SERIALAPP_RSP_RTRY_EVT 0x0002//重发响应信息
#define SERIALAPP_MSG_SEND_EVT 0x0004 //发送数据
#define SERIALAPP_MAX_CLUSTERS 2
#define SERIALAPP_CLUSTERID1 1 //数据传输
#define SERIALAPP_CLUSTERID2 2 //接收数据响应
将命令添加到命令列表
const cId_t SerialApp_ClusterList[SERIALAPP_MAX_CLUSTERS] =
{
SERIALAPP_CLUSTERID1,
SERIALAPP_CLUSTERID2
};
简单描述符定义
const SimpleDescriptionFormat_t SerialApp_SimpleDesc =
{
SERIALAPP_ENDPOINT, // int Endpoint; 端口号
SERIALAPP_PROFID, //uint16 AppProfId[2]; Profile ID
SERIALAPP_DEVICEID, // uint16 AppDeviceId[2]; 设备ID
SERIALAPP_DEVICE_VERSION, // int AppDevVer:4; 版本号
SERIALAPP_FLAGS, // int AppFlags:4; 程序标识
SERIALAPP_MAX_CLUSTERS ,//byte AppNumInClusters; 输入命令数
// byte *pAppInClusterList; 输入命列表
(cId_t *)SerialApp_ClusterList,
SERIALAPP_MAX_CLUSTERS,
// byte *pAppOutClusterList; 输出命令列表
(cId_t *)SerialApp_ClusterList };
//端口描述符
const endPointDesc_t SerialApp_epDesc =
{
SERIALAPP_ENDPOINT, //端口号
&SerialApp_TaskID, //任务ID
(SimpleDescriptionFormat_t *)&SerialApp_SimpleDesc, //简单描述符
noLatencyReqs
};
SerialApp的初始化函数
void SerialApp_Init( uint8 task_id )
{
halUARTCfg_t uartConfig; //串口配置信息
//端口描述符
const endPointDesc_t SerialApp_epDesc =
{
SERIALAPP_ENDPOINT, //端口号
&SerialApp_TaskID, //任务ID
(SimpleDescriptionFormat_t *)&SerialApp_SimpleDesc, //简单描述符
noLatencyReqs
};
SerialApp的初始化函数
void SerialApp_Init( uint8 task_id )
{
halUARTCfg_t uartConfig; //串口配置信息
SerialApp_MsgID = 0x00;
SerialApp_SeqRx = 0xC3; //接收序列号
SerialApp_TaskID = task_id ;//任务ID
SerialApp_SeqRx = 0xC3; //接收序列号
SerialApp_TaskID = task_id ;//任务ID
SerialApp_DstAddr.endPoint = 0;
//目的设端口
SerialApp_DstAddr.addr.shortAddr = 0 ;//目的地址
SerialApp_DstAddr.addrMode = (afAddrMode_t)AddrNotPresent ;//目的地址模式
SerialApp_DstAddr.addr.shortAddr = 0 ;//目的地址
SerialApp_DstAddr.addrMode = (afAddrMode_t)AddrNotPresent ;//目的地址模式
SerialApp_RspDstAddr.endPoint = 0;
SerialApp_RspDstAddr.addr.shortAddr = 0;
SerialApp_RspDstAddr.addrMode = (afAddrMode_t)AddrNotPresent;
SerialApp_RspDstAddr.addr.shortAddr = 0;
SerialApp_RspDstAddr.addrMode = (afAddrMode_t)AddrNotPresent;
afRegister( (endPointDesc_t *)&SerialApp_epDesc );
//注册端口描述符
RegisterForKeys( task_id );
//注册按键事件
uartConfig.configured = TRUE;
// 2430 don't care.
uartConfig.baudRate = SERIAL_APP_BAUD; //波特率
uartConfig.flowControl = TRUE; //流量控制
uartConfig.flowControlThreshold = SERIAL_APP_THRESH; // 流控阈值
uartConfig.rx.maxBufSize = SERIAL_APP_RX_MAX; //最大接收量
uartConfig.tx.maxBufSize = SERIAL_APP_TX_MAX; //最大发送量
uartConfig.idleTimeout = SERIAL_APP_IDLE;//2430 don't care.
uartConfig.intEnable = TRUE; // 2430 don't care.
#if SERIAL_APP_LOOPBACK
uartConfig.callBackFunc = rxCB_Loopback; //接收回调函数
#else
uartConfig.callBackFunc = rxCB;
#endif
HalUARTOpen (SERIAL_APP_PORT, &uartConfig); //打开串口
uartConfig.baudRate = SERIAL_APP_BAUD; //波特率
uartConfig.flowControl = TRUE; //流量控制
uartConfig.flowControlThreshold = SERIAL_APP_THRESH; // 流控阈值
uartConfig.rx.maxBufSize = SERIAL_APP_RX_MAX; //最大接收量
uartConfig.tx.maxBufSize = SERIAL_APP_TX_MAX; //最大发送量
uartConfig.idleTimeout = SERIAL_APP_IDLE;//2430 don't care.
uartConfig.intEnable = TRUE; // 2430 don't care.
#if SERIAL_APP_LOOPBACK
uartConfig.callBackFunc = rxCB_Loopback; //接收回调函数
#else
uartConfig.callBackFunc = rxCB;
#endif
HalUARTOpen (SERIAL_APP_PORT, &uartConfig); //打开串口
#if defined ( LCD_SUPPORTED )
HalLcdWriteString( "SerialApp2", HAL_LCD_LINE_2 );
#endif
//注册绑定相关的事件
ZDO_RegisterForZDOMsg( SerialApp_TaskID, End_Device_Bind_rsp );
ZDO_RegisterForZDOMsg( SerialApp_TaskID, Match_Desc_rsp );
}
HalLcdWriteString( "SerialApp2", HAL_LCD_LINE_2 );
#endif
//注册绑定相关的事件
ZDO_RegisterForZDOMsg( SerialApp_TaskID, End_Device_Bind_rsp );
ZDO_RegisterForZDOMsg( SerialApp_TaskID, Match_Desc_rsp );
}
typedef struct
{
bool configured;
uint8 baudRate; //波特率 协议栈只有38400和115200两个波特率
//控制位,如果是1的话就说明是四线模式,0代表2线模式,默认的是4线模式
bool flowControl;
uint16 flowControlThreshold;
uint8 idleTimeout;
halUARTBufControl_t rx;
halUARTBufControl_t tx;
bool intEnable;
uint32 rxChRvdTime;
halUARTCBack_t callBackFunc;
}halUARTCfg_t;
说明:如果你的板子是采用2线模式的话,必须得在SearilApp中的SerialWsn_Init( uint8 task_id )把uartConfig.flowControl=TURE改成FALSE
{
bool configured;
uint8 baudRate; //波特率 协议栈只有38400和115200两个波特率
//控制位,如果是1的话就说明是四线模式,0代表2线模式,默认的是4线模式
bool flowControl;
uint16 flowControlThreshold;
uint8 idleTimeout;
halUARTBufControl_t rx;
halUARTBufControl_t tx;
bool intEnable;
uint32 rxChRvdTime;
halUARTCBack_t callBackFunc;
}halUARTCfg_t;
说明:如果你的板子是采用2线模式的话,必须得在SearilApp中的SerialWsn_Init( uint8 task_id )把uartConfig.flowControl=TURE改成FALSE