<div dir="ltr">I am using the 1.5.2 master with a Xenomai user-space application which is now working very well thanks to previous guidance from this mailing list. However, I have been trying to get EoE working and have encountered a few difficulties.<div>
<br></div><div style>It would seem from looking at the documentation and the code that the callbacks mechanism has to be used to allow the EoE datagrams to be sent and received along with the application datagrams and appropriate locking has to be provided by the application. This all makes sense but the problem is that unless the application is in kernel space, the callback mechanism is not supported and the necessary calls are not exposed via IOCTLs.</div>
<div style><br></div><div style>After studying the code, I noticed that there is not a problem for receiving EoE datagrams as the callback simply calls ecrt_master_receive which has to be called cyclically by the application anyway (in fact, I would argue that the receive callback isn't necessary at all). However, for sending datagrams, there is a problem since it is not easy to call into user space from kernel space (and from a normal kernel thread to a Xenomai RT user-space task).</div>
<div style><br></div><div style>I have come up with an idea that I think "has some legs" and I have tested it and it appears to work well. The idea is that if EC_IOCTL_RTDM is defined, instead of not registering any callbacks, the master registers an empty receive callback (not needed - see above) and a send callback that sets a flag in the context object. It then waits for this flag to be cleared. When the application next calls ecrt_master_send, the master module handling the IOCTL checks the flag and if set, it calls ecrt_master_send_ext first then clears the flag (it can't call the internal callback as in the non-RTDM case because it uses a standard kernel semaphore). This causes any EoE datagrams to be added to the queue before sending the application datagrams. I just need to work through any possible race conditions and make sure the EoE thread can be stopped without waiting forever for ecrt_master_send to be called.</div>
<div style><br></div><div style>I would be grateful for any comments/guidance on the above.</div><div style><br></div></div>