本章节重点讲述WiMi-net无线自组网管理平台SDK调用中的第5个问题:如何快速操作 WiMi-net433MHz无线通信设备的数据发送业务?
函数名 | char QueryTxMsgStatus( char iShell, char * pStatus ) | |
头文件 | API-WiMinet.h | |
静态库 | WiMinet.lib | |
动态库 | WiMinet.dll | |
形式 | 说明 | |
参数一 | char iShell | 通讯端口的编号,填写固定数值0X00 |
参数二 | char * pStatus | 指向一个已分配好实体内存空间的单字节变量,用于记录发送状态,详细定义见“发送状态”表所示。 |
返回值 | 0X01=操作成功,0X00=操作失败 |
名称 | 发送状态 |
数值 | 说明 |
0XFF | 系统空闲,没有发送任务 |
0-100 | 正在发送报文,当前数值为发送的百分进度比,比如35代表发送了总长度35%的报文 |
0X81 | 发送成功,且已经附加了前导描述信息,报文总长度,32位的CRC等校验信息 |
0X82 | 发送失败 |
0X83 | 发送成功,但是没有附加前导描述信息 |
函数名 | char SendHiQoSMessage( char iShell, short iNode, char * pBuffer, long dwSize ) | |
头文件 | API-WiMinet.h | |
静态库 | WiMinet.lib | |
动态库 | WiMinet.dll | |
形式 | 说明 | |
参数一 | char iShell | 通讯端口的编号,填写固定数值0X00 |
参数二 | short iNode | 报文的目标接收节点ID号码 |
参数三 | char * pBuffer | 报文数据块的内存地址 |
参数四 | long dwSize | 报文数据块的长度 |
备注 | 途径的所有的传输节点,都采用 TCP 方式传输数据 | |
返回值 | 0X01=操作成功,0X00=操作失败 |
函数名 | char SendNoQoSMessage( char iShell, short iNode, char * pBuffer, long dwSize ) | |
头文件 | API-WiMinet.h | |
静态库 | WiMinet.lib | |
动态库 | WiMinet.dll | |
形式 | 说明 | |
参数一 | char iShell | 通讯端口的编号,填写固定数值0X00 |
参数二 | short iNode | 报文的目标接收节点ID号码 |
参数三 | char * pBuffer | 报文数据块的内存地址 |
参数四 | long dwSize | 报文数据块的长度 |
备注 | 途径的所有的传输节点,都采用 UDP 方式传输数据 | |
返回值 | 0X01=操作成功,0X00=操作失败 |
函数名 | char SendMxQoSMessage( char iShell, short iNode, char * pBuffer, long dwSize ) | |
头文件 | API-WiMinet.h | |
静态库 | WiMinet.lib | |
动态库 | WiMinet.dll | |
形式 | 说明 | |
参数一 | char iShell | 通讯端口的编号,填写固定数值0X00 |
参数二 | short iNode | 报文的目标接收节点ID号码 |
参数三 | char * pBuffer | 报文数据块的内存地址 |
参数四 | long dwSize | 报文数据块的长度 |
备注 | 接收报文的目标节点采用 UDP 传输方式,其余节点采用 TCP 传输方式 | |
返回值 | 0X01=操作成功,0X00=操作失败 |
函数名 | char SetTxPerformance( char iShell, unsigned char iSize ) | |
头文件 | API-WiMinet.h | |
静态库 | WiMinet.lib | |
动态库 | WiMinet.dll | |
形式 | 说明 | |
参数一 | char iShell | 通讯端口的编号,填写固定数值0X00 |
参数二 | unsigned char iSize | UDP 发送的等级,取值范围0-255,数值越大,发送的等级越高,可靠性越强。0代表采用设备默认的配置,数值0X03 |
返回值 | 0X01=操作成功,0X00=操作失败 |
函数名 | char GetTxPerformance( char iShell ) | |
头文件 | API-WiMinet.h | |
静态库 | WiMinet.lib | |
动态库 | WiMinet.dll | |
形式 | 说明 | |
参数一 | char iShell | 通讯端口的编号,填写固定数值0X00 |
返回值 | UDP 发送的等级,取值范围0-255,数值越大,发送的等级越高,可靠性越强。0代表采用设备默认的配置,数值0X03 |
#Include
#Include
#Include"API-WiMinet.h"
int main( int argc, char*argv[] )
{
char iRetVal;
char * pBuffer;
FILE * pFile;
char pFileName[1024];
unsigned char iStatus;
unsigned char iProgress;
unsigned long dwSize;
unsigned long dwTimerA;
unsigned long dwTimerB;
unsigned long dwTimerX;
// COM port interface
iRetVal = OpenWiMinetShell("COM3",115200, 0X01 );
// Ethernet interface
//iRetVal = OpenWiMinetShell("192.168.0.240",12580, 0X01 );
// Validate the shell open interface
if ( !iRetVal )
{
printf( "Open shellfailed!
" );
return 0X00;
}
// Query the TxStatus
while ( 0X01 )
{
// Query the Tx status
QueryTxMsgStatus( 0X00, ( char *)&iStatus );
// Check if end of the Tx procedure
if ( iStatus ==TXD_TASK_STATUS_JOB_WAITING )
{
break;
}
// Waiting the task is free
printf( "." );
// Release the control of the processor
Sleep( 0X01 );
}
// The input file name
printf( "
Please input filename:" );
// Clear the string
memset( pFileName, 0X00, sizeof( pFileName ));
// The input file name
scanf("%s", pFileName );
// Open the file
pFile = fopen( pFileName, "rb" );
// Validate the file pointer
if ( !pFile )
{
printf( "Failed To OpenFile!
" );
}
// Seek to the file end
fseek( pFile, 0X00, SEEK_END );
// Thefile size
dwSize = ftell( pFile );
// Seek to the file head
fseek( pFile, 0X00, SEEK_SET );
// allocate the buffer
pBuffer = ( char * )malloc( dwSize );
// Read this file contents
fread( pBuffer, 0X01, dwSize, pFile );
// Close this file
fclose( pFile );
// Send out this packet
SendHiQoSMessage( 0X00, ( short )0XA117,pBuffer, dwSize );
// delete this buffer
free( pBuffer );
// The initial time counter
dwTimerA = GetTickCount();
// The default Tx progress
iProgress = 0XFF;
// Query the TxStatus
while ( 0X01 )
{
// Release the control of the processor
Sleep( 0X01 );
// Query the Tx status
QueryTxMsgStatus( 0X00, ( char *)&iStatus );
// Check if end of the Tx procedure
if ( iStatus &TXD_TASK_STATUS_REPORTTABLE )
{
break;
}
// Compare the progress value
if ( iStatus == iProgress )
{
continue;
}
// Current time counter
dwTimerB = GetTickCount();
// The offset timer
dwTimerX = dwTimerB - dwTimerA;
// Update the progress value
iProgress = iStatus;
// Current Tx progress
printf( "%9lu ms -->%d%%
", dwTimerX, iStatus );
}
// Query the Tx timer
GetTxMessageTime( 0X00, &dwTimerX );
// The task completed status
switch ( iStatus )
{
case TXD_TASK_STATUS_END_SUCCESS:
{
printf( "
Tx CompletedSuccessfully,Time=%lu(ms)
", dwTimerX );
}
break;
case TXD_TASK_STATUS_END_FAILURE:
{
printf( "
Tx Completed WithError,Time=%lu(ms)
", dwTimerX );
}
break;
case TXD_TASK_STATUS_END_NOCRC32:
{
printf( "
Tx Completed WithoutCRC32,Time=%lu(ms)
", dwTimerX );
}
break;
default:
{
printf( "
Tx Completed WithUnknown Error,Time=%lu(ms)
", dwTimerX );
}
break;
}
// Stop the shell
StopWiMinetShell( 0X00 );
// Exit this main program
return 0X01;
}
程序基本的逻辑如下:
查询发送队列,是否处于空闲状态,如果没有需要等待当前发送任务完成
提示输入需要传输的文件名称
读取文件的总长度
分配相应长度的内存块
将文件内容加载到内存块
关闭文件
将内存块中的内容提交给发送队列
释放之前分配的内存块
查询发送状态,打印发送时间和进度信息
查询发送任务是否已经结束
打印发送的结果信息
版权与免责声明:凡本网注明“来源:兴旺宝网”的所有作品,均为浙江兴旺宝明通网络有限公司-兴旺宝网合法拥有版权或有权使用的作品,未经本网授权不得转载、摘编或利用其它方式使用上述作品。已经本网授权使用作品的,应在授权范围内使用,并注明“来源:兴旺宝网”。违反上述声明者,本网将追究其相关法律责任。 本网转载并注明自其它来源(非兴旺宝网)的作品,目的在于传递更多信息,并不代表本网赞同其观点或和对其真实性负责,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品第一来源,并自负版权等法律责任。 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
展开全部