///
/// Copyright (c) 2015-2016 Sensus Metering Systems
///
using System.Collections.Generic;
using TBF.Rig.Generic;
namespace TBF.Rig.GenericDevices
{
public interface IModbus : IComponent
{
///
/// Send an arbitrary modbus message.
/// When the message length is N, however only bytes 1..N-2 have to be set.
/// The last two message bytes (CRC) may be uninitialized or zero.
/// They are calculated inside this function as required by Modbus specification.
///
/// Message incl CRC fields, CRC bytes dont have to be set
/// Modbus child component name
void SendMessage(byte[] message, string meno);
///
/// Send a structured modbus message.
///
/// Device address (1..255) or 0 = broadcast
/// Function (0..127)
/// Address of data to be transferred (0..65535)
/// Count of data bytes to be transferred (0..65535)
/// Modbus child component name
void SendMessage(byte modbusAddress, byte function, ushort dataAddress, ushort dataCount, string meno);
Queue[] ReceivedTelegrams { get; }
///
/// Registers a modbus device for scheduled polling
///
/// Ticket numeber to be used as IsMyTurn() argumenr
int RegisterForPolling();
///
/// Determines whether the registered device should do polling now
///
/// Ticket number in range 1 .. registered devs.count returned by RegisterForPolling()
/// true when yes
bool IsMyTurn(int ticketNr);
}
}