55from ..constants import ExcCodes
66from ..exceptions import NoSuchIdException
77from ..logging import Log
8- from .sequential import ModbusSequentialDataBlock
98from .store import BaseModbusDataBlock
109
1110
@@ -67,23 +66,12 @@ def __init__(self, *_args,
6766 hr : BaseModbusDataBlock | None = None ,
6867 ):
6968 """Initialize the datastores."""
70- self .store = {}
71- self .store ["d" ] = di if di is not None else ModbusSequentialDataBlock .create ()
72- self .store ["c" ] = co if co is not None else ModbusSequentialDataBlock .create ()
73- self .store ["i" ] = ir if ir is not None else ModbusSequentialDataBlock .create ()
74- self .store ["h" ] = hr if hr is not None else ModbusSequentialDataBlock .create ()
75-
76- def __str__ (self ):
77- """Return a string representation of the context.
78-
79- :returns: A string representation of the context
80- """
81- return "Modbus device Context"
82-
83- def reset (self ):
84- """Reset all the datastores to their default values."""
85- for datastore in iter (self .store .values ()):
86- datastore .reset ()
69+ self .store = {
70+ "d" : di ,
71+ "c" : co ,
72+ "i" : ir ,
73+ "h" : hr ,
74+ }
8775
8876 async def async_getValues (self , func_code , address , count = 1 ) -> list [int ] | list [bool ] | ExcCodes :
8977 """Get `count` values from datastore.
@@ -95,7 +83,9 @@ async def async_getValues(self, func_code, address, count=1) -> list[int] | list
9583 """
9684 address += 1
9785 Log .debug ("getValues: fc-[{}] address-{}: count-{}" , func_code , address , count )
98- return await self .store [self .decode (func_code )].async_getValues (address , count )
86+ if dt := self .store [self .decode (func_code )]:
87+ return await dt .async_getValues (address , count )
88+ return ExcCodes .ILLEGAL_ADDRESS
9989
10090 async def async_setValues (self , func_code , address , values ) -> None | ExcCodes :
10191 """Set the datastore with the supplied values.
@@ -106,7 +96,9 @@ async def async_setValues(self, func_code, address, values) -> None | ExcCodes:
10696 """
10797 address += 1
10898 Log .debug ("setValues[{}] address-{}: count-{}" , func_code , address , len (values ))
109- return await self .store [self .decode (func_code )].async_setValues (address , values )
99+ if dt := self .store [self .decode (func_code )]:
100+ return await dt .async_setValues (address , values )
101+ return ExcCodes .ILLEGAL_ADDRESS
110102
111103
112104class ModbusServerContext :
@@ -162,17 +154,6 @@ async def async_setValues(self, device_id: int, func_code: int, address: int, va
162154 dev = self .__get_device (device_id )
163155 return await dev .async_setValues (func_code , address , values )
164156
165- def __getitem__ (self , device_id ):
166- """Use to get access to a device_id context.
167-
168- :param device_id: The device context to get
169- :returns: The requested device context
170- :raises NoSuchIdException:
171- """
172- if self .single :
173- device_id = 0
174- return self .__get_device (device_id )
175-
176157 def device_ids (self ):
177158 """Get the configured device ids."""
178159 return list (self ._devices .keys ())
0 commit comments