/* *************************************************************************** * Copyright 2007 Impinj, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *************************************************************************** */ /* *************************************************************************** * File Name: CommunicationInterface.cs * * Author: Impinj * Organization: Impinj * Date: September, 2007 * * Description: This file contains interfaces, base classes and parser * for estabilishing communication between reader and * application *************************************************************************** */ using System; using System.Collections.Generic; using System.Text; namespace LLRP { public delegate void delegateMessageReceived(Int16 ver, Int16 msg_type, int msg_id, byte[] data); public delegate void delegateClientConnected(); /// <summary> /// Async. read state class /// </summary> [Serializable] class AsynReadState { public byte[] data; public AsynReadState(Int32 buffer_size) { data = new byte[buffer_size]; } } /// <summary> /// Enumeration of communication interface /// </summary> public enum ENUM_INTERFACE_TYPE { TCPIP = 0, USB = 1, RS232 = 2 } /// <summary> /// Communication base class /// </summary> [Serializable] abstract class CommunicationInterface : IDisposable { protected AsynReadState state; public event delegateMessageReceived OnMessageReceived; public event delegateClientConnected OnClientConnected; protected void TriggerMessageEvent(Int16 ver, Int16 msg_type, int msg_id, byte[] data) { try { if (OnMessageReceived != null) OnMessageReceived(ver, msg_type, msg_id, data); } catch { } } protected void TriggerOnClientConnect() { try { if (OnClientConnected != null) OnClientConnected(); } catch { } } /// <summary> /// Open the communication interface. /// </summary> /// <param name="client">Name or address of the device</param> /// <param name="port">port number of device. if the device does not support port, this parameter is ignored.</param> /// <returns>True if the the device is opened successfully.</returns> public virtual bool Open(string device_name, int port) { return false; } /// <summary> /// Close the communication interface /// </summary> public virtual void Close(){} /// <summary> /// Send data through communication interface /// </summary> /// <param name="data">data to be sent. byte array</param> /// <returns>length of data that have been sent</returns> public virtual int Send(byte[] data) { return 0; } /// <summary> /// Receive data /// </summary> /// <param name="buffer"></param> /// <returns>the data length that received</returns> public virtual int Receive(out byte[] buffer) { buffer = null; return 0; } /// <summary> /// Set buffer for receiving data /// </summary> /// <param name="size">size of the buffer, byte</param> /// <returns>true if the buffer is allocated successfully</returns> public virtual bool SetBufferSize(int size) { return false; } /// <summary> /// Release resource /// </summary> public virtual void Dispose() { } } }