Hi all,
I spent the last couple of days trying to run one program in Wine. The program (Easy Wireless Net, end-user tool to control many CDMA modems, if you are interested in) extensively use EV_RXFLAG event which is currently unimplemented in Wine. I've made a simplest implementation possible (fire EV_RXLAG every time you have something in the serial port input buffer - all the messages come in once anyway) and it worked just fine with the aforementioned program, so I have two questions now:
1. Would the patch with such "implementation" for EV_RXFLAG be accepted to the mainline Wine (my take is having some sort of support for the feature is always better that not having support at all) ?
2. Of course, a proper implementation of the feature is desirable - i.e. one should look after EventChar in WaitCommEvent (ntdll/serial.c:wait_for_event(), to be precise) but unfortunately this lead to a trouble (I guess it's the reason why EV_RXFLAG is still unimplemented): you need to "peek" into a buffer or read the data twice: first time in WaitCommEvent to look for eventchar, and second - in NtReadFile to actually obtain the data. And of course, it's not possible, so some sort of buffering must be implemented. Alas, WINE's architecture doesn't imply any buffering between Unix and Windows layer as Developer's Guide states. My proposed solution is to read data in serial.c:wait_comm_event() and store it somewhere; then, in NtReadFile() one should check whether fd corresponds to serial file and, if so, look in the corresponding buffer before doing actual read. Does this fit nicely into WINE's design ? Or there are some other (more correct) approaches to perform this task?
Thank you in advance.
Regards, Valentine