diff options
Diffstat (limited to 'www/devcon')
-rw-r--r-- | www/devcon/IMG_4083.JPG | bin | 0 -> 739023 bytes | |||
-rw-r--r-- | www/devcon/IMG_4084.JPG | bin | 0 -> 744194 bytes | |||
-rw-r--r-- | www/devcon/IMG_4085.JPG | bin | 0 -> 807416 bytes | |||
-rw-r--r-- | www/devcon/IMG_4086.JPG | bin | 0 -> 626454 bytes | |||
-rw-r--r-- | www/devcon/IMG_4087.JPG | bin | 0 -> 904011 bytes | |||
-rw-r--r-- | www/devcon/IMG_4088.JPG | bin | 0 -> 1012372 bytes | |||
-rw-r--r-- | www/devcon/IMG_4089.JPG | bin | 0 -> 1006566 bytes | |||
-rw-r--r-- | www/devcon/bildtext.txt | 5 | ||||
-rw-r--r-- | www/devcon/img4083.jpg | bin | 0 -> 67794 bytes | |||
-rw-r--r-- | www/devcon/img4083t.jpg | bin | 0 -> 12444 bytes | |||
-rw-r--r-- | www/devcon/img4084.jpg | bin | 0 -> 80091 bytes | |||
-rw-r--r-- | www/devcon/img4084t.jpg | bin | 0 -> 16550 bytes | |||
-rw-r--r-- | www/devcon/img4085.jpg | bin | 0 -> 90051 bytes | |||
-rw-r--r-- | www/devcon/img4085t.jpg | bin | 0 -> 10035 bytes | |||
-rw-r--r-- | www/devcon/img4086.jpg | bin | 0 -> 56036 bytes | |||
-rw-r--r-- | www/devcon/img4086t.jpg | bin | 0 -> 12220 bytes | |||
-rw-r--r-- | www/devcon/img4087.jpg | bin | 0 -> 79846 bytes | |||
-rw-r--r-- | www/devcon/img4087t.jpg | bin | 0 -> 8665 bytes | |||
-rw-r--r-- | www/devcon/img4088.jpg | bin | 0 -> 112641 bytes | |||
-rw-r--r-- | www/devcon/img4088t.jpg | bin | 0 -> 11368 bytes | |||
-rw-r--r-- | www/devcon/img4089.jpg | bin | 0 -> 101347 bytes | |||
-rw-r--r-- | www/devcon/img4089t.jpg | bin | 0 -> 18188 bytes | |||
-rw-r--r-- | www/devcon/index.t | 132 | ||||
-rwxr-xr-x | www/devcon/show.cgi | 96 |
24 files changed, 233 insertions, 0 deletions
diff --git a/www/devcon/IMG_4083.JPG b/www/devcon/IMG_4083.JPG new file mode 100644 index 0000000000..d6ed305045 --- /dev/null +++ b/www/devcon/IMG_4083.JPG | |||
Binary files differ | |||
diff --git a/www/devcon/IMG_4084.JPG b/www/devcon/IMG_4084.JPG new file mode 100644 index 0000000000..fedff94c8e --- /dev/null +++ b/www/devcon/IMG_4084.JPG | |||
Binary files differ | |||
diff --git a/www/devcon/IMG_4085.JPG b/www/devcon/IMG_4085.JPG new file mode 100644 index 0000000000..d592852b0d --- /dev/null +++ b/www/devcon/IMG_4085.JPG | |||
Binary files differ | |||
diff --git a/www/devcon/IMG_4086.JPG b/www/devcon/IMG_4086.JPG new file mode 100644 index 0000000000..758c6ad3fb --- /dev/null +++ b/www/devcon/IMG_4086.JPG | |||
Binary files differ | |||
diff --git a/www/devcon/IMG_4087.JPG b/www/devcon/IMG_4087.JPG new file mode 100644 index 0000000000..15846b5a9b --- /dev/null +++ b/www/devcon/IMG_4087.JPG | |||
Binary files differ | |||
diff --git a/www/devcon/IMG_4088.JPG b/www/devcon/IMG_4088.JPG new file mode 100644 index 0000000000..53c760d9aa --- /dev/null +++ b/www/devcon/IMG_4088.JPG | |||
Binary files differ | |||
diff --git a/www/devcon/IMG_4089.JPG b/www/devcon/IMG_4089.JPG new file mode 100644 index 0000000000..00dacfc742 --- /dev/null +++ b/www/devcon/IMG_4089.JPG | |||
Binary files differ | |||
diff --git a/www/devcon/bildtext.txt b/www/devcon/bildtext.txt new file mode 100644 index 0000000000..f8869f815c --- /dev/null +++ b/www/devcon/bildtext.txt | |||
@@ -0,0 +1,5 @@ | |||
1 | 4083: Comparison between Recorder and Player | ||
2 | 4084: Contest: Spot the development box! | ||
3 | 4086: A stack of "virgins"! | ||
4 | 4087: A pre-4.50 player (left) and a post-4.50 player (right). | ||
5 | 4089: There's lots of fun to be had with these things! | ||
diff --git a/www/devcon/img4083.jpg b/www/devcon/img4083.jpg new file mode 100644 index 0000000000..e26cb18829 --- /dev/null +++ b/www/devcon/img4083.jpg | |||
Binary files differ | |||
diff --git a/www/devcon/img4083t.jpg b/www/devcon/img4083t.jpg new file mode 100644 index 0000000000..b615af2d92 --- /dev/null +++ b/www/devcon/img4083t.jpg | |||
Binary files differ | |||
diff --git a/www/devcon/img4084.jpg b/www/devcon/img4084.jpg new file mode 100644 index 0000000000..9dbd59ae86 --- /dev/null +++ b/www/devcon/img4084.jpg | |||
Binary files differ | |||
diff --git a/www/devcon/img4084t.jpg b/www/devcon/img4084t.jpg new file mode 100644 index 0000000000..31c2b6e9a7 --- /dev/null +++ b/www/devcon/img4084t.jpg | |||
Binary files differ | |||
diff --git a/www/devcon/img4085.jpg b/www/devcon/img4085.jpg new file mode 100644 index 0000000000..376a8f31ae --- /dev/null +++ b/www/devcon/img4085.jpg | |||
Binary files differ | |||
diff --git a/www/devcon/img4085t.jpg b/www/devcon/img4085t.jpg new file mode 100644 index 0000000000..52f3afe1c3 --- /dev/null +++ b/www/devcon/img4085t.jpg | |||
Binary files differ | |||
diff --git a/www/devcon/img4086.jpg b/www/devcon/img4086.jpg new file mode 100644 index 0000000000..051361c30b --- /dev/null +++ b/www/devcon/img4086.jpg | |||
Binary files differ | |||
diff --git a/www/devcon/img4086t.jpg b/www/devcon/img4086t.jpg new file mode 100644 index 0000000000..18736fecb1 --- /dev/null +++ b/www/devcon/img4086t.jpg | |||
Binary files differ | |||
diff --git a/www/devcon/img4087.jpg b/www/devcon/img4087.jpg new file mode 100644 index 0000000000..2c047babe3 --- /dev/null +++ b/www/devcon/img4087.jpg | |||
Binary files differ | |||
diff --git a/www/devcon/img4087t.jpg b/www/devcon/img4087t.jpg new file mode 100644 index 0000000000..89ed22845e --- /dev/null +++ b/www/devcon/img4087t.jpg | |||
Binary files differ | |||
diff --git a/www/devcon/img4088.jpg b/www/devcon/img4088.jpg new file mode 100644 index 0000000000..f2cb22fb65 --- /dev/null +++ b/www/devcon/img4088.jpg | |||
Binary files differ | |||
diff --git a/www/devcon/img4088t.jpg b/www/devcon/img4088t.jpg new file mode 100644 index 0000000000..520023100d --- /dev/null +++ b/www/devcon/img4088t.jpg | |||
Binary files differ | |||
diff --git a/www/devcon/img4089.jpg b/www/devcon/img4089.jpg new file mode 100644 index 0000000000..a21385f118 --- /dev/null +++ b/www/devcon/img4089.jpg | |||
Binary files differ | |||
diff --git a/www/devcon/img4089t.jpg b/www/devcon/img4089t.jpg new file mode 100644 index 0000000000..b3443677f5 --- /dev/null +++ b/www/devcon/img4089t.jpg | |||
Binary files differ | |||
diff --git a/www/devcon/index.t b/www/devcon/index.t new file mode 100644 index 0000000000..8f0e1d78e7 --- /dev/null +++ b/www/devcon/index.t | |||
@@ -0,0 +1,132 @@ | |||
1 | #define _PAGE_ Rockbox Developer Conference 2002 | ||
2 | #include "head.t" | ||
3 | |||
4 | <table align="right"><tr><td><a href="show.cgi?img4083.jpg"><img src="img4083t.jpg" alt="photo" border=0 width=200 height=150></a><br><small><i>Comparison of Recorder and Player</i></small></td></tr></table> | ||
5 | |||
6 | <p>Well, almost. :-) Björn, Linus, Daniel and Kjell sat down at Linus' house | ||
7 | friday night (2002-04-19) with our Archoses and had a long and fruitful discussion about software design. | ||
8 | Here are a few things that we discussed: | ||
9 | |||
10 | <h2>Application Programming Interfaces</h2> | ||
11 | |||
12 | <p>We want to try to stick to POSIX where these exist and are practical. The | ||
13 | reason is simply that many people already know these APIs well. Here are a | ||
14 | few which haven't already been defined in the code: | ||
15 | |||
16 | <h3>File operations</h3> | ||
17 | <ul> | ||
18 | <li>open | ||
19 | <li>close | ||
20 | <li>read | ||
21 | <li>write | ||
22 | <li>seek | ||
23 | <li>unlink | ||
24 | <li>rename | ||
25 | </ul> | ||
26 | |||
27 | <table align="right"><tr><td><a href="show.cgi?img4084.jpg"><img src="img4084t.jpg" alt="photo" border=0 width=200 height=150></a> | ||
28 | <br><small><i>Contest: Spot the development box!</i></small></td></tr></table> | ||
29 | |||
30 | <h3>Directory operations</h3> | ||
31 | <ul> | ||
32 | <li>opendir | ||
33 | <li>closedir | ||
34 | <li>readdir | ||
35 | </ul> | ||
36 | |||
37 | <h3>Disk operations</h3> | ||
38 | <ul> | ||
39 | <li>readblock | ||
40 | <li>writeblock | ||
41 | <li>spindown | ||
42 | <li>diskinfo | ||
43 | <li>partitioninfo | ||
44 | </ul> | ||
45 | |||
46 | <p>We also decided that we will use the 'newlib' standard C library, | ||
47 | replacing some functions with smaller variants as we move forward. | ||
48 | |||
49 | <h2>Multitasking</h2> | ||
50 | |||
51 | <p>We spent much time discussing and debating task scheduling, or the lack | ||
52 | thereof. First, we went with the idea that we don't really need "real" | ||
53 | scheduling. Instead, a simple "tree-task" system would be used: A | ||
54 | main-loop, a timer tick and a "bottom half" low-priority interrupt, each | ||
55 | with an event queue. | ||
56 | |||
57 | <p>Pretty soon we realized that we will want to: | ||
58 | |||
59 | <ol style="a"> | ||
60 | <li> Use a timer tick to poll disk I/O (assuming we can't get an interrupt) | ||
61 | <li> Perform slow disk operations in both the MP3->DAC feeder and the user | ||
62 | interface, sometimes at the same time. | ||
63 | <li> Not lock up the user interface during I/O. | ||
64 | </ol> | ||
65 | |||
66 | <table align="right"><tr><td><a href="show.cgi?img4086.jpg"><img src="img4086t.jpg" alt="photo" border=0 width=200 height=150></a> | ||
67 | <br><small><i>A stack of "virgins"!</i></small></td></tr></table> | ||
68 | |||
69 | <p>At the same time, we agreed that we should not walk into the common trap | ||
70 | of engaging in "job splitting". That is, to split up jobs in small chunks | ||
71 | so they don't take so long to finish. The problem with job splitting is | ||
72 | that it makes the code flow very complex. | ||
73 | |||
74 | <p>After much scratching our collective heads over how to make a primitive | ||
75 | "three-task" system be able to do everything we wanted without resorting | ||
76 | to complex job splitting, we finally came to the conclusion that we were | ||
77 | heading down the wrong road: | ||
78 | |||
79 | <p><blockquote> | ||
80 | <b>We need threading.</b> | ||
81 | </blockquote> | ||
82 | |||
83 | <p>Even though a scheduler adds complexity, it makes the rest of the code so | ||
84 | much more straight-forward that the total net result is less overall | ||
85 | complexity. | ||
86 | |||
87 | <p>To keep it simple, we decided to use a cooperative scheduler. That is, one | ||
88 | in which the threads themselves decide when scheduling is performed. The | ||
89 | big gain from this, apart from making the scheduler itself less complex, | ||
90 | is that we don't have to worry as much about making all code "multithread | ||
91 | safe". | ||
92 | |||
93 | <p>Affording ourselves the luxury of threads, we soon identified four basic | ||
94 | threads: | ||
95 | |||
96 | <ul> | ||
97 | <li>Disk thread, performing all disk operations | ||
98 | <li>UI thread, handling the user interface | ||
99 | <li>MP3 feed thread, making sure the MAS is fed with data at all times | ||
100 | <li>I2C thread, handling the sometimes very relaxed timing of the I2C bus | ||
101 | </ul> | ||
102 | |||
103 | <p>Threads use message passing between them and each have a message queue | ||
104 | associated to it. | ||
105 | |||
106 | <table align="right"><tr><td><a href="show.cgi?img4089.jpg"><img src="img4089t.jpg" alt="photo" border=0 width=200 height=150></a> | ||
107 | <br><small><i>There's much fun to be had with these things!</i></small></td></tr></table> | ||
108 | |||
109 | <p>In addition to the threads, we need a timer interrupt with the ability to | ||
110 | send messages to threads at specific intervals. This will also be used to | ||
111 | scan the keys of the jukebox and handle key repeat detection (when a key | ||
112 | has been pressed for a number of ticks). | ||
113 | |||
114 | <p>None of these things are, of course, written in stone. Feel free to | ||
115 | comment, discuss and argue about them! | ||
116 | |||
117 | <p>We are currently 89 subscribers to this list. If you want to get more | ||
118 | deeply involved in what's going on, I encourage you to: | ||
119 | |||
120 | <ul> | ||
121 | <li>Subscribe to the rockbox-cvs list, to see all code that goes in. | ||
122 | <li>Join the #rockbox channel on irc.openprojects.net. There are always a | ||
123 | couple of us in there. | ||
124 | </ul> | ||
125 | |||
126 | <p>I have written a set of guidelines for contributing code to the project. | ||
127 | Take a look at them in CVS or here: | ||
128 | <a href="http://bjorn.haxx.se/rockbox/firmware/CONTRIBUTING">CONTRIBUTING</a> | ||
129 | |||
130 | <p>/Björn | ||
131 | |||
132 | #include "foot.t" | ||
diff --git a/www/devcon/show.cgi b/www/devcon/show.cgi new file mode 100755 index 0000000000..c8123b38e0 --- /dev/null +++ b/www/devcon/show.cgi | |||
@@ -0,0 +1,96 @@ | |||
1 | #!/usr/bin/perl | ||
2 | |||
3 | use File::Basename; | ||
4 | |||
5 | $cgi = basename $0; | ||
6 | |||
7 | print "Content-Type: text/html\n\n"; | ||
8 | |||
9 | $image = $ARGV[0]; | ||
10 | |||
11 | $image =~ /img(\d+)/; | ||
12 | |||
13 | print "<html><head><title>Rockbox - Photo $1</title></head>\n"; | ||
14 | print "<body bgcolor=black text=white link=white vlink=gray>\n"; | ||
15 | |||
16 | if ($image eq "" ) { | ||
17 | print "<p>No image specified\n"; | ||
18 | exit; | ||
19 | } | ||
20 | |||
21 | print "<h1> </h1><div align=center><img src=$image>\n"; | ||
22 | |||
23 | # compressed image | ||
24 | if ( $image =~ /img(\d+).jpg/ ) { | ||
25 | $num = $1; | ||
26 | for $i ( 1 .. 10 ) { | ||
27 | $prev = sprintf("%04d",$num-$i); | ||
28 | last if ( -f "img$prev.jpg" ); | ||
29 | } | ||
30 | if ( $prev == $num-10 ) { | ||
31 | undef $prev; | ||
32 | } | ||
33 | |||
34 | for $i ( 1 .. 20 ) { | ||
35 | $next = sprintf("%04d",$num+$i); | ||
36 | print "<!-- Trying $next -->\n"; | ||
37 | last if ( -f "img$next.jpg" ); | ||
38 | } | ||
39 | if ( $next == $num+20 ) { | ||
40 | undef $next; | ||
41 | } | ||
42 | |||
43 | if ( -f "bildtext.txt" ) { | ||
44 | open FILE, "<bildtext.txt"; | ||
45 | @txt = <FILE>; | ||
46 | close FILE; | ||
47 | @match = grep /^$num: /, @txt; | ||
48 | if ( $match[0] =~ /^$num: (.*)/ ) { | ||
49 | print "<p><i>$1</i>\n"; | ||
50 | } | ||
51 | } | ||
52 | |||
53 | |||
54 | print "<p>\n"; | ||
55 | print "<a href=$cgi?img$prev.jpg>< Previous</a> \n" if ( $prev ); | ||
56 | print "<a href=.>Index</a>\n"; | ||
57 | if ( -f "IMG_$num.JPG" ) { | ||
58 | $size = int( (stat("IMG_$num.JPG"))[7] / 1024 ); | ||
59 | print " <a href=IMG_$num.JPG>Fullsize ($size kB)</a>\n"; | ||
60 | } | ||
61 | |||
62 | print " <a href=$cgi?img$next.jpg>Next ></a>\n" if ( $next ); | ||
63 | |||
64 | } | ||
65 | |||
66 | # showing fullsize already | ||
67 | elsif ( $image =~ /IMG_(\d+).JPG/ ) { | ||
68 | $num = $1; | ||
69 | for $i ( 1 .. 10 ) { | ||
70 | $prev = sprintf("%04d",$num-$i); | ||
71 | last if ( -f "IMG_$prev.JPG" ); | ||
72 | } | ||
73 | if ( $prev == $num-10 ) { | ||
74 | undef $prev; | ||
75 | } | ||
76 | |||
77 | for $i ( 1 .. 20 ) { | ||
78 | $next = sprintf("%04d",$num+$i); | ||
79 | print "<!-- Trying $next -->\n"; | ||
80 | last if ( -f "IMG_$next.JPG" ); | ||
81 | } | ||
82 | if ( $next == $num+20 ) { | ||
83 | undef $next; | ||
84 | } | ||
85 | |||
86 | print "<p>\n"; | ||
87 | print "<a href=$cgi?IMG_$prev.JPG>< Previous</a> \n" if ( $prev ); | ||
88 | print "<a href=.>Index</a>\n"; | ||
89 | if ( -f "img$num.jpg" ) { | ||
90 | $size = int( (stat("img$num.jpg"))[7] / 1024 ); | ||
91 | print " <a href=img$num.jpg>Small ($size kB)</a>\n"; | ||
92 | } | ||
93 | |||
94 | print " <a href=$cgi?IMG_$next.JPG>Next ></a>\n" if ( $next ); | ||
95 | } | ||
96 | print "</div></body></html>\n"; | ||