I'm trying to read registers from descriptor file. (/dev/file_descriptor) When polling it shows that there is event and I can read it. But it stucked when tried os.read(fd, 24), it works sometimes , sometimes not Please help me to find solution and handle that... Thank you.
def read_reg(self, register_to_write=None, register_to_read=None, val=1, bar=0):
# Open the file descriptor for reading
print('--------------------------------------------------')
if register_to_write:
self.write_reg(register_to_write, val, bar)
self.write_reg(register_to_read, val, bar)
elif register_to_read:
self.write_reg(register_to_read, val, bar)
try:
lock.acquire()
fd = os.open(self.fd_path, os.O_RDONLY | os.O_NONBLOCK)
except Exception as e:
lock.release()
os.close(fd)
print(f"Error occured while opening the file as : {e}")
return -1
if fd > 0:
print('File is opened and ready to read...')
else:
print('Error opening the file!!!')
return -1
poller = select.poll()
# Register the file descriptor for monitoring
poller.register(fd, select.POLLIN)
try:
events = poller.poll(0)
print(events)
if events:
data1 = os.read(fd, 24)
lock.release()
os.close(fd)
else:
lock.release()
os.close(fd)
print("There is no data or timoeout occured")
return -1
except OSError as e:
if e.errno == errno.EAGAIN or e.errno == errno.EWOULDBLOCK:
# No data available to read immediately
print("No data available to read immediately")
else:
# Other OS error, handle accordingly
print("Error reading:", e)
lock.release()
os.close(fd)
return -1
value = struct.unpack('<IIIIII', data1)
# del data1
print(bin(value[-1]))
print(f"Read data from register : {value}")
print('--------------------------------------------------')
return value`