diff --git a/lib/glob-con.spin b/lib/glob-con.spin index 4da6846..88fec04 100644 --- a/lib/glob-con.spin +++ b/lib/glob-con.spin @@ -173,7 +173,8 @@ A_AYS = %00000000_00000000_00000010_00000000 a_lanRXTime 'bestimmte Zeit warten auf Byte aus Empfangspuffer a_lanRXData 'Daten aus Empfangspuffer lesen a_lanTXData 'Daten senden - a_lanRXByte '80 'wenn vorhanden, Byte aus Empfangspuffer lesen + a_lanRXByte 'wenn vorhanden, Byte aus Empfangspuffer lesen + a_lanIsConnected '81 'TRUE, wenn Socket verbunden, sonst FALSE ' ---------------------------------------------- CHIP-MANAGMENT #92, a_mgrSetSound 'soundsubsysteme verwalten diff --git a/lib/reg-ios.spin b/lib/reg-ios.spin index e227dd9..e1dd4c7 100644 --- a/lib/reg-ios.spin +++ b/lib/reg-ios.spin @@ -1036,6 +1036,8 @@ PUB lanstart 'LAN starten ''busprotokoll : [071] bus_putchar1(gc#a_lanStart) + waitcnt(cnt + clkfreq) '1sek warten (nach ios.lanstart dauert es, bis der Stack funktioniert) + PUB lanstop 'LAN beenden ''funktionsgruppe : lan @@ -1045,6 +1047,7 @@ PUB lanstop 'LAN beenden ''busprotokoll : [072] bus_putchar1(gc#a_lanStop) + waitcnt(cnt + clkfreq) '1sek warten, bis in Administra wirklich beendet PUB lan_connect(ipaddr, remoteport): handleidx ''funktionsgruppe : lan @@ -1132,6 +1135,7 @@ PUB lan_rxdata(handleidx, filename, len): error | fnr '' : len - Anzahl zu empfangende Bytes '' : error - ungleich Null bei Fehler + rd_del(filename) 'File aus RAM-Disk löschen (falls vorhanden) rd_newfile(filename,len) fnr := rd_open(filename) ifnot fnr == -1 @@ -1182,6 +1186,20 @@ PUB lan_rxbyte(handleidx): rxbyte rxbyte := bus_getchar1 rxbyte := ~rxbyte +PUB lan_isconnected(handleidx): connected +''funktionsgruppe : lan +''funktion : TRUE, wenn Socket verbunden, sonst FALSE +''eingabe : - +''ausgabe : - +''busprotokoll : [081][sub_putlong.handleidx]][get.connected] +'' : handleidx - lfd. Nr. der Verbindung +'' : connected - TRUE, wenn Socket verbunden, sonst FALSE + + bus_putchar1(gc#a_lanIsConnected) + bus_putchar1(handleidx) + connected := bus_getchar1 + connected := ~connected + CON ''------------------------------------------------- Hydra Sound System PUB hss_playfile(stradr) | status 'hss: spielt übergebene hss-datei von sd-card diff --git a/system/administra/admnet/admnet.spin b/system/administra/admnet/admnet.spin index e644d76..f0c8a3c 100644 --- a/system/administra/admnet/admnet.spin +++ b/system/administra/admnet/admnet.spin @@ -300,6 +300,7 @@ PUB main | cmd,err 'chip: kommandointerpret gc#a_lanRXData: lan_rxdata 'Daten aus Empfangspuffer lesen gc#a_lanTXData: lan_txdata 'Daten senden gc#a_lanRXByte: lan_rxbyte 'wenn vorhanden, Byte aus Empfangspuffer lesen + gc#a_lanIsConnected: lan_isconnected 'TRUE, wenn Socket verbunden, sonst FALSE ' ---------------------------------------------- CHIP-MANAGMENT gc#a_mgrGetSpec: mgr_getspec 'spezifikation abfragen @@ -1348,6 +1349,17 @@ PRI lan_rxbyte bus_putchar(sock.readByteNonBlocking(sockhandle[bus_getchar])) +PRI lan_isconnected +''funktionsgruppe : lan +''funktion : Returns true if the socket is connected, false otherwise +''eingabe : - +''ausgabe : - +''busprotokoll : [081][get.handleidx][put.connected] +'' : handleidx - lfd. Nr. der Verbindung +'' : connected - TRUE wenn verbunden, sonst FALSE + + bus_putchar(sock.isConnected(sockhandle[bus_getchar])) + DAT long ' long alignment for addresses ip_addr byte 10, 1, 1, 1 'ip diff --git a/system/regnatix/ftp.spin b/system/regnatix/ftp.spin index 306650c..7340087 100644 --- a/system/regnatix/ftp.spin +++ b/system/regnatix/ftp.spin @@ -20,7 +20,9 @@ COG's : - Logbuch : 22.12.2013-joergd - erste Version - +05.01.2014-joergd - Defaultwerte gesetzt + - Speichern auf SD-Card + - Parameter für Benutzer und Paßwort Kommandoliste : @@ -42,22 +44,37 @@ _XINFREQ = 5_000_000 LANMASK = %00000000_00000000_00000000_00100000 +CON 'NVRAM Konstanten -------------------------------------------------------------------------- + +#4, NVRAM_IPADDR +#8, NVRAM_IPMASK +#12, NVRAM_IPGW +#16, NVRAM_IPDNS +#20, NVRAM_IPBOOT +#24, NVRAM_HIVE ' 4 Bytes + VAR long ip_addr byte parastr[64] byte remdir[64] byte filename[64] + byte username[64] + byte password[64] byte strTemp[128] byte addrset + byte save2card byte handleidx_control 'Handle FTP Control Verbindung byte handleidx_data 'Handle FTP Data Verbindung PUB main ip_addr := 0 + save2card := FALSE remdir[0] := 0 filename[0] := 0 + username[0] := 0 + password[0] := 0 ios.start ifnot (ios.admgetspec & LANMASK) @@ -69,19 +86,23 @@ PUB main if byte[@parastr][0] == "/" 'option? case byte[@parastr][1] "?": ios.print(@help) - "s": if ios.paranext(@parastr) + "f": if ios.paranext(@parastr) setaddr(@parastr) "v": ios.paranext(@remdir) "d": ios.paranext(@filename) + "u": ios.paranext(@username) + "p": ios.paranext(@password) + "s": save2card := TRUE other: ios.print(@help) - ifnot ftpconnect - ifnot ftplogin(string("anonymous"),string("password")) - ifnot byte[@remdir][0] == 0 + ifnot byte[@filename][0] == 0 + ifnot ftpconnect + ifnot ftplogin ftpcwd - ifnot byte[@filename][0] == 0 if ftppasv ftpretr + else + ios.print(string("Keine Datei zum Downloaden angegeben, beende...",10)) ftpclose @@ -90,28 +111,27 @@ PUB main PRI ftpconnect ifnot (ip_addr) ' Adresse 0.0.0.0 - ios.print(string("FTP-Server nicht angegeben (Parameter /s)")) - ios.printnl - return(-1) - ios.print(string("Starte LAN...")) - ios.printnl + ios.print(string("FTP-Server nicht angegeben (Parameter /s)",10)) + ip_addr := ios.getNVSRAM(NVRAM_IPBOOT) << 24 + ip_addr += ios.getNVSRAM(NVRAM_IPBOOT+1) << 16 + ip_addr += ios.getNVSRAM(NVRAM_IPBOOT+2) << 8 + ip_addr += ios.getNVSRAM(NVRAM_IPBOOT+3) + if (ip_addr) + ios.print(string("Verwende Boot-Server (mit ipconfig gesetzt).",10)) + else + return(-1) + ios.print(string("Starte LAN...",10)) ios.lanstart - delay_ms(800) 'nach ios.lanstart dauert es, bis der Stack funktioniert - ios.print(string("Verbinde mit FTP-Server...")) - ios.printnl + ios.print(string("Verbinde mit FTP-Server...",10)) if (handleidx_control := ios.lan_connect(ip_addr, 21)) == $FF - ios.print(string("Kein Socket frei...")) - ios.printnl + ios.print(string("Kein Socket frei...",10)) return(-1) ifnot (ios.lan_waitconntimeout(handleidx_control, 2000)) - ios.print(string("Verbindung mit FTP-Server konnte nicht aufgebaut werden.")) - ios.printnl + ios.print(string("Verbindung mit FTP-Server konnte nicht aufgebaut werden.",10)) return(-1) - ios.print(string("Verbindung mit FTP-Server hergestellt, warte auf Antwort...")) - ios.printnl + ios.print(string("Verbindung mit FTP-Server hergestellt, warte auf Antwort...",10)) ifnot getResponse(string("220 ")) - ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.")) - ios.printnl + ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.",10)) return(-1) return(0) @@ -124,17 +144,17 @@ PRI ftpclose ios.lan_close(handleidx_data) handleidx_data := $FF -PRI ftplogin(username, password) | pwreq, respOK +PRI ftplogin | pwreq, respOK, hiveid pwreq := FALSE respOK := FALSE - ifnot strsize(username) - username := string("anonymous") - if sendStr(string("USER ")) || sendStr(username) || sendStr(string(13,10)) - ios.print(string("Fehler beim Senden des Usernamens")) - ios.printnl - return(-1) + sendStr(string("USER ")) + if strsize(@username) + sendStr(@username) + sendStr(string(13,10)) + else + sendStr(string("anonymous",13,10)) repeat until readLine == -1 ios.print(string(" < ")) @@ -149,33 +169,42 @@ PRI ftplogin(username, password) | pwreq, respOK respOk := TRUE quit ifnot respOK - ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.")) - ios.printnl + ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.",10)) return(-1) ifnot pwreq return(0) - if sendStr(string("PASS ")) || sendStr(password) || sendStr(string(13,10)) - ios.print(string("Fehler beim Senden des Passworts")) - ios.printnl - return(-1) + sendStr(string("PASS ")) + if strsize(@password) + sendStr(@password) + sendStr(string(13,10)) + else + hiveid := ios.getNVSRAM(NVRAM_HIVE) + hiveid += ios.getNVSRAM(NVRAM_HIVE+1) << 8 + hiveid += ios.getNVSRAM(NVRAM_HIVE+2) << 16 + hiveid += ios.getNVSRAM(NVRAM_HIVE+3) << 24 + sendStr(string("anonymous@hive")) + sendStr(str.trimCharacters(num.ToStr(hiveid, num#DEC))) + sendStr(string(13,10)) + ifnot getResponse(string("230 ")) - ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.")) - ios.printnl + ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.",10)) return(-1) return(0) -PRI ftpcwd +PRI ftpcwd | i - if sendStr(string("CWD ")) || sendStr(@remdir) || sendStr(string(13,10)) - ios.print(string("Fehler beim Senden des Verzeichnisses")) - ios.printnl + if byte[@remdir][0] == 0 + i := sendStr(string("CWD ")) || sendStr(@defdir) || sendStr(string(13,10)) + else + i := sendStr(string("CWD ")) || sendStr(@remdir) || sendStr(string(13,10)) + if i + ios.print(string("Fehler beim Senden des Verzeichnisses",10)) return(-1) ifnot getResponse(string("250 ")) - ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.")) - ios.printnl + ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.",10)) return(-1) return(0) @@ -212,45 +241,38 @@ PRI ftppasv : port | i, k, port256, port1 quit if (port == 0) - ios.print(string("FTP-Server-Fehler beim Öffnen des Passiv-Ports")) - ios.printnl + ios.print(string("FTP-Server-Fehler beim Öffnen des Passiv-Ports",10)) return(0) ios.print(string("Öffne Verbindung zu Passiv-Port ")) ios.print(num.ToStr(port, num#DEC)) ios.printnl if (handleidx_data := ios.lan_connect(ip_addr, port)) == $FF - ios.print(string("Kein Socket frei...")) - ios.printnl + ios.print(string("Kein Socket frei...",10)) return(0) ifnot (ios.lan_waitconntimeout(handleidx_data, 2000)) - ios.print(string("Verbindung mit FTP-Server konnte nicht aufgebaut werden.")) - ios.printnl + ios.print(string("Verbindung mit FTP-Server konnte nicht aufgebaut werden.",10)) return(0) PRI ftpretr | len, respOK if sendStr(string("TYPE I",13,10)) - ios.print(string("Fehler beim Senden des Types")) - ios.printnl + ios.print(string("Fehler beim Senden des Types",10)) return(-1) ifnot getResponse(string("200 ")) - ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.")) - ios.printnl + ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.",10)) return(-1) if sendStr(string("SIZE ")) || sendStr(@filename) || sendStr(string(13,10)) - ios.print(string("Fehler beim Senden des SIZE-Kommandos")) - ios.printnl + ios.print(string("Fehler beim Senden des SIZE-Kommandos",10)) return(-1) ifnot getResponse(string("213")) - ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.")) - ios.printnl + ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.",10)) return(-1) ifnot(len := num.FromStr(@strTemp+4, num#DEC)) return(-1) if sendStr(string("RETR ")) || sendStr(@filename) || sendStr(string(13,10)) - ios.print(string("Fehler beim Senden des Filenamens")) + ios.print(string("Fehler beim Senden des Filenamens",10)) return -1 respOK := FALSE repeat until readLine == -1 @@ -265,20 +287,35 @@ PRI ftpretr | len, respOK respOk := TRUE quit ifnot respOK - ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.")) - ios.printnl + ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.",10)) return(-1) if ios.lan_rxdata(handleidx_data, @filename, len) - ios.print(string("Fehler beim Empfang der Datei.")) - ios.printnl + ios.print(string("Fehler beim Empfang der Datei.",10)) return(-1) ifnot getResponse(string("226 ")) - ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.")) - ios.printnl + ios.print(string("Keine oder falsche Antwort vom FTP-Server erhalten.",10)) return(-1) + if save2card + writeToSDCard + ios.print(string("Speichere auf SD-Card...",10)) + +PRI writeToSDCard | fnr, len, i + + fnr := ios.rd_open(@filename) + ifnot fnr == -1 + len := ios.rd_len(fnr) + ios.sddel(@filename) 'falls alte Datei auf SD-Card vorhanden, diese löschen + ifnot ios.sdnewfile(@filename) + ifnot ios.sdopen("W",@filename) + i := 0 + ios.sdxputblk(fnr,len) 'daten als block schreiben + ios.sdclose + ios.rd_del(@filename) + ios.rd_close(fnr) + PRI setaddr (ipaddr) | pos, count 'IP-Adresse in Variable schreiben count := 3 @@ -327,16 +364,20 @@ PRI sendStr (strSend) : error ios.printnl error := ios.lan_txdata(handleidx_control, strSend, strsize(strSend)) -PRI delay_ms(Duration) - waitcnt(((clkfreq / 1_000 * Duration - 3932)) + cnt) +DAT -DAT 'sys: helptext - - -help byte "/? : Hilfe",13 - byte "/s : Server-Adresse",13 - byte "/v : in entferntes Verzeichnis wechseln",13 - byte "/d : Download ",13 +defdir byte "/hive/sdcard/system",0 +help byte "/? : Hilfe",10 + byte "/f : FTP-Server-Adresse",10 + byte " (default: mit ipconfig gesetzter Boot-Server)",10 + byte "/v : in entferntes Verzeichnis wechseln",10 + byte " (default: /hive/sdcard/system)",10 + byte "/d : Download ",10 + byte "/u : Benutzername am FTP-Server",10 + byte " (default: anonymous)",10 + byte "/p : Paßwort am FTP-Server",10 + byte " (default: anonymous@hive)",10 + byte "/s : Datei auf SD-Card speichern",10 byte 0 DAT 'lizenz diff --git a/system/regnatix/ipconfig.spin b/system/regnatix/ipconfig.spin index 6676521..1c08518 100644 --- a/system/regnatix/ipconfig.spin +++ b/system/regnatix/ipconfig.spin @@ -20,7 +20,7 @@ COG's : - Logbuch : 11.06.2013-joergd - erste Version, basierend auf time.spin - +05.01.2014-joergd - kleine Verbesserungen im Parameter-Handling Kommandoliste : @@ -33,13 +33,15 @@ Notizen : OBJ ios: "reg-ios" str: "glob-string" - num: "glob-numbers" 'Number Engine + num: "glob-numbers" CON _CLKMODE = XTAL1 + PLL16X _XINFREQ = 5_000_000 + LANMASK = %00000000_00000000_00000000_00100000 + CON 'NVRAM Konstanten -------------------------------------------------------------------------- #4, NVRAM_IPADDR @@ -57,6 +59,8 @@ PUB main ios.start 'ios initialisieren ios.printnl + ifnot (ios.admgetspec & LANMASK) + ios.print(string("WARNUNG!",10,"Administra stellt keine Netzwerk-Funktionen zur Verfügung!",10,"Bitte admnet laden.",10,"(ipconfig funktioniert trotzdem)",10)) ios.parastart 'parameterübergabe starten repeat while ios.paranext(@parastr) 'parameter einlesen if byte[@parastr][0] == "/" 'option? @@ -99,21 +103,21 @@ PRI cmd_listcfg | hiveid 'nvram: IP-Konfig ios.printnl ios.print(string(" Hive-Id: ")) - hiveid := ios.getNVSRAM(NVRAM_HIVE) - hiveid := hiveid + ios.getNVSRAM(NVRAM_HIVE+1) << 8 - hiveid := hiveid + ios.getNVSRAM(NVRAM_HIVE+2) << 16 - hiveid := hiveid + ios.getNVSRAM(NVRAM_HIVE+3) << 24 + hiveid := ios.getNVSRAM(NVRAM_HIVE) + hiveid += ios.getNVSRAM(NVRAM_HIVE+1) << 8 + hiveid += ios.getNVSRAM(NVRAM_HIVE+2) << 16 + hiveid += ios.getNVSRAM(NVRAM_HIVE+3) << 24 ios.print(str.trimCharacters(num.ToStr(hiveid, num#DEC))) ios.printnl -PRI listaddr (nvidx) | count 'nvram: IP-Adresse setzen +PRI listaddr (nvidx) | count 'IP-Adresse anzeigen repeat count from 0 to 3 if(count) ios.print(string(".")) ios.print(str.trimCharacters(num.ToStr(ios.getNVSRAM(nvidx+count), num#DEC))) -PRI cmd_setaddr (nvidx, ipaddr) | pos, count 'nvram: IP-Adresse setzen +PRI cmd_setaddr (nvidx, ipaddr) | pos, count 'IP-Adresse setzen count := 0 repeat while ipaddr @@ -125,30 +129,30 @@ PRI cmd_setaddr (nvidx, ipaddr) | pos, count 'nvram: IP-Adresse if(count == 4) quit + ios.lanstop ios.lanstart - cmd_listcfg -PRI cmd_sethive (hiveid) 'nvram: IP-Adresse setzen +PRI cmd_sethive (hiveid) 'Hive-Id setzen ios.setNVSRAM(NVRAM_HIVE, hiveid & $FF) ios.setNVSRAM(NVRAM_HIVE+1, (hiveid >> 8) & $FF) ios.setNVSRAM(NVRAM_HIVE+2, (hiveid >> 16) & $FF) ios.setNVSRAM(NVRAM_HIVE+3, (hiveid >> 24) & $FF) + ios.lanstop ios.lanstart - cmd_listcfg DAT 'sys: helptext -help byte "/? : Hilfe",13 - byte "/l : Konfiguration anzeigen",13 - byte "/a : IP-Adresse setzen",13 - byte "/m : Netzwerk-Maske setzen",13 - byte "/g : Gateway setzen",13 - byte "/d : DNS-Server setzen",13 - byte "/b : Boot-Server setzen",13 - byte "/i : Hive-Id setzen",13 +help byte "/? : Hilfe",10 + byte "/l : Konfiguration anzeigen",10 + byte "/a : IP-Adresse setzen",10 + byte "/m : Netzwerk-Maske setzen",10 + byte "/g : Gateway setzen",10 + byte "/d : DNS-Server setzen",10 + byte "/b : Boot-Server setzen",10 + byte "/i : Hive-Id setzen",10 byte 0 DAT 'lizenz diff --git a/system/regnatix/irc.spin b/system/regnatix/irc.spin index ac0dec0..4727106 100644 --- a/system/regnatix/irc.spin +++ b/system/regnatix/irc.spin @@ -259,7 +259,6 @@ PRI f_connect | t ios.winset(2) ios.print(string(10,"Starte LAN...")) ios.lanstart - waitcnt(cnt + clkfreq) '1sek warten (nach ios.lanstart dauert es, bis der Stack funktioniert) ios.print(string(10,"Verbinde mit IRC-Server...")) if (handleidx := ios.lan_connect(ip_addr, ip_port)) == $FF ios.print(string(10,"Kein Socket frei!"))