On 07/26/2017 10:47 AM, Johannes Kliemann wrote:
Hi Sebastian,
thanks for your answer.
I tried to implement the relevant parts with Lx::Tasks. It seems to me that those Tasks are designed to run some kind of endless control flow. Beside this, I wasn't able to get an interrupt while blocking inside the task.Yet I'm not sure if I used the tasks correctly.
Maybe I should try to explain how the driver is intended to work. It consists of two parts, a touch driver that is written natively for Genode and uses I2C to communicate with its controller. And a I2C driver for the controller that I try to port from Linux (drivers/i2c/busses/i2c-designware-core.(c|h)). The send method of the Linux driver is implemented as I described it in my first mail. This behaviour is only triggered if the send method is called and returns after the message is sent or the controller timed out. The return causes an unexpected return error in the task. Beside that the interrupt never occurs while the task is inside the Linux code.
I'm not sure what I miss or how the Lx::Task should be used exactly in this case.
Can you please provide the name of the method and maybe the line of code where the i2c driver waits for the interrupt? This way I would be able to have a look.
Thanks,
Sebastian