https://wiki.koeln.ccc.de/api.php?action=feedcontributions&user=87.79.237.120&feedformat=atom
C4 Wiki - User contributions [en]
2024-03-28T14:48:42Z
User contributions
MediaWiki 1.30.1
https://wiki.koeln.ccc.de/index.php?title=U23_2007/NULL.0&diff=13829
U23 2007/NULL.0
2007-06-26T08:31:39Z
<p>87.79.237.120: /* Projekt */</p>
<hr />
<div>Gruppe NULL.0<br />
<br />
aus Köln<br />
<br />
Motto: "Schrauben lieben Dunkelheit."<br />
<br />
== Team ==<br />
* Stefan<br />
* Philipp<br />
* Sebi<br />
* Hanno<br />
* Mikael<br />
<br />
== Links ==<br />
<br />
:'''I2C'''<br />
<br />
:http://www.roboternetz.de/wissen/index.php/I2C<br />
<br />
== Projekt==<br />
=== Beschreibung ===<br />
Wir steuern mit dem etherape einen Hardware Audio Tuner Chip(tda 7318 [http://www.reichelt.de/?ACTION=7;LA=6;OPEN=1;INDEX=0;FILENAME=A200%252FTDA7318_STM.pdf Datenblatt]) an. Dieser bietet uns 4 Stereo Eingänge, 4 Lautsprecher Ausgang, Bass- und Höhensteuerung sowie Hauptvolumen! Das wird zum Audiochip über I2C verbunden!<br />
=== Momentaner Stand ===<br />
<br />
==== 2007-06-26 ====<br />
<br />
* TDA7318-Code ins git-Repository aufgenommen<br />
** Fuer Schreibzugriff bitte bei Mikael melden<br />
* HTTP-Server sollte nach einigen Anlaufschwierigkeiten und einem "rewrite from scratch" endlich laufen<br />
** Benutzt nun memcmp_P und memmem_P zum parsen<br />
** Kann bereits den TDA7318-Status ausgeben<br />
** Muss noch getestet werden!<br />
<br />
==== 2007-06-18 ====<br />
<br />
Wir können auf der Seriellen-Console dem etherape Befehle geben, mit den denn dann alles ansteuern kann!<br /><br />
[http://h-lemoine.de/cccc_u23/etherrape_2007-06-18_V2_22_05Uhr.tar.gz Code vom 2007-06-18] Kommentar: Sorry, total unaufgeräumt! Mehr Infos in Anleitung.txt<br />
audio<br />
input 0-3 0-3 //Eingangssignal und Vorverstärkung! 0->laut 3->leise!<br />
vol 0-63 //Hauptausgangssignal 0->laut 63->leise [Standard 30]<br />
speaker 0-31 0-31 0-31 0-31 //Ausgangslautsprecher 0-laut 15->leise [Standard 15]<br />
bass 0-15 //Bass Einstellung Achtung Steuerung etwas doof! (vgl. Datenblatt S.11)<br />
treble 0-15 //Höhen Einstellung!<br />
<br />
Der andre Teil der Gruppe beschäftigt sich mit dem Grafischen HTTP Server, damit man mit Schiebereglern bedienen kann!<br />
<br />
== Idee (alt) ==<br />
Haben wir nun schon ein Ziel?<br />
Vorschläge bitte :D<br />
<br />
Ich finde Server und Netzwerkgeschichten interessant:<br />
hier die die schon genannt wurden:<br />
# NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus<br />
# Network monitoring // Obstfliege aka Philipp<br />
# Diverse Server: DHCP,DNS,FTP,HTTP... // Obstfliege aka Philipp <br />
<br />
<hr><br />
Hatten wir uns nicht grob auf folgendes geeinigt? <br />
* Audio Sound Steuerung<br />
** 4 analog Stereo in & 4 Lautsprecher out = front Rear Stero OUT<br />
** Lautstärkeregelung & Wahl des Einganges<br />
** WWW Interface<br />
** Infrarot Fernbedienung zum Ansteuern<br />
Das waren dann 4 Teilprojekte (JavaScript, Infrarot, C-Software, Hardware Löten), das kann man teilweise noch aufteilen. Und beinhaltet so grob jedes Gebiet!<br /><br />
Aber ich weiß nicht, ob so nen Tuner so viel bringt. Mein Interesse ist da eher gering.<br />
<br />
Alternativ:<br />
# USB Ansteuerung<br />
<br />
@Philipp deine Vorschläge sind aber auch ganz nett, auch wenn sie rein softwaremäßig ablaufen. Network Monitoring würde mich glaub ich am meisten interessieren. --[[User:Hanno|Hanno]] 23:14, 31 May 2007 (CEST)<br />
<br />
@Hanno: Ja Monitoring interessiert mich auch besonders. --Philipp<br />
<br />
== HTTP-Server ==<br />
<br />
Nach einigen Anlaufschwierigkeiten sollte es nun endlich gelungen sein, unseren Pseudo-HTTP-Server zum Laufen gebracht zu haben.<br />
<br />
=== git ===<br />
<br />
Das [http://de.wikipedia.org/wiki/Git Git]-Repository kann man sich mit folgendem Kommando besorgen:<br />
<br />
<pre><br />
git clone git://git.haemoglobin.org/etherrape<br />
cd etherrape<br />
git checkout zerohttp<br />
</pre><br />
<br />
=== zerohttp.c ===<br />
<br />
[http://www.haemoglobin.org/U23_2007/zerohttp.c zerohttp.c]<br />
<br />
<pre><br />
#include <avr/io.h><br />
#include <avr/pgmspace.h><br />
#include <string.h><br />
<br />
#include "../uip/uip.h"<br />
#include "../tda7318.h"<br />
#include "../debug.h"<br />
<br />
void zerohttp_main() {<br />
if(uip_acked())<br />
uip_close();<br />
<br />
if(uip_newdata()) {<br />
debug_printf("Parsing request...\n");<br />
<br />
if(uip_datalen() < 17) { // At least "GET / HTTP/1.1\r\n"<br />
debug_printf("Request is smaller than 17 bytes!\n");<br />
uip_conn->appstate.zerohttp = 2;<br />
goto leave;<br />
}<br />
<br />
if(memcmp_P(uip_appdata, PSTR("GET "), 4)) {<br />
debug_printf("Method is not GET!\n");<br />
uip_conn->appstate.zerohttp = 2;<br />
goto leave;<br />
}<br />
<br />
register char *temp = (char *) memmem_P((char *) uip_appdata + 4, " HTTP/", uip_datalen() - 4);<br />
if(!temp) {<br />
debug_printf("Unterminated URI!\n");<br />
uip_conn->appstate.zerohttp = 2;<br />
goto leave;<br />
}<br />
<br />
if(!memcmp_P((char *) uip_appdata + 4, PSTR("/"), 1)) {<br />
debug_printf("Requested '/'\n");<br />
uip_conn->appstate.zerohttp = 0;<br />
goto leave;<br />
}<br />
<br />
else if(!memcmp_P((char *) uip_appdata + 4, PSTR("/volinc"), 7)) {<br />
debug_printf("Requested '/volinc'\n");<br />
uip_conn->appstate.zerohttp = 0;<br />
goto leave;<br />
}<br />
<br />
else {<br />
debug_printf("Unknown URI\n");<br />
uip_conn->appstate.zerohttp = 1;<br />
goto leave;<br />
}<br />
}<br />
leave:<br />
<br />
if(uip_newdata() || uip_rexmit()) {<br />
switch(uip_conn->appstate.zerohttp) {<br />
case 0:<br />
debug_printf("200\n");<br />
snprintf_P((char *) uip_appdata,<br />
UIP_APPDATA_SIZE,<br />
PSTR("HTTP/1.1 200 OK\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Input: %hhu\r\n"<br />
"Gain: %hhu\r\n"<br />
"Master: %hhu\r\n"<br />
"Front left: %hhu\r\n"<br />
"Front right: %hhu\r\n"<br />
"Rear left: %hhu\r\n"<br />
"Rear right %hhu\r\n"<br />
"Bass: %hhu\r\n"<br />
"Treble: %hhu\r\n"),<br />
(uint8_t) tda7318_global.input,<br />
(uint8_t) tda7318_global.gain,<br />
(uint8_t) tda7318_global.volume,<br />
(uint8_t) tda7318_global.sp_LF,<br />
(uint8_t) tda7318_global.sp_RF,<br />
(uint8_t) tda7318_global.sp_LR,<br />
(uint8_t) tda7318_global.sp_RR,<br />
(uint8_t) tda7318_global.bass,<br />
(uint8_t) tda7318_global.treble);<br />
break;<br />
<br />
case 1:<br />
debug_printf("404\n");<br />
strncpy_P((char *) uip_appdata,<br />
PSTR("HTTP/1.1 404 Command not found\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"I could not fullfill thy humble wish."),<br />
UIP_APPDATA_SIZE);<br />
break;<br />
<br />
case 2:<br />
default:<br />
debug_printf("400\n");<br />
strncpy_P((char *) uip_appdata,<br />
PSTR("HTTP/1.1 400 Invalid request\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Invalid request!"),<br />
UIP_APPDATA_SIZE);<br />
break;<br />
<br />
}<br />
uip_send(uip_appdata, strnlen((char *) uip_appdata, UIP_APPDATA_SIZE));<br />
}<br />
}<br />
</pre><br />
<br />
[[Category:U23 2007]]</div>
87.79.237.120
https://wiki.koeln.ccc.de/index.php?title=U23_2007/NULL.0&diff=13828
U23 2007/NULL.0
2007-06-26T08:28:58Z
<p>87.79.237.120: /* Momentaner Stand */</p>
<hr />
<div>Gruppe NULL.0<br />
<br />
aus Köln<br />
<br />
Motto: "Schrauben lieben Dunkelheit."<br />
<br />
== Team ==<br />
* Stefan<br />
* Philipp<br />
* Sebi<br />
* Hanno<br />
* Mikael<br />
<br />
== Links ==<br />
<br />
:'''I2C'''<br />
<br />
:http://www.roboternetz.de/wissen/index.php/I2C<br />
<br />
== Projekt==<br />
===Beschreibung===<br />
Wir steuern mit dem etherape einen Hardware Audio Tuner Chip(tda 7318 [http://www.reichelt.de/?ACTION=7;LA=6;OPEN=1;INDEX=0;FILENAME=A200%252FTDA7318_STM.pdf Datenblatt]) an. Dieser bietet uns 4 Stereo Eingänge, 4 Lautsprecher Ausgang, Bass- und Höhensteuerung sowie Hauptvolumen! Das wird zum Audiochip über I2C verbunden!<br />
==== Momentaner Stand ====<br />
<br />
===== 2007-06-26 =====<br />
<br />
* TDA7318-Code ins git-Repository aufgenommen<br />
** Fuer Schreibzugriff bitte bei Mikael melden<br />
* HTTP-Server sollte nach einigen Anlaufschwierigkeiten und einem "rewrite from scratch" endlich laufen<br />
** Benutzt nun memcmp_P und memmem_P zum parsen<br />
** Kann bereits den TDA7318-Status ausgeben<br />
** Muss noch getestet werden!<br />
<br />
===== 2007-06-18 =====<br />
<br />
Wir können auf der Seriellen-Console dem etherape Befehle geben, mit den denn dann alles ansteuern kann!<br /><br />
[http://h-lemoine.de/cccc_u23/etherrape_2007-06-18_V2_22_05Uhr.tar.gz Code vom 2007-06-18] Kommentar: Sorry, total unaufgeräumt! Mehr Infos in Anleitung.txt<br />
audio<br />
input 0-3 0-3 //Eingangssignal und Vorverstärkung! 0->laut 3->leise!<br />
vol 0-63 //Hauptausgangssignal 0->laut 63->leise [Standard 30]<br />
speaker 0-31 0-31 0-31 0-31 //Ausgangslautsprecher 0-laut 15->leise [Standard 15]<br />
bass 0-15 //Bass Einstellung Achtung Steuerung etwas doof! (vgl. Datenblatt S.11)<br />
treble 0-15 //Höhen Einstellung!<br />
<br />
Der andre Teil der Gruppe beschäftigt sich mit dem Grafischen HTTP Server, damit man mit Schiebereglern bedienen kann!<br />
<br />
== Idee (alt) ==<br />
Haben wir nun schon ein Ziel?<br />
Vorschläge bitte :D<br />
<br />
Ich finde Server und Netzwerkgeschichten interessant:<br />
hier die die schon genannt wurden:<br />
# NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus<br />
# Network monitoring // Obstfliege aka Philipp<br />
# Diverse Server: DHCP,DNS,FTP,HTTP... // Obstfliege aka Philipp <br />
<br />
<hr><br />
Hatten wir uns nicht grob auf folgendes geeinigt? <br />
* Audio Sound Steuerung<br />
** 4 analog Stereo in & 4 Lautsprecher out = front Rear Stero OUT<br />
** Lautstärkeregelung & Wahl des Einganges<br />
** WWW Interface<br />
** Infrarot Fernbedienung zum Ansteuern<br />
Das waren dann 4 Teilprojekte (JavaScript, Infrarot, C-Software, Hardware Löten), das kann man teilweise noch aufteilen. Und beinhaltet so grob jedes Gebiet!<br /><br />
Aber ich weiß nicht, ob so nen Tuner so viel bringt. Mein Interesse ist da eher gering.<br />
<br />
Alternativ:<br />
# USB Ansteuerung<br />
<br />
@Philipp deine Vorschläge sind aber auch ganz nett, auch wenn sie rein softwaremäßig ablaufen. Network Monitoring würde mich glaub ich am meisten interessieren. --[[User:Hanno|Hanno]] 23:14, 31 May 2007 (CEST)<br />
<br />
@Hanno: Ja Monitoring interessiert mich auch besonders. --Philipp<br />
<br />
== HTTP-Server ==<br />
<br />
Nach einigen Anlaufschwierigkeiten sollte es nun endlich gelungen sein, unseren Pseudo-HTTP-Server zum Laufen gebracht zu haben.<br />
<br />
=== git ===<br />
<br />
Das [http://de.wikipedia.org/wiki/Git Git]-Repository kann man sich mit folgendem Kommando besorgen:<br />
<br />
<pre><br />
git clone git://git.haemoglobin.org/etherrape<br />
cd etherrape<br />
git checkout zerohttp<br />
</pre><br />
<br />
=== zerohttp.c ===<br />
<br />
[http://www.haemoglobin.org/U23_2007/zerohttp.c zerohttp.c]<br />
<br />
<pre><br />
#include <avr/io.h><br />
#include <avr/pgmspace.h><br />
#include <string.h><br />
<br />
#include "../uip/uip.h"<br />
#include "../tda7318.h"<br />
#include "../debug.h"<br />
<br />
void zerohttp_main() {<br />
if(uip_acked())<br />
uip_close();<br />
<br />
if(uip_newdata()) {<br />
debug_printf("Parsing request...\n");<br />
<br />
if(uip_datalen() < 17) { // At least "GET / HTTP/1.1\r\n"<br />
debug_printf("Request is smaller than 17 bytes!\n");<br />
uip_conn->appstate.zerohttp = 2;<br />
goto leave;<br />
}<br />
<br />
if(memcmp_P(uip_appdata, PSTR("GET "), 4)) {<br />
debug_printf("Method is not GET!\n");<br />
uip_conn->appstate.zerohttp = 2;<br />
goto leave;<br />
}<br />
<br />
register char *temp = (char *) memmem_P((char *) uip_appdata + 4, " HTTP/", uip_datalen() - 4);<br />
if(!temp) {<br />
debug_printf("Unterminated URI!\n");<br />
uip_conn->appstate.zerohttp = 2;<br />
goto leave;<br />
}<br />
<br />
if(!memcmp_P((char *) uip_appdata + 4, PSTR("/"), 1)) {<br />
debug_printf("Requested '/'\n");<br />
uip_conn->appstate.zerohttp = 0;<br />
goto leave;<br />
}<br />
<br />
else if(!memcmp_P((char *) uip_appdata + 4, PSTR("/volinc"), 7)) {<br />
debug_printf("Requested '/volinc'\n");<br />
uip_conn->appstate.zerohttp = 0;<br />
goto leave;<br />
}<br />
<br />
else {<br />
debug_printf("Unknown URI\n");<br />
uip_conn->appstate.zerohttp = 1;<br />
goto leave;<br />
}<br />
}<br />
leave:<br />
<br />
if(uip_newdata() || uip_rexmit()) {<br />
switch(uip_conn->appstate.zerohttp) {<br />
case 0:<br />
debug_printf("200\n");<br />
snprintf_P((char *) uip_appdata,<br />
UIP_APPDATA_SIZE,<br />
PSTR("HTTP/1.1 200 OK\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Input: %hhu\r\n"<br />
"Gain: %hhu\r\n"<br />
"Master: %hhu\r\n"<br />
"Front left: %hhu\r\n"<br />
"Front right: %hhu\r\n"<br />
"Rear left: %hhu\r\n"<br />
"Rear right %hhu\r\n"<br />
"Bass: %hhu\r\n"<br />
"Treble: %hhu\r\n"),<br />
(uint8_t) tda7318_global.input,<br />
(uint8_t) tda7318_global.gain,<br />
(uint8_t) tda7318_global.volume,<br />
(uint8_t) tda7318_global.sp_LF,<br />
(uint8_t) tda7318_global.sp_RF,<br />
(uint8_t) tda7318_global.sp_LR,<br />
(uint8_t) tda7318_global.sp_RR,<br />
(uint8_t) tda7318_global.bass,<br />
(uint8_t) tda7318_global.treble);<br />
break;<br />
<br />
case 1:<br />
debug_printf("404\n");<br />
strncpy_P((char *) uip_appdata,<br />
PSTR("HTTP/1.1 404 Command not found\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"I could not fullfill thy humble wish."),<br />
UIP_APPDATA_SIZE);<br />
break;<br />
<br />
case 2:<br />
default:<br />
debug_printf("400\n");<br />
strncpy_P((char *) uip_appdata,<br />
PSTR("HTTP/1.1 400 Invalid request\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Invalid request!"),<br />
UIP_APPDATA_SIZE);<br />
break;<br />
<br />
}<br />
uip_send(uip_appdata, strnlen((char *) uip_appdata, UIP_APPDATA_SIZE));<br />
}<br />
}<br />
</pre><br />
<br />
[[Category:U23 2007]]</div>
87.79.237.120
https://wiki.koeln.ccc.de/index.php?title=U23_2007/NULL.0&diff=13827
U23 2007/NULL.0
2007-06-26T08:22:58Z
<p>87.79.237.120: /* HTTP-Server */</p>
<hr />
<div>Gruppe NULL.0<br />
<br />
aus Köln<br />
<br />
Motto: "Schrauben lieben Dunkelheit."<br />
<br />
== Team ==<br />
* Stefan<br />
* Philipp<br />
* Sebi<br />
* Hanno<br />
* Mikael<br />
<br />
== Links ==<br />
<br />
:'''I2C'''<br />
<br />
:http://www.roboternetz.de/wissen/index.php/I2C<br />
<br />
== Projekt==<br />
===Beschreibung===<br />
Wir steuern mit dem etherape einen Hardware Audio Tuner Chip(tda 7318 [http://www.reichelt.de/?ACTION=7;LA=6;OPEN=1;INDEX=0;FILENAME=A200%252FTDA7318_STM.pdf Datenblatt]) an. Dieser bietet uns 4 Stereo Eingänge, 4 Lautsprecher Ausgang, Bass- und Höhensteuerung sowie Hauptvolumen! Das wird zum Audiochip über I2C verbunden!<br />
====Momentaner Stand====<br />
=====2007-06-18=====<br />
Wir können auf der Seriellen-Console dem etherape Befehle geben, mit den denn dann alles ansteuern kann!<br /><br />
[http://h-lemoine.de/cccc_u23/etherrape_2007-06-18_V2_22_05Uhr.tar.gz Code vom 2007-06-18] Kommentar: Sorry, total unaufgeräumt! Mehr Infos in Anleitung.txt<br />
audio<br />
input 0-3 0-3 //Eingangssignal und Vorverstärkung! 0->laut 3->leise!<br />
vol 0-63 //Hauptausgangssignal 0->laut 63->leise [Standard 30]<br />
speaker 0-31 0-31 0-31 0-31 //Ausgangslautsprecher 0-laut 15->leise [Standard 15]<br />
bass 0-15 //Bass Einstellung Achtung Steuerung etwas doof! (vgl. Datenblatt S.11)<br />
treble 0-15 //Höhen Einstellung!<br />
<br />
Der andre Teil der Gruppe beschäftigt sich mit dem Grafischen HTTP Server, damit man mit Schiebereglern bedienen kann!<br />
<br />
== Idee (alt) ==<br />
Haben wir nun schon ein Ziel?<br />
Vorschläge bitte :D<br />
<br />
Ich finde Server und Netzwerkgeschichten interessant:<br />
hier die die schon genannt wurden:<br />
# NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus<br />
# Network monitoring // Obstfliege aka Philipp<br />
# Diverse Server: DHCP,DNS,FTP,HTTP... // Obstfliege aka Philipp <br />
<br />
<hr><br />
Hatten wir uns nicht grob auf folgendes geeinigt? <br />
* Audio Sound Steuerung<br />
** 4 analog Stereo in & 4 Lautsprecher out = front Rear Stero OUT<br />
** Lautstärkeregelung & Wahl des Einganges<br />
** WWW Interface<br />
** Infrarot Fernbedienung zum Ansteuern<br />
Das waren dann 4 Teilprojekte (JavaScript, Infrarot, C-Software, Hardware Löten), das kann man teilweise noch aufteilen. Und beinhaltet so grob jedes Gebiet!<br /><br />
Aber ich weiß nicht, ob so nen Tuner so viel bringt. Mein Interesse ist da eher gering.<br />
<br />
Alternativ:<br />
# USB Ansteuerung<br />
<br />
@Philipp deine Vorschläge sind aber auch ganz nett, auch wenn sie rein softwaremäßig ablaufen. Network Monitoring würde mich glaub ich am meisten interessieren. --[[User:Hanno|Hanno]] 23:14, 31 May 2007 (CEST)<br />
<br />
@Hanno: Ja Monitoring interessiert mich auch besonders. --Philipp<br />
<br />
== HTTP-Server ==<br />
<br />
Nach einigen Anlaufschwierigkeiten sollte es nun endlich gelungen sein, unseren Pseudo-HTTP-Server zum Laufen gebracht zu haben.<br />
<br />
=== git ===<br />
<br />
Das [http://de.wikipedia.org/wiki/Git Git]-Repository kann man sich mit folgendem Kommando besorgen:<br />
<br />
<pre><br />
git clone git://git.haemoglobin.org/etherrape<br />
cd etherrape<br />
git checkout zerohttp<br />
</pre><br />
<br />
=== zerohttp.c ===<br />
<br />
[http://www.haemoglobin.org/U23_2007/zerohttp.c zerohttp.c]<br />
<br />
<pre><br />
#include <avr/io.h><br />
#include <avr/pgmspace.h><br />
#include <string.h><br />
<br />
#include "../uip/uip.h"<br />
#include "../tda7318.h"<br />
#include "../debug.h"<br />
<br />
void zerohttp_main() {<br />
if(uip_acked())<br />
uip_close();<br />
<br />
if(uip_newdata()) {<br />
debug_printf("Parsing request...\n");<br />
<br />
if(uip_datalen() < 17) { // At least "GET / HTTP/1.1\r\n"<br />
debug_printf("Request is smaller than 17 bytes!\n");<br />
uip_conn->appstate.zerohttp = 2;<br />
goto leave;<br />
}<br />
<br />
if(memcmp_P(uip_appdata, PSTR("GET "), 4)) {<br />
debug_printf("Method is not GET!\n");<br />
uip_conn->appstate.zerohttp = 2;<br />
goto leave;<br />
}<br />
<br />
register char *temp = (char *) memmem_P((char *) uip_appdata + 4, " HTTP/", uip_datalen() - 4);<br />
if(!temp) {<br />
debug_printf("Unterminated URI!\n");<br />
uip_conn->appstate.zerohttp = 2;<br />
goto leave;<br />
}<br />
<br />
if(!memcmp_P((char *) uip_appdata + 4, PSTR("/"), 1)) {<br />
debug_printf("Requested '/'\n");<br />
uip_conn->appstate.zerohttp = 0;<br />
goto leave;<br />
}<br />
<br />
else if(!memcmp_P((char *) uip_appdata + 4, PSTR("/volinc"), 7)) {<br />
debug_printf("Requested '/volinc'\n");<br />
uip_conn->appstate.zerohttp = 0;<br />
goto leave;<br />
}<br />
<br />
else {<br />
debug_printf("Unknown URI\n");<br />
uip_conn->appstate.zerohttp = 1;<br />
goto leave;<br />
}<br />
}<br />
leave:<br />
<br />
if(uip_newdata() || uip_rexmit()) {<br />
switch(uip_conn->appstate.zerohttp) {<br />
case 0:<br />
debug_printf("200\n");<br />
snprintf_P((char *) uip_appdata,<br />
UIP_APPDATA_SIZE,<br />
PSTR("HTTP/1.1 200 OK\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Input: %hhu\r\n"<br />
"Gain: %hhu\r\n"<br />
"Master: %hhu\r\n"<br />
"Front left: %hhu\r\n"<br />
"Front right: %hhu\r\n"<br />
"Rear left: %hhu\r\n"<br />
"Rear right %hhu\r\n"<br />
"Bass: %hhu\r\n"<br />
"Treble: %hhu\r\n"),<br />
(uint8_t) tda7318_global.input,<br />
(uint8_t) tda7318_global.gain,<br />
(uint8_t) tda7318_global.volume,<br />
(uint8_t) tda7318_global.sp_LF,<br />
(uint8_t) tda7318_global.sp_RF,<br />
(uint8_t) tda7318_global.sp_LR,<br />
(uint8_t) tda7318_global.sp_RR,<br />
(uint8_t) tda7318_global.bass,<br />
(uint8_t) tda7318_global.treble);<br />
break;<br />
<br />
case 1:<br />
debug_printf("404\n");<br />
strncpy_P((char *) uip_appdata,<br />
PSTR("HTTP/1.1 404 Command not found\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"I could not fullfill thy humble wish."),<br />
UIP_APPDATA_SIZE);<br />
break;<br />
<br />
case 2:<br />
default:<br />
debug_printf("400\n");<br />
strncpy_P((char *) uip_appdata,<br />
PSTR("HTTP/1.1 400 Invalid request\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Invalid request!"),<br />
UIP_APPDATA_SIZE);<br />
break;<br />
<br />
}<br />
uip_send(uip_appdata, strnlen((char *) uip_appdata, UIP_APPDATA_SIZE));<br />
}<br />
}<br />
</pre><br />
<br />
[[Category:U23 2007]]</div>
87.79.237.120
https://wiki.koeln.ccc.de/index.php?title=U23_2007/NULL.0&diff=13817
U23 2007/NULL.0
2007-06-22T22:00:36Z
<p>87.79.237.120: </p>
<hr />
<div>Gruppe NULL.0<br />
<br />
aus Köln<br />
<br />
Motto: "Schrauben lieben Dunkelheit."<br />
<br />
== Team ==<br />
* Stefan<br />
* Philipp<br />
* Sebi<br />
* Hanno<br />
* Mikael<br />
<br />
== Links ==<br />
<br />
:'''I2C'''<br />
<br />
:http://www.roboternetz.de/wissen/index.php/I2C<br />
<br />
== Projek t==<br />
=== Idee ===<br />
Haben wir nun schon ein Ziel?<br />
Vorschläge bitte :D<br />
<br />
Ich finde Server und Netzwerkgeschichten interessant:<br />
hier die die schon genannt wurden:<br />
# NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus<br />
# Network monitoring // Obstfliege aka Philipp<br />
# Diverse Server: DHCP,DNS,FTP,HTTP... // Obstfliege aka Philipp <br />
<br />
<hr><br />
Hatten wir uns nicht grob auf folgendes geeinigt? <br />
* Audio Sound Steuerung<br />
** 4 analog Stereo in & 4 Lautsprecher out = front Rear Stero OUT<br />
** Lautstärkeregelung & Wahl des Einganges<br />
** WWW Interface<br />
** Infrarot Fernbedienung zum Ansteuern<br />
Das waren dann 4 Teilprojekte (JavaScript, Infrarot, C-Software, Hardware Löten), das kann man teilweise noch aufteilen. Und beinhaltet so grob jedes Gebiet!<br /><br />
Aber ich weiß nicht, ob so nen Tuner so viel bringt. Mein Interesse ist da eher gering.<br />
<br />
Alternativ:<br />
# USB Ansteuerung<br />
<br />
@Philipp deine Vorschläge sind aber auch ganz nett, auch wenn sie rein softwaremäßig ablaufen. Network Monitoring würde mich glaub ich am meisten interessieren. --[[User:Hanno|Hanno]] 23:14, 31 May 2007 (CEST)<br />
<br />
@Hanno: Ja Monitoring interessiert mich auch besonders. --Philipp<br />
<br />
<br />
<br />
== HTTP-Server ==<br />
<br />
=== git ===<br />
<br />
Das [http://de.wikipedia.org/wiki/Git Git]-Repository kann man sich mit folgendem Kommando besorgen:<br />
<br />
<pre><br />
git clone git://git.haemoglobin.org/etherrape<br />
cd etherrape<br />
git checkout zerohttp<br />
</pre><br />
<br />
=== zerohttp.c ===<br />
<br />
[http://www.haemoglobin.org/U23_2007/zerohttp.c zerohttp.c]<br />
<br />
<pre><br />
#include <avr/io.h><br />
#include <avr/pgmspace.h><br />
#include <string.h><br />
<br />
#include "../uip/uip.h"<br />
#include "tokenize.h"<br />
<br />
#ifndef NULL<br />
#define NULL (char *) 0<br />
#endif<br />
<br />
void zerohttp_invalid() {<br />
strcpy_P(uip_appdata, PSTR("HTTP/1.1 400 Invalid request\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Invalid request!"));<br />
uip_send(uip_appdata, strlen(uip_appdata));<br />
}<br />
<br />
void zerohttp_succeed() {<br />
strcpy_P(uip_appdata, PSTR("HTTP/1.1 200 OK\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Thy wish is my command."));<br />
uip_send(uip_appdata, strlen(uip_appdata));<br />
}<br />
<br />
void zerohttp_fail() {<br />
strcpy_P(uip_appdata, PSTR("HTTP/1.1 404 Command not found\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"I could not fullfill thy humble wish."));<br />
uip_send(uip_appdata, strlen(uip_appdata));<br />
}<br />
<br />
void zerohttp_main() {<br />
register char *garbage;<br />
char *uri;<br />
<br />
if(uip_newdata()) {<br />
garbage = strtokz(uip_appdata, ' ');<br />
if(garbage) {<br />
zerohttp_invalid();<br />
uip_close();<br />
return;<br />
}<br />
<br />
if(strncmp_P(garbage, PSTR("GET"), 4)) {<br />
zerohttp_invalid();<br />
uip_close();<br />
return;<br />
}<br />
<br />
uri = strtokz(NULL, ' ');<br />
if(uri) {<br />
zerohttp_invalid();<br />
uip_close();<br />
return;<br />
}<br />
<br />
garbage = strtokz(NULL, '\r');<br />
if(garbage) {<br />
zerohttp_invalid();<br />
uip_close();<br />
return;<br />
}<br />
<br />
if(strncmp_P(garbage, PSTR("HTTP/1.0"), 9) && strncmp(garbage, PSTR("HTTP/1.1"), 9)) {<br />
zerohttp_invalid();<br />
uip_close();<br />
return;<br />
}<br />
<br />
if(!strncmp_P(uri, PSTR("http://"), 7))<br />
uri += 7;<br />
else<br />
uri++;<br />
<br />
if(!strncmp_P(uri, PSTR("lauter"), 7)) {<br />
// Lauter!<br />
zerohttp_succeed();<br />
uip_close();<br />
return;<br />
}<br />
else if(!strncmp_P(uri, PSTR("leiser"), 7)) {<br />
// Leiser!<br />
zerohttp_succeed();<br />
uip_close();<br />
return;<br />
}<br />
else { <br />
zerohttp_fail();<br />
uip_close();<br />
return;<br />
}<br />
<br />
} <br />
}<br />
</pre><br />
<br />
===tokenize.c===<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.c tokenize.c]<br />
<br />
<pre><br />
/*<br />
* Copyright © MMVII<br />
* Mikael Voss <ffefd6 at haemoglobin dot org><br />
*<br />
* Provided that these terms and disclaimer and all copyright notices<br />
* are retained or reproduced in an accompanying document, permission<br />
* is granted to deal in this work without restriction, including un-<br />
* limited rights to use, publicly perform, distribute, sell, modify,<br />
* merge, give away, or sublicence.<br />
*<br />
* This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to<br />
* the utmost extent permitted by applicable law, neither express nor<br />
* implied; without malicious intent or gross negligence. In no event<br />
* may a licensor, author or contributor be held liable for indirect,<br />
* direct, other damage, loss, or other issues arising in any way out<br />
* of dealing in the work, even if advised of the possibility of such<br />
* damage or existence of a defect, except proven that it results out<br />
* of said person's immediate fault when using the work as intended.<br />
*/<br />
<br />
/*<br />
* strtokn parses a string of length bytes into a sequence of tokens<br />
* separated by delimiter. On the first call the string to be parsed<br />
* should be specified in string and its size in length. On each sub-<br />
* sequent call that should parse the same string, string should be<br />
* (char *) 0 and length will be ignored.<br />
* It returns the next token delimited by delimiter or (char *) 0 if<br />
* no other token is found.<br />
*/<br />
<br />
char *strtokn(char *string, unsigned int length, char delimiter) {<br />
static char *next;<br />
static unsigned int rest;<br />
register unsigned int iterator;<br />
<br />
if(string != (char *) 0) {<br />
next = string;<br />
rest = length;<br />
}<br />
<br />
for(iterator = 0; iterator < rest; iterator++) {<br />
if(next[iterator] == delimiter) {<br />
next[iterator] = '\0';<br />
string = next;<br />
next += iterator + 1;<br />
rest -= iterator - 1;<br />
return string;<br />
}<br />
}<br />
<br />
return (char *) 0;<br />
}<br />
<br />
<br />
/*<br />
* strtokz does the same as strtokn, but operates on a zero-terminated<br />
* string and thus does not take a length argument. Be careful as this<br />
* function might lead to buffer overflows if string is not properly<br />
* terminated!<br />
*/<br />
<br />
char *strtokz(char *string, char delimiter) {<br />
static char *next;<br />
<br />
if(string != (char *) 0)<br />
next = string;<br />
else<br />
string = next;<br />
<br />
while(*next++) {<br />
if(*next == delimiter) {<br />
*next++ = '\0';<br />
return string;<br />
}<br />
}<br />
<br />
return (char *) 0;<br />
}<br />
<br />
</pre><br />
<br />
=== tokenize.h ===<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.h tokenize.h]<br />
<br />
<pre><br />
char *strtokn(char *, unsigned int, char);<br />
char *strtokz(char *, char);<br />
</pre><br />
<br />
[[Category:U23 2007]]</div>
87.79.237.120
https://wiki.koeln.ccc.de/index.php?title=U23_2007/NULL.0&diff=13816
U23 2007/NULL.0
2007-06-22T21:45:27Z
<p>87.79.237.120: /* zerohttp.c */</p>
<hr />
<div>Gruppe NULL.0<br />
<br />
aus Köln<br />
<br />
== Team ==<br />
* Stefan<br />
* Philipp<br />
* Sebi<br />
* Hanno<br />
<br />
== Links ==<br />
<br />
:'''I2C'''<br />
<br />
:http://www.roboternetz.de/wissen/index.php/I2C<br />
<br />
== Projek t==<br />
=== Idee ===<br />
Haben wir nun schon ein Ziel?<br />
Vorschläge bitte :D<br />
<br />
Ich finde Server und Netzwerkgeschichten interessant:<br />
hier die die schon genannt wurden:<br />
# NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus<br />
# Network monitoring // Obstfliege aka Philipp<br />
# Diverse Server: DHCP,DNS,FTP,HTTP... // Obstfliege aka Philipp <br />
<br />
<hr><br />
Hatten wir uns nicht grob auf folgendes geeinigt? <br />
* Audio Sound Steuerung<br />
** 4 analog Stereo in & 4 Lautsprecher out = front Rear Stero OUT<br />
** Lautstärkeregelung & Wahl des Einganges<br />
** WWW Interface<br />
** Infrarot Fernbedienung zum Ansteuern<br />
Das waren dann 4 Teilprojekte (JavaScript, Infrarot, C-Software, Hardware Löten), das kann man teilweise noch aufteilen. Und beinhaltet so grob jedes Gebiet!<br /><br />
Aber ich weiß nicht, ob so nen Tuner so viel bringt. Mein Interesse ist da eher gering.<br />
<br />
Alternativ:<br />
# USB Ansteuerung<br />
<br />
@Philipp deine Vorschläge sind aber auch ganz nett, auch wenn sie rein softwaremäßig ablaufen. Network Monitoring würde mich glaub ich am meisten interessieren. --[[User:Hanno|Hanno]] 23:14, 31 May 2007 (CEST)<br />
<br />
@Hanno: Ja Monitoring interessiert mich auch besonders. --Philipp<br />
<br />
<br />
<br />
== HTTP-Server ==<br />
<br />
=== git ===<br />
<br />
Das [http://de.wikipedia.org/wiki/Git Git]-Repository kann man sich mit folgendem Kommando besorgen:<br />
<br />
<pre><br />
git clone git://git.haemoglobin.org/etherrape<br />
cd etherrape<br />
git checkout zerohttp<br />
</pre><br />
<br />
=== zerohttp.c ===<br />
<br />
[http://www.haemoglobin.org/U23_2007/zerohttp.c zerohttp.c]<br />
<br />
<pre><br />
#include <avr/io.h><br />
#include <avr/pgmspace.h><br />
#include <string.h><br />
<br />
#include "../uip/uip.h"<br />
#include "tokenize.h"<br />
<br />
#ifndef NULL<br />
#define NULL (char *) 0<br />
#endif<br />
<br />
void zerohttp_invalid() {<br />
strcpy_P(uip_appdata, PSTR("HTTP/1.1 400 Invalid request\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Invalid request!"));<br />
uip_send(uip_appdata, strlen(uip_appdata));<br />
}<br />
<br />
void zerohttp_succeed() {<br />
strcpy_P(uip_appdata, PSTR("HTTP/1.1 200 OK\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Thy wish is my command."));<br />
uip_send(uip_appdata, strlen(uip_appdata));<br />
}<br />
<br />
void zerohttp_fail() {<br />
strcpy_P(uip_appdata, PSTR("HTTP/1.1 404 Command not found\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"I could not fullfill thy humble wish."));<br />
uip_send(uip_appdata, strlen(uip_appdata));<br />
}<br />
<br />
void zerohttp_main() {<br />
register char *garbage;<br />
char *uri;<br />
<br />
if(uip_newdata()) {<br />
garbage = strtokz(uip_appdata, ' ');<br />
if(garbage) {<br />
zerohttp_invalid();<br />
uip_close();<br />
return;<br />
}<br />
<br />
if(strncmp_P(garbage, PSTR("GET"), 4)) {<br />
zerohttp_invalid();<br />
uip_close();<br />
return;<br />
}<br />
<br />
uri = strtokz(NULL, ' ');<br />
if(uri) {<br />
zerohttp_invalid();<br />
uip_close();<br />
return;<br />
}<br />
<br />
garbage = strtokz(NULL, '\r');<br />
if(garbage) {<br />
zerohttp_invalid();<br />
uip_close();<br />
return;<br />
}<br />
<br />
if(strncmp_P(garbage, PSTR("HTTP/1.0"), 9) && strncmp(garbage, PSTR("HTTP/1.1"), 9)) {<br />
zerohttp_invalid();<br />
uip_close();<br />
return;<br />
}<br />
<br />
if(!strncmp_P(uri, PSTR("http://"), 7))<br />
uri += 7;<br />
else<br />
uri++;<br />
<br />
if(!strncmp_P(uri, PSTR("lauter"), 7)) {<br />
// Lauter!<br />
zerohttp_succeed();<br />
uip_close();<br />
return;<br />
}<br />
else if(!strncmp_P(uri, PSTR("leiser"), 7)) {<br />
// Leiser!<br />
zerohttp_succeed();<br />
uip_close();<br />
return;<br />
}<br />
else { <br />
zerohttp_fail();<br />
uip_close();<br />
return;<br />
}<br />
<br />
} <br />
}<br />
</pre><br />
<br />
===tokenize.c===<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.c tokenize.c]<br />
<br />
<pre><br />
/*<br />
* Copyright © MMVII<br />
* Mikael Voss <ffefd6 at haemoglobin dot org><br />
*<br />
* Provided that these terms and disclaimer and all copyright notices<br />
* are retained or reproduced in an accompanying document, permission<br />
* is granted to deal in this work without restriction, including un-<br />
* limited rights to use, publicly perform, distribute, sell, modify,<br />
* merge, give away, or sublicence.<br />
*<br />
* This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to<br />
* the utmost extent permitted by applicable law, neither express nor<br />
* implied; without malicious intent or gross negligence. In no event<br />
* may a licensor, author or contributor be held liable for indirect,<br />
* direct, other damage, loss, or other issues arising in any way out<br />
* of dealing in the work, even if advised of the possibility of such<br />
* damage or existence of a defect, except proven that it results out<br />
* of said person's immediate fault when using the work as intended.<br />
*/<br />
<br />
/*<br />
* strtokn parses a string of length bytes into a sequence of tokens<br />
* separated by delimiter. On the first call the string to be parsed<br />
* should be specified in string and its size in length. On each sub-<br />
* sequent call that should parse the same string, string should be<br />
* (char *) 0 and length will be ignored.<br />
* It returns the next token delimited by delimiter or (char *) 0 if<br />
* no other token is found.<br />
*/<br />
<br />
char *strtokn(char *string, unsigned int length, char delimiter) {<br />
static char *next;<br />
static unsigned int rest;<br />
register unsigned int iterator;<br />
<br />
if(string != (char *) 0) {<br />
next = string;<br />
rest = length;<br />
}<br />
<br />
for(iterator = 0; iterator < rest; iterator++) {<br />
if(next[iterator] == delimiter) {<br />
next[iterator] = '\0';<br />
string = next;<br />
next += iterator + 1;<br />
rest -= iterator - 1;<br />
return string;<br />
}<br />
}<br />
<br />
return (char *) 0;<br />
}<br />
<br />
<br />
/*<br />
* strtokz does the same as strtokn, but operates on a zero-terminated<br />
* string and thus does not take a length argument. Be careful as this<br />
* function might lead to buffer overflows if string is not properly<br />
* terminated!<br />
*/<br />
<br />
char *strtokz(char *string, char delimiter) {<br />
static char *next;<br />
<br />
if(string != (char *) 0)<br />
next = string;<br />
else<br />
string = next;<br />
<br />
while(*next++) {<br />
if(*next == delimiter) {<br />
*next++ = '\0';<br />
return string;<br />
}<br />
}<br />
<br />
return (char *) 0;<br />
}<br />
<br />
</pre><br />
<br />
=== tokenize.h ===<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.h tokenize.h]<br />
<br />
<pre><br />
char *strtokn(char *, unsigned int, char);<br />
char *strtokz(char *, char);<br />
</pre><br />
<br />
[[Category:U23 2007]]</div>
87.79.237.120
https://wiki.koeln.ccc.de/index.php?title=U23_2007/NULL.0&diff=13815
U23 2007/NULL.0
2007-06-22T21:43:10Z
<p>87.79.237.120: /* git */</p>
<hr />
<div>Gruppe NULL.0<br />
<br />
aus Köln<br />
<br />
== Team ==<br />
* Stefan<br />
* Philipp<br />
* Sebi<br />
* Hanno<br />
<br />
== Links ==<br />
<br />
:'''I2C'''<br />
<br />
:http://www.roboternetz.de/wissen/index.php/I2C<br />
<br />
== Projek t==<br />
=== Idee ===<br />
Haben wir nun schon ein Ziel?<br />
Vorschläge bitte :D<br />
<br />
Ich finde Server und Netzwerkgeschichten interessant:<br />
hier die die schon genannt wurden:<br />
# NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus<br />
# Network monitoring // Obstfliege aka Philipp<br />
# Diverse Server: DHCP,DNS,FTP,HTTP... // Obstfliege aka Philipp <br />
<br />
<hr><br />
Hatten wir uns nicht grob auf folgendes geeinigt? <br />
* Audio Sound Steuerung<br />
** 4 analog Stereo in & 4 Lautsprecher out = front Rear Stero OUT<br />
** Lautstärkeregelung & Wahl des Einganges<br />
** WWW Interface<br />
** Infrarot Fernbedienung zum Ansteuern<br />
Das waren dann 4 Teilprojekte (JavaScript, Infrarot, C-Software, Hardware Löten), das kann man teilweise noch aufteilen. Und beinhaltet so grob jedes Gebiet!<br /><br />
Aber ich weiß nicht, ob so nen Tuner so viel bringt. Mein Interesse ist da eher gering.<br />
<br />
Alternativ:<br />
# USB Ansteuerung<br />
<br />
@Philipp deine Vorschläge sind aber auch ganz nett, auch wenn sie rein softwaremäßig ablaufen. Network Monitoring würde mich glaub ich am meisten interessieren. --[[User:Hanno|Hanno]] 23:14, 31 May 2007 (CEST)<br />
<br />
@Hanno: Ja Monitoring interessiert mich auch besonders. --Philipp<br />
<br />
<br />
<br />
== HTTP-Server ==<br />
<br />
=== git ===<br />
<br />
Das [http://de.wikipedia.org/wiki/Git Git]-Repository kann man sich mit folgendem Kommando besorgen:<br />
<br />
<pre><br />
git clone git://git.haemoglobin.org/etherrape<br />
cd etherrape<br />
git checkout zerohttp<br />
</pre><br />
<br />
=== zerohttp.c ===<br />
<br />
[http://www.haemoglobin.org/U23_2007/zerohttp.c zerohttp.c]<br />
<br />
<pre><br />
#include <avr/io.h><br />
#include <avr/pgmspace.h><br />
#include <string.h><br />
<br />
#include "../uip/uip.h"<br />
#include "tokenize.h"<br />
<br />
#ifndef NULL<br />
#define NULL (char *) 0<br />
#endif<br />
<br />
void zerohttp_invalid() {<br />
strcpy_P(uip_appdata, PSTR("HTTP/1.1 400 Invalid request\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Invalid request!"));<br />
uip_send(uip_appdata, strlen(uip_appdata));<br />
}<br />
<br />
void zerohttp_succeed() {<br />
strcpy_P(uip_appdata, PSTR("HTTP/1.1 200 OK\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Thy wish is my command."));<br />
uip_send(uip_appdata, strlen(uip_appdata));<br />
}<br />
<br />
void zerohttp_fail() {<br />
strcpy_P(uip_appdata, PSTR("HTTP/1.1 404 Command not found\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"I could not fullfill thy humble wish."));<br />
uip_send(uip_appdata, strlen(uip_appdata));<br />
}<br />
<br />
void zerohttp_main() {<br />
register char *garbage;<br />
char *uri;<br />
<br />
if(uip_newdata()) {<br />
garbage = strtokz(uip_appdata, ' ');<br />
if(garbage) {<br />
zerohttp_invalid();<br />
uip_close();<br />
}<br />
<br />
if(strncmp_P(garbage, PSTR("GET"), 4)) {<br />
zerohttp_invalid();<br />
uip_close();<br />
}<br />
<br />
uri = strtokz(NULL, ' ');<br />
if(uri) {<br />
zerohttp_invalid();<br />
uip_close();<br />
}<br />
<br />
garbage = strtokz(NULL, '\r');<br />
if(garbage) { zerohttp_invalid();<br />
uip_close();<br />
}<br />
<br />
if(strncmp_P(garbage, PSTR("HTTP/1.0"), 9) && strncmp(garbage, PSTR("HTTP/1.1"), 9)) {<br />
zerohttp_invalid();<br />
uip_close();<br />
}<br />
<br />
if(!strncmp_P(uri, PSTR("http://"), 7))<br />
uri += 7;<br />
else<br />
uri++;<br />
<br />
if(!strncmp_P(uri, PSTR("lauter"), 7)) {<br />
// Lauter!<br />
zerohttp_succeed();<br />
uip_close();<br />
}<br />
else if(!strncmp_P(uri, PSTR("leiser"), 7)) {<br />
// Leiser!<br />
zerohttp_succeed();<br />
uip_close();<br />
}<br />
else { <br />
zerohttp_fail();<br />
uip_close();<br />
}<br />
<br />
} <br />
}<br />
</pre><br />
<br />
===tokenize.c===<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.c tokenize.c]<br />
<br />
<pre><br />
/*<br />
* Copyright © MMVII<br />
* Mikael Voss <ffefd6 at haemoglobin dot org><br />
*<br />
* Provided that these terms and disclaimer and all copyright notices<br />
* are retained or reproduced in an accompanying document, permission<br />
* is granted to deal in this work without restriction, including un-<br />
* limited rights to use, publicly perform, distribute, sell, modify,<br />
* merge, give away, or sublicence.<br />
*<br />
* This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to<br />
* the utmost extent permitted by applicable law, neither express nor<br />
* implied; without malicious intent or gross negligence. In no event<br />
* may a licensor, author or contributor be held liable for indirect,<br />
* direct, other damage, loss, or other issues arising in any way out<br />
* of dealing in the work, even if advised of the possibility of such<br />
* damage or existence of a defect, except proven that it results out<br />
* of said person's immediate fault when using the work as intended.<br />
*/<br />
<br />
/*<br />
* strtokn parses a string of length bytes into a sequence of tokens<br />
* separated by delimiter. On the first call the string to be parsed<br />
* should be specified in string and its size in length. On each sub-<br />
* sequent call that should parse the same string, string should be<br />
* (char *) 0 and length will be ignored.<br />
* It returns the next token delimited by delimiter or (char *) 0 if<br />
* no other token is found.<br />
*/<br />
<br />
char *strtokn(char *string, unsigned int length, char delimiter) {<br />
static char *next;<br />
static unsigned int rest;<br />
register unsigned int iterator;<br />
<br />
if(string != (char *) 0) {<br />
next = string;<br />
rest = length;<br />
}<br />
<br />
for(iterator = 0; iterator < rest; iterator++) {<br />
if(next[iterator] == delimiter) {<br />
next[iterator] = '\0';<br />
string = next;<br />
next += iterator + 1;<br />
rest -= iterator - 1;<br />
return string;<br />
}<br />
}<br />
<br />
return (char *) 0;<br />
}<br />
<br />
<br />
/*<br />
* strtokz does the same as strtokn, but operates on a zero-terminated<br />
* string and thus does not take a length argument. Be careful as this<br />
* function might lead to buffer overflows if string is not properly<br />
* terminated!<br />
*/<br />
<br />
char *strtokz(char *string, char delimiter) {<br />
static char *next;<br />
<br />
if(string != (char *) 0)<br />
next = string;<br />
else<br />
string = next;<br />
<br />
while(*next++) {<br />
if(*next == delimiter) {<br />
*next++ = '\0';<br />
return string;<br />
}<br />
}<br />
<br />
return (char *) 0;<br />
}<br />
<br />
</pre><br />
<br />
=== tokenize.h ===<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.h tokenize.h]<br />
<br />
<pre><br />
char *strtokn(char *, unsigned int, char);<br />
char *strtokz(char *, char);<br />
</pre><br />
<br />
[[Category:U23 2007]]</div>
87.79.237.120
https://wiki.koeln.ccc.de/index.php?title=U23_2007/NULL.0&diff=13791
U23 2007/NULL.0
2007-06-18T18:11:59Z
<p>87.79.237.120: /* zerohttp.c */</p>
<hr />
<div>Gruppe NULL.0<br />
<br />
aus Köln<br />
<br />
== Team ==<br />
* Stefan<br />
* Philipp<br />
* Sebi<br />
* Hanno<br />
<br />
== Links ==<br />
<br />
:'''I2C'''<br />
<br />
:http://www.roboternetz.de/wissen/index.php/I2C<br />
<br />
== Projek t==<br />
=== Idee ===<br />
Haben wir nun schon ein Ziel?<br />
Vorschläge bitte :D<br />
<br />
Ich finde Server und Netzwerkgeschichten interessant:<br />
hier die die schon genannt wurden:<br />
# NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus<br />
# Network monitoring // Obstfliege aka Philipp<br />
# Diverse Server: DHCP,DNS,FTP,HTTP... // Obstfliege aka Philipp <br />
<br />
<hr><br />
Hatten wir uns nicht grob auf folgendes geeinigt? <br />
* Audio Sound Steuerung<br />
** 4 analog Stereo in & 4 Lautsprecher out = front Rear Stero OUT<br />
** Lautstärkeregelung & Wahl des Einganges<br />
** WWW Interface<br />
** Infrarot Fernbedienung zum Ansteuern<br />
Das waren dann 4 Teilprojekte (JavaScript, Infrarot, C-Software, Hardware Löten), das kann man teilweise noch aufteilen. Und beinhaltet so grob jedes Gebiet!<br /><br />
Aber ich weiß nicht, ob so nen Tuner so viel bringt. Mein Interesse ist da eher gering.<br />
<br />
Alternativ:<br />
# USB Ansteuerung<br />
<br />
@Philipp deine Vorschläge sind aber auch ganz nett, auch wenn sie rein softwaremäßig ablaufen. Network Monitoring würde mich glaub ich am meisten interessieren. --[[User:Hanno|Hanno]] 23:14, 31 May 2007 (CEST)<br />
<br />
@Hanno: Ja Monitoring interessiert mich auch besonders. --Philipp<br />
<br />
<br />
<br />
== HTTP-Server ==<br />
<br />
=== git ===<br />
<br />
Das [http://de.wikipedia.org/wiki/Git Git]-Repository kann man sich mit folgendem Kommando besorgen:<br />
<br />
<pre><br />
git clone git://git.haemoglobin.org/zerohttp<br />
</pre><br />
<br />
Um die neuesten Updates zu bekommen:<br />
<br />
<pre><br />
cd zerohttp<br />
git pull<br />
</pre><br />
<br />
=== zerohttp.c ===<br />
<br />
[http://www.haemoglobin.org/U23_2007/zerohttp.c zerohttp.c]<br />
<br />
<pre><br />
#include <avr/io.h><br />
#include <avr/pgmspace.h><br />
#include <string.h><br />
<br />
#include "../uip/uip.h"<br />
#include "tokenize.h"<br />
<br />
#ifndef NULL<br />
#define NULL (char *) 0<br />
#endif<br />
<br />
void zerohttp_invalid() {<br />
strcpy_P(uip_appdata, PSTR("HTTP/1.1 400 Invalid request\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Invalid request!"));<br />
uip_send(uip_appdata, strlen(uip_appdata));<br />
}<br />
<br />
void zerohttp_succeed() {<br />
strcpy_P(uip_appdata, PSTR("HTTP/1.1 200 OK\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Thy wish is my command."));<br />
uip_send(uip_appdata, strlen(uip_appdata));<br />
}<br />
<br />
void zerohttp_fail() {<br />
strcpy_P(uip_appdata, PSTR("HTTP/1.1 404 Command not found\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"I could not fullfill thy humble wish."));<br />
uip_send(uip_appdata, strlen(uip_appdata));<br />
}<br />
<br />
void zerohttp_main() {<br />
register char *garbage;<br />
char *uri;<br />
<br />
if(uip_newdata()) {<br />
garbage = strtokz(uip_appdata, ' ');<br />
if(garbage) {<br />
zerohttp_invalid();<br />
uip_close();<br />
}<br />
<br />
if(strncmp_P(garbage, PSTR("GET"), 4)) {<br />
zerohttp_invalid();<br />
uip_close();<br />
}<br />
<br />
uri = strtokz(NULL, ' ');<br />
if(uri) {<br />
zerohttp_invalid();<br />
uip_close();<br />
}<br />
<br />
garbage = strtokz(NULL, '\r');<br />
if(garbage) { zerohttp_invalid();<br />
uip_close();<br />
}<br />
<br />
if(strncmp_P(garbage, PSTR("HTTP/1.0"), 9) && strncmp(garbage, PSTR("HTTP/1.1"), 9)) {<br />
zerohttp_invalid();<br />
uip_close();<br />
}<br />
<br />
if(!strncmp_P(uri, PSTR("http://"), 7))<br />
uri += 7;<br />
else<br />
uri++;<br />
<br />
if(!strncmp_P(uri, PSTR("lauter"), 7)) {<br />
// Lauter!<br />
zerohttp_succeed();<br />
uip_close();<br />
}<br />
else if(!strncmp_P(uri, PSTR("leiser"), 7)) {<br />
// Leiser!<br />
zerohttp_succeed();<br />
uip_close();<br />
}<br />
else { <br />
zerohttp_fail();<br />
uip_close();<br />
}<br />
<br />
} <br />
}<br />
</pre><br />
<br />
===tokenize.c===<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.c tokenize.c]<br />
<br />
<pre><br />
/*<br />
* Copyright © MMVII<br />
* Mikael Voss <ffefd6 at haemoglobin dot org><br />
*<br />
* Provided that these terms and disclaimer and all copyright notices<br />
* are retained or reproduced in an accompanying document, permission<br />
* is granted to deal in this work without restriction, including un-<br />
* limited rights to use, publicly perform, distribute, sell, modify,<br />
* merge, give away, or sublicence.<br />
*<br />
* This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to<br />
* the utmost extent permitted by applicable law, neither express nor<br />
* implied; without malicious intent or gross negligence. In no event<br />
* may a licensor, author or contributor be held liable for indirect,<br />
* direct, other damage, loss, or other issues arising in any way out<br />
* of dealing in the work, even if advised of the possibility of such<br />
* damage or existence of a defect, except proven that it results out<br />
* of said person's immediate fault when using the work as intended.<br />
*/<br />
<br />
/*<br />
* strtokn parses a string of length bytes into a sequence of tokens<br />
* separated by delimiter. On the first call the string to be parsed<br />
* should be specified in string and its size in length. On each sub-<br />
* sequent call that should parse the same string, string should be<br />
* (char *) 0 and length will be ignored.<br />
* It returns the next token delimited by delimiter or (char *) 0 if<br />
* no other token is found.<br />
*/<br />
<br />
char *strtokn(char *string, unsigned int length, char delimiter) {<br />
static char *next;<br />
static unsigned int rest;<br />
register unsigned int iterator;<br />
<br />
if(string != (char *) 0) {<br />
next = string;<br />
rest = length;<br />
}<br />
<br />
for(iterator = 0; iterator < rest; iterator++) {<br />
if(next[iterator] == delimiter) {<br />
next[iterator] = '\0';<br />
string = next;<br />
next += iterator + 1;<br />
rest -= iterator - 1;<br />
return string;<br />
}<br />
}<br />
<br />
return (char *) 0;<br />
}<br />
<br />
<br />
/*<br />
* strtokz does the same as strtokn, but operates on a zero-terminated<br />
* string and thus does not take a length argument. Be careful as this<br />
* function might lead to buffer overflows if string is not properly<br />
* terminated!<br />
*/<br />
<br />
char *strtokz(char *string, char delimiter) {<br />
static char *next;<br />
<br />
if(string != (char *) 0)<br />
next = string;<br />
else<br />
string = next;<br />
<br />
while(*next++) {<br />
if(*next == delimiter) {<br />
*next++ = '\0';<br />
return string;<br />
}<br />
}<br />
<br />
return (char *) 0;<br />
}<br />
<br />
</pre><br />
<br />
=== tokenize.h ===<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.h tokenize.h]<br />
<br />
<pre><br />
char *strtokn(char *, unsigned int, char);<br />
char *strtokz(char *, char);<br />
</pre><br />
<br />
[[Category:U23 2007]]</div>
87.79.237.120
https://wiki.koeln.ccc.de/index.php?title=U23_2007/NULL.0&diff=13790
U23 2007/NULL.0
2007-06-18T17:55:52Z
<p>87.79.237.120: /* zerohttp.c */</p>
<hr />
<div>Gruppe NULL.0<br />
<br />
aus Köln<br />
<br />
== Team ==<br />
* Stefan<br />
* Philipp<br />
* Sebi<br />
* Hanno<br />
<br />
== Links ==<br />
<br />
:'''I2C'''<br />
<br />
:http://www.roboternetz.de/wissen/index.php/I2C<br />
<br />
== Projek t==<br />
=== Idee ===<br />
Haben wir nun schon ein Ziel?<br />
Vorschläge bitte :D<br />
<br />
Ich finde Server und Netzwerkgeschichten interessant:<br />
hier die die schon genannt wurden:<br />
# NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus<br />
# Network monitoring // Obstfliege aka Philipp<br />
# Diverse Server: DHCP,DNS,FTP,HTTP... // Obstfliege aka Philipp <br />
<br />
<hr><br />
Hatten wir uns nicht grob auf folgendes geeinigt? <br />
* Audio Sound Steuerung<br />
** 4 analog Stereo in & 4 Lautsprecher out = front Rear Stero OUT<br />
** Lautstärkeregelung & Wahl des Einganges<br />
** WWW Interface<br />
** Infrarot Fernbedienung zum Ansteuern<br />
Das waren dann 4 Teilprojekte (JavaScript, Infrarot, C-Software, Hardware Löten), das kann man teilweise noch aufteilen. Und beinhaltet so grob jedes Gebiet!<br /><br />
Aber ich weiß nicht, ob so nen Tuner so viel bringt. Mein Interesse ist da eher gering.<br />
<br />
Alternativ:<br />
# USB Ansteuerung<br />
<br />
@Philipp deine Vorschläge sind aber auch ganz nett, auch wenn sie rein softwaremäßig ablaufen. Network Monitoring würde mich glaub ich am meisten interessieren. --[[User:Hanno|Hanno]] 23:14, 31 May 2007 (CEST)<br />
<br />
@Hanno: Ja Monitoring interessiert mich auch besonders. --Philipp<br />
<br />
<br />
<br />
== HTTP-Server ==<br />
<br />
=== git ===<br />
<br />
Das [http://de.wikipedia.org/wiki/Git Git]-Repository kann man sich mit folgendem Kommando besorgen:<br />
<br />
<pre><br />
git clone git://git.haemoglobin.org/zerohttp<br />
</pre><br />
<br />
Um die neuesten Updates zu bekommen:<br />
<br />
<pre><br />
cd zerohttp<br />
git pull<br />
</pre><br />
<br />
=== zerohttp.c ===<br />
<br />
[http://www.haemoglobin.org/U23_2007/zerohttp.c zerohttp.c]<br />
<br />
<pre><br />
#include <avr/io.h><br />
#include <avr/pgmspace.h><br />
#include <string.h><br />
<br />
#include "../uip/uip.h"<br />
#include "tokenize.h"<br />
<br />
#ifndef NULL<br />
#define NULL (char *) 0<br />
#endif<br />
<br />
void zerohttp_invalid() {<br />
strcpy_P(uip_appdata, PSTR("HTTP/1.1 400 Invalid request\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Invalid request!"));<br />
uip_send(uip_appdata, strlen(uip_appdata));<br />
}<br />
<br />
void zerohttp_succeed() {<br />
strcpy_P(uip_appdata, PSTR("HTTP/1.1 200 OK\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Thy wish is my command."));<br />
uip_send(uip_appdata, strlen(uip_appdata));<br />
}<br />
<br />
void zerohttp_fail() {<br />
strcpy_P(uip_appdata, PSTR("HTTP/1.1 404 Command not found\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"I could not fullfill thy humble wish."));<br />
uip_send(uip_appdata, strlen(uip_appdata));<br />
}<br />
<br />
void zerohttp_main() {<br />
register char *garbage;<br />
char *uri;<br />
<br />
uip_listen(HTONS(80));<br />
<br />
if(uip_newdata()) {<br />
garbage = strtokz(uip_appdata, ' ');<br />
if(garbage) {<br />
zerohttp_invalid();<br />
uip_close();<br />
}<br />
<br />
if(strncmp_P(garbage, PSTR("GET"), 4)) {<br />
zerohttp_invalid();<br />
uip_close();<br />
}<br />
<br />
uri = strtokz(NULL, ' ');<br />
if(uri) {<br />
zerohttp_invalid();<br />
uip_close();<br />
}<br />
<br />
garbage = strtokz(NULL, '\r');<br />
if(garbage) { zerohttp_invalid();<br />
uip_close();<br />
}<br />
<br />
if(strncmp_P(garbage, PSTR("HTTP/1.0"), 9) && strncmp(garbage, PSTR("HTTP/1.1"), 9)) {<br />
zerohttp_invalid();<br />
uip_close();<br />
}<br />
<br />
if(!strncmp_P(uri, PSTR("http://"), 7))<br />
uri += 7;<br />
else<br />
uri++;<br />
<br />
if(!strncmp_P(uri, PSTR("lauter"), 7)) {<br />
// Lauter!<br />
zerohttp_succeed();<br />
uip_close();<br />
}<br />
else if(!strncmp_P(uri, PSTR("leiser"), 7)) {<br />
// Leiser!<br />
zerohttp_succeed();<br />
uip_close();<br />
}<br />
else { <br />
zerohttp_fail();<br />
uip_close();<br />
}<br />
<br />
} <br />
}<br />
</pre><br />
<br />
===tokenize.c===<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.c tokenize.c]<br />
<br />
<pre><br />
/*<br />
* Copyright © MMVII<br />
* Mikael Voss <ffefd6 at haemoglobin dot org><br />
*<br />
* Provided that these terms and disclaimer and all copyright notices<br />
* are retained or reproduced in an accompanying document, permission<br />
* is granted to deal in this work without restriction, including un-<br />
* limited rights to use, publicly perform, distribute, sell, modify,<br />
* merge, give away, or sublicence.<br />
*<br />
* This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to<br />
* the utmost extent permitted by applicable law, neither express nor<br />
* implied; without malicious intent or gross negligence. In no event<br />
* may a licensor, author or contributor be held liable for indirect,<br />
* direct, other damage, loss, or other issues arising in any way out<br />
* of dealing in the work, even if advised of the possibility of such<br />
* damage or existence of a defect, except proven that it results out<br />
* of said person's immediate fault when using the work as intended.<br />
*/<br />
<br />
/*<br />
* strtokn parses a string of length bytes into a sequence of tokens<br />
* separated by delimiter. On the first call the string to be parsed<br />
* should be specified in string and its size in length. On each sub-<br />
* sequent call that should parse the same string, string should be<br />
* (char *) 0 and length will be ignored.<br />
* It returns the next token delimited by delimiter or (char *) 0 if<br />
* no other token is found.<br />
*/<br />
<br />
char *strtokn(char *string, unsigned int length, char delimiter) {<br />
static char *next;<br />
static unsigned int rest;<br />
register unsigned int iterator;<br />
<br />
if(string != (char *) 0) {<br />
next = string;<br />
rest = length;<br />
}<br />
<br />
for(iterator = 0; iterator < rest; iterator++) {<br />
if(next[iterator] == delimiter) {<br />
next[iterator] = '\0';<br />
string = next;<br />
next += iterator + 1;<br />
rest -= iterator - 1;<br />
return string;<br />
}<br />
}<br />
<br />
return (char *) 0;<br />
}<br />
<br />
<br />
/*<br />
* strtokz does the same as strtokn, but operates on a zero-terminated<br />
* string and thus does not take a length argument. Be careful as this<br />
* function might lead to buffer overflows if string is not properly<br />
* terminated!<br />
*/<br />
<br />
char *strtokz(char *string, char delimiter) {<br />
static char *next;<br />
<br />
if(string != (char *) 0)<br />
next = string;<br />
else<br />
string = next;<br />
<br />
while(*next++) {<br />
if(*next == delimiter) {<br />
*next++ = '\0';<br />
return string;<br />
}<br />
}<br />
<br />
return (char *) 0;<br />
}<br />
<br />
</pre><br />
<br />
=== tokenize.h ===<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.h tokenize.h]<br />
<br />
<pre><br />
char *strtokn(char *, unsigned int, char);<br />
char *strtokz(char *, char);<br />
</pre><br />
<br />
[[Category:U23 2007]]</div>
87.79.237.120
https://wiki.koeln.ccc.de/index.php?title=U23_2007/NULL.0&diff=13778
U23 2007/NULL.0
2007-06-11T21:15:25Z
<p>87.79.237.120: /* tokenize.c */</p>
<hr />
<div>Gruppe NULL.0<br />
<br />
aus Köln<br />
<br />
== Team ==<br />
* Stefan<br />
* Philipp<br />
* Sebi<br />
* Hanno<br />
<br />
== Links ==<br />
<br />
:'''I2C'''<br />
<br />
:http://www.roboternetz.de/wissen/index.php/I2C<br />
<br />
== Projek t==<br />
=== Idee ===<br />
Haben wir nun schon ein Ziel?<br />
Vorschläge bitte :D<br />
<br />
Ich finde Server und Netzwerkgeschichten interessant:<br />
hier die die schon genannt wurden:<br />
# NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus<br />
# Network monitoring // Obstfliege aka Philipp<br />
# Diverse Server: DHCP,DNS,FTP,HTTP... // Obstfliege aka Philipp <br />
<br />
<hr><br />
Hatten wir uns nicht grob auf folgendes geeinigt? <br />
* Audio Sound Steuerung<br />
** 4 analog Stereo in & 4 Lautsprecher out = front Rear Stero OUT<br />
** Lautstärkeregelung & Wahl des Einganges<br />
** WWW Interface<br />
** Infrarot Fernbedienung zum Ansteuern<br />
Das waren dann 4 Teilprojekte (JavaScript, Infrarot, C-Software, Hardware Löten), das kann man teilweise noch aufteilen. Und beinhaltet so grob jedes Gebiet!<br /><br />
Aber ich weiß nicht, ob so nen Tuner so viel bringt. Mein Interesse ist da eher gering.<br />
<br />
Alternativ:<br />
# USB Ansteuerung<br />
<br />
@Philipp deine Vorschläge sind aber auch ganz nett, auch wenn sie rein softwaremäßig ablaufen. Network Monitoring würde mich glaub ich am meisten interessieren. --[[User:Hanno|Hanno]] 23:14, 31 May 2007 (CEST)<br />
<br />
@Hanno: Ja Monitoring interessiert mich auch besonders. --Philipp<br />
<br />
<br />
<br />
== HTTP-Server ==<br />
<br />
=== git ===<br />
<br />
Das [http://de.wikipedia.org/wiki/Git Git]-Repository kann man sich mit folgendem Kommando besorgen:<br />
<br />
<pre><br />
git clone git://git.haemoglobin.org/zerohttp<br />
</pre><br />
<br />
Um die neuesten Updates zu bekommen:<br />
<br />
<pre><br />
cd zerohttp<br />
git pull<br />
</pre><br />
<br />
=== zerohttp.c ===<br />
<br />
[http://www.haemoglobin.org/U23_2007/zerohttp.c zerohttp.c]<br />
<br />
<pre><br />
#include <string.h><br />
<br />
#include "tokenize.h"<br />
<br />
void zerohttp_invalid(char *data) {<br />
strcpy_P(data, PSTR("HTTP/1.1 400 Invalid request\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Invalid request!"));<br />
uip_send(data, strlen(data));<br />
}<br />
<br />
void zerohttp_succeed(char *data) {<br />
strcpy_P(data, PSTR("HTTP/1.1 200 OK\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Thy wish is my command."));<br />
uip_send(data, strlen(data));<br />
}<br />
<br />
void zerohttp_fail(char *data) {<br />
strcpy_P(data, PSTR("HTTP/1.1 404 Command not found\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"I could not fullfill thy humbly wish."));<br />
uip_send(data, strlen(data));<br />
}<br />
<br />
void zerohttp_main() {<br />
char *data = (char*) uip_appdata;<br />
<br />
register char *garbage;<br />
char *uri;<br />
<br />
<br />
uip_listen(HTONS(80));<br />
<br />
if(uip_newdata()) {<br />
garbage = strtokz(data, ' ');<br />
if(garbage) {<br />
zerohttp_invalid(data);<br />
uip_close();<br />
}<br />
<br />
if(strncmp(garbage, PSTR("GET"), 4)) {<br />
zerohttp_invalid(data);<br />
uip_close();<br />
}<br />
<br />
uri = strtokz(NULL, ' ');<br />
if(uri) {<br />
zerohttp_invalid(data);<br />
uip_close();<br />
}<br />
<br />
garbage = strtokz(NULL, '\r');<br />
if(garbage) {<br />
zerohttp_invalid(data);<br />
uip_close();<br />
}<br />
<br />
if(strncmp(garbage, PSTR("HTTP/1.0"), 9) && strncmp(garbage, PSTR("HTTP/1.1"), 9)) {<br />
zerohttp_invalid(data);<br />
uip_close();<br />
}<br />
<br />
if(!strncmp(uri, PSTR("http://"), 7))<br />
uri += 7;<br />
else<br />
uri++;<br />
<br />
if(!strncmp(uri, PSTR("lauter"), 7)) {<br />
// Lauter!<br />
zerohttp_succeed();<br />
uip_close();<br />
}<br />
else if(!strncmp(uri, PSTR("leiser"), 7)) {<br />
// Leiser!<br />
zerohttp_succeed();<br />
uip_close();<br />
}<br />
else {<br />
zerohttp_fail();<br />
uip_close();<br />
}<br />
<br />
}<br />
}<br />
<br />
</pre><br />
<br />
===tokenize.c===<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.c tokenize.c]<br />
<br />
<pre><br />
/*<br />
* Copyright © MMVII<br />
* Mikael Voss <ffefd6 at haemoglobin dot org><br />
*<br />
* Provided that these terms and disclaimer and all copyright notices<br />
* are retained or reproduced in an accompanying document, permission<br />
* is granted to deal in this work without restriction, including un-<br />
* limited rights to use, publicly perform, distribute, sell, modify,<br />
* merge, give away, or sublicence.<br />
*<br />
* This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to<br />
* the utmost extent permitted by applicable law, neither express nor<br />
* implied; without malicious intent or gross negligence. In no event<br />
* may a licensor, author or contributor be held liable for indirect,<br />
* direct, other damage, loss, or other issues arising in any way out<br />
* of dealing in the work, even if advised of the possibility of such<br />
* damage or existence of a defect, except proven that it results out<br />
* of said person's immediate fault when using the work as intended.<br />
*/<br />
<br />
/*<br />
* strtokn parses a string of length bytes into a sequence of tokens<br />
* separated by delimiter. On the first call the string to be parsed<br />
* should be specified in string and its size in length. On each sub-<br />
* sequent call that should parse the same string, string should be<br />
* (char *) 0 and length will be ignored.<br />
* It returns the next token delimited by delimiter or (char *) 0 if<br />
* no other token is found.<br />
*/<br />
<br />
char *strtokn(char *string, unsigned int length, char delimiter) {<br />
static char *next;<br />
static unsigned int rest;<br />
register unsigned int iterator;<br />
<br />
if(string != (char *) 0) {<br />
next = string;<br />
rest = length;<br />
}<br />
<br />
for(iterator = 0; iterator < rest; iterator++) {<br />
if(next[iterator] == delimiter) {<br />
next[iterator] = '\0';<br />
string = next;<br />
next += iterator + 1;<br />
rest -= iterator - 1;<br />
return string;<br />
}<br />
}<br />
<br />
return (char *) 0;<br />
}<br />
<br />
<br />
/*<br />
* strtokz does the same as strtokn, but operates on a zero-terminated<br />
* string and thus does not take a length argument. Be careful as this<br />
* function might lead to buffer overflows if string is not properly<br />
* terminated!<br />
*/<br />
<br />
char *strtokz(char *string, char delimiter) {<br />
static char *next;<br />
<br />
if(string != (char *) 0)<br />
next = string;<br />
else<br />
string = next;<br />
<br />
while(*next++) {<br />
if(*next == delimiter) {<br />
*next++ = '\0';<br />
return string;<br />
}<br />
}<br />
<br />
return (char *) 0;<br />
}<br />
<br />
</pre><br />
<br />
=== tokenize.h ===<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.h tokenize.h]<br />
<br />
<pre><br />
char *strtokn(char *, unsigned int, char);<br />
char *strtokz(char *, char);<br />
</pre><br />
<br />
[[Category:U23 2007]]</div>
87.79.237.120
https://wiki.koeln.ccc.de/index.php?title=U23_2007/NULL.0&diff=13777
U23 2007/NULL.0
2007-06-11T21:15:00Z
<p>87.79.237.120: </p>
<hr />
<div>Gruppe NULL.0<br />
<br />
aus Köln<br />
<br />
== Team ==<br />
* Stefan<br />
* Philipp<br />
* Sebi<br />
* Hanno<br />
<br />
== Links ==<br />
<br />
:'''I2C'''<br />
<br />
:http://www.roboternetz.de/wissen/index.php/I2C<br />
<br />
== Projek t==<br />
=== Idee ===<br />
Haben wir nun schon ein Ziel?<br />
Vorschläge bitte :D<br />
<br />
Ich finde Server und Netzwerkgeschichten interessant:<br />
hier die die schon genannt wurden:<br />
# NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus<br />
# Network monitoring // Obstfliege aka Philipp<br />
# Diverse Server: DHCP,DNS,FTP,HTTP... // Obstfliege aka Philipp <br />
<br />
<hr><br />
Hatten wir uns nicht grob auf folgendes geeinigt? <br />
* Audio Sound Steuerung<br />
** 4 analog Stereo in & 4 Lautsprecher out = front Rear Stero OUT<br />
** Lautstärkeregelung & Wahl des Einganges<br />
** WWW Interface<br />
** Infrarot Fernbedienung zum Ansteuern<br />
Das waren dann 4 Teilprojekte (JavaScript, Infrarot, C-Software, Hardware Löten), das kann man teilweise noch aufteilen. Und beinhaltet so grob jedes Gebiet!<br /><br />
Aber ich weiß nicht, ob so nen Tuner so viel bringt. Mein Interesse ist da eher gering.<br />
<br />
Alternativ:<br />
# USB Ansteuerung<br />
<br />
@Philipp deine Vorschläge sind aber auch ganz nett, auch wenn sie rein softwaremäßig ablaufen. Network Monitoring würde mich glaub ich am meisten interessieren. --[[User:Hanno|Hanno]] 23:14, 31 May 2007 (CEST)<br />
<br />
@Hanno: Ja Monitoring interessiert mich auch besonders. --Philipp<br />
<br />
<br />
<br />
== HTTP-Server ==<br />
<br />
=== git ===<br />
<br />
Das [http://de.wikipedia.org/wiki/Git Git]-Repository kann man sich mit folgendem Kommando besorgen:<br />
<br />
<pre><br />
git clone git://git.haemoglobin.org/zerohttp<br />
</pre><br />
<br />
Um die neuesten Updates zu bekommen:<br />
<br />
<pre><br />
cd zerohttp<br />
git pull<br />
</pre><br />
<br />
=== zerohttp.c ===<br />
<br />
[http://www.haemoglobin.org/U23_2007/zerohttp.c zerohttp.c]<br />
<br />
<pre><br />
#include <string.h><br />
<br />
#include "tokenize.h"<br />
<br />
void zerohttp_invalid(char *data) {<br />
strcpy_P(data, PSTR("HTTP/1.1 400 Invalid request\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Invalid request!"));<br />
uip_send(data, strlen(data));<br />
}<br />
<br />
void zerohttp_succeed(char *data) {<br />
strcpy_P(data, PSTR("HTTP/1.1 200 OK\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"Thy wish is my command."));<br />
uip_send(data, strlen(data));<br />
}<br />
<br />
void zerohttp_fail(char *data) {<br />
strcpy_P(data, PSTR("HTTP/1.1 404 Command not found\r\n"<br />
"Server: zerohttp\r\n"<br />
"Connection: close\r\n"<br />
"Content-Type: text/plain\r\n\r\n"<br />
"I could not fullfill thy humbly wish."));<br />
uip_send(data, strlen(data));<br />
}<br />
<br />
void zerohttp_main() {<br />
char *data = (char*) uip_appdata;<br />
<br />
register char *garbage;<br />
char *uri;<br />
<br />
<br />
uip_listen(HTONS(80));<br />
<br />
if(uip_newdata()) {<br />
garbage = strtokz(data, ' ');<br />
if(garbage) {<br />
zerohttp_invalid(data);<br />
uip_close();<br />
}<br />
<br />
if(strncmp(garbage, PSTR("GET"), 4)) {<br />
zerohttp_invalid(data);<br />
uip_close();<br />
}<br />
<br />
uri = strtokz(NULL, ' ');<br />
if(uri) {<br />
zerohttp_invalid(data);<br />
uip_close();<br />
}<br />
<br />
garbage = strtokz(NULL, '\r');<br />
if(garbage) {<br />
zerohttp_invalid(data);<br />
uip_close();<br />
}<br />
<br />
if(strncmp(garbage, PSTR("HTTP/1.0"), 9) && strncmp(garbage, PSTR("HTTP/1.1"), 9)) {<br />
zerohttp_invalid(data);<br />
uip_close();<br />
}<br />
<br />
if(!strncmp(uri, PSTR("http://"), 7))<br />
uri += 7;<br />
else<br />
uri++;<br />
<br />
if(!strncmp(uri, PSTR("lauter"), 7)) {<br />
// Lauter!<br />
zerohttp_succeed();<br />
uip_close();<br />
}<br />
else if(!strncmp(uri, PSTR("leiser"), 7)) {<br />
// Leiser!<br />
zerohttp_succeed();<br />
uip_close();<br />
}<br />
else {<br />
zerohttp_fail();<br />
uip_close();<br />
}<br />
<br />
}<br />
}<br />
<br />
</pre><br />
<br />
===tokenize.c===<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.c tokenize.c]<br />
<br />
<pre><br />
/*<br />
* Copyright © MMVII<br />
* Mikael Voss <ffefd6 at haemoglobin dot org><br />
*<br />
* Provided that these terms and disclaimer and all copyright notices<br />
* are retained or reproduced in an accompanying document, permission<br />
* is granted to deal in this work without restriction, including un-<br />
* limited rights to use, publicly perform, distribute, sell, modify,<br />
* merge, give away, or sublicence.<br />
*<br />
* This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to<br />
* the utmost extent permitted by applicable law, neither express nor<br />
* implied; without malicious intent or gross negligence. In no event<br />
* may a licensor, author or contributor be held liable for indirect,<br />
* direct, other damage, loss, or other issues arising in any way out<br />
* of dealing in the work, even if advised of the possibility of such<br />
* damage or existence of a defect, except proven that it results out<br />
* of said person's immediate fault when using the work as intended.<br />
*/<br />
<br />
/*<br />
* strtokn parses a string of length bytes into a sequence of tokens<br />
* separated by delimiter. On the first call the string to be parsed<br />
* should be specified in string and its size in length. On each sub-<br />
* sequent call that should parse the same string, string should be<br />
* (char *) 0 and length will be ignored.<br />
* It returns the next token delimited by delimiter or (char *) 0 if<br />
* no other token is found.<br />
*/<br />
<br />
char *strtokn(char *string, unsigned int length, char delimiter) {<br />
static char *next;<br />
static unsigned int rest;<br />
register unsigned int iterator;<br />
<br />
if(string != (char *) 0) {<br />
next = string;<br />
rest = length;<br />
}<br />
<br />
for(iterator = 0; iterator < rest; iterator++) {<br />
if(next[iterator] == delimiter) {<br />
next[iterator] = '\0';<br />
string = next;<br />
next += iterator + 1;<br />
rest -= iterator - 1;<br />
return string;<br />
}<br />
}<br />
<br />
return (char *) 0;<br />
}<br />
<br />
<br />
/*<br />
* strtokz does the same as strtokn, but operates on a zero-terminated<br />
* string and thus does not take a length argument. Be careful as this<br />
* function might lead to buffer overflows if string is not properly<br />
* terminated!<br />
*/<br />
<br />
char *strtokz(char *string, char delimiter) {<br />
static char *next;<br />
<br />
if(string != (char *) 0)<br />
next = string;<br />
else<br />
string = next;<br />
<br />
while(*next++) {<br />
if(*next == delimiter) {<br />
*next++ = '\0';<br />
return string;<br />
}<br />
}<br />
<br />
return (char *) 0;<br />
}<br />
<br />
</pre><br />
<br />
=== tokenize.h ===<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.h tokenize.h]<br />
<br />
<pre><br />
char *strtokn(char *, unsigned int, char);<br />
char *strtokz(char *, char);<br />
</pre><br />
<br />
[[Category:U23 2007]]</div>
87.79.237.120
https://wiki.koeln.ccc.de/index.php?title=U23_2007&diff=13760
U23 2007
2007-06-09T14:56:22Z
<p>87.79.237.120: /* Anwendungsbeispiel */</p>
<hr />
<div>Hier sammeln wir Ideen und Hintergrundinformationen zum [http://koeln.ccc.de/prozesse/running/u23-2007 U23 2007].<br />
<br />
== Hintergrundinformationen & Dokumentation ==<br />
* http://www.lochraster.org/etherrape/<br />
* http://wiki.lochraster.org/<br />
* [http://atmel.com/dyn/resources/prod_documents/doc2593.pdf atmega644 Datenblatt]<br />
* [http://savannah.nongnu.org/download/avr-libc/avr-libc-user-manual-1.4.5.pdf.bz2 AVR-Libc Dokumentation (pdf)]<br />
* [http://www.nongnu.org/avr-libc/user-manual/modules.html AVR-Libc Dokumentation (online, html)]<br />
* [http://www.it.lth.se/datablad/Logik/74HC/74HC4094.pdf 74HC4094 Schieberegister Datenblatt]<br />
<br />
== Bastelideen ==<br />
<br />
* Wetterstation<br />
* Zahlencodeschloss zur Türsteuerung mit Kameraerweiterung<br />
* NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus<br />
* Network monitoring // Obstfliege aka Philipp<br />
* Diverse Server: DHCP,DNS,... // Obstfliege aka Philipp<br />
<br />
== Abend 1 ==<br />
<br />
* [http://w8n.koeln.ccc.de/media/slides/U23/2007/U23-Einführung.pdf Folien zum Einführungsabend]<br />
<br />
== Abend 2 ==<br />
<br />
[[/Inhalt Abend 2]]<br />
<br />
<br />
== Abend 4 ==<br />
[[/Inhalt Abend 4]]<br />
<br />
== Feedback ==<br />
<br />
Bitte hier (auch gern anonym) Feedback hinterlassen:<br />
<br />
* [[/Feedback Abend 1]]<br />
* [[/Feedback Abend 2]]<br />
* [[/Feedback Abend 3]]<br />
* [[/Feedback Abend 4]]<br />
<br />
== Gruppen ==<br />
<br />
* [[/NULL.0]]<br />
* [[/MateCrew]]<br />
* [[/24]]<br />
* [[/Evil Solutions]]<br />
<br />
== Bastelmaterial ==<br />
<br />
Was haben wir? Was brauchen wir?<br />
<br />
=== ICs ===<br />
<br />
Der C4 hat eine ganze Reihe an ICs geschenkt gekriegt, die für das U23 zur Verfügung stehen. Derzeit sind noch von allen jeweils eine Stange (also 20 oder 25 Stück) vorhanden.<br />
<br />
{| border="1" style="border-collapse:collapse;"<br />
! Typ || Bezeichnung<br />
|-<br />
|74LS02N || Vier NOR-Gatter mit je 2 Eingängen<br />
|-<br />
|74LS05N || Sechs Inverter (open Collector)<br />
|-<br />
|74LS07 || Sechs Treiber (open Collector, 30V)<br />
|-<br />
|74LS12N || Drei NAND-Gatter mit je 3 Eingängen (open Collector)<br />
|-<br />
|74LS20 || Zwei NAND-Gatter mit je 4 Eingängen<br />
|-<br />
|74LS32N || Vier OR-Gatter mit je 2 Eingängen<br />
|-<br />
|74LS38B1 || Vier NAND-Leistungsgatter mit je 2 Eingängen (open Collector)<br />
|-<br />
|74LS73AN || Zwei JK-Flipflops mit Clear<br />
|-<br />
|74LS74AN || Zwei D-Flipflops mit Preset und Clear<br />
|-<br />
|74LS83AN || 4-Bit Volladdierer<br />
|-<br />
|74LS95BP || 4-Bit Schieberegister mit paralleler Ein- und Ausgabe<br />
|-<br />
|74ALS112 || Zwei J-K Flipflops mit Preset und Clear (Advanced Speed)<br />
|-<br />
|74LS191 || Synchroner programmierbarer Vorwärts/Rückwärts 4-Bit Binärzähler<br />
|-<br />
|74LS193B1 || Synchroner programmierbarer Vorwärts/Rückwärts 4-Bit Binärzähler mit Clear<br />
|-<br />
|74LS258AB1 || Vier 2 zu 1 Datenselektoren/Multiplexer mit invertierenden Tri-State Ausgängen<br />
|-<br />
|74LS273N || 8-Bit D Register mit Clear<br />
|-<br />
|74LS280 || 9-Bit Paritätsgenerator/Paritätsprüfer<br />
|-<br />
|74LS374N || 8-Bit D Register mit Tri-State Ausgängen<br />
|-<br />
|74LS375P || Zwei 2-Bit D Latches mit Enable<br />
|-<br />
|74LS645B1 || Octal Bus Transceiver<br />
|-<br />
|74LS688N || 8-Bit Equality Comparator<br />
|}<br />
<br />
== Interessenten fertige etherrapes ==<br />
<br />
NACH U23 stehen drei fertige etherrapes fuer 59,- zum Verkauf.<br />
<br />
Interessenten:<br />
<br />
# Benjamin<br />
# Sebi<br />
# Hanno<br />
# Felix<br />
<br />
== Bootloader unter Win32 ==<br />
<br />
Bitte compiliert das jemand: https://ssl2.mecking.net/svn/etherrape/bootloader-launcher-win32/branches/stable/launch-bootloader.c<br />
<br />
<br />
http://www.haemoglobin.org/U23_2007/launch-bootloader.exe<br />
<br />
[http://www.haemoglobin.org/U23_2007/md5sums MD5]- und [http://www.haemoglobin.org/U23_2007/sha1sums SHA1]-Pruefsummen, sowie [http://www.haemoglobin.org/U23_2007/launch-bootloader.exe.sig OpenPGP-Signatur]<br />
<br />
== strtok ==<br />
<br />
Da die AVR-libc keine strtok-Funktion bietet (wie sich spaeter herausgestellt hat, jedoch strtok_r), habe ich fuer Valentin strtokn und strtokz geschrieben, die einen String mit bestimmer Laenge bzw. Nullterminierung in Tokens parsen.<br />
Der Code steht unter einer an das europaeische Recht angepassten Version der MIT-Lizenz und kann daher problemlos sowohl in GPL-, als auch kommerzieller Software verwendet werden.<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.h tokenize.h]<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.c tokenize.c]<br />
<br />
Sollte jemand einen Bug finden, moege er bitte eine e-Mail oder Jabber-Nachricht an die im Code angegebene Adresse senden.<br />
<br />
=== Anwendungsbeispiel ===<br />
<br />
<pre><br />
/* Ein einfacher Pseudo-HTTP-Parser */<br />
<br />
#include <string.h> /* Fuer NULL und strncmp */<br />
<br />
#define BUFLEN 255<br />
<br />
char buffer[BUFLEN]; /* Unser Lesepuffer */<br />
<br />
char *method; /* Die HTTP-Methode, e.g. HEAD, GET, POST oder PUT */<br />
char *uri; /* Der Uniform Resource Identifier, also das, was man in die Adresszeile des Browsers tippt */<br />
char *version; /* Der HTTP-Versionstring, normalerweise HTTP/1.0 oder HTTP/1.1 */<br />
<br />
method = strtokn(buffer, BUFLEN, ' '); /* sizeof(buffer) anstatt BUFLEN sollte auch gehen, weil buffer in diesem Fall ein char[] und kein char* ist */<br />
if(method) { /* Kein Token gefunden? */<br />
/* Fehlerbehandlung, beispielsweise einen 400-Statuscode zuruecksenden */<br />
}<br />
<br />
if(strncmp(method, "GET", 4)) {<br />
/* Wir moechten nur GET-Requests behandeln, also senden wir irgendeinen 4XX-Statuscode zurueck */<br />
}<br />
<br />
uri = strtokn(NULL, 0, ' ');<br />
if(uri) { /* Kein Token? */<br />
/* Einen 400-Statuscode zurueck */<br />
}<br />
<br />
version = strtokn(NULL, 0, '\r');<br />
if(version) {<br />
/* Das uebliche ;) */<br />
}<br />
<br />
if(strncmp(version, "HTTP/1.0", 9) && strncmp(version, "HTTP/1.1", 9)) {<br />
/* Wir wollen nur HTTP 1.0 oder 1.1 - also wieder 400 */<br />
}<br />
<br />
/*<br />
* Jetzt haben wir alles, was wir brauchen, jedoch ist es auch moeglich,<br />
* den kompletten HTTP-Header zu parsen, um so einen vollwertigen Webserver<br />
* zu schreiben.<br />
*/<br />
<br />
</pre><br />
<br />
== OffTopic ==<br />
<br />
===Borg 3D===<br />
<br />
Die Borgs 3d standen heute bei uns in der Uni (irgend ein Schüler und Naturwissenschaften Messe ding): Sind ganz lustig anzusehen:<br />
*[http://youtube.com/watch?v=4MGKhFIujM4 Borg 3d in Farbe]<br />
*[http://youtube.com/watch?v=PGb9DeUOsSY Borg 3d in 8x8x8]<br />
gemacht von [http://www.das-labor.org das-labor.org] aus Bochum.<br />
<br />
lenkt aber wahrscheinlich von unserem Eigentlichen Projekt ab, etwas mit dem etherrape zu machen. Gruß Hanno<br />
<br />
[[Category:Events]]<br />
[[Category:U23]] <br />
[[Category:U23 2007]]</div>
87.79.237.120
https://wiki.koeln.ccc.de/index.php?title=U23_2007&diff=13759
U23 2007
2007-06-09T14:53:20Z
<p>87.79.237.120: /* Anwendungsbeispiel */</p>
<hr />
<div>Hier sammeln wir Ideen und Hintergrundinformationen zum [http://koeln.ccc.de/prozesse/running/u23-2007 U23 2007].<br />
<br />
== Hintergrundinformationen & Dokumentation ==<br />
* http://www.lochraster.org/etherrape/<br />
* http://wiki.lochraster.org/<br />
* [http://atmel.com/dyn/resources/prod_documents/doc2593.pdf atmega644 Datenblatt]<br />
* [http://savannah.nongnu.org/download/avr-libc/avr-libc-user-manual-1.4.5.pdf.bz2 AVR-Libc Dokumentation (pdf)]<br />
* [http://www.nongnu.org/avr-libc/user-manual/modules.html AVR-Libc Dokumentation (online, html)]<br />
* [http://www.it.lth.se/datablad/Logik/74HC/74HC4094.pdf 74HC4094 Schieberegister Datenblatt]<br />
<br />
== Bastelideen ==<br />
<br />
* Wetterstation<br />
* Zahlencodeschloss zur Türsteuerung mit Kameraerweiterung<br />
* NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus<br />
* Network monitoring // Obstfliege aka Philipp<br />
* Diverse Server: DHCP,DNS,... // Obstfliege aka Philipp<br />
<br />
== Abend 1 ==<br />
<br />
* [http://w8n.koeln.ccc.de/media/slides/U23/2007/U23-Einführung.pdf Folien zum Einführungsabend]<br />
<br />
== Abend 2 ==<br />
<br />
[[/Inhalt Abend 2]]<br />
<br />
<br />
== Abend 4 ==<br />
[[/Inhalt Abend 4]]<br />
<br />
== Feedback ==<br />
<br />
Bitte hier (auch gern anonym) Feedback hinterlassen:<br />
<br />
* [[/Feedback Abend 1]]<br />
* [[/Feedback Abend 2]]<br />
* [[/Feedback Abend 3]]<br />
* [[/Feedback Abend 4]]<br />
<br />
== Gruppen ==<br />
<br />
* [[/NULL.0]]<br />
* [[/MateCrew]]<br />
* [[/24]]<br />
* [[/Evil Solutions]]<br />
<br />
== Bastelmaterial ==<br />
<br />
Was haben wir? Was brauchen wir?<br />
<br />
=== ICs ===<br />
<br />
Der C4 hat eine ganze Reihe an ICs geschenkt gekriegt, die für das U23 zur Verfügung stehen. Derzeit sind noch von allen jeweils eine Stange (also 20 oder 25 Stück) vorhanden.<br />
<br />
{| border="1" style="border-collapse:collapse;"<br />
! Typ || Bezeichnung<br />
|-<br />
|74LS02N || Vier NOR-Gatter mit je 2 Eingängen<br />
|-<br />
|74LS05N || Sechs Inverter (open Collector)<br />
|-<br />
|74LS07 || Sechs Treiber (open Collector, 30V)<br />
|-<br />
|74LS12N || Drei NAND-Gatter mit je 3 Eingängen (open Collector)<br />
|-<br />
|74LS20 || Zwei NAND-Gatter mit je 4 Eingängen<br />
|-<br />
|74LS32N || Vier OR-Gatter mit je 2 Eingängen<br />
|-<br />
|74LS38B1 || Vier NAND-Leistungsgatter mit je 2 Eingängen (open Collector)<br />
|-<br />
|74LS73AN || Zwei JK-Flipflops mit Clear<br />
|-<br />
|74LS74AN || Zwei D-Flipflops mit Preset und Clear<br />
|-<br />
|74LS83AN || 4-Bit Volladdierer<br />
|-<br />
|74LS95BP || 4-Bit Schieberegister mit paralleler Ein- und Ausgabe<br />
|-<br />
|74ALS112 || Zwei J-K Flipflops mit Preset und Clear (Advanced Speed)<br />
|-<br />
|74LS191 || Synchroner programmierbarer Vorwärts/Rückwärts 4-Bit Binärzähler<br />
|-<br />
|74LS193B1 || Synchroner programmierbarer Vorwärts/Rückwärts 4-Bit Binärzähler mit Clear<br />
|-<br />
|74LS258AB1 || Vier 2 zu 1 Datenselektoren/Multiplexer mit invertierenden Tri-State Ausgängen<br />
|-<br />
|74LS273N || 8-Bit D Register mit Clear<br />
|-<br />
|74LS280 || 9-Bit Paritätsgenerator/Paritätsprüfer<br />
|-<br />
|74LS374N || 8-Bit D Register mit Tri-State Ausgängen<br />
|-<br />
|74LS375P || Zwei 2-Bit D Latches mit Enable<br />
|-<br />
|74LS645B1 || Octal Bus Transceiver<br />
|-<br />
|74LS688N || 8-Bit Equality Comparator<br />
|}<br />
<br />
== Interessenten fertige etherrapes ==<br />
<br />
NACH U23 stehen drei fertige etherrapes fuer 59,- zum Verkauf.<br />
<br />
Interessenten:<br />
<br />
# Benjamin<br />
# Sebi<br />
# Hanno<br />
# Felix<br />
<br />
== Bootloader unter Win32 ==<br />
<br />
Bitte compiliert das jemand: https://ssl2.mecking.net/svn/etherrape/bootloader-launcher-win32/branches/stable/launch-bootloader.c<br />
<br />
<br />
http://www.haemoglobin.org/U23_2007/launch-bootloader.exe<br />
<br />
[http://www.haemoglobin.org/U23_2007/md5sums MD5]- und [http://www.haemoglobin.org/U23_2007/sha1sums SHA1]-Pruefsummen, sowie [http://www.haemoglobin.org/U23_2007/launch-bootloader.exe.sig OpenPGP-Signatur]<br />
<br />
== strtok ==<br />
<br />
Da die AVR-libc keine strtok-Funktion bietet (wie sich spaeter herausgestellt hat, jedoch strtok_r), habe ich fuer Valentin strtokn und strtokz geschrieben, die einen String mit bestimmer Laenge bzw. Nullterminierung in Tokens parsen.<br />
Der Code steht unter einer an das europaeische Recht angepassten Version der MIT-Lizenz und kann daher problemlos sowohl in GPL-, als auch kommerzieller Software verwendet werden.<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.h tokenize.h]<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.c tokenize.c]<br />
<br />
Sollte jemand einen Bug finden, moege er bitte eine e-Mail oder Jabber-Nachricht an die im Code angegebene Adresse senden.<br />
<br />
=== Anwendungsbeispiel ===<br />
<br />
<pre><br />
/* Ein einfacher Pseudo-HTTP-Parser */<br />
<br />
#define BUFLEN 255<br />
<br />
char buffer[BUFLEN]; /* Unser Lesepuffer */<br />
<br />
char *method; /* Die HTTP-Methode, e.g. HEAD, GET, POST oder PUT */<br />
char *uri; /* Der Uniform Resource Identifier, also das, was man in die Adresszeile des Browsers tippt */<br />
char *version; /* Der HTTP-Versionstring, normalerweise HTTP/1.0 oder HTTP/1.1 */<br />
<br />
method = strtokn(buffer, BUFLEN, ' '); /* sizeof(buffer) anstatt BUFLEN sollte auch gehen, weil buffer in diesem Fall ein char[] und kein char* ist */<br />
if(method) { /* Kein Token gefunden? */<br />
/* Fehlerbehandlung, beispielsweise einen 400-Statuscode zuruecksenden */<br />
}<br />
<br />
if(strncmp(method, "GET", 4)) {<br />
/* Wir moechten nur GET-Requests behandeln, also senden wir irgendeinen 4XX-Statuscode zurueck */<br />
}<br />
<br />
uri = strtokn(NULL, 0, ' ');<br />
if(uri) { /* Kein Token? */<br />
/* Einen 400-Statuscode zurueck */<br />
}<br />
<br />
version = strtokn(NULL, 0, '\r');<br />
if(version) {<br />
/* Das uebliche ;) */<br />
}<br />
<br />
if(strncmp(version, "HTTP/1.0", 9) && strncmp(version, "HTTP/1.1", 9)) {<br />
/* Wir wollen nur HTTP 1.0 oder 1.1 - also wieder 400 */<br />
}<br />
<br />
/*<br />
* Jetzt haben wir alles, was wir brauchen, jedoch ist es auch moeglich,<br />
* den kompletten HTTP-Header zu parsen, um so einen vollwertigen Webserver<br />
* zu schreiben.<br />
*/<br />
<br />
</pre><br />
<br />
== OffTopic ==<br />
<br />
===Borg 3D===<br />
<br />
Die Borgs 3d standen heute bei uns in der Uni (irgend ein Schüler und Naturwissenschaften Messe ding): Sind ganz lustig anzusehen:<br />
*[http://youtube.com/watch?v=4MGKhFIujM4 Borg 3d in Farbe]<br />
*[http://youtube.com/watch?v=PGb9DeUOsSY Borg 3d in 8x8x8]<br />
gemacht von [http://www.das-labor.org das-labor.org] aus Bochum.<br />
<br />
lenkt aber wahrscheinlich von unserem Eigentlichen Projekt ab, etwas mit dem etherrape zu machen. Gruß Hanno<br />
<br />
[[Category:Events]]<br />
[[Category:U23]] <br />
[[Category:U23 2007]]</div>
87.79.237.120
https://wiki.koeln.ccc.de/index.php?title=U23_2007&diff=13747
U23 2007
2007-06-08T01:43:18Z
<p>87.79.237.120: /* strtok */</p>
<hr />
<div>Hier sammeln wir Ideen und Hintergrundinformationen zum [http://koeln.ccc.de/prozesse/running/u23-2007 U23 2007].<br />
<br />
== Hintergrundinformationen & Dokumentation ==<br />
* http://www.lochraster.org/etherrape/<br />
* http://wiki.lochraster.org/<br />
* [http://atmel.com/dyn/resources/prod_documents/doc2593.pdf atmega644 Datenblatt]<br />
* [http://savannah.nongnu.org/download/avr-libc/avr-libc-user-manual-1.4.5.pdf.bz2 AVR-Libc Dokumentation (pdf)]<br />
* [http://www.nongnu.org/avr-libc/user-manual/modules.html AVR-Libc Dokumentation (online, html)]<br />
* [http://www.it.lth.se/datablad/Logik/74HC/74HC4094.pdf 74HC4094 Schieberegister Datenblatt]<br />
<br />
== Bastelideen ==<br />
<br />
* Wetterstation<br />
* Zahlencodeschloss zur Türsteuerung mit Kameraerweiterung<br />
* NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus<br />
* Network monitoring // Obstfliege aka Philipp<br />
* Diverse Server: DHCP,DNS,... // Obstfliege aka Philipp<br />
<br />
== Abend 1 ==<br />
<br />
* [http://w8n.koeln.ccc.de/media/slides/U23/2007/U23-Einführung.pdf Folien zum Einführungsabend]<br />
<br />
== Abend 2 ==<br />
<br />
[[/Inhalt Abend 2]]<br />
<br />
<br />
== Abend 4 ==<br />
[[/Inhalt Abend 4]]<br />
<br />
== Feedback ==<br />
<br />
Bitte hier (auch gern anonym) Feedback hinterlassen:<br />
<br />
* [[/Feedback Abend 1]]<br />
* [[/Feedback Abend 2]]<br />
* [[/Feedback Abend 3]]<br />
* [[/Feedback Abend 4]]<br />
<br />
== Gruppen ==<br />
<br />
* [[/NULL.0]]<br />
* [[/MateCrew]]<br />
* [[/24]]<br />
* [[/Evil Solutions]]<br />
<br />
== Bastelmaterial ==<br />
<br />
Was haben wir? Was brauchen wir?<br />
<br />
=== ICs ===<br />
<br />
Der C4 hat eine ganze Reihe an ICs geschenkt gekriegt, die für das U23 zur Verfügung stehen. Derzeit sind noch von allen jeweils eine Stange (also 20 oder 25 Stück) vorhanden.<br />
<br />
{| border="1" style="border-collapse:collapse;"<br />
! Typ || Bezeichnung<br />
|-<br />
|74LS02N || Vier NOR-Gatter mit je 2 Eingängen<br />
|-<br />
|74LS05N || Sechs Inverter (open Collector)<br />
|-<br />
|74LS07 || Sechs Treiber (open Collector, 30V)<br />
|-<br />
|74LS12N || Drei NAND-Gatter mit je 3 Eingängen (open Collector)<br />
|-<br />
|74LS20 || Zwei NAND-Gatter mit je 4 Eingängen<br />
|-<br />
|74LS32N || Vier OR-Gatter mit je 2 Eingängen<br />
|-<br />
|74LS38B1 || Vier NAND-Leistungsgatter mit je 2 Eingängen (open Collector)<br />
|-<br />
|74LS73AN || Zwei JK-Flipflops mit Clear<br />
|-<br />
|74LS74AN || Zwei D-Flipflops mit Preset und Clear<br />
|-<br />
|74LS83AN || 4-Bit Volladdierer<br />
|-<br />
|74LS95BP || 4-Bit Schieberegister mit paralleler Ein- und Ausgabe<br />
|-<br />
|74ALS112 || Zwei J-K Flipflops mit Preset und Clear (Advanced Speed)<br />
|-<br />
|74LS191 || Synchroner programmierbarer Vorwärts/Rückwärts 4-Bit Binärzähler<br />
|-<br />
|74LS193B1 || Synchroner programmierbarer Vorwärts/Rückwärts 4-Bit Binärzähler mit Clear<br />
|-<br />
|74LS258AB1 || Vier 2 zu 1 Datenselektoren/Multiplexer mit invertierenden Tri-State Ausgängen<br />
|-<br />
|74LS273N || 8-Bit D Register mit Clear<br />
|-<br />
|74LS280 || 9-Bit Paritätsgenerator/Paritätsprüfer<br />
|-<br />
|74LS374N || 8-Bit D Register mit Tri-State Ausgängen<br />
|-<br />
|74LS375P || Zwei 2-Bit D Latches mit Enable<br />
|-<br />
|74LS645B1 || Octal Bus Transceiver<br />
|-<br />
|74LS688N || 8-Bit Equality Comparator<br />
|}<br />
<br />
== Interessenten fertige etherrapes ==<br />
<br />
NACH U23 stehen drei fertige etherrapes fuer 59,- zum Verkauf.<br />
<br />
Interessenten:<br />
<br />
# Benjamin<br />
# Sebi<br />
# Hanno<br />
# Felix<br />
<br />
== Bootloader unter Win32 ==<br />
<br />
Bitte compiliert das jemand: https://ssl2.mecking.net/svn/etherrape/bootloader-launcher-win32/branches/stable/launch-bootloader.c<br />
<br />
<br />
http://www.haemoglobin.org/U23_2007/launch-bootloader.exe<br />
<br />
[http://www.haemoglobin.org/U23_2007/md5sums MD5]- und [http://www.haemoglobin.org/U23_2007/sha1sums SHA1]-Pruefsummen, sowie [http://www.haemoglobin.org/U23_2007/launch-bootloader.exe.sig OpenPGP-Signatur]<br />
<br />
== strtok ==<br />
<br />
Da die AVR-libc keine strtok-Funktion bietet (wie sich spaeter herausgestellt hat, jedoch strtok_r), habe ich fuer Valentin strtokn und strtokz geschrieben, die einen String mit bestimmer Laenge bzw. Nullterminierung in Tokens parsen.<br />
Der Code steht unter einer an das europaeische Recht angepassten Version der MIT-Lizenz und kann daher problemlos sowohl in GPL-, als auch kommerzieller Software verwendet werden.<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.h tokenize.h]<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.c tokenize.c]<br />
<br />
Sollte jemand einen Bug finden, moege er bitte eine e-Mail oder Jabber-Nachricht an die im Code angegebene Adresse senden.<br />
<br />
=== Anwendungsbeispiel ===<br />
<br />
<pre><br />
/* Ein einfacher Pseudo-HTTP-Parser */<br />
<br />
#define BUFLEN 255<br />
<br />
char buffer[BUFLEN]; /* Unser Lesepuffer */<br />
<br />
char *method; /* Die HTTP-Methode, e.g. HEAD, GET, POST oder PUT */<br />
char *uri; /* Der Uniform Resource Identifier, also das, was man in die Adresszeile des Browsers tippt */<br />
char *version; /* Der HTTP-Versionstring, normalerweise HTTP/1.0 oder HTTP/1.1 */<br />
<br />
method = strtokn(buffer, BUFLEN, ' '); /* sizeof(buffer) anstatt BUFLEN sollte auch gehen, weil buffer in diesem Fall ein char[] und kein char* ist */<br />
if(method) { /* Kein Token gefunden? */<br />
/* Fehlerbehandlung, beispielsweise einen 400-Statuscode zuruecksenden */<br />
}<br />
<br />
if(strncmp(method, "GET", 4)) {<br />
/* Wir moechten nur GET-Requests behandeln, also senden wir irgendeinen 4XX-Statuscode zurueck */<br />
}<br />
<br />
uri = strtokn(NULL, 0, ' ');<br />
if(uri) { /* Kein Token? */<br />
/* Einen 400-Statuscode zurueck */<br />
}<br />
<br />
version = strtokn(NULL, 0, '\r');<br />
if(version) {<br />
/* Das uebliche ;) */<br />
}<br />
<br />
if(strncmp(version, "HTTP/1.0", 9) || strncmp(version, "HTTP/1.1", 9)) {<br />
/* Wir wollen nur HTTP 1.0 oder 1.1 - also wieder 400 */<br />
}<br />
<br />
/*<br />
* Jetzt haben wir alles, was wir brauchen, jedoch ist es auch moeglich,<br />
* den kompletten HTTP-Header zu parsen, um so einen vollwertigen Webserver<br />
* zu schreiben.<br />
*/<br />
<br />
</pre><br />
<br />
== OffTopic ==<br />
<br />
===Borg 3D===<br />
<br />
Die Borgs 3d standen heute bei uns in der Uni (irgend ein Schüler und Naturwissenschaften Messe ding): Sind ganz lustig anzusehen:<br />
*[http://youtube.com/watch?v=4MGKhFIujM4 Borg 3d in Farbe]<br />
*[http://youtube.com/watch?v=PGb9DeUOsSY Borg 3d in 8x8x8]<br />
gemacht von [http://www.das-labor.org das-labor.org] aus Bochum.<br />
<br />
lenkt aber wahrscheinlich von unserem Eigentlichen Projekt ab, etwas mit dem etherrape zu machen. Gruß Hanno<br />
<br />
[[Category:Events]]<br />
[[Category:U23]] <br />
[[Category:U23 2007]]</div>
87.79.237.120
https://wiki.koeln.ccc.de/index.php?title=U23_2007&diff=13746
U23 2007
2007-06-08T01:04:25Z
<p>87.79.237.120: /* strtok */</p>
<hr />
<div>Hier sammeln wir Ideen und Hintergrundinformationen zum [http://koeln.ccc.de/prozesse/running/u23-2007 U23 2007].<br />
<br />
== Hintergrundinformationen & Dokumentation ==<br />
* http://www.lochraster.org/etherrape/<br />
* http://wiki.lochraster.org/<br />
* [http://atmel.com/dyn/resources/prod_documents/doc2593.pdf atmega644 Datenblatt]<br />
* [http://savannah.nongnu.org/download/avr-libc/avr-libc-user-manual-1.4.5.pdf.bz2 AVR-Libc Dokumentation (pdf)]<br />
* [http://www.nongnu.org/avr-libc/user-manual/modules.html AVR-Libc Dokumentation (online, html)]<br />
* [http://www.it.lth.se/datablad/Logik/74HC/74HC4094.pdf 74HC4094 Schieberegister Datenblatt]<br />
<br />
== Bastelideen ==<br />
<br />
* Wetterstation<br />
* Zahlencodeschloss zur Türsteuerung mit Kameraerweiterung<br />
* NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus<br />
* Network monitoring // Obstfliege aka Philipp<br />
* Diverse Server: DHCP,DNS,... // Obstfliege aka Philipp<br />
<br />
== Abend 1 ==<br />
<br />
* [http://w8n.koeln.ccc.de/media/slides/U23/2007/U23-Einführung.pdf Folien zum Einführungsabend]<br />
<br />
== Abend 2 ==<br />
<br />
[[/Inhalt Abend 2]]<br />
<br />
<br />
== Abend 4 ==<br />
[[/Inhalt Abend 4]]<br />
<br />
== Feedback ==<br />
<br />
Bitte hier (auch gern anonym) Feedback hinterlassen:<br />
<br />
* [[/Feedback Abend 1]]<br />
* [[/Feedback Abend 2]]<br />
* [[/Feedback Abend 3]]<br />
* [[/Feedback Abend 4]]<br />
<br />
== Gruppen ==<br />
<br />
* [[/NULL.0]]<br />
* [[/MateCrew]]<br />
* [[/24]]<br />
* [[/Evil Solutions]]<br />
<br />
== Bastelmaterial ==<br />
<br />
Was haben wir? Was brauchen wir?<br />
<br />
=== ICs ===<br />
<br />
Der C4 hat eine ganze Reihe an ICs geschenkt gekriegt, die für das U23 zur Verfügung stehen. Derzeit sind noch von allen jeweils eine Stange (also 20 oder 25 Stück) vorhanden.<br />
<br />
{| border="1" style="border-collapse:collapse;"<br />
! Typ || Bezeichnung<br />
|-<br />
|74LS02N || Vier NOR-Gatter mit je 2 Eingängen<br />
|-<br />
|74LS05N || Sechs Inverter (open Collector)<br />
|-<br />
|74LS07 || Sechs Treiber (open Collector, 30V)<br />
|-<br />
|74LS12N || Drei NAND-Gatter mit je 3 Eingängen (open Collector)<br />
|-<br />
|74LS20 || Zwei NAND-Gatter mit je 4 Eingängen<br />
|-<br />
|74LS32N || Vier OR-Gatter mit je 2 Eingängen<br />
|-<br />
|74LS38B1 || Vier NAND-Leistungsgatter mit je 2 Eingängen (open Collector)<br />
|-<br />
|74LS73AN || Zwei JK-Flipflops mit Clear<br />
|-<br />
|74LS74AN || Zwei D-Flipflops mit Preset und Clear<br />
|-<br />
|74LS83AN || 4-Bit Volladdierer<br />
|-<br />
|74LS95BP || 4-Bit Schieberegister mit paralleler Ein- und Ausgabe<br />
|-<br />
|74ALS112 || Zwei J-K Flipflops mit Preset und Clear (Advanced Speed)<br />
|-<br />
|74LS191 || Synchroner programmierbarer Vorwärts/Rückwärts 4-Bit Binärzähler<br />
|-<br />
|74LS193B1 || Synchroner programmierbarer Vorwärts/Rückwärts 4-Bit Binärzähler mit Clear<br />
|-<br />
|74LS258AB1 || Vier 2 zu 1 Datenselektoren/Multiplexer mit invertierenden Tri-State Ausgängen<br />
|-<br />
|74LS273N || 8-Bit D Register mit Clear<br />
|-<br />
|74LS280 || 9-Bit Paritätsgenerator/Paritätsprüfer<br />
|-<br />
|74LS374N || 8-Bit D Register mit Tri-State Ausgängen<br />
|-<br />
|74LS375P || Zwei 2-Bit D Latches mit Enable<br />
|-<br />
|74LS645B1 || Octal Bus Transceiver<br />
|-<br />
|74LS688N || 8-Bit Equality Comparator<br />
|}<br />
<br />
== Interessenten fertige etherrapes ==<br />
<br />
NACH U23 stehen drei fertige etherrapes fuer 59,- zum Verkauf.<br />
<br />
Interessenten:<br />
<br />
# Benjamin<br />
# Sebi<br />
# Hanno<br />
# Felix<br />
<br />
== Bootloader unter Win32 ==<br />
<br />
Bitte compiliert das jemand: https://ssl2.mecking.net/svn/etherrape/bootloader-launcher-win32/branches/stable/launch-bootloader.c<br />
<br />
<br />
http://www.haemoglobin.org/U23_2007/launch-bootloader.exe<br />
<br />
[http://www.haemoglobin.org/U23_2007/md5sums MD5]- und [http://www.haemoglobin.org/U23_2007/sha1sums SHA1]-Pruefsummen, sowie [http://www.haemoglobin.org/U23_2007/launch-bootloader.exe.sig OpenPGP-Signatur]<br />
<br />
== strtok ==<br />
<br />
Da die AVR-libc keine strtok-Funktion bietet (wie sich spaeter herausgestellt hat, jedoch strtok_r), habe ich fuer Valentin strtokn und strtokz geschrieben, die einen String mit bestimmer Laenge bzw. Nullterminierung in Tokens parsen.<br />
Der Code steht unter einer an das europaeische Recht angepassten Version der MIT-Lizenz und kann daher problemlos sowohl in GPL-, als auch kommerzieller Software verwendet werden.<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.h tokenize.h]<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.c tokenize.c]<br />
<br />
Sollte jemand einen Bug finden, moege er bitte eine e-Mail oder Jabber-Nachricht an die im Code angegebene Adresse senden.<br />
<br />
== OffTopic ==<br />
<br />
===Borg 3D===<br />
<br />
Die Borgs 3d standen heute bei uns in der Uni (irgend ein Schüler und Naturwissenschaften Messe ding): Sind ganz lustig anzusehen:<br />
*[http://youtube.com/watch?v=4MGKhFIujM4 Borg 3d in Farbe]<br />
*[http://youtube.com/watch?v=PGb9DeUOsSY Borg 3d in 8x8x8]<br />
gemacht von [http://www.das-labor.org das-labor.org] aus Bochum.<br />
<br />
lenkt aber wahrscheinlich von unserem Eigentlichen Projekt ab, etwas mit dem etherrape zu machen. Gruß Hanno<br />
<br />
[[Category:Events]]<br />
[[Category:U23]] <br />
[[Category:U23 2007]]</div>
87.79.237.120
https://wiki.koeln.ccc.de/index.php?title=U23_2007&diff=13745
U23 2007
2007-06-08T01:03:38Z
<p>87.79.237.120: /* Bootloader unter Win32 */</p>
<hr />
<div>Hier sammeln wir Ideen und Hintergrundinformationen zum [http://koeln.ccc.de/prozesse/running/u23-2007 U23 2007].<br />
<br />
== Hintergrundinformationen & Dokumentation ==<br />
* http://www.lochraster.org/etherrape/<br />
* http://wiki.lochraster.org/<br />
* [http://atmel.com/dyn/resources/prod_documents/doc2593.pdf atmega644 Datenblatt]<br />
* [http://savannah.nongnu.org/download/avr-libc/avr-libc-user-manual-1.4.5.pdf.bz2 AVR-Libc Dokumentation (pdf)]<br />
* [http://www.nongnu.org/avr-libc/user-manual/modules.html AVR-Libc Dokumentation (online, html)]<br />
* [http://www.it.lth.se/datablad/Logik/74HC/74HC4094.pdf 74HC4094 Schieberegister Datenblatt]<br />
<br />
== Bastelideen ==<br />
<br />
* Wetterstation<br />
* Zahlencodeschloss zur Türsteuerung mit Kameraerweiterung<br />
* NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus<br />
* Network monitoring // Obstfliege aka Philipp<br />
* Diverse Server: DHCP,DNS,... // Obstfliege aka Philipp<br />
<br />
== Abend 1 ==<br />
<br />
* [http://w8n.koeln.ccc.de/media/slides/U23/2007/U23-Einführung.pdf Folien zum Einführungsabend]<br />
<br />
== Abend 2 ==<br />
<br />
[[/Inhalt Abend 2]]<br />
<br />
<br />
== Abend 4 ==<br />
[[/Inhalt Abend 4]]<br />
<br />
== Feedback ==<br />
<br />
Bitte hier (auch gern anonym) Feedback hinterlassen:<br />
<br />
* [[/Feedback Abend 1]]<br />
* [[/Feedback Abend 2]]<br />
* [[/Feedback Abend 3]]<br />
* [[/Feedback Abend 4]]<br />
<br />
== Gruppen ==<br />
<br />
* [[/NULL.0]]<br />
* [[/MateCrew]]<br />
* [[/24]]<br />
* [[/Evil Solutions]]<br />
<br />
== Bastelmaterial ==<br />
<br />
Was haben wir? Was brauchen wir?<br />
<br />
=== ICs ===<br />
<br />
Der C4 hat eine ganze Reihe an ICs geschenkt gekriegt, die für das U23 zur Verfügung stehen. Derzeit sind noch von allen jeweils eine Stange (also 20 oder 25 Stück) vorhanden.<br />
<br />
{| border="1" style="border-collapse:collapse;"<br />
! Typ || Bezeichnung<br />
|-<br />
|74LS02N || Vier NOR-Gatter mit je 2 Eingängen<br />
|-<br />
|74LS05N || Sechs Inverter (open Collector)<br />
|-<br />
|74LS07 || Sechs Treiber (open Collector, 30V)<br />
|-<br />
|74LS12N || Drei NAND-Gatter mit je 3 Eingängen (open Collector)<br />
|-<br />
|74LS20 || Zwei NAND-Gatter mit je 4 Eingängen<br />
|-<br />
|74LS32N || Vier OR-Gatter mit je 2 Eingängen<br />
|-<br />
|74LS38B1 || Vier NAND-Leistungsgatter mit je 2 Eingängen (open Collector)<br />
|-<br />
|74LS73AN || Zwei JK-Flipflops mit Clear<br />
|-<br />
|74LS74AN || Zwei D-Flipflops mit Preset und Clear<br />
|-<br />
|74LS83AN || 4-Bit Volladdierer<br />
|-<br />
|74LS95BP || 4-Bit Schieberegister mit paralleler Ein- und Ausgabe<br />
|-<br />
|74ALS112 || Zwei J-K Flipflops mit Preset und Clear (Advanced Speed)<br />
|-<br />
|74LS191 || Synchroner programmierbarer Vorwärts/Rückwärts 4-Bit Binärzähler<br />
|-<br />
|74LS193B1 || Synchroner programmierbarer Vorwärts/Rückwärts 4-Bit Binärzähler mit Clear<br />
|-<br />
|74LS258AB1 || Vier 2 zu 1 Datenselektoren/Multiplexer mit invertierenden Tri-State Ausgängen<br />
|-<br />
|74LS273N || 8-Bit D Register mit Clear<br />
|-<br />
|74LS280 || 9-Bit Paritätsgenerator/Paritätsprüfer<br />
|-<br />
|74LS374N || 8-Bit D Register mit Tri-State Ausgängen<br />
|-<br />
|74LS375P || Zwei 2-Bit D Latches mit Enable<br />
|-<br />
|74LS645B1 || Octal Bus Transceiver<br />
|-<br />
|74LS688N || 8-Bit Equality Comparator<br />
|}<br />
<br />
== Interessenten fertige etherrapes ==<br />
<br />
NACH U23 stehen drei fertige etherrapes fuer 59,- zum Verkauf.<br />
<br />
Interessenten:<br />
<br />
# Benjamin<br />
# Sebi<br />
# Hanno<br />
# Felix<br />
<br />
== Bootloader unter Win32 ==<br />
<br />
Bitte compiliert das jemand: https://ssl2.mecking.net/svn/etherrape/bootloader-launcher-win32/branches/stable/launch-bootloader.c<br />
<br />
<br />
http://www.haemoglobin.org/U23_2007/launch-bootloader.exe<br />
<br />
[http://www.haemoglobin.org/U23_2007/md5sums MD5]- und [http://www.haemoglobin.org/U23_2007/sha1sums SHA1]-Pruefsummen, sowie [http://www.haemoglobin.org/U23_2007/launch-bootloader.exe.sig OpenPGP-Signatur]<br />
<br />
== strtok ==<br />
<br />
Da die AVR-libc keine strtok-Funktion bietet (wie sich spaeter herausgestellt hat, jedoch strtok_r), habe ich fuer Valentin strtokn und strtokz geschrieben, die einen String mit bestimmer Laenge bzw. Nullterminierung in Tokens parsen.<br />
Der Code steht unter einer an das europaeische Recht angepassten Version der MIT-Lizenz und kann daher problemlos sowohl in GPL-, als auch kommerzieller Software verwendet werden.<br />
<br />
[http://www.haemoglobin.org/U23_2007/tokenize.h tokenize.h]<br />
[http://www.haemoglobin.org/U23_2007/tokenize.c tokenize.c]<br />
<br />
Sollte jemand einen Bug finden, moege er bitte eine e-Mail oder Jabber-Nachricht an die im Code angegebene Adresse senden.<br />
<br />
== OffTopic ==<br />
<br />
===Borg 3D===<br />
<br />
Die Borgs 3d standen heute bei uns in der Uni (irgend ein Schüler und Naturwissenschaften Messe ding): Sind ganz lustig anzusehen:<br />
*[http://youtube.com/watch?v=4MGKhFIujM4 Borg 3d in Farbe]<br />
*[http://youtube.com/watch?v=PGb9DeUOsSY Borg 3d in 8x8x8]<br />
gemacht von [http://www.das-labor.org das-labor.org] aus Bochum.<br />
<br />
lenkt aber wahrscheinlich von unserem Eigentlichen Projekt ab, etwas mit dem etherrape zu machen. Gruß Hanno<br />
<br />
[[Category:Events]]<br />
[[Category:U23]] <br />
[[Category:U23 2007]]</div>
87.79.237.120
https://wiki.koeln.ccc.de/index.php?title=U23_2007&diff=13714
U23 2007
2007-06-04T20:18:02Z
<p>87.79.237.120: /* Bootloader unter Win32 */</p>
<hr />
<div>Hier sammeln wir Ideen und Hintergrundinformationen zum [http://koeln.ccc.de/prozesse/running/u23-2007 U23 2007].<br />
<br />
== Hintergrundinformationen & Dokumentation ==<br />
* http://www.lochraster.org/etherrape/<br />
* http://wiki.lochraster.org/<br />
* [http://atmel.com/dyn/resources/prod_documents/doc2593.pdf atmega644 Datenblatt]<br />
* [http://savannah.nongnu.org/download/avr-libc/avr-libc-user-manual-1.4.5.pdf.bz2 AVR-Libc Dokumentation (pdf)]<br />
* [http://www.nongnu.org/avr-libc/user-manual/modules.html AVR-Libc Dokumentation (online, html)]<br />
* [http://www.it.lth.se/datablad/Logik/74HC/74HC4094.pdf 74HC4094 Schieberegister Datenblatt]<br />
<br />
== Bastelideen ==<br />
<br />
* Wetterstation<br />
* Zahlencodeschloss zur Türsteuerung mit Kameraerweiterung<br />
* NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus<br />
* Network monitoring // Obstfliege aka Philipp<br />
* Diverse Server: DHCP,DNS,... // Obstfliege aka Philipp<br />
<br />
== Abend 1 ==<br />
<br />
* [http://w8n.koeln.ccc.de/media/slides/U23/2007/U23-Einführung.pdf Folien zum Einführungsabend]<br />
<br />
== Abend 2 ==<br />
<br />
[[/Inhalt Abend 2]]<br />
<br />
<br />
== Abend 4 ==<br />
[[/Inhalt Abend 4]]<br />
<br />
== Feedback ==<br />
<br />
Bitte hier (auch gern anonym) Feedback hinterlassen:<br />
<br />
* [[/Feedback Abend 1]]<br />
* [[/Feedback Abend 2]]<br />
* [[/Feedback Abend 3]]<br />
* [[/Feedback Abend 4]]<br />
<br />
== Gruppen ==<br />
<br />
* [[/NULL.0]]<br />
* [[/MateCrew]]<br />
* [[/24]]<br />
* [[/Evil Solutions]]<br />
<br />
== Bastelmaterial ==<br />
<br />
Was haben wir? Was brauchen wir?<br />
<br />
=== ICs ===<br />
<br />
Der C4 hat eine ganze Reihe an ICs geschenkt gekriegt, die für das U23 zur Verfügung stehen. Derzeit sind noch von allen jeweils eine Stange (also 20 oder 25 Stück) vorhanden.<br />
<br />
{| border="1" style="border-collapse:collapse;"<br />
! Typ || Bezeichnung<br />
|-<br />
|74LS02N || Vier NOR-Gatter mit je 2 Eingängen<br />
|-<br />
|74LS05N || Sechs Inverter (open Collector)<br />
|-<br />
|74LS07 || Sechs Treiber (open Collector, 30V)<br />
|-<br />
|74LS12N || Drei NAND-Gatter mit je 3 Eingängen (open Collector)<br />
|-<br />
|74LS20 || Zwei NAND-Gatter mit je 4 Eingängen<br />
|-<br />
|74LS32N || Vier OR-Gatter mit je 2 Eingängen<br />
|-<br />
|74LS38B1 || Vier NAND-Leistungsgatter mit je 2 Eingängen (open Collector)<br />
|-<br />
|74LS73AN || Zwei JK-Flipflops mit Clear<br />
|-<br />
|74LS74AN || Zwei D-Flipflops mit Preset und Clear<br />
|-<br />
|74LS83AN || 4-Bit Volladdierer<br />
|-<br />
|74LS95BP || 4-Bit Schieberegister mit paralleler Ein- und Ausgabe<br />
|-<br />
|74ALS112 || Zwei J-K Flipflops mit Preset und Clear (Advanced Speed)<br />
|-<br />
|74LS191 || Synchroner programmierbarer Vorwärts/Rückwärts 4-Bit Binärzähler<br />
|-<br />
|74LS193B1 || Synchroner programmierbarer Vorwärts/Rückwärts 4-Bit Binärzähler mit Clear<br />
|-<br />
|74LS258AB1 || Vier 2 zu 1 Datenselektoren/Multiplexer mit invertierenden Tri-State Ausgängen<br />
|-<br />
|74LS273N || 8-Bit D Register mit Clear<br />
|-<br />
|74LS280 || 9-Bit Paritätsgenerator/Paritätsprüfer<br />
|-<br />
|74LS374N || 8-Bit D Register mit Tri-State Ausgängen<br />
|-<br />
|74LS375P || Zwei 2-Bit D Latches mit Enable<br />
|-<br />
|74LS645B1 || Octal Bus Transceiver<br />
|-<br />
|74LS688N || 8-Bit Equality Comparator<br />
|}<br />
<br />
== Interessenten fertige etherrapes ==<br />
<br />
NACH U23 stehen drei fertige etherrapes fuer 59,- zum Verkauf.<br />
<br />
Interessenten:<br />
<br />
# Benjamin<br />
# Sebi<br />
# Hanno<br />
# Felix<br />
<br />
== Bootloader unter Win32 ==<br />
<br />
Bitte compiliert das jemand: https://ssl2.mecking.net/svn/etherrape/bootloader-launcher-win32/branches/stable/launch-bootloader.c<br />
<br />
<br />
http://www.haemoglobin.org/U23_2007/launch-bootloader.exe<br />
<br />
Pruefsummen [http://www.haemoglobin.org/U23_2007/md5sums MD5] und [http://www.haemoglobin.org/U23_2007/sha1sums SHA1], sowie [http://www.haemoglobin.org/U23_2007/launch-bootloader.exe.sig OpenPGP-Signatur]<br />
<br />
== OffTopic ==<br />
<br />
===Borg 3D===<br />
<br />
Die Borgs 3d standen heute bei uns in der Uni (irgend ein Schüler und Naturwissenschaften Messe ding): Sind ganz lustig anzusehen:<br />
*[http://youtube.com/watch?v=4MGKhFIujM4 Borg 3d in Farbe]<br />
*[http://youtube.com/watch?v=PGb9DeUOsSY Borg 3d in 8x8x8]<br />
gemacht von [http://www.das-labor.org das-labor.org] aus Bochum.<br />
<br />
lenkt aber wahrscheinlich von unserem Eigentlichen Projekt ab, etwas mit dem etherrape zu machen. Gruß Hanno<br />
<br />
[[Category:Events]]<br />
[[Category:U23]] <br />
[[Category:U23 2007]]</div>
87.79.237.120
https://wiki.koeln.ccc.de/index.php?title=U23_2007&diff=13710
U23 2007
2007-06-04T20:09:10Z
<p>87.79.237.120: /* Bootloader unter Win32 */</p>
<hr />
<div>Hier sammeln wir Ideen und Hintergrundinformationen zum [http://koeln.ccc.de/prozesse/running/u23-2007 U23 2007].<br />
<br />
== Hintergrundinformationen & Dokumentation ==<br />
* http://www.lochraster.org/etherrape/<br />
* http://wiki.lochraster.org/<br />
* [http://atmel.com/dyn/resources/prod_documents/doc2593.pdf atmega644 Datenblatt]<br />
* [http://savannah.nongnu.org/download/avr-libc/avr-libc-user-manual-1.4.5.pdf.bz2 AVR-Libc Dokumentation (pdf)]<br />
* [http://www.nongnu.org/avr-libc/user-manual/modules.html AVR-Libc Dokumentation (online, html)]<br />
* [http://www.it.lth.se/datablad/Logik/74HC/74HC4094.pdf 74HC4094 Schieberegister Datenblatt]<br />
<br />
== Bastelideen ==<br />
<br />
* Wetterstation<br />
* Zahlencodeschloss zur Türsteuerung mit Kameraerweiterung<br />
* NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus<br />
* Network monitoring // Obstfliege aka Philipp<br />
* Diverse Server: DHCP,DNS,... // Obstfliege aka Philipp<br />
<br />
== Abend 1 ==<br />
<br />
* [http://w8n.koeln.ccc.de/media/slides/U23/2007/U23-Einführung.pdf Folien zum Einführungsabend]<br />
<br />
== Abend 2 ==<br />
<br />
[[/Inhalt Abend 2]]<br />
<br />
<br />
== Abend 4 ==<br />
[[/Inhalt Abend 4]]<br />
<br />
== Feedback ==<br />
<br />
Bitte hier (auch gern anonym) Feedback hinterlassen:<br />
<br />
* [[/Feedback Abend 1]]<br />
* [[/Feedback Abend 2]]<br />
* [[/Feedback Abend 3]]<br />
* [[/Feedback Abend 4]]<br />
<br />
== Gruppen ==<br />
<br />
* [[/NULL.0]]<br />
* [[/MateCrew]]<br />
* [[/NoComment]]<br />
* [[/24]]<br />
* [[/Evil Solutions]]<br />
<br />
== Bastelmaterial ==<br />
<br />
Was haben wir? Was brauchen wir?<br />
<br />
=== ICs ===<br />
<br />
Der C4 hat eine ganze Reihe an ICs geschenkt gekriegt, die für das U23 zur Verfügung stehen. Derzeit sind noch von allen jeweils eine Stange (also 20 oder 25 Stück) vorhanden.<br />
<br />
{| border="1" style="border-collapse:collapse;"<br />
! Typ || Bezeichnung<br />
|-<br />
|74LS02N || Vier NOR-Gatter mit je 2 Eingängen<br />
|-<br />
|74LS05N || Sechs Inverter (open Collector)<br />
|-<br />
|74LS07 || Sechs Treiber (open Collector, 30V)<br />
|-<br />
|74LS12N || Drei NAND-Gatter mit je 3 Eingängen (open Collector)<br />
|-<br />
|74LS20 || Zwei NAND-Gatter mit je 4 Eingängen<br />
|-<br />
|74LS32N || Vier OR-Gatter mit je 2 Eingängen<br />
|-<br />
|74LS38B1 || Vier NAND-Leistungsgatter mit je 2 Eingängen (open Collector)<br />
|-<br />
|74LS73AN || Zwei JK-Flipflops mit Clear<br />
|-<br />
|74LS74AN || Zwei D-Flipflops mit Preset und Clear<br />
|-<br />
|74LS83AN || 4-Bit Volladdierer<br />
|-<br />
|74LS95BP || 4-Bit Schieberegister mit paralleler Ein- und Ausgabe<br />
|-<br />
|74ALS112 || Zwei J-K Flipflops mit Preset und Clear (Advanced Speed)<br />
|-<br />
|74LS191 || Synchroner programmierbarer Vorwärts/Rückwärts 4-Bit Binärzähler<br />
|-<br />
|74LS193B1 || Synchroner programmierbarer Vorwärts/Rückwärts 4-Bit Binärzähler mit Clear<br />
|-<br />
|74LS258AB1 || Vier 2 zu 1 Datenselektoren/Multiplexer mit invertierenden Tri-State Ausgängen<br />
|-<br />
|74LS273N || 8-Bit D Register mit Clear<br />
|-<br />
|74LS280 || 9-Bit Paritätsgenerator/Paritätsprüfer<br />
|-<br />
|74LS374N || 8-Bit D Register mit Tri-State Ausgängen<br />
|-<br />
|74LS375P || Zwei 2-Bit D Latches mit Enable<br />
|-<br />
|74LS645B1 || Octal Bus Transceiver<br />
|-<br />
|74LS688N || 8-Bit Equality Comparator<br />
|}<br />
<br />
== Interessenten fertige etherrapes ==<br />
<br />
NACH U23 stehen drei fertige etherrapes fuer 59,- zum Verkauf.<br />
<br />
Interessenten:<br />
<br />
# Benjamin<br />
# Sebi<br />
# Hanno<br />
# Felix<br />
<br />
== Bootloader unter Win32 ==<br />
<br />
Bitte compiliert das jemand: https://ssl2.mecking.net/svn/etherrape/bootloader-launcher-win32/branches/stable/launch-bootloader.c<br />
<br />
<br />
http://www.haemoglobin.org/U23_2007/launch-bootloader.exe<br />
<br />
Pruefsummen [http://www.haemoglobin.org/U23_2007/md5sums MD5] und [http://www.haemoglobin.org/U23_2007/sha1sums SHA1]<br />
<br />
== OffTopic ==<br />
<br />
===Borg 3D===<br />
<br />
Die Borgs 3d standen heute bei uns in der Uni (irgend ein Schüler und Naturwissenschaften Messe ding): Sind ganz lustig anzusehen:<br />
*[http://youtube.com/watch?v=4MGKhFIujM4 Borg 3d in Farbe]<br />
*[http://youtube.com/watch?v=PGb9DeUOsSY Borg 3d in 8x8x8]<br />
gemacht von [http://www.das-labor.org das-labor.org] aus Bochum.<br />
<br />
lenkt aber wahrscheinlich von unserem Eigentlichen Projekt ab, etwas mit dem etherrape zu machen. Gruß Hanno<br />
<br />
[[Category:Events]]<br />
[[Category:U23]] <br />
[[Category:U23 2007]]</div>
87.79.237.120