I would like to implement a minimal Drivewire Server in Python... Just to show how it really works. (And i didn't like Java... )
Does anyone have done this? Where are good documentation around Drivewire?
Drivewire... -> DWLOAD Server in Python
Drivewire... -> DWLOAD Server in Python
Last edited by jedie on Fri Nov 14, 2014 10:51 am, edited 1 time in total.
... too many ideas and too little time ... Related stuff written in Python:
Dragon 32 emulator / PyDC - Python Dragon 32 converter: https://github.com/jedie/DragonPy
DWLOAD server / Dragon-Lib and other stuff: https://github.com/6809
Dragon 32 emulator / PyDC - Python Dragon 32 converter: https://github.com/jedie/DragonPy
DWLOAD server / Dragon-Lib and other stuff: https://github.com/6809
Re: Drivewire...
hello,
maybe this link could shine a bit of light on this project:
https://sites.google.com/site/drivewire4/
good luck
regards
pere
maybe this link could shine a bit of light on this project:
https://sites.google.com/site/drivewire4/
good luck
regards
pere
Re: Drivewire...
See also
DriveWire Lite: a reimplementation in C of the server side of the DriveWire 3 protocol.
http://sourceforge.net/projects/dwlite/
and the DriveWire 3 Protocol Specification document:
http://www.frontiernet.net/~mmarlette/C ... cation.pdf
DriveWire Lite: a reimplementation in C of the server side of the DriveWire 3 protocol.
http://sourceforge.net/projects/dwlite/
and the DriveWire 3 Protocol Specification document:
http://www.frontiernet.net/~mmarlette/C ... cation.pdf
Re: Drivewire...
Thanks for the links!
I didn't know that there is a DriveWire lite written in C!
I didn't know that there is a DriveWire lite written in C!
... too many ideas and too little time ... Related stuff written in Python:
Dragon 32 emulator / PyDC - Python Dragon 32 converter: https://github.com/jedie/DragonPy
DWLOAD server / Dragon-Lib and other stuff: https://github.com/6809
Dragon 32 emulator / PyDC - Python Dragon 32 converter: https://github.com/jedie/DragonPy
DWLOAD server / Dragon-Lib and other stuff: https://github.com/6809
Re: Drivewire...
Now i think it would be good to implement a DriveWire Server specialy for DWLOAD...
That can handle the save file and skip the padding stuff...
Don't know how many work will this be...
That can handle the save file and skip the padding stuff...
Don't know how many work will this be...
... too many ideas and too little time ... Related stuff written in Python:
Dragon 32 emulator / PyDC - Python Dragon 32 converter: https://github.com/jedie/DragonPy
DWLOAD server / Dragon-Lib and other stuff: https://github.com/6809
Dragon 32 emulator / PyDC - Python Dragon 32 converter: https://github.com/jedie/DragonPy
DWLOAD server / Dragon-Lib and other stuff: https://github.com/6809
Re: Drivewire...
Currently i ask myself if it possible to have a dynamic AUTOLOAD.DWL ?!?
The default AUTOLOAD.DWL from the examples (dwload-demo-files.tar.xz.zip from: viewtopic.php?f=5&t=4964 ) is nice.
It's a simple static BASIC program. Would be nice if the file select menu is dynamic, isn't it?
Why not collect all DWEEB filenames and "compile" a AUTOLOAD.DWL on-the-fly... Maybe it will be possible to add subdirectory support and pageing?!?
The default AUTOLOAD.DWL from the examples (dwload-demo-files.tar.xz.zip from: viewtopic.php?f=5&t=4964 ) is nice.
It's a simple static BASIC program. Would be nice if the file select menu is dynamic, isn't it?
Why not collect all DWEEB filenames and "compile" a AUTOLOAD.DWL on-the-fly... Maybe it will be possible to add subdirectory support and pageing?!?
... too many ideas and too little time ... Related stuff written in Python:
Dragon 32 emulator / PyDC - Python Dragon 32 converter: https://github.com/jedie/DragonPy
DWLOAD server / Dragon-Lib and other stuff: https://github.com/6809
Dragon 32 emulator / PyDC - Python Dragon 32 converter: https://github.com/jedie/DragonPy
DWLOAD server / Dragon-Lib and other stuff: https://github.com/6809
Re: Drivewire...
I started to implement...
But i didn't understand the complete communication. In DriveWire 4 Server i enabled the raw bytes logging with:
in the config.xml
Requesting AUTOLOAD.DWL via DLOAD looks like this:
In my current code ( https://gist.github.com/jedie/c6a066c102b3048c4d69 ) it looks like this:
What i understand from the origin Logging (here a cut version):
The "DriveWire 3 Specification.pdf" didn't help me... Is there somewhere other documentations?
EDIT: Add some more suggestions in last log...
But i didn't understand the complete communication. In DriveWire 4 Server i enabled the raw bytes logging with:
Code: Select all
<LogDeviceBytes category="logging,advanced" type="boolean">true</LogDeviceBytes>
Requesting AUTOLOAD.DWL via DLOAD looks like this:
Code: Select all
12 Nov 2014 10:56:54 DEBUG [dwproto-0-10 ] READ1: 0
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] READ1: 1
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] READ1: 12
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] READ 12: 65 85 84 79 76 79 65 68 46 68 87 76
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] WRITE1: 255
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] READ1: 210
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] READ 4: 255 0 0 0
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] WRITE 256: 85 1 30 1 2 92 30 1 170 30 12 0 5 58 131 65 65 65 65 0 30 18 0 7 135 0 30 38 0 10 135 34 49 32 32 80 76 65 83 77 65 32 32 32 34 0 30 54 0 20 135 34 50 32 32 83 84 85 68 68 34 0 30 76 0 30 135 34 51 32 32 70 76 65 71 79 78 32 66 73 82 68 34 0 30 98 0 40 135 34 52 32 32 68 79 78 75 69 89 32 75 73 78 71 34 0 30 115 0 50 135 34 53 32 32 90 65 88 88 79 78 34 0 30 134 0 60 135 34 54 32 32 69 76 67 72 65 78 67 69 34 0 30 166 0 80 135 34 56 32 32 73 78 73 84 32 87 80 32 56 48 45 67 79 76 83 32 66 79 65 82 68 34 0 30 182 0 90 135 34 57 32 32 69 76 73 83 65 34 0 30 201 0 100 135 34 78 32 32 78 73 84 82 79 83 45 57 34 0 30 219 0 110 135 34 72 32 32 72 68 66 45 68 79 83 34 0 30 229 0 200 65 36 203 255 154 0 30 248 0 205 133 32 65 36 203 34 34 32 129 188 32 50 48 48 0
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] READ 2: 60 213
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] WRITE1: 0
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] READ1: 210
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] READ 4: 255 0 0 1
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] WRITE 256: 31 16 0 210 133 32 65 36 203 34 49 34 191 32 185 34 80 76 65 83 77 65 34 0 31 39 0 220 133 32 65 36 203 34 50 34 191 32 185 34 83 84 85 68 68 34 0 31 61 0 230 133 32 65 36 203 34 51 34 191 32 185 34 70 76 65 80 34 0 31 83 0 240 133 32 65 36 203 34 52 34 191 32 185 34 75 73 78 71 34 0 31 107 0 250 133 32 65 36 203 34 53 34 191 32 185 34 90 65 88 88 79 78 34 0 31 127 1 4 133 32 65 36 203 34 54 34 32 129 188 32 53 48 48 0 31 160 1 24 133 32 65 36 203 34 56 34 191 32 150 50 48 48 44 38 72 55 68 70 70 58 185 34 87 80 84 34 0 31 187 1 34 133 32 65 36 203 34 57 34 191 32 185 34 69 76 73 83 65 46 66 65 83 34 0 31 209 1 44 133 32 65 36 203 34 78 34 191 32 185 34 68 79 83 78 34 0 31 230 1 54 133 32 65 36 203 34 72 34 191 32 185 34 72 68 66 34 0 31 249 1 134 133 32 65 36 204 202 34 32 34 32 129 188 32 55
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] READ 2: 75 95
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] WRITE1: 0
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] READ1: 210
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] READ 4: 255 0 0 2
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] WRITE 256: 0 32 20 1 144 135 34 84 89 80 69 32 39 82 85 78 39 32 70 79 82 32 77 69 78 85 34 0 32 26 1 154 138 0 32 35 1 244 183 52 44 49 0 32 52 1 254 185 78 34 69 76 67 72 65 78 67 69 34 0 32 61 2 8 174 49 44 49 0 32 80 2 18 133 32 255 154 203 34 34 32 129 188 32 53 51 48 0 32 89 2 28 129 188 32 55 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] READ 2: 24 245
12 Nov 2014 10:56:55 DEBUG [dwproto-0-10 ] WRITE1: 0
In my current code ( https://gist.github.com/jedie/c6a066c102b3048c4d69 ) it looks like this:
Code: Select all
C:\Python34\python.exe V:/workspace/DwLoadServer/dwload_server.py
194 INFO dwload_server 64 Root directory is: 'dwload-demo-files'
Settings for serial 'COM3':
baudrate : 57600
bytesize : 8
dsrdtr : False
interCharTimeout : None
parity : N
rtscts : False
stopbits : 1
timeout : None
writeTimeout : None
xonxoff : False
257 DEBUG dwload_server 112 Serve forever
257 DEBUG dwload_server 48 READ 1:
13321 DEBUG dwload_server 50 dez: 1
13321 DEBUG dwload_server 51 hex: $01
13321 DEBUG dwload_server 114 Request type: $01
13321 DEBUG dwload_server 116 Request a file.
13321 DEBUG dwload_server 48 READ 1:
13321 DEBUG dwload_server 50 dez: 12
13321 DEBUG dwload_server 51 hex: $0c
13321 DEBUG dwload_server 88 Read block with a length of 12
13321 DEBUG dwload_server 48 READ 12:
13322 DEBUG dwload_server 50 dez: 65 85 84 79 76 79 65 68 46 68 87 76
13322 DEBUG dwload_server 51 hex: $41 $55 $54 $4f $4c $4f $41 $44 $2e $44 $57 $4c
13322 DEBUG dwload_server 94 Filename has 12 Bytes.
13322 DEBUG dwload_server 96 Filename: 'AUTOLOAD.DWL'
13322 DEBUG dwload_server 55 WRITE 1:
13322 DEBUG dwload_server 56 dez: 255
13322 DEBUG dwload_server 57 hex: $ff
13322 DEBUG dwload_server 48 READ 1:
13324 DEBUG dwload_server 50 dez: 210
13324 DEBUG dwload_server 51 hex: $d2
13324 DEBUG dwload_server 48 READ 4:
13324 DEBUG dwload_server 50 dez: 255 0 0 0
13324 DEBUG dwload_server 51 hex: $ff $00 $00 $00
13324 DEBUG dwload_server 103 Use filepath: 'dwload-demo-files\\AUTOLOAD.DWL'
13332 DEBUG dwload_server 108 File content are 768 bytes.
Traceback (most recent call last):
File "V:/workspace/DwLoadServer/dwload_server.py", line 142, in <module>
dwload.serve_forever()
File "V:/workspace/DwLoadServer/dwload_server.py", line 118, in serve_forever
raise NotImplementedError()
NotImplementedError
What i understand from the origin Logging (here a cut version):
Between the block should be a block length and a checksum and some more meta information...READ1: 0
READ1: 1 <- request type (here read a file)
READ1: 12 <- filename byte count
READ 12: 65 85 84 79 76 79 65 68 46 68 87 76 <- filename, here: 'AUTOLOAD.DWL'
WRITE1: 255 <- maybe start transfer?!?
READ1: 210 <- == $D2 for read extended transaction!?!?
READ 4: 255 0 0 0 <- 255=Drive Number and 0 0 0 are LSN (Logical Sector Number) a 24 bit value
WRITE 256: 85 1 30 ... 48 48 0 <- 256 byte block of the file content
READ 2: 60 213 <- maybe the 16 bit checksum computed by Dragon?!?
WRITE1: 0 <- maybe confirm the checksum?!?
READ1: 210 <- == $D2 for read extended transaction!?!?
READ 4: 255 0 0 1 <- 255=Drive Number and 0 0 1 are LSN (Logical Sector Number) a 24 bit value
WRITE 256: 31 16 0 ... 188 32 55 <- 256 byte block of the file content
READ 2: 75 95 <- maybe the 16 bit checksum computed by Dragon?!?
WRITE1: 0 <- maybe confirm the checksum?!?
READ1: 210 <- == $D2 for read extended transaction!?!?
READ 4: 255 0 0 2 <- 255=Drive Number and 0 0 2 are LSN (Logical Sector Number) a 24 bit value
WRITE 256: 0 32 20 ... 0 0 0 <- 256 byte block of the file content
READ 2: 24 245 <- maybe the 16 bit checksum computed by Dragon?!?
WRITE1: 0 <- maybe confirm the checksum?!?
The "DriveWire 3 Specification.pdf" didn't help me... Is there somewhere other documentations?
EDIT: Add some more suggestions in last log...
... too many ideas and too little time ... Related stuff written in Python:
Dragon 32 emulator / PyDC - Python Dragon 32 converter: https://github.com/jedie/DragonPy
DWLOAD server / Dragon-Lib and other stuff: https://github.com/6809
Dragon 32 emulator / PyDC - Python Dragon 32 converter: https://github.com/jedie/DragonPy
DWLOAD server / Dragon-Lib and other stuff: https://github.com/6809
Re: Drivewire...
OK, file sending works now!!!
I create a repro for it: https://github.com/DWLOAD/DwLoadServer
I use the github opensource organization: https://github.com/DWLOAD for it, see: viewtopic.php?f=5&t=4971 (Maybe it makes sence to mege it, if implementation is more useable...)
Logging output of two file Requests is here: https://gist.github.com/jedie/43245bd5ecb80eeeac87
I create a repro for it: https://github.com/DWLOAD/DwLoadServer
I use the github opensource organization: https://github.com/DWLOAD for it, see: viewtopic.php?f=5&t=4971 (Maybe it makes sence to mege it, if implementation is more useable...)
Logging output of two file Requests is here: https://gist.github.com/jedie/43245bd5ecb80eeeac87
... too many ideas and too little time ... Related stuff written in Python:
Dragon 32 emulator / PyDC - Python Dragon 32 converter: https://github.com/jedie/DragonPy
DWLOAD server / Dragon-Lib and other stuff: https://github.com/6809
Dragon 32 emulator / PyDC - Python Dragon 32 converter: https://github.com/jedie/DragonPy
DWLOAD server / Dragon-Lib and other stuff: https://github.com/6809
Re: Drivewire...
with https://github.com/DWLOAD/DwLoadServer/ ... e44082a0dc the RESAVE worked
... too many ideas and too little time ... Related stuff written in Python:
Dragon 32 emulator / PyDC - Python Dragon 32 converter: https://github.com/jedie/DragonPy
DWLOAD server / Dragon-Lib and other stuff: https://github.com/6809
Dragon 32 emulator / PyDC - Python Dragon 32 converter: https://github.com/jedie/DragonPy
DWLOAD server / Dragon-Lib and other stuff: https://github.com/6809
Re: Drivewire...
Great stuff. It is always nice to have several options...
I think a nice milestone would be that you can run NitrOS-9 through your server. You basically need the read and write support (OP_WRITE, OP_REWRITE, OP_READEX, OP_REREADEX) and OP_TIME to provide the clock. And empty OP_SERREAD, OP_GETSTAT, OP_INIT, OP_DWINIT to keep it happy. I know this by experience, more on that later :p
I think a nice milestone would be that you can run NitrOS-9 through your server. You basically need the read and write support (OP_WRITE, OP_REWRITE, OP_READEX, OP_REREADEX) and OP_TIME to provide the clock. And empty OP_SERREAD, OP_GETSTAT, OP_INIT, OP_DWINIT to keep it happy. I know this by experience, more on that later :p