1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use num_derive::FromPrimitive;
use super::coils::Coil;

pub type Address = u16;
pub type Quantity = u16;
pub type Value = u16;
pub type Values= Vec<u16> ;
pub type Coils= Vec<Coil> ;

#[derive(FromPrimitive)]
pub enum FunctionCode{
    ReadCoils = 0x01,
    ReadDiscreteInputs = 0x02,
    ReadHoldingRegisters = 0x03,
    ReadInputRegisters = 0x04,
    WriteSingleCoil = 0x05,
    WriteSingleRegister = 0x06,
    WriteMultipleCoils = 0x0f,
    WriteMultipleRegisters = 0x10,
}

pub enum ModbusFunction<'a> {
    ReadCoils(Address, Quantity),
    ReadDiscreteInputs(Address, Quantity),
    ReadHoldingRegisters(Address, Quantity),
    ReadInputRegisters(Address, Quantity),
    WriteSingleCoil(Address, Coil),
    WriteSingleRegister(Address, Value),
    WriteMultipleCoils(Address, &'a Coils),
    WriteMultipleRegisters(Address, &'a Values),
}