@@ -224,6 +224,7 @@ def __init__(
224224 scale : Sequence [str | None ] | None ,
225225 mappings : dict [str , tuple [Axis , str | None , float , float | None ]],
226226 update_trigger : bool = False ,
227+ legion_fix : bool = False ,
227228 ) -> None :
228229 self .types = types
229230 self .attr = attr
@@ -233,6 +234,7 @@ def __init__(
233234 self .update_trigger = update_trigger
234235 self .fd = 0
235236 self .dev = None
237+ self .legion_fix = legion_fix
236238
237239 def open (self ):
238240 sens_dir , type = find_sensor (self .types )
@@ -294,6 +296,10 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]:
294296 # TODO: Implement parsing iio fully, by adding shifting and cutoff
295297 d = data [ofs >> 3 : (ofs >> 3 ) + (se .storage_bits >> 3 )]
296298 d = int .from_bytes (d , byteorder = se .endianness , signed = se .signed )
299+ if self .legion_fix and d == - 124 :
300+ # Legion go likes to overflow to -124 in both directions
301+ # skip this number to avoid jitters
302+ continue
297303 # d = d >> se.shift
298304 # d &= (1 << se.bits) - 1
299305 d = d * se .scale + se .offset
@@ -330,13 +336,16 @@ def __init__(self, freq=None, scale=None) -> None:
330336
331337
332338class GyroImu (IioReader ):
333- def __init__ (self , freq = None , scale = None , map = None ) -> None :
339+ def __init__ (
340+ self , freq = None , scale = None , map = None , legion_fix : bool = False
341+ ) -> None :
334342 super ().__init__ (
335343 GYRO_NAMES ,
336344 ["anglvel" ],
337345 [freq ] if freq else None ,
338346 [scale ],
339347 map if map else GYRO_MAPPINGS ,
348+ legion_fix = legion_fix ,
340349 )
341350
342351
0 commit comments