admflash: sd_copy compact code and use lan rx buffer (zille)
This commit is contained in:
parent
fc9c1f2a86
commit
ea99b03659
|
@ -295,7 +295,7 @@ playRate = 50 'Hz
|
||||||
detune = 1.006
|
detune = 1.006
|
||||||
|
|
||||||
'Netzwerk-Puffergrößen (müssen Vielfaches von 2 sein!)
|
'Netzwerk-Puffergrößen (müssen Vielfaches von 2 sein!)
|
||||||
rxlen = 2048
|
rxlen = 2048 '[rxlen*sock#sNumSockets] must be 4096 or more (to use buffer for sd copy)!
|
||||||
txlen = 128
|
txlen = 128
|
||||||
|
|
||||||
'index für dmarker
|
'index für dmarker
|
||||||
|
@ -369,6 +369,12 @@ VAR
|
||||||
byte dcfon 'DCF-Betriebsmerker
|
byte dcfon 'DCF-Betriebsmerker
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __ADM_LAN
|
||||||
|
byte bufmain[rxlen*sock#sNumSockets] 'Buffer for everything ([rxlen*sock#sNumSockets] must be 4096 or more!)
|
||||||
|
#elseifdef __ADM_FAT_EXT
|
||||||
|
byte bufmain[4096] 'Buffer for everything (SD copy...)
|
||||||
|
#endif
|
||||||
|
|
||||||
CON ''------------------------------------------------- ADMINISTRA
|
CON ''------------------------------------------------- ADMINISTRA
|
||||||
|
|
||||||
PUB main | cmd,err 'chip: kommandointerpreter
|
PUB main | cmd,err 'chip: kommandointerpreter
|
||||||
|
@ -1015,91 +1021,64 @@ VAR
|
||||||
long dmarker[6] 'speicher für dir-marker
|
long dmarker[6] 'speicher für dir-marker
|
||||||
|
|
||||||
#ifdef __ADM_FAT_EXT
|
#ifdef __ADM_FAT_EXT
|
||||||
|
|
||||||
byte copy_buffer[4002] 'Kopier-Puffer
|
|
||||||
|
|
||||||
PRI sddmact(markernr)
|
|
||||||
|
|
||||||
ifnot dmarker[markernr] == TRUE
|
|
||||||
sdfat.setDirCluster(dmarker[markernr])
|
|
||||||
|
|
||||||
PRI sd_dirsize 'Anzahl Einträge im aktuellen Verzeichnis
|
PRI sd_dirsize 'Anzahl Einträge im aktuellen Verzeichnis
|
||||||
' sub_putlong(\sdfat.listSize)
|
' sub_putlong(\sdfat.listSize)
|
||||||
|
|
||||||
PRI sd_pos
|
PRI sd_pos
|
||||||
sub_putlong(sdfat.getCharacterPosition)
|
sub_putlong(sdfat.getCharacterPosition)
|
||||||
|
|
||||||
PRI sd_copy|laenge,schleife,rest,m,n,i,cpm,psm,e
|
PRI sd_copy|laenge,m,n,cpm,psm
|
||||||
cpm:=sub_getlong 'verzeichnismarker lesen (quelle)
|
cpm:=sub_getlong 'verzeichnismarker lesen (quelle)
|
||||||
psm:=sub_getlong 'verzeichnismarker lesen (ziel)
|
psm:=sub_getlong 'verzeichnismarker lesen (ziel)
|
||||||
sub_getstr 'dateiname lesen @tbuff
|
sub_getstr 'dateiname lesen @tbuff
|
||||||
|
|
||||||
outa[LED_OPEN]~~ 'LED an
|
outa[LED_OPEN]~~ 'LED an
|
||||||
|
|
||||||
dmarker[2] := cpm
|
sdfat.setDirCluster(cpm) 'Quellverzeichnis öffnen
|
||||||
sddmact(2)
|
|
||||||
|
|
||||||
\sdfat.openFile(@tbuf, "R")
|
\sdfat.openFile(@tbuf, "R") 'Quelldatei öffnen
|
||||||
laenge:=\sdfat.listSize
|
laenge:=\sdfat.listSize 'Dateigröße empfangen
|
||||||
\sdfat.closeFile
|
\sdfat.closeFile 'Datei schließen
|
||||||
|
|
||||||
schleife:=laenge/4000
|
|
||||||
rest:=laenge-(schleife*4000)
|
|
||||||
|
|
||||||
m:=0
|
m:=0
|
||||||
n:=0
|
n:=0
|
||||||
if schleife>0 'zu kopierende Datei größer 4001 Bytes?, ansonsten gleich zu Rest springen
|
repeat
|
||||||
repeat schleife 'Blöcke zu je 4001 Byte kopieren
|
'******************** Quelldatei lesen **********************************************
|
||||||
dmarker[2] := cpm
|
sdfat.setDirCluster(cpm) 'Quellverzeichnis öffnen
|
||||||
sddmact(2)
|
\sdfat.openFile(@tbuf, "R") 'Quelldatei öffnen
|
||||||
|
\sdfat.setCharacterPosition(m) 'Position innerhalb der Datei setzen
|
||||||
|
if laenge>4095 '4kB Daten lesen
|
||||||
|
\sdfat.readData(@bufmain, 4096)
|
||||||
|
m:=\sdfat.getCharacterPosition-1 'Position innerhalb der Datei merken
|
||||||
|
else 'Rest lesen
|
||||||
|
\sdfat.readData(@bufmain, laenge)
|
||||||
|
\sdfat.closeFile 'Datei schließen
|
||||||
|
'******************** Zieldatei schreiben *******************************************
|
||||||
|
sdfat.setDirCluster(psm) 'Zielverzeichnis öffnen
|
||||||
|
\sdfat.openFile(@tbuf, "W") 'Zieldatei zum schreiben öffnen
|
||||||
|
\sdfat.setCharacterPosition(m) 'Position innerhalb der Datei setzen
|
||||||
|
if laenge>4095 '4kB Daten schreiben
|
||||||
|
\sdfat.writeData(@bufmain, 4096)
|
||||||
|
n:=\sdfat.getCharacterPosition 'Position merken
|
||||||
|
else
|
||||||
|
\sdfat.writeData(@bufmain,laenge) 'Rest schreiben
|
||||||
|
quit 'Ausstieg
|
||||||
|
\sdfat.closeFile 'Datei schließen
|
||||||
|
'******************** Test auf Abbruch **********************************************
|
||||||
|
if bus_getchar==1 'Abbruch
|
||||||
|
\sdfat.closeFile 'Datei schließen
|
||||||
|
sub_putlong(n) 'Positionswert senden
|
||||||
|
return 'Ausstieg
|
||||||
|
sub_putlong(n) 'Kopierfortschritt zu Regnatix senden
|
||||||
|
laenge-=4095 '4kB von laenge abziehen
|
||||||
|
|
||||||
\sdfat.openFile(@tbuf2, "R")
|
\sdfat.closeFile 'Datei schließen
|
||||||
\sdfat.setCharacterPosition(m)
|
sub_putlong(-1) 'Aktion beendet senden
|
||||||
\sdfat.readData(@copy_buffer, 4001)
|
|
||||||
|
|
||||||
m:=\sdfat.getCharacterPosition-1
|
|
||||||
\sdfat.closeFile
|
|
||||||
dmarker[2] := psm
|
|
||||||
sddmact(2)
|
|
||||||
|
|
||||||
\sdfat.openFile(@tbuf, "W")
|
|
||||||
\sdfat.setCharacterPosition(m)
|
|
||||||
\sdfat.writeData(@copy_buffer, 4001)
|
|
||||||
|
|
||||||
n:=\sdfat.getCharacterPosition
|
|
||||||
\sdfat.closeFile
|
|
||||||
if bus_getchar==1
|
|
||||||
\sdfat.closeFile
|
|
||||||
sub_putlong(n)
|
|
||||||
return
|
|
||||||
sub_putlong(n) 'Kopierfortschritt zu Regnatix senden
|
|
||||||
|
|
||||||
|
|
||||||
'************und den Rest kopieren********************
|
|
||||||
dmarker[2] := cpm
|
|
||||||
sddmact(2)
|
|
||||||
|
|
||||||
\sdfat.openFile(@tbuf2, "R")
|
|
||||||
\sdfat.setCharacterPosition(m)
|
|
||||||
\sdfat.readData(@copy_buffer, rest)
|
|
||||||
|
|
||||||
' m:=\sdfat.getCharacterPosition
|
|
||||||
\sdfat.closeFile
|
|
||||||
dmarker[2] := psm
|
|
||||||
sddmact(2)
|
|
||||||
|
|
||||||
\sdfat.openFile(@tbuf, "W")
|
|
||||||
\sdfat.setCharacterPosition(n)
|
|
||||||
\sdfat.writeData(@copy_buffer, rest)
|
|
||||||
|
|
||||||
'n:=\sdfat.getCharacterPosition
|
|
||||||
\sdfat.closeFile
|
|
||||||
sub_putlong(-1)
|
|
||||||
|
|
||||||
outa[LED_OPEN]~ 'LED aus
|
outa[LED_OPEN]~ 'LED aus
|
||||||
|
|
||||||
#endif '__ADM_FAT_EXT
|
#endif '__ADM_FAT_EXT
|
||||||
|
|
||||||
PRI sd_mount(mode) | err 'sdcard: sd-card mounten frida
|
PRI sd_mount(mode) | err 'sdcard: sd-card mounten frida
|
||||||
''funktionsgruppe : sdcard
|
''funktionsgruppe : sdcard
|
||||||
''funktion : eingelegtes volume mounten
|
''funktion : eingelegtes volume mounten
|
||||||
|
@ -2470,7 +2449,6 @@ VAR
|
||||||
long sockhandle[sock#sNumSockets] 'Handle für mit sock.connect/sock.listen erstellten Socket
|
long sockhandle[sock#sNumSockets] 'Handle für mit sock.connect/sock.listen erstellten Socket
|
||||||
byte bufidx[sock#sNumSockets] 'zum Handle-Index gehörender Puffer-abschnitt
|
byte bufidx[sock#sNumSockets] 'zum Handle-Index gehörender Puffer-abschnitt
|
||||||
'(zum Socket mit dem Handle 2 gehört der Pufferabschnitt aus bufidx[2])
|
'(zum Socket mit dem Handle 2 gehört der Pufferabschnitt aus bufidx[2])
|
||||||
byte bufrx[rxlen*sock#sNumSockets] 'LAN Empfangspuffer
|
|
||||||
byte buftx[txlen*sock#sNumSockets] 'LAN Sendepuffer
|
byte buftx[txlen*sock#sNumSockets] 'LAN Sendepuffer
|
||||||
|
|
||||||
DAT
|
DAT
|
||||||
|
@ -2569,7 +2547,7 @@ PRI lan_connect | ipaddr, remoteport, handle, handleidx, i
|
||||||
quit
|
quit
|
||||||
i++
|
i++
|
||||||
|
|
||||||
ifnot (handle := sock.connect(ipaddr, remoteport, @bufrx[i*rxlen], rxlen, @buftx[i*txlen], txlen)) == -102
|
ifnot (handle := sock.connect(ipaddr, remoteport, @bufmain[i*rxlen], rxlen, @buftx[i*txlen], txlen)) == -102
|
||||||
sock.resetBuffers(handle)
|
sock.resetBuffers(handle)
|
||||||
handleidx := handle.byte[0] 'extract the handle index from the lower 8 bits
|
handleidx := handle.byte[0] 'extract the handle index from the lower 8 bits
|
||||||
sockhandle[handleidx] := handle 'komplettes handle zu handle index speichern
|
sockhandle[handleidx] := handle 'komplettes handle zu handle index speichern
|
||||||
|
@ -2596,7 +2574,7 @@ PRI lan_listen | port, handle, handleidx, i
|
||||||
quit
|
quit
|
||||||
i++
|
i++
|
||||||
|
|
||||||
ifnot (handle := sock.listen(port, @bufrx[i*rxlen], rxlen, @buftx[i*txlen], txlen)) == -102
|
ifnot (handle := sock.listen(port, @bufmain[i*rxlen], rxlen, @buftx[i*txlen], txlen)) == -102
|
||||||
handleidx := handle.byte[0] 'extract the handle index from the lower 8 bits
|
handleidx := handle.byte[0] 'extract the handle index from the lower 8 bits
|
||||||
sockhandle[handleidx] := handle 'komplettes handle zu handle index speichern
|
sockhandle[handleidx] := handle 'komplettes handle zu handle index speichern
|
||||||
bufidx[i] :=handleidx
|
bufidx[i] :=handleidx
|
||||||
|
|
Loading…
Reference in New Issue