Difference between revisions of "U23 2007/NULL.0"
(→Projekt) |
(→Projekt) |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 19: | Line 19: | ||
== Projekt== | == Projekt== | ||
− | ===Beschreibung=== | + | === Beschreibung === |
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! | 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! | ||
− | + | === Momentaner Stand === | |
− | + | ||
− | Wir können auf der Seriellen-Console dem etherape Befehle geben, mit den denn dann alles ansteuern kann! | + | ==== 2007-06-26 ==== |
+ | |||
+ | * TDA7318-Code ins git-Repository aufgenommen | ||
+ | ** Fuer Schreibzugriff bitte bei Mikael melden | ||
+ | * HTTP-Server sollte nach einigen Anlaufschwierigkeiten und einem "rewrite from scratch" endlich laufen | ||
+ | ** Benutzt nun memcmp_P und memmem_P zum parsen | ||
+ | ** Kann bereits den TDA7318-Status ausgeben | ||
+ | ** Muss noch getestet werden! | ||
+ | |||
+ | ==== 2007-06-18 ==== | ||
+ | |||
+ | Wir können auf der Seriellen-Console dem etherape Befehle geben, mit den denn dann alles ansteuern kann!<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 | ||
audio | audio | ||
input 0-3 0-3 //Eingangssignal und Vorverstärkung! 0->laut 3->leise! | input 0-3 0-3 //Eingangssignal und Vorverstärkung! 0->laut 3->leise! | ||
Line 61: | Line 73: | ||
== HTTP-Server == | == HTTP-Server == | ||
+ | |||
+ | Nach einigen Anlaufschwierigkeiten sollte es nun endlich gelungen sein, unseren Pseudo-HTTP-Server zum Laufen gebracht zu haben. | ||
=== git === | === git === | ||
Line 82: | Line 96: | ||
#include "../uip/uip.h" | #include "../uip/uip.h" | ||
− | #include " | + | #include "../tda7318.h" |
− | + | #include "../debug.h" | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
void zerohttp_main() { | void zerohttp_main() { | ||
− | + | if(uip_acked()) | |
− | + | uip_close(); | |
− | + | if(uip_newdata()) { | |
− | + | debug_printf("Parsing request...\n"); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | if(uip_datalen() < 17) { // At least "GET / HTTP/1.1\r\n" | |
+ | debug_printf("Request is smaller than 17 bytes!\n"); | ||
+ | uip_conn->appstate.zerohttp = 2; | ||
+ | goto leave; | ||
+ | } | ||
− | + | if(memcmp_P(uip_appdata, PSTR("GET "), 4)) { | |
+ | debug_printf("Method is not GET!\n"); | ||
+ | uip_conn->appstate.zerohttp = 2; | ||
+ | goto leave; | ||
+ | } | ||
− | + | register char *temp = (char *) memmem_P((char *) uip_appdata + 4, " HTTP/", uip_datalen() - 4); | |
− | + | if(!temp) { | |
− | + | debug_printf("Unterminated URI!\n"); | |
− | + | uip_conn->appstate.zerohttp = 2; | |
− | + | goto leave; | |
− | + | } | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | if(!memcmp_P((char *) uip_appdata + 4, PSTR("/"), 1)) { | |
− | + | debug_printf("Requested '/'\n"); | |
− | + | uip_conn->appstate.zerohttp = 0; | |
− | + | goto leave; | |
− | + | } | |
− | |||
− | |||
− | |||
− | |||
− | + | else if(!memcmp_P((char *) uip_appdata + 4, PSTR("/volinc"), 7)) { | |
− | + | debug_printf("Requested '/volinc'\n"); | |
− | + | uip_conn->appstate.zerohttp = 0; | |
− | + | goto leave; | |
− | + | } | |
− | |||
− | |||
− | |||
− | |||
− | + | else { | |
− | + | debug_printf("Unknown URI\n"); | |
− | + | uip_conn->appstate.zerohttp = 1; | |
− | + | goto leave; | |
− | |||
− | |||
− | |||
} | } | ||
} | } | ||
+ | leave: | ||
− | + | if(uip_newdata() || uip_rexmit()) { | |
− | + | switch(uip_conn->appstate.zerohttp) { | |
− | + | case 0: | |
− | + | debug_printf("200\n"); | |
− | / | + | snprintf_P((char *) uip_appdata, |
− | + | UIP_APPDATA_SIZE, | |
− | + | PSTR("HTTP/1.1 200 OK\r\n" | |
− | + | "Server: zerohttp\r\n" | |
− | + | "Connection: close\r\n" | |
− | + | "Content-Type: text/plain\r\n\r\n" | |
+ | "Input: %hhu\r\n" | ||
+ | "Gain: %hhu\r\n" | ||
+ | "Master: %hhu\r\n" | ||
+ | "Front left: %hhu\r\n" | ||
+ | "Front right: %hhu\r\n" | ||
+ | "Rear left: %hhu\r\n" | ||
+ | "Rear right %hhu\r\n" | ||
+ | "Bass: %hhu\r\n" | ||
+ | "Treble: %hhu\r\n"), | ||
+ | (uint8_t) tda7318_global.input, | ||
+ | (uint8_t) tda7318_global.gain, | ||
+ | (uint8_t) tda7318_global.volume, | ||
+ | (uint8_t) tda7318_global.sp_LF, | ||
+ | (uint8_t) tda7318_global.sp_RF, | ||
+ | (uint8_t) tda7318_global.sp_LR, | ||
+ | (uint8_t) tda7318_global.sp_RR, | ||
+ | (uint8_t) tda7318_global.bass, | ||
+ | (uint8_t) tda7318_global.treble); | ||
+ | break; | ||
− | char * | + | case 1: |
− | + | debug_printf("404\n"); | |
+ | strncpy_P((char *) uip_appdata, | ||
+ | PSTR("HTTP/1.1 404 Command not found\r\n" | ||
+ | "Server: zerohttp\r\n" | ||
+ | "Connection: close\r\n" | ||
+ | "Content-Type: text/plain\r\n\r\n" | ||
+ | "I could not fullfill thy humble wish."), | ||
+ | UIP_APPDATA_SIZE); | ||
+ | break; | ||
− | + | case 2: | |
− | + | default: | |
− | + | debug_printf("400\n"); | |
− | + | strncpy_P((char *) uip_appdata, | |
+ | PSTR("HTTP/1.1 400 Invalid request\r\n" | ||
+ | "Server: zerohttp\r\n" | ||
+ | "Connection: close\r\n" | ||
+ | "Content-Type: text/plain\r\n\r\n" | ||
+ | "Invalid request!"), | ||
+ | UIP_APPDATA_SIZE); | ||
+ | break; | ||
− | |||
− | |||
− | |||
− | |||
} | } | ||
+ | uip_send(uip_appdata, strnlen((char *) uip_appdata, UIP_APPDATA_SIZE)); | ||
} | } | ||
− | |||
− | |||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</pre> | </pre> | ||
[[Category:U23 2007]] | [[Category:U23 2007]] |
Latest revision as of 09:31, 26 June 2007
Gruppe NULL.0
aus Köln
Motto: "Schrauben lieben Dunkelheit."
Contents
Team
- Stefan
- Philipp
- Sebi
- Hanno
- Mikael
Links
- I2C
Projekt
Beschreibung
Wir steuern mit dem etherape einen Hardware Audio Tuner Chip(tda 7318 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!
Momentaner Stand
2007-06-26
- TDA7318-Code ins git-Repository aufgenommen
- Fuer Schreibzugriff bitte bei Mikael melden
- HTTP-Server sollte nach einigen Anlaufschwierigkeiten und einem "rewrite from scratch" endlich laufen
- Benutzt nun memcmp_P und memmem_P zum parsen
- Kann bereits den TDA7318-Status ausgeben
- Muss noch getestet werden!
2007-06-18
Wir können auf der Seriellen-Console dem etherape Befehle geben, mit den denn dann alles ansteuern kann!
Code vom 2007-06-18 Kommentar: Sorry, total unaufgeräumt! Mehr Infos in Anleitung.txt
audio input 0-3 0-3 //Eingangssignal und Vorverstärkung! 0->laut 3->leise! vol 0-63 //Hauptausgangssignal 0->laut 63->leise [Standard 30] speaker 0-31 0-31 0-31 0-31 //Ausgangslautsprecher 0-laut 15->leise [Standard 15] bass 0-15 //Bass Einstellung Achtung Steuerung etwas doof! (vgl. Datenblatt S.11) treble 0-15 //Höhen Einstellung!
Der andre Teil der Gruppe beschäftigt sich mit dem Grafischen HTTP Server, damit man mit Schiebereglern bedienen kann!
Idee (alt)
Haben wir nun schon ein Ziel? Vorschläge bitte :D
Ich finde Server und Netzwerkgeschichten interessant: hier die die schon genannt wurden:
- NAS-Server zu Hause übers www einschalten(evtl. auch per Tel. zu aktivieren?) //dirtyheizer aka Marcus
- Network monitoring // Obstfliege aka Philipp
- Diverse Server: DHCP,DNS,FTP,HTTP... // Obstfliege aka Philipp
Hatten wir uns nicht grob auf folgendes geeinigt?
- Audio Sound Steuerung
- 4 analog Stereo in & 4 Lautsprecher out = front Rear Stero OUT
- Lautstärkeregelung & Wahl des Einganges
- WWW Interface
- Infrarot Fernbedienung zum Ansteuern
Das waren dann 4 Teilprojekte (JavaScript, Infrarot, C-Software, Hardware Löten), das kann man teilweise noch aufteilen. Und beinhaltet so grob jedes Gebiet!
Aber ich weiß nicht, ob so nen Tuner so viel bringt. Mein Interesse ist da eher gering.
Alternativ:
- USB Ansteuerung
@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. --Hanno 23:14, 31 May 2007 (CEST)
@Hanno: Ja Monitoring interessiert mich auch besonders. --Philipp
HTTP-Server
Nach einigen Anlaufschwierigkeiten sollte es nun endlich gelungen sein, unseren Pseudo-HTTP-Server zum Laufen gebracht zu haben.
git
Das Git-Repository kann man sich mit folgendem Kommando besorgen:
git clone git://git.haemoglobin.org/etherrape cd etherrape git checkout zerohttp
zerohttp.c
#include <avr/io.h> #include <avr/pgmspace.h> #include <string.h> #include "../uip/uip.h" #include "../tda7318.h" #include "../debug.h" void zerohttp_main() { if(uip_acked()) uip_close(); if(uip_newdata()) { debug_printf("Parsing request...\n"); if(uip_datalen() < 17) { // At least "GET / HTTP/1.1\r\n" debug_printf("Request is smaller than 17 bytes!\n"); uip_conn->appstate.zerohttp = 2; goto leave; } if(memcmp_P(uip_appdata, PSTR("GET "), 4)) { debug_printf("Method is not GET!\n"); uip_conn->appstate.zerohttp = 2; goto leave; } register char *temp = (char *) memmem_P((char *) uip_appdata + 4, " HTTP/", uip_datalen() - 4); if(!temp) { debug_printf("Unterminated URI!\n"); uip_conn->appstate.zerohttp = 2; goto leave; } if(!memcmp_P((char *) uip_appdata + 4, PSTR("/"), 1)) { debug_printf("Requested '/'\n"); uip_conn->appstate.zerohttp = 0; goto leave; } else if(!memcmp_P((char *) uip_appdata + 4, PSTR("/volinc"), 7)) { debug_printf("Requested '/volinc'\n"); uip_conn->appstate.zerohttp = 0; goto leave; } else { debug_printf("Unknown URI\n"); uip_conn->appstate.zerohttp = 1; goto leave; } } leave: if(uip_newdata() || uip_rexmit()) { switch(uip_conn->appstate.zerohttp) { case 0: debug_printf("200\n"); snprintf_P((char *) uip_appdata, UIP_APPDATA_SIZE, PSTR("HTTP/1.1 200 OK\r\n" "Server: zerohttp\r\n" "Connection: close\r\n" "Content-Type: text/plain\r\n\r\n" "Input: %hhu\r\n" "Gain: %hhu\r\n" "Master: %hhu\r\n" "Front left: %hhu\r\n" "Front right: %hhu\r\n" "Rear left: %hhu\r\n" "Rear right %hhu\r\n" "Bass: %hhu\r\n" "Treble: %hhu\r\n"), (uint8_t) tda7318_global.input, (uint8_t) tda7318_global.gain, (uint8_t) tda7318_global.volume, (uint8_t) tda7318_global.sp_LF, (uint8_t) tda7318_global.sp_RF, (uint8_t) tda7318_global.sp_LR, (uint8_t) tda7318_global.sp_RR, (uint8_t) tda7318_global.bass, (uint8_t) tda7318_global.treble); break; case 1: debug_printf("404\n"); strncpy_P((char *) uip_appdata, PSTR("HTTP/1.1 404 Command not found\r\n" "Server: zerohttp\r\n" "Connection: close\r\n" "Content-Type: text/plain\r\n\r\n" "I could not fullfill thy humble wish."), UIP_APPDATA_SIZE); break; case 2: default: debug_printf("400\n"); strncpy_P((char *) uip_appdata, PSTR("HTTP/1.1 400 Invalid request\r\n" "Server: zerohttp\r\n" "Connection: close\r\n" "Content-Type: text/plain\r\n\r\n" "Invalid request!"), UIP_APPDATA_SIZE); break; } uip_send(uip_appdata, strnlen((char *) uip_appdata, UIP_APPDATA_SIZE)); } }