@@ -163,16 +163,14 @@ def __setitem__(self, address, value):
163163 fram[0] = 1
164164
165165 # write values 0 thru 4 with a list
166- fram[0] = [0,1,2,3]
166+ fram[0:4 ] = [0,1,2,3]
167167 """
168168 if self .write_protected :
169169 raise RuntimeError ("FRAM currently write protected." )
170170
171171 if isinstance (address , int ):
172- if not isinstance (value , (int , bytes , bytearray , list , tuple )):
173- raise ValueError (
174- "Data must be a single integer, bytes, bytearray, list, or tuple."
175- )
172+ if not isinstance (value , int ):
173+ raise ValueError ("Data must be a single integer for single addresses" )
176174 if not 0 <= address < self ._max_size :
177175 raise ValueError (
178176 "Address '{0}' out of range. It must be 0 <= address < {1}." .format (
@@ -183,7 +181,27 @@ def __setitem__(self, address, value):
183181 self ._write (address , value , self ._wraparound )
184182
185183 elif isinstance (address , slice ):
186- raise ValueError ("Slicing not available during write operations." )
184+ if not isinstance (value , (bytes , bytearray , list , tuple )):
185+ raise ValueError (
186+ "Data must be bytes, bytearray, list, "
187+ "or tuple for multiple addresses"
188+ )
189+ if (address .start is None ) or (address .stop is None ):
190+ raise ValueError ("Boundless slices are not supported" )
191+ if (address .step is not None ) and (address .step != 1 ):
192+ raise ValueError ("Slice stepping is not currently available." )
193+ if (address .start < 0 ) or (address .stop > self ._max_size ):
194+ raise ValueError (
195+ "Slice '{0}:{1}' out of range. All addresses must be 0 <= address < {2}." .format ( # pylint: disable=line-too-long
196+ address .start , address .stop , self ._max_size
197+ )
198+ )
199+ if len (value ) < (len (range (address .start , address .stop ))):
200+ raise ValueError (
201+ "Cannot set values with a list smaller than the number of indexes"
202+ )
203+
204+ self ._write (address .start , value , self ._wraparound )
187205
188206 def _read_address (self , address , read_buffer ):
189207 # Implemented by subclass
0 commit comments