-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Q: Difference between e32.tx.data and e32.rx.data #29
Comments
@viaSeunghyun thank you for creating this issue. I don't think I fully understand your scenario but I think I know what is happening. Firstly, on the implementation. It is meant to be fully asynchronous and uses the You are right we have the following sockets:
For the registered sockets the client programs This is what I think has happened in your scenario:
We see the following from your logs:
We know here the input is disabled and thus it's not listening to input. That We then see:
The last line we have Thus, the I would assume this would work if:
If you can confirm this we can then think about the best solution. I think the problem here is that it makes no sense to send data the |
Thank you for @lloydroc detailed response. To add a little more clarification, before reading your explanation, I understood that the reason for the split into I mention channels because when I analyzed only the I thought that there was some kind of processing related to the sockets that I didn't know about, and that the After reading the description, I didn't understand why it couldn't be processed in parallel, but now I do. What I didn't understand was that I was mostly in direct control of UARTs on Windows, and the Virtual Serial Port Driver I was using had full N:M concurrent parallelism (mixing both physical and virtual ports). That said, my initialization code looked something like this.
I was only sending on is that correct, at least in theory? |
To quote this sentence, I didn't do a separate listen on I did exactly what the example code in this link does. That is, in my code,
|
@viaSeunghyun with the implementation the sockets are unidirectional. On one end of the socket is opened for sending, the other for receiving. The socket The problem we have here - at least I think - is that the Regardless, this problem you have found is addressed, a change could be implemented to at least timeout when the When writing, the clients if they have both tx and rx clients then it needs a way to be able to The code looks quite good. However, in this section:
The Thus, could you remove the following section so that received data will not be sent to
This way there is no registered socket for the transmitting side. Again, the problem here is that the |
Thank you so much for taking your valuable time to answer me, even on a holiday, you responded so quickly. I understand more clearly now and will modify my code and logic. In the future, if I have any other questions or ideas, is it okay to post some more? Thank you so much again! If you wish, you can now close this issue. |
Hello?
It's been a while.
I've been using E32 well, with your code making it easy.
I'm logging an issue because there's an implementation I'm using that doesn't make sense to me personally, and I'd like to ask @lloydroc a question.
See the code for the E32TX and E32RX.
In e32tx, we create a socket for e32.tx.data, e32rx creates a socket on e32.rx.data.
However, in reality, only the names are different and all channels (RD&WR) are bound to /run/e32.data.
If these two sockets are connected to a program at the same time, both e32.service and the user script will block indefinitely (socket.timeout if set to Non-Blocking).
<= This Point Blocking all Sockets and Channels. No Logging in journalctl. E32 Service and All Client is blocked.
<= And when kill client process, E32 Service unblocked
<= The number of repetitive errors below is proportional to the client's break time.
Is this what you intended, or is there a separate method that is valid?
The text was updated successfully, but these errors were encountered: