首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

怎么利用动态库接收无线通信模块的数据

2012-03-25 
如何利用动态库接收无线通信模块的数据动态库使用说明数据中心DSC(Data Service Center)是用于接收终端数

如何利用动态库接收无线通信模块的数据
动态库使用说明

  数据中心DSC(Data Service Center)是用于接收终端数据和向终端发送数据的服务软件,和终端之间通讯使用开发包中动态库gprsdll.dll,该文件包括和终端通讯所需要的全部API函数,包括服务的启动、数据发送、数据接收、关闭服务等。DSC实际上是架构在gprsdll.dll所提供的功能之上的数据处理软件,其所需要完成的主要功能如下:
  1、使用API启动和停止数据服务;
  2、使用API接收数据和向终端发送数据,并且对数据作进一步处理;
  3、使用API轮询终端用户列表并且进行进一步处理,如显示和统计等;

1.数据结构:
(1).基本数据结构:
typedef UINT u32t; //32位无符号整数
typedef UCHAR u8t; //8位无符号整数
typedef USHORT u16t; //16位无符号整数
typedef ULONGu64t; //64位无符号整数
(2).用以区分标识各台Modem的数据结构:
typedef struct _modem_info_t_
{
  u32t m_modemId; //Modem模块的ID号
  u8t m_phoneno[12]; //Modem的11位电话号码,必须以'\0'字符结尾
  u8t m_dynip[4]; //Modem获取到的动态ip地址
  u64t m_conn_time; //Modem模块最后一次建立TCP连接的时间
  u64tm_refresh_time; //Modem模块最后一次收发数据的时间
  u8t m_signal; //上线前检测到的信号质量
} ModemInfoStruct;
(3).描述中心从终端所接收到的数据的数据结构:
#define MAX_RECEIVE_BUF 1450
typedef struct _modem_data_t {
u32t m_modemId; // Modem模块的ID号
u64t m_recv_time;//接收到数据包的时间
u8t m_data_buf[MAX_RECEIVE_BUF+1];//存储接收到的数据
u16t m_data_len;//接收到的数据包长度
#define DATA_TYPE_USERDATA 0x01
#define DATA_TYPE_CTLRESP 0x02
#define DATA_TYPE_JPEGDATA 0x03
#define DATA_TYPE_GPSDATA 0x04
u8t m_data_type; //接收到的数据包类型,
//0x01:用户数据包 
//0x02:对控制命令帧的回应
//0x03: 图片数据,图片数据的ID号存放在m_jpegId中。
//可以通过DSGetJpegById()函数获取图片。
//注意:如果收到了MODEM数据内容是图片数据,则
//应当尽快调用DSGetJpegById()进行图片的读
//取,否则会导致内存中数据过多
//0x04: GPS参数数据
//表明数据中都是GPS相关参数(目前的实现由用户
//进行解码,后续提供专门的解码程序)。
u32t m_jpegId; //图片数据的ID号(实际上就是指针了啦)
}ModemDataStruct;

2.Api说明:
  (1). BOOL _stdcall DSStartService(u16t uiListenPort);
  功能:启动服务器的数据服务
  参数: u16ListenPort:服务的侦听端口
  说明:启动服务器的数据服务。启动数据服务后,服务器侦听在指定端口。
  数据中心启动后应当首先调用这个API进行端口侦听
  如果失败了,可以调用DSGetLastError()函数查看错误原因。

  (2). BOOL _stdcall DSStopService(void);
  功能:停止服务器的数据服务
  参数:无
  说明:停止服务器的数据服务。所有的终端都将下线。
如果失败了,可以调用DSGetLastError()函数查看错误原因。

  (3). BOOL _stdcall DSGetNextData(ModemDataStruct* pDataStruct,u16t waitseconds);
  功能:读取下一条Modem送上来的信息
  参数:pDataStruct: 存放Modem所送上来的信息和数据的结构,读函数执行成功后,返回的数据存放到该参数指向的结构中
  waitseconds:本函数读到数据后立即返回;如果没有数据到达,则等待最长waitseconds(时间单位:秒)的时间,直到有数据到达,取值范围从0~65535,如果取值为0表明本函数将立即返回。
  返回:如果返回为非零值,表明收到了一条Modem信息。如果返回为0,则表明没有收到数据。

  (4). BOOL _stdcall DSSendData(u32t modemId,u16t len,u8t * buf);
  功能:向指定ID号的的Modem发送数据
  参数:modemId:终端的ID号,用以标识一个终端
  len:待发送的数据长度(字节数),数据长度必须小于或等于1450个字节
  buf:待发送的数据
  如果失败了,可以调用DSGetLastError()函数查看错误原因。

  (5). u32t _stdcall DSGetModemCount(void);
  功能:取得当前在线的所有的Modem的总数;

  (6). BOOL _stdcall DSGetModemByPosition(u32t pos, ModemInfoStruct *pModemInfo);
  功能:取得指定位置的Modem的数据;
  参数:pos:Modem列表中的位置信息,0代表第一个Modem位置;
  pModemInfo:指向用以保存Modem信息的数据结构;

  (7). BOOL _stdcall DSSendControl(u32t modemId,u16t len,u8t * buf);
  功能:向指定ID号的的终端发送控制命令
  参数:modemId:终端的ID号,用以标识一个终端
len:待发送的控制命令长度(字节数),数据长度必须小于或等于1000个字节
buf:待发送的控制命令帧
如果失败了,可以调用DSGetLastError()函数查看错误原因。

  (8). void _stdcall DSGetLastError(char *str,int nMaxBufSize);
  功能:获得先前API执行时发生的错误;
  参数:str:用来存放错误信息的缓冲区;
  nMaxStrSize:缓冲区的最大长度,如果错误信息的大小超过了这个值,则此函数将把错误信息的尾部截除。

  (9). void _stdcall DSGetVersion(char *strVerBuf,int iVerBufSize);
  功能:获取动态链接库的版本号


  参数:strVerBuf:动态链接库版本结果存储缓冲区。
iVerBufSize:动态链接库版本结果存储缓冲区的大小(字节数)。

  (10).BOOL _stdcall DSIoCtrl(u32t u32Argu,u8t * ptrVal,u32t sizeOfVal);
  功能:设置/获取当前的动态链接库的各项参数.
  参数:u32Argu:动态链接库的命令类型。
ptrVal:指向命令值的指针。
sizeOfVal:指向命令的值的大小(多少个字节);

目前定义的命令有
(1)CMD_SET_STRAIGHT
#define CMD_SET_STRAIGHT1
(2)CMD_GET_STRAIGHT
#define CMD_GET_STRAIGHT2
控制是否对和DTU的之间通信(接收和发送双向)的数据进行转义。
1:不进行转义处理;
0.进行转义处理;
(3)CMD_SET_TIMESYNC
#define CMD_SET_TIMESYNC3
(4)CMD_GET_TIMESYNC
#define CMD_GET_TIMESYNC4
控制中心是否在DTU注册成功后向DTU发送时钟同步信息。
1:发送;
0.不发送;
(5)CMD_SET_IFCAMERA
#define CMD_SET_IFCAMERA5
(6)CMD_GET_IFCAMERA
#define CMD_GET_IFCAMERA6
控制中心是否支持CAMERA显示。
1:支持;
0.不支持;
  (11).BOOL _stdcall DSGetJpegById(u32t u32JpegId,u8t * ptrVal,u32t sizeOfVal);
  功能:通过id号来获取Jpeg图片
  参数:u32JpegId: Jpeg图片数据的ID号。
ptrVal:存储接收到的图片数据的缓冲区首地址
sizeOfVal:存储接收到的图片数据的缓冲区的大小
  返回:如果成功,返回TRUE;如果失败,返回FALSE。
  注意: 缓冲区的大小必须大于MAX_JPEG_SIZE
#define MAX_JPEG_SIZE (256*512)

 [color=#FF0000][/color]以上就是动态库的使用说明,但还是不知道该怎么声明和调用?
  请高手指点,需要实现的功能是:接收无线通信模块发送的数据!



[解决办法]

探讨
引用:
向提供者要一个VB示例.


他们没有示例啊!请问自己能写吗?

[解决办法]
VB code
'==============================================================================' Constant defining ( 常数定义 )'==============================================================================Private Const MAX_RECEIVE_BUF = 1450Private Const DATA_TYPE_USERDATA = 1Private Const DATA_TYPE_CTLRESP = 2Private Const DATA_TYPE_JPEGDATA = 3Private Const DATA_TYPE_GPSDATA = 4Private Const CMD_SET_STRAIGHT = 1Private Const CMD_GET_STRAIGHT = 2Private Const CMD_SET_TIMESYNC = 3Private Const CMD_GET_TIMESYNC = 4Private Const CMD_SET_IFCAMERA = 5Private Const CMD_GET_IFCAMERA = 6Private Const MAX_JPEG_SIZE = 131072    '256 * 512'==============================================================================' Data type defining ( 数据类型定义 )'==============================================================================Private Type ModemInfoStruct    m_modemId As Long    m_phoneno(11) As Byte    m_dynip(3) As Byte    m_conn_time As Currency    m_refresh_time As Currency    m_signal As ByteEnd TypePrivate Type ModemDataStruct    m_modemId As Long    m_recv_time As Currency    m_data_buf(MAX_RECEIVE_BUF) As Byte    m_data_len As Integer    m_data_type As Byte    m_jpegId As LongEnd Type'==============================================================================' API function declare ( API函数声明 )'==============================================================================' DSC API function declarePrivate Declare Function DSStartService Lib "gprsdll.dll" ( _                                        ByVal uiListenPort As Integer) As BooleanPrivate Declare Function DSStopService Lib "gprsdll.dll" () As BooleanPrivate Declare Function DSGetNextData Lib "gprsdll.dll" ( _                                        pDataStruct As Any, _                                        ByVal waitseconds As Integer) As BooleanPrivate Declare Function DSSendData Lib "gprsdll.dll" ( _                                        ByVal modemId As Long, _                                        ByVal mlen As Integer, _                                        buf As Any) As BooleanPrivate Declare Function DSGetModemCount Lib "gprsdll.dll" () As LongPrivate Declare Function DSGetModemByPosition Lib "gprsdll.dll" ( _                                        ByVal pos As Long, _                                        pModemInfo As Any) As BooleanPrivate Declare Function DSSendControl Lib "gprsdll.dll" ( _                                        ByVal modemId As Long, _                                        ByVal mlen As Integer, _                                        buf As Any) As BooleanPrivate Declare Sub DSGetLastError Lib "gprsdll.dll" ( _                                        str As Any, _                                        ByVal nMaxBufSize As Long)Private Declare Sub DSGetVersion Lib "gprsdll.dll" ( _                                        strVerBuf As Any, _                                        ByVal iVerBufSize As Long)Private Declare Function DSIoCtrl Lib "gprsdll.dll" ( _                                        ByVal u32Argu As Long, _                                        ptrVal As Any, _                                        ByVal sizeOfVal As Long) As BooleanPrivate Declare Function DSGetJpegById Lib "gprsdll.dll" ( _                                        ByVal u32JpegId As Long, _                                        ptrVal As Any, _                                        ByVal sizeOfVal As Long) As Boolean' Win32 API function declarePrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _                                        Destination As Any, _                                        Source As Any, _                                        ByVal Length As Long)'==============================================================================' 自定义函数及处理过程'=============================================================================='********************************************************************************'**   函 数 名 :   VBTypeToVCType_MIS'**   输    入 :   mVBType(ModemInfoStruct)   - 要通过Sock发送的任何类型数据内容'**   返    回 :   (Byte())                   - 拼合后的 ModemInfoStruct 类型字节流'**   功能描述 :   将 ModemInfoStruct 类型的数据转换到符合 VC 结构的字节流并返回'**   创建日期 :   2010-09-27'**   修 改 人 :'**   修改日期 :'**   版    本 :   Version 1.0.0'********************************************************************************Private Function VBTypeToVCType_MIS(mVBType As ModemInfoStruct) As Byte()    ReDim VBTypeToVCType_MIS(36)    CopyMemory VBTypeToVCType_MIS(0), mVBType.m_modemId, 4    CopyMemory VBTypeToVCType_MIS(4), mVBType.m_phoneno(0), 12    CopyMemory VBTypeToVCType_MIS(16), mVBType.m_dynip(0), 4    CopyMemory VBTypeToVCType_MIS(20), mVBType.m_conn_time, 8    CopyMemory VBTypeToVCType_MIS(28), mVBType.m_refresh_time, 8    CopyMemory VBTypeToVCType_MIS(36), mVBType.m_signal, 1End FunctionPrivate Function VBTypeToVCType_MDS(mVBType As ModemDataStruct) As Byte()    '...你自己模仿上面的写过程把End FunctionPrivate Function VCTypeToVBType_MIS(ByteArray() As Byte) As ModemInfoStruct    '...你自己模仿上面的写过程把End FunctionPrivate Function VCTypeToVBType_MDS(ByteArray() As Byte) As ModemDataStruct    '...你自己模仿上面的写过程把End Function 

热点排行