详情

【SDK调用】如何快速操作无线通信设备的数据发送业务?

来源:微网智控(北京)科技有限公司2024/7/14 7:46:2912
导读:

[SDK调用]-05-01---.jpg

本章节重点讲述WiMi-net无线自组网管理平台SDK调用中的第5个问题:如何快速操作 WiMi-net433MHz无线通信设备的数据发送业务?

1.查询发送状态

函数名

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

发送成功,但是没有附加前导描述信息


2. 以TCP发送数据报文

函数名

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=操作失败


3. 以UDP发送数据报文

函数名

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=操作失败


4. 以TCP/UDP发送数据报文

函数名

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=操作失败


5.设置UDP发送等级

函数名

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=操作失败


6.读取UDP发送等级

函数名

char GetTxPerformance( char iShell )

头文件

API-WiMinet.h

静态库

WiMinet.lib

动态库

WiMinet.dll


形式

说明

参数一

char iShell

通讯端口的编号,填写固定数值0X00

返回值

UDP 发送的等级,取值范围0-255,数值越大,发送的等级越高,可靠性越强。0代表采用设备默认的配置,数值0X03


7. 测试例子程序

#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;

}


8. 测试程序说明

[SDK调用]-05-02.jpg


程序基本的逻辑如下:

  1. 查询发送队列,是否处于空闲状态,如果没有需要等待当前发送任务完成

  2. 提示输入需要传输的文件名称

  3. 读取文件的总长度

  4. 分配相应长度的内存块

  5. 将文件内容加载到内存块

  6. 关闭文件

  7. 将内存块中的内容提交给发送队列

  8. 释放之前分配的内存块

  9. 查询发送状态,打印发送时间和进度信息

  10. 查询发送任务是否已经结束

  11. 打印发送的结果信息


版权与免责声明:凡本网注明“来源:兴旺宝网”的所有作品,均为浙江兴旺宝明通网络有限公司-兴旺宝网合法拥有版权或有权使用的作品,未经本网授权不得转载、摘编或利用其它方式使用上述作品。已经本网授权使用作品的,应在授权范围内使用,并注明“来源:兴旺宝网”。违反上述声明者,本网将追究其相关法律责任。 本网转载并注明自其它来源(非兴旺宝网)的作品,目的在于传递更多信息,并不代表本网赞同其观点或和对其真实性负责,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品第一来源,并自负版权等法律责任。 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

展开全部
相关技术