Próbuję ręcznie wysłać na port szeregowy to samo co wysyła gotowe oprogramowanie od producenta.
Sekwencja w przypadku softu producenta wygląda następująco:
Sekwencja, którą udało mi się uzyskać:
Działanie mojego kodu nie jest takie samo jak kodu producenta.
Zastanawiam się jak wysłać: IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK i czy to jest powód dla którego soft nie działa jak trzeba. Niestety google prawie milczą na ten temat lub wiszą tematy z podobnym problemem ale bez odpowiedzi. Nie wiem też, czy akurat ten WAIT_MASK ma wpływ na nieprawidłowe działanie, czy problem leży gdzie indziej. Jak ktoś ogarnia RS-a, to może od razu rzuci mu się w oczy, że coś robię nie tak? Liczę, że ktoś z Was ma większe doświadczenie w tym temacie i pomoże.
Dodatkowo wydaje mi się, że taką transmisję powinno się się dać odtworzyć w dowolnym terminalu szeregowym. Wysłanie tylko tego, co jest przy IRP_MJ_WRITE niestety nie wystarcza :/
Sekwencja w przypadku softu producenta wygląda następująco:
00000158 04.02.2014 18:09:51.106 +27.034 IRP_MJ_CREATE - process 5956 (DemoStudio_RS232.exe) DOWN 0x00000000
00000159 04.02.2014 18:09:51.184 +0.078 IRP_MJ_CREATE UP 0x00000000
00000160 04.02.2014 18:09:51.184 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK DOWN 0x00000000 fd 01 00 00 ....
00000161 04.02.2014 18:09:51.184 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK UP 0x00000000
00000162 04.02.2014 18:09:51.184 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_QUEUE_SIZE DOWN 0x00000000 00 20 00 00 00 02 00 00 . ......
00000163 04.02.2014 18:09:51.184 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_QUEUE_SIZE UP 0x00000000
00000164 04.02.2014 18:09:51.184 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_PURGE DOWN 0x00000000 0f 00 00 00 ....
00000165 04.02.2014 18:09:51.184 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_PURGE UP 0x00000000
00000166 04.02.2014 18:09:51.184 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_TIMEOUTS DOWN 0x00000000 ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 88 13 00 00 ....................
00000167 04.02.2014 18:09:51.184 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_TIMEOUTS UP 0x00000000
00000184 04.02.2014 18:09:51.184 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_BAUD_RATE DOWN 0x00000000 00 c2 01 00 ....
00000185 04.02.2014 18:09:51.184 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK DOWN 0x00000000 fd 01 00 00 ....
00000186 04.02.2014 18:09:51.199 +0.015 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_BAUD_RATE UP 0x00000000
00000187 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_CLR_RTS DOWN 0x00000000
00000188 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_CLR_RTS UP 0x00000000
00000189 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_CLR_DTR DOWN 0x00000000
00000190 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_CLR_DTR UP 0x00000000
00000191 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_LINE_CONTROL DOWN 0x00000000 02 00 08 ...
00000192 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_LINE_CONTROL UP 0x00000000
00000193 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_CHARS DOWN 0x00000000 1a 00 00 00 11 13 ......
00000194 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_CHARS UP 0x00000000
00000195 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_HANDFLOW DOWN 0x00000000 00 00 00 00 00 00 00 00 00 08 00 00 00 08 00 00 ................
00000196 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_HANDFLOW UP 0x00000000
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000199 04.02.2014 18:09:51.199 +0.0 IRP_MJ_WRITE DOWN 0x00000000 de .
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000200 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK UP 0x00000000
00000201 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK DOWN 0x00000000 fd 01 00 00 ....
00000202 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK UP 0x00000000
00000206 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK DOWN 0x00000000 fd 01 00 00 ....
00000207 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK UP 0x00000000
00000215 04.02.2014 18:09:51.199 +0.0 IRP_MJ_READ UP 0x00000000 03 .
00000220 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK DOWN 0x00000000 fd 01 00 00 ....
00000221 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK UP 0x00000000
00000224 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK DOWN 0x00000000 fd 01 00 00 ....
00000225 04.02.2014 18:09:51.199 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK UP 0x00000000
00000232 04.02.2014 18:09:51.199 +0.0 IRP_MJ_READ UP 0x00000000 07 .
00000238 04.02.2014 18:09:51.199 +0.0 IRP_MJ_READ UP 0x00000000 01 .
00000244 04.02.2014 18:09:51.199 +0.0 IRP_MJ_READ UP 0x00000000 ff .
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000255 04.02.2014 18:10:08.874 +0.0 IRP_MJ_WRITE DOWN 0x00000000 d4 .
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000260 04.02.2014 18:10:08.890 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK DOWN 0x00000000 fd 01 00 00 ....
00000261 04.02.2014 18:10:08.890 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK UP 0x00000000
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000267 04.02.2014 18:10:08.890 +0.0 IRP_MJ_WRITE DOWN 0x00000000 a8 .
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000272 04.02.2014 18:10:08.890 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_PURGE DOWN 0x00000000 0a 00 00 00 ....
00000273 04.02.2014 18:10:08.890 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK DOWN 0x00000000 fd 01 00 00 ....
00000274 04.02.2014 18:10:08.890 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_PURGE UP 0x00000000
00000276 04.02.2014 18:10:08.890 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK UP 0x00000000
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000287 04.02.2014 18:10:11.308 +0.0 IRP_MJ_WRITE DOWN 0x00000000 da .
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000291 04.02.2014 18:10:11.308 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK DOWN 0x00000000 fd 01 00 00 ....
00000293 04.02.2014 18:10:11.308 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK UP 0x00000000
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000301 04.02.2014 18:10:13.273 +0.0 IRP_MJ_WRITE DOWN 0x00000000 f1 .
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000305 04.02.2014 18:10:13.273 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK DOWN 0x00000000 fd 01 00 00 ....
00000307 04.02.2014 18:10:13.273 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK UP 0x00000000 Sekwencja, którą udało mi się uzyskać:
00000352 04.02.2014 18:15:24.103 +182.200 IRP_MJ_CREATE - process 4144 (RS Mem.vshost.exe) DOWN 0x00000000
00000353 04.02.2014 18:15:24.181 +0.078 IRP_MJ_CREATE UP 0x00000000
00000374 04.02.2014 18:15:24.181 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_BAUD_RATE DOWN 0x00000000 00 4b 00 00 .K..
00000375 04.02.2014 18:15:24.196 +0.015 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_BAUD_RATE UP 0x00000000
00000376 04.02.2014 18:15:24.196 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_CLR_RTS DOWN 0x00000000
00000377 04.02.2014 18:15:24.196 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_CLR_RTS UP 0x00000000
00000378 04.02.2014 18:15:24.196 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_CLR_DTR DOWN 0x00000000
00000379 04.02.2014 18:15:24.196 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_CLR_DTR UP 0x00000000
00000380 04.02.2014 18:15:24.196 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_LINE_CONTROL DOWN 0x00000000 00 00 08 ...
00000381 04.02.2014 18:15:24.196 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_LINE_CONTROL UP 0x00000000
00000382 04.02.2014 18:15:24.196 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_CHARS DOWN 0x00000000 1a 00 00 1a 11 13 ......
00000383 04.02.2014 18:15:24.196 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_CHARS UP 0x00000000
00000384 04.02.2014 18:15:24.196 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_HANDFLOW DOWN 0x00000000 00 00 00 00 00 00 00 00 00 04 00 00 00 04 00 00 ................
00000385 04.02.2014 18:15:24.196 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_HANDFLOW UP 0x00000000
00000394 04.02.2014 18:15:24.196 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_BAUD_RATE DOWN 0x00000000 00 4b 00 00 .K..
00000395 04.02.2014 18:15:24.212 +0.015 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_BAUD_RATE UP 0x00000000
00000396 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_CLR_RTS DOWN 0x00000000
00000397 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_CLR_RTS UP 0x00000000
00000398 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_CLR_DTR DOWN 0x00000000
00000399 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_CLR_DTR UP 0x00000000
00000400 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_LINE_CONTROL DOWN 0x00000000 00 00 08 ...
00000401 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_LINE_CONTROL UP 0x00000000
00000402 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_CHARS DOWN 0x00000000 1a 00 00 1a 11 13 ......
00000403 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_CHARS UP 0x00000000
00000404 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_HANDFLOW DOWN 0x00000000 00 00 00 00 00 00 00 00 00 04 00 00 00 04 00 00 ................
00000405 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_HANDFLOW UP 0x00000000
00000406 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_CLR_DTR DOWN 0x00000000
00000407 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_CLR_DTR UP 0x00000000
00000408 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_TIMEOUTS DOWN 0x00000000 ff ff ff ff ff ff ff ff f4 01 00 00 00 00 00 00 f4 01 00 00 ....................
00000409 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_TIMEOUTS UP 0x00000000
00000410 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK DOWN 0x00000000 fb 01 00 00 ....
00000411 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK UP 0x00000000
00000412 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_QUEUE_SIZE DOWN 0x00000000 00 10 00 00 00 08 00 00 ........
00000413 04.02.2014 18:15:24.212 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_QUEUE_SIZE UP 0x00000000
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000415 04.02.2014 18:15:30.187 +5.974 IRP_MJ_WRITE DOWN 0x00000000 de .
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000417 04.02.2014 18:15:30.202 +0.015 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_PURGE DOWN 0x00000000 0a 00 00 00 ....
00000418 04.02.2014 18:15:30.202 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_PURGE UP 0x00000000
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000421 04.02.2014 18:15:30.202 +0.0 IRP_MJ_WRITE DOWN 0x00000000 d4 .
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000423 04.02.2014 18:15:30.202 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_PURGE DOWN 0x00000000 0a 00 00 00 ....
00000424 04.02.2014 18:15:30.202 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_PURGE UP 0x00000000
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000427 04.02.2014 18:15:30.202 +0.0 IRP_MJ_WRITE DOWN 0x00000000 a8 .
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000429 04.02.2014 18:15:30.202 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_PURGE DOWN 0x00000000 0a 00 00 00 ....
00000430 04.02.2014 18:15:30.202 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_PURGE UP 0x00000000
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000433 04.02.2014 18:15:30.202 +0.0 IRP_MJ_WRITE DOWN 0x00000000 da .
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000435 04.02.2014 18:15:30.202 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_PURGE DOWN 0x00000000 0a 00 00 00 ....
00000436 04.02.2014 18:15:30.202 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_PURGE UP 0x00000000
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000439 04.02.2014 18:15:30.202 +0.0 IRP_MJ_WRITE DOWN 0x00000000 f1 .
!!!!!!!!!!!!!!!!!!!!!!!!!!
00000441 04.02.2014 18:15:30.202 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_PURGE DOWN 0x00000000 0a 00 00 00 ....
00000442 04.02.2014 18:15:30.202 +0.0 IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_PURGE UP 0x00000000 Działanie mojego kodu nie jest takie samo jak kodu producenta.
Zastanawiam się jak wysłać: IRP_MJ_DEVICECONTROL: IOCTL_SERIAL_SET_WAIT_MASK i czy to jest powód dla którego soft nie działa jak trzeba. Niestety google prawie milczą na ten temat lub wiszą tematy z podobnym problemem ale bez odpowiedzi. Nie wiem też, czy akurat ten WAIT_MASK ma wpływ na nieprawidłowe działanie, czy problem leży gdzie indziej. Jak ktoś ogarnia RS-a, to może od razu rzuci mu się w oczy, że coś robię nie tak? Liczę, że ktoś z Was ma większe doświadczenie w tym temacie i pomoże.
Dodatkowo wydaje mi się, że taką transmisję powinno się się dać odtworzyć w dowolnym terminalu szeregowym. Wysłanie tylko tego, co jest przy IRP_MJ_WRITE niestety nie wystarcza :/