You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

216 lines
10 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using GRreader;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HighWayIot.Rfid
{
public delegate void RecvIdentifyData(ushort iLen, byte[] pData, byte Antenna, UInt16 iDeviceId, string strId);
public enum G2MemBank
{
RESERVED = 0, //保留区
EPC = 1,
TID = 2,
USER = 3,
};
public enum CommType
{
RJ45 = 1, //网口
RS232 = 2, //com口
RS485 = 3, //485接口
};
public enum DeviceType
{
Mesnac_PKRK = 1, //软控物联网读写器一体机_GRUI160
Alien_9650 = 2, //Alien9650
ThingMagic_Vega = 3, //ThingMagic车载读写器
Mesnac_LD = 4, //软控磊德
Mesnac_GRUV100 = 5, //软控物联网车载读写器_GRUV100
Mesnac_GRUR445 = 6, //软控物联网四端口读写器
GzgDevice = 7, //干燥柜
ZlanIO_101 = 101, //卓岚IO
Moxa_E1212 = 102, //摩砂E1212
HwIo8 = 103, //海威
RFU620 = 620, //SICK 读写器
RFly_I160 = 160,//金瑞铭RFly-I160读写器
HWKC_81600 = 81600,//海威IO设备
Fuchs = 104
};
public enum WriteOrRead
{
Write = 1, //写
Read = 2, //读
};
/// <summary>
/// 设备适配层接口
/// </summary>
public interface IDeviceAdapter
{
event RecvIdentifyData RecvIdentifyDataEvent;
/// <summary>
/// 设备初始化
/// </summary>
/// <returns>true成功false失败</returns>
/// <param name="iCommType">通讯类型 1RJ45 2串口。</param>
/// <param name="pUrl">连接字符串 当iCommType为1时pUrl格式“192.168.1.100:23”为2时pUrl格式为“Com1:9600“</param>
/// <param name="iDeviceType">详见DeviceType</param>
bool Device_Init(CommType iCommType, string pUrl, DeviceType iDeviceType);
/// <summary>
/// 设备初始化
/// </summary>
/// <returns>true成功false失败</returns>
/// <param name="iCommType">通讯类型 1RJ45 2串口。</param>
/// <param name="pUrl">连接字符串 当iCommType为1时pUrl格式“192.168.1.100:23”为2时pUrl格式为“Com1:9600“</param>
/// <param name="iDeviceType">详见DeviceType</param>
bool Device_Init_Id(CommType iCommType, string pUrl, UInt16 iDeviceId);
/// <summary>
/// 连接设备
/// </summary>
/// <returns>true成功false失败</returns>
bool Device_Connect();
/// <summary>
/// 重新连接设备
/// </summary>
/// <returns>true成功false失败</returns>
bool Device_ReConnect();
/// <summary>
/// 设备销毁
/// </summary>
void Device_Destroy();
/// <summary>
/// 设备状态
/// </summary>
/// <returns>true正常false异常</returns>
bool Device_GetState();
/// <summary>
/// 根据天线号读取单个标签数据,只返回一条
/// //只有在天线号为0的时候可以读写其他区的数据
/// </summary>
/// <returns>实际读取到的长度0为读取失败</returns>
/// <param name="filterMembank">过滤数据区域 1保留区 2TID区 3EPC区 4USER区</param>
/// <param name="filterWordPtr">过滤写入起始偏移地址单位byte</param>
/// <param name="filterWordCnt">过滤长度单位byte</param>
/// <param name="filterData">过滤数据</param>
/// <param name="Membank">数据区哉 1保留区 2TID区 3EPC区 4USER区</param>
/// <param name="WordPtr">读取起始偏移地址单位byte必须为偶数。</param>
/// <param name="WordCnt">读取长度单位byte必须为偶数。</param>
/// <param name="pReadData">读取数据存放区。</param>
/// <param name="Antenna">天线号0为本机255为所有天线</param>
UInt16 Device_Read(G2MemBank filterMembank, UInt16 filterWordPtr, UInt16 filterWordCnt, Byte[] filterData, G2MemBank Membank, UInt16 WordPtr, UInt16 WordCnt, ref Byte[] pReadData, byte Antenna);
/// <summary>
/// 根据天线号写单个标签数据
/// //只有在天线号为0的时候可以写其他区的数据
/// </summary>
/// <returns>0写失败 1写入成功 2写入和读取的不一致</returns>
/// <param name="filterMembank">过滤数据区哉 1保留区 2TID区 3EPC区 4USER区</param>
/// <param name="filterWordPtr">过滤写入起始偏移地址单位byte</param>
/// <param name="filterWordCnt">过滤写入长度单位byte</param>
/// <param name="filterData">过滤数据</param>
/// <param name="Membank">数据区哉 1保留区 2TID区 3EPC区 4USER区</param>
/// <param name="WordPtr">写入起始偏移地址单位byte必须为偶数。</param>
/// <param name="WordCnt">写入长度单位byte必须为偶数。</param>
/// <param name="pWriteData">待写入的数据</param>
/// <param name="Antenna">天线号0为本机255为所有天线</param>
UInt16 Device_Write(G2MemBank filterMembank, UInt16 filterWordPtr, UInt16 filterWordCnt, Byte[] filterData,
G2MemBank Membank, UInt16 WordPtr, UInt16 WordCnt, Byte[] pWriteData, byte Antenna);
/// <summary>
/// 根据天线号识别单个标签EPC数据只返回一条
/// </summary>
/// <returns>识别的标签EPC长度0为识别失败</returns>
/// <param name="pReadData">识别到的数据缓存区</param>
/// <param name="Antenna">天线号0为本机255为所有天线</param>
/// <param name="Timedout">超时时间,单位毫秒,识别到立即返回,未识别到等待超时返回</param>
Byte Device_GetOneIdentifyData(ref Byte[] pReadData, Byte Antenna, UInt16 Timedout);
/// <summary>
/// 根据天线号识别单个标签EPC数据只返回一条
/// </summary>
/// <returns>识别的标签EPC长度0为识别失败</returns>
/// <param name="pReadData">识别到的数据缓存区</param>
/// <param name="Antenna">天线号0为本机255为所有天线</param>
/// <param name="Timedout">超时时间,单位毫秒,统计时间内读到的次数,返回次数最多的一条</param>
Byte Device_GetOneIdentifyData_Finish(ref Byte[] pReadData, Byte Antenna, UInt16 Timedout);
/// <summary>
/// 根据天线号识别单个标签EPC数据只返回一条
/// </summary>
/// <returns>EPC数据例"4A474730303130323332",为""时失败</returns>
/// <param name="Antenna">天线号0为本机255为所有天线</param>
/// <param name="Timedout">超时时间,单位毫秒,识别到立即返回,未识别到等待超时返回</param>
string Device_GetOneIdentifyData(Byte Antenna, UInt16 Timedout);
/// <summary>
/// 根据天线号识别单个标签EPC数据只返回一条
/// </summary>
/// <returns>EPC数据例"4A474730303130323332",为""时失败</returns>
/// <param name="Antenna">天线号0为本机255为所有天线</param>
/// <param name="Timedout">超时时间,单位毫秒,统计时间内读到的次数,返回次数最多的一条</param>
string Device_GetOneIdentifyData_Finish(Byte Antenna, UInt16 Timedout);
/// <summary>
/// 开始工作,读写器为开始识别,其他设备待定义
/// </summary>
/// <returns>true正常false异常</returns>
/// <param name="AutoReport">是否自动上报1自动0不自动默认0</param>
/// <param name="Filter">过滤规则默认为0无规则, 后续待定</param>
bool Device_BeginIdentify();
/// <summary>
/// 停止识别,读写器为停止识别,其他设备待定义
/// </summary>
/// <returns>true正常false异常</returns>
bool Device_StopIdentify();
/// <summary>
/// 获取工作期间的所有数据
/// </summary>
/// <returns>实际读取到数据的总长度包括每组数据所占的字节0为读取失败</returns>
/// <param name="pReadData">数据存放区,多组数据时格式为:1字节长度+天线号+每组数据...</param>
/// <param name="Antenna">天线号0为本机255为读取所有天线</param>
UInt16 Device_GetIdentifyData(ref Byte[] pReadData, Byte Antenna);
/// <summary>
/// 设置天线收发功率
/// </summary>
/// <returns>true为设置成功false为设置失败</returns>
/// <param name="iDbi">识别到的数据缓存区</param>
/// <param name="Antenna">天线号0为本机255为所有天线</param>
/// <param name="RorW">Write为写Read为读</param>
bool Device_SetRf(int iDbi, Byte Antenna, WriteOrRead RorW);
/// <summary>
/// 发送心跳报文
/// </summary>
/// <returns>1成功2为通讯成功设备未返回3为发送失败</returns>
byte Device_SendHeartPack();
/// <summary>
/// 获取自报数据
/// </summary>
/// <returns>总长度0为失败</returns>
/// <param name="pReadData">获得的自报数据,格式为长度,数据,。。。。。。长度,数据,其中长度占一个字节</param>
UInt16 Device_GetReportData(ref byte[] pReadData, Byte Antenna, UInt32 Timedout);
/// <summary>
/// 四通道读写器按时间段读取数据
/// </summary>
/// <param name="DeviceType"></param>
/// <returns></returns>
List<TagInfo> Device_GetTagInfoList(DeviceType DeviceType,int time);
}
}