Reading register from descriptor file

14 views Asked by At

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`
0

There are 0 answers