Initial dump from Sourceforge website
|
@ -0,0 +1,37 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<!--#include virtual="header"-->
|
||||||
|
|
||||||
|
<h2> Development Stuff </h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Here is some stuff I have written for Revo/Psion Linux:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li> The <a href="spkg.shtml">spkg</a> package manager
|
||||||
|
<li> <a href="psionconf.shtml">PsionConf</a>: A small PicoGUI Psion Linux
|
||||||
|
configuration program
|
||||||
|
<li> <a href="picotone.shtml">PicoTone</a>: a touch tone phone dialer
|
||||||
|
<li> <a href="dev/psionw_sound.c">Kernel Sound Driver</a>: Now in the -5mx
|
||||||
|
patch tree
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<hr width="50%">
|
||||||
|
|
||||||
|
<a href="dev/pdf/">Various gathered information</a>:
|
||||||
|
This is mostly information (datasheets etc) I've gathered about the
|
||||||
|
Windermere hardware and thought people might find useful.
|
||||||
|
|
||||||
|
Note that the <i>Series_5mx_specs.pdf</i> file which Psion kindly provided
|
||||||
|
to the linux developers is not available here: it is not to be publicly
|
||||||
|
distributed, at Psions request. If you need a copy, post to the
|
||||||
|
Psion Linux mailing list.
|
||||||
|
|
||||||
|
<!--#include virtual="footer"-->
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
89a90
|
||||||
|
> static struct tpanel_sample old_ts = {0,0,0};
|
||||||
|
92c93
|
||||||
|
< int trigger, x, y;
|
||||||
|
---
|
||||||
|
> int trigger;
|
||||||
|
113,114d113
|
||||||
|
< x = ts.x;
|
||||||
|
< y = ts.y;
|
||||||
|
116,120c115,139
|
||||||
|
< /* Converte to screen coordinates... */
|
||||||
|
< x = ( ( ts.x - cal->min_x ) * cal->x_res / ( cal->max_x - cal->min_x ) );
|
||||||
|
< y = ( ( ts.y - cal->min_y ) * cal->y_res / ( cal->max_y - cal->min_y ) );
|
||||||
|
<
|
||||||
|
< infilter_send_pointing(PG_TRIGGER_PNTR_STATUS,x,y,ts.state,NULL);
|
||||||
|
---
|
||||||
|
> /* if pointer is up, keep the cursor position from when it was up */
|
||||||
|
> if (!ts.state) {
|
||||||
|
> ts.x = old_ts.x;
|
||||||
|
> ts.y = old_ts.y;
|
||||||
|
> } else {
|
||||||
|
> /* Converte to screen coordinates... */
|
||||||
|
> ts.x = ((ts.x - cal->min_x) * cal->x_res / (cal->max_x - cal->min_x));
|
||||||
|
> ts.y = ((ts.y - cal->min_y) * cal->y_res / (cal->max_y - cal->min_y));
|
||||||
|
> }
|
||||||
|
>
|
||||||
|
> /* if nothing has changed, dont send an event */
|
||||||
|
> if (ts.state == old_ts.state && ts.x == old_ts.x && ts.y == old_ts.y)
|
||||||
|
> return;
|
||||||
|
>
|
||||||
|
> if (old_ts.state && !ts.state)
|
||||||
|
> infilter_send_pointing(PG_TRIGGER_UP, ts.x, ts.y, ts.state, NULL);
|
||||||
|
> else if (!old_ts.state && ts.state)
|
||||||
|
> infilter_send_pointing(PG_TRIGGER_DOWN, ts.x, ts.y, ts.state, NULL);
|
||||||
|
>
|
||||||
|
> if (ts.x != old_ts.x || ts.y != old_ts.y)
|
||||||
|
> infilter_send_pointing(PG_TRIGGER_MOVE, ts.x, ts.y, ts.state, NULL);
|
||||||
|
>
|
||||||
|
> /* save ts for next time */
|
||||||
|
> old_ts = ts;
|
||||||
|
>
|
|
@ -0,0 +1,76 @@
|
||||||
|
Index: adc7843.c
|
||||||
|
===================================================================
|
||||||
|
RCS file: /cvsroot/pgui/pgserver/input/adc7843.c,v
|
||||||
|
retrieving revision 1.6
|
||||||
|
diff -u -r1.6 adc7843.c
|
||||||
|
--- adc7843.c 3 Jul 2002 22:03:29 -0000 1.6
|
||||||
|
+++ adc7843.c 6 Nov 2002 00:25:45 -0000
|
||||||
|
@@ -60,16 +60,16 @@
|
||||||
|
|
||||||
|
int adc7843_fd;
|
||||||
|
|
||||||
|
-struct tpanel_sample {
|
||||||
|
- u16 state;
|
||||||
|
- u16 x;
|
||||||
|
- u16 y;
|
||||||
|
-};
|
||||||
|
-
|
||||||
|
/******************************************** Implementations */
|
||||||
|
|
||||||
|
g_error adc7843_init(void) {
|
||||||
|
adc7843_fd = open("/dev/tpanel",O_NONBLOCK);
|
||||||
|
+
|
||||||
|
+ /* devfs name */
|
||||||
|
+
|
||||||
|
+ if (adc7843_fd <= 0)
|
||||||
|
+ adc7843_fd = open("/dev/misc/adc7843", O_NONBLOCK);
|
||||||
|
+
|
||||||
|
if (adc7843_fd <= 0)
|
||||||
|
return mkerror(PG_ERRT_IO, 74);
|
||||||
|
|
||||||
|
@@ -87,9 +87,10 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
int adc7843_fd_activate(int fd) {
|
||||||
|
- struct tpanel_sample ts;
|
||||||
|
+ int state;
|
||||||
|
char buffer[6];
|
||||||
|
- int trigger, x, y;
|
||||||
|
+ int trigger;
|
||||||
|
+ static int x=0, y=0;
|
||||||
|
|
||||||
|
if (!cal) {
|
||||||
|
if (!vid)
|
||||||
|
@@ -107,17 +108,22 @@
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* Convert the bytes to unsigned integers... */
|
||||||
|
- ts.state = ( ( (buffer[0]) << 8 ) + buffer[1] );
|
||||||
|
- ts.x = ( ( (buffer[2]) << 8 ) + buffer[3] );
|
||||||
|
- ts.y = ( ( (buffer[4]) << 8 ) + buffer[5] );
|
||||||
|
- x = ts.x;
|
||||||
|
- y = ts.y;
|
||||||
|
-
|
||||||
|
- /* Converte to screen coordinates... */
|
||||||
|
- x = ( ( ts.x - cal->min_x ) * cal->x_res / ( cal->max_x - cal->min_x ) );
|
||||||
|
- y = ( ( ts.y - cal->min_y ) * cal->y_res / ( cal->max_y - cal->min_y ) );
|
||||||
|
+ state = ( ( (buffer[0]) << 8 ) + buffer[1] );
|
||||||
|
+
|
||||||
|
+ /* save x,y in static variables. when pen up, send the last known
|
||||||
|
+ coordinates */
|
||||||
|
+
|
||||||
|
+ if (state) {
|
||||||
|
+ x = ( ( (buffer[2]) << 8 ) + buffer[3] );
|
||||||
|
+ y = ( ( (buffer[4]) << 8 ) + buffer[5] );
|
||||||
|
+
|
||||||
|
+ /* Convert to screen coordinates... */
|
||||||
|
+ x = ( ( x - cal->min_x ) * cal->x_res / ( cal->max_x - cal->min_x ) );
|
||||||
|
+ y = ( ( y - cal->min_y ) * cal->y_res / ( cal->max_y - cal->min_y ) );
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- infilter_send_pointing(PG_TRIGGER_PNTR_STATUS,x,y,ts.state,NULL);
|
||||||
|
+ infilter_send_pointing(PG_TRIGGER_PNTR_STATUS,x,y,state,NULL);
|
||||||
|
+
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,166 @@
|
||||||
|
The battery level(s) can be monitored using the auxilary channels of the ADC
|
||||||
|
for the touchscreen. Here are some emails which may be useful:
|
||||||
|
|
||||||
|
|
||||||
|
From: Simon D Howard <sdh300@ecs.soton.ac.uk>
|
||||||
|
To: Tony Lindgren <tony@atomide.com>
|
||||||
|
cc: Linux-7110-psion@lists.sourceforge.net
|
||||||
|
Subject: Re: [Linux-7110-psion] /proc patch
|
||||||
|
Date: Mon, 29 Apr 2002 18:57:35 +0100 (BST)
|
||||||
|
|
||||||
|
On Mon, 29 Apr 2002, Tony Lindgren wrote:
|
||||||
|
|
||||||
|
> So sounds like your SSI extra channel code might work on 5mx!
|
||||||
|
> Can you post it so we can try if you don't have a 5mx?
|
||||||
|
|
||||||
|
Well, it wasnt really specific code, I just hacked about with the adc
|
||||||
|
code. Currently it listens on the first 2 ports (which give the x, y
|
||||||
|
coordinate). If you change the following lines:
|
||||||
|
|
||||||
|
ssi_transmit_data(dev,0xd000);
|
||||||
|
ssi_transmit_data(dev,0x9000);
|
||||||
|
|
||||||
|
to
|
||||||
|
|
||||||
|
ssi_transmit_data(dev,0xd000 | 0x2000);
|
||||||
|
ssi_transmit_data(dev,0x9000 | 0x2000);
|
||||||
|
|
||||||
|
it ought to read the other channels (according to the adc datasheet
|
||||||
|
anyway, it didnt work so it may be that I'm totally wrong). I wrote a
|
||||||
|
small program to print the output from /dev/tpanel but I dont have it with
|
||||||
|
me right now - I adapted the picogui tpanel code.
|
||||||
|
|
||||||
|
Simon
|
||||||
|
|
||||||
|
_______________________________________________
|
||||||
|
Linux-7110-psion mailing list
|
||||||
|
Linux-7110-psion@lists.sourceforge.net
|
||||||
|
https://lists.sourceforge.net/lists/listinfo/linux-7110-psion
|
||||||
|
|
||||||
|
From: "Thilo Hille" <thilo@resourcery.de>
|
||||||
|
To: "Simon D Howard" <sdh300@ecs.soton.ac.uk>,
|
||||||
|
"Tony Lindgren" <tony@atomide.com>
|
||||||
|
Subject: Re: [Linux-7110-psion] /proc patch
|
||||||
|
Date: Tue, 30 Apr 2002 14:40:02 +0200
|
||||||
|
|
||||||
|
gotcha..
|
||||||
|
> So sounds like your SSI extra channel code might work on 5mx!
|
||||||
|
> Can you post it so we can try if you don't have a 5mx?
|
||||||
|
i just tweaked the controlbytes in adc7843.c
|
||||||
|
ssi_transmit_data(dev,0xa400); //channel 3
|
||||||
|
ssi_transmit_data(dev,0xe400); //channel 4
|
||||||
|
and voila shows up the battery state on channel three.
|
||||||
|
it stays around 2593 when accus inserted and drops down to <20 (needs about
|
||||||
|
a 3 minutes).
|
||||||
|
i think there are some capacitors discharging slowly this might be faster
|
||||||
|
when the external powersupply is disconnected.
|
||||||
|
how do we get this into an own driver?
|
||||||
|
|
||||||
|
Thilo Hille
|
||||||
|
resourcery GbR.
|
||||||
|
Habsburgerstr. 11
|
||||||
|
79104 Freiburg
|
||||||
|
Tel.: 0761-4567807
|
||||||
|
Fax.: 0761-4567805
|
||||||
|
thilo@resourcery.de
|
||||||
|
|
||||||
|
From: "Thilo Hille" <thilo@resourcery.de>
|
||||||
|
To: <linux-7110-psion@lists.sourceforge.net>
|
||||||
|
Subject: [Linux-7110-psion] power consumtion
|
||||||
|
Date: Tue, 30 Apr 2002 14:57:01 +0200
|
||||||
|
|
||||||
|
i just measured the battery current.
|
||||||
|
its about 2.74V.
|
||||||
|
the adc reports about 2594 (maybe rough mV?)
|
||||||
|
|
||||||
|
Thilo Hille
|
||||||
|
resourcery GbR.
|
||||||
|
Habsburgerstr. 11
|
||||||
|
79104 Freiburg
|
||||||
|
Tel.: 0761-4567807
|
||||||
|
Fax.: 0761-4567805
|
||||||
|
thilo@resourcery.de
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_______________________________________________
|
||||||
|
Linux-7110-psion mailing list
|
||||||
|
Linux-7110-psion@lists.sourceforge.net
|
||||||
|
https://lists.sourceforge.net/lists/listinfo/linux-7110-psion
|
||||||
|
|
||||||
|
|
||||||
|
From: Simon D Howard <sdh300@ecs.soton.ac.uk>
|
||||||
|
To: Thilo Hille <thilo@resourcery.de>
|
||||||
|
cc: linux-7110-psion@lists.sourceforge.net
|
||||||
|
Subject: Re: [Linux-7110-psion] /proc patch
|
||||||
|
Date: Tue, 30 Apr 2002 19:23:27 +0100 (BST)
|
||||||
|
|
||||||
|
|
||||||
|
On Tue, 30 Apr 2002, Thilo Hille wrote:
|
||||||
|
|
||||||
|
> i just tweaked the controlbytes in adc7843.c
|
||||||
|
> ssi_transmit_data(dev,0xa400); //channel 3
|
||||||
|
> ssi_transmit_data(dev,0xe400); //channel 4
|
||||||
|
> and voila shows up the battery state on channel three.
|
||||||
|
> it stays around 2593 when accus inserted and drops down to <20 (needs about
|
||||||
|
> a 3 minutes).
|
||||||
|
> i think there are some capacitors discharging slowly this might be faster
|
||||||
|
> when the external powersupply is disconnected.
|
||||||
|
|
||||||
|
Good news, this seems to work on my revo too. I found this slightly
|
||||||
|
surprising as the email tony quoted suggested the battery monitoring was
|
||||||
|
done differently. When charging, it seems to reach a maximum of around
|
||||||
|
3950 but drops to around 3500 when its finished. EPOC seems to use
|
||||||
|
3950-4000 as its "100%" value too - I get similar readings from its
|
||||||
|
battery monitor.
|
||||||
|
|
||||||
|
I also get ~2464 (invariant) from the other channel - presumably the
|
||||||
|
backup battery.
|
||||||
|
|
||||||
|
> how do we get this into an own driver?
|
||||||
|
|
||||||
|
"with difficulty" :)
|
||||||
|
|
||||||
|
Simon
|
||||||
|
|
||||||
|
|
||||||
|
_______________________________________________
|
||||||
|
Linux-7110-psion mailing list
|
||||||
|
Linux-7110-psion@lists.sourceforge.net
|
||||||
|
https://lists.sourceforge.net/lists/listinfo/linux-7110-psion
|
||||||
|
|
||||||
|
From: "Thilo Hille" <thilo@resourcery.de>
|
||||||
|
To: "Simon D Howard" <sdh300@ecs.soton.ac.uk>
|
||||||
|
Cc: <linux-7110-psion@lists.sourceforge.net>
|
||||||
|
Subject: Re: [Linux-7110-psion] /proc patch
|
||||||
|
Date: Tue, 30 Apr 2002 20:51:00 +0200
|
||||||
|
|
||||||
|
hi simon,
|
||||||
|
> I also get ~2464 (invariant) from the other channel - presumably the
|
||||||
|
> backup battery.
|
||||||
|
hmmm i dont have a backupbattery inserted and ch4 shows up ~4084.
|
||||||
|
i dont have one at hands for now, but tomorrow i ll try it.
|
||||||
|
did you try to remove the backup battery while watching the 4th channel?
|
||||||
|
(hey, its like tv :)
|
||||||
|
i really forgot about the backupbattery. i removed it 2 month ago and as id
|
||||||
|
never used epoc since than i never needed it.
|
||||||
|
|
||||||
|
greetingz
|
||||||
|
|
||||||
|
Thilo Hille
|
||||||
|
resourcery GbR.
|
||||||
|
Habsburgerstr. 11
|
||||||
|
79104 Freiburg
|
||||||
|
Tel.: 0761-4567807
|
||||||
|
Fax.: 0761-4567805
|
||||||
|
thilo@resourcery.de
|
||||||
|
|
||||||
|
_______________________________________________
|
||||||
|
Linux-7110-psion mailing list
|
||||||
|
Linux-7110-psion@lists.sourceforge.net
|
||||||
|
https://lists.sourceforge.net/lists/listinfo/linux-7110-psion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
|
||||||
|
ETNA CF CLPS7110 Name Description
|
||||||
|
3509-0169-02 Memory I/O
|
||||||
|
(C)PSION PLC
|
||||||
|
A12 R02 NL
|
||||||
|
9732M3006
|
||||||
|
|
||||||
|
Pin 1 <-> Pin 47 D08
|
||||||
|
Pin 2 <-> Pin 48 D09
|
||||||
|
Pin 3 <-> Pin 49 D10
|
||||||
|
Pin 4 <-> Pin 27 D11
|
||||||
|
Pin 5 <-> Pin 28 D12
|
||||||
|
Pin 6 <-> Pin 29 D13
|
||||||
|
Pin 7 <-> Pin 30 D14
|
||||||
|
Pin 8 <-> Pin 31 D15
|
||||||
|
Pin 9 <-- Pin 208 CS4 Expansion select 4 (PCMCIA 0)
|
||||||
|
Pin 10 <-- Pin 1 CS5 Expansion select 5 (PCMCIA 1)
|
||||||
|
Pin 11 <-- Pin 206 NCS2 ROM select 2 (Etna registers)
|
||||||
|
Pin 12 GND
|
||||||
|
Pin 13 VCC
|
||||||
|
Pin 14 --> Pin 45 BVD2 -SPKR n/a or speaker
|
||||||
|
Pin 15 --> Pin 45 BVD2 -SPKR n/a or speaker
|
||||||
|
Pin 16 <-- Pin 24 WP -IOIS16 Write protect or 16-bit I/O
|
||||||
|
Pin 17 <-- Pin 42 -WAIT Wait
|
||||||
|
Pin 18 <-- Pin 33 -VS1 Voltage select 1
|
||||||
|
Pin 19 <-- Pin 40 -VS2 Voltage select 2
|
||||||
|
Pin 20 <-- Pin 26 -CD1 Card detect (grounded in CF)
|
||||||
|
Pin 21 Pin 50 GND
|
||||||
|
Pin 22 <-- Pin 37 RDY/-BSY -IREQ Card ready or interrupt REQ
|
||||||
|
Pin 23
|
||||||
|
Pin 100 <-- Pin 25 -CD2 Card detect (grounded in CF)
|
|
@ -0,0 +1,212 @@
|
||||||
|
These are emails from an employee at Psion who worked on the 5mx and
|
||||||
|
provide some technical information. Thanks to Tony <tony@atomide.com> for
|
||||||
|
forwarding me these.
|
||||||
|
|
||||||
|
Date: Tue, 08 Aug 2000 20:52:12 +0100
|
||||||
|
From: Atish Nazir <hashaday@littleworld.freeserve.co.uk>
|
||||||
|
To: Peter Liniker <pl198@doc.ic.ac.uk>
|
||||||
|
Subject: Re: [Linux-7110-psion] psion5mx (fwd)
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> * the memory map
|
||||||
|
---
|
||||||
|
be more specific. what would you like to access?
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> * MMU details, esp. EPOC's MMU usage, so that ArLo can load the kernel
|
||||||
|
> into memory, initialise FiPaBoL and start it
|
||||||
|
---
|
||||||
|
hard one, because i'm not too clued up on that aspect of base. one
|
||||||
|
solution would be to install yourself as a "PartnerOS" - something EPOC
|
||||||
|
does have a provision for for the Philips smart phone of years ago.
|
||||||
|
documentation is very sparse though.
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> * ROM/serial/CF boot mechanism (latter two netbook only)
|
||||||
|
---
|
||||||
|
hehehe boss and i wrote this bit :o) protocol is basically YModem with
|
||||||
|
a few optional extras - i.e. any terminal program will be okay. the
|
||||||
|
exact specifics of the S7 client is unknown to me as a contractor at
|
||||||
|
Enterprise wrote it (a perpetually up beat guy).
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> * ROM/RAM speeds
|
||||||
|
---
|
||||||
|
varies according to machine _and_ when it was built in production
|
||||||
|
cycle. i.e. early machines have flash and later we switch to mask ROM
|
||||||
|
(with a small patch flash, should it be needed).
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> * interrupt handling
|
||||||
|
---
|
||||||
|
erm, it works...
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> * all the device interface specs:
|
||||||
|
> -- CF slot/card
|
||||||
|
---
|
||||||
|
function spec for ETNA - i'll find out, whom you have to speak about
|
||||||
|
this or whether i can release this (quite possible, but remember to say
|
||||||
|
thank you).
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> -- PCMCIA slot/card
|
||||||
|
---
|
||||||
|
functional spec for ASIC14 - ask Enterprise.
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> -- sound in/out, audio codecs
|
||||||
|
---
|
||||||
|
5, 5mx and Revo, sound out is identical (same drivers used in fact).
|
||||||
|
except on Revo, there's a slight pin move (can't remember what however,
|
||||||
|
it wasn't the buzzline). Revo sounds record is obviously disabled...
|
||||||
|
|
||||||
|
S7, go ask Enterprise...
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> -- screen
|
||||||
|
---
|
||||||
|
Eiger and Windermere have similar, but certainly different LCD
|
||||||
|
controllers on board - you'll have to change you device driver. i can't
|
||||||
|
give more details, because i don't know any more here - never worked on
|
||||||
|
that aspect.
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> -- pointer
|
||||||
|
---
|
||||||
|
ADC talks directly to main ASIC via SSP interface (changed on 5mx)
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> -- serial
|
||||||
|
---
|
||||||
|
UARTs integrated on main ASICS. Eiger only had one, Windy has two.
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> -- irda
|
||||||
|
---
|
||||||
|
see the bit about UARTs - same UARTs used for RS232 and talking to
|
||||||
|
IRDA.
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> -- power management/monitoring
|
||||||
|
---
|
||||||
|
hmm. 5, 5mx have voltmeters (same ADC as pointer). Revo has dedicated
|
||||||
|
current counter, talks via GPIO to main ASIC with a very slow
|
||||||
|
asynchronous serial protocol.
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> -- timers
|
||||||
|
> * Which of these are the same as series5?
|
||||||
|
---
|
||||||
|
same as before.
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> * Config used for the SA1100 and support.
|
||||||
|
---
|
||||||
|
how many ports are going here? the people to contact would be Psion
|
||||||
|
Enterprise as it's really more their turf.
|
||||||
|
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> * "ETNA" specs (this is the main ASIC, AFAIK)
|
||||||
|
---
|
||||||
|
no, rubbish. ETNA is a helper ASIC. chip code names: Eiger,
|
||||||
|
Windermere and SA1100 (affectionately known as Sally), which correspond
|
||||||
|
to 5, 5mx and Revo, and S7 and Net book.
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> * We'd also like the ER5 DDK info/headers - enough to compile arlo
|
||||||
|
> "properly".
|
||||||
|
---
|
||||||
|
you'll need the E32 tree, this comes with the OCK and DDK. since i use
|
||||||
|
the OCK (something only available to licensees of Symbian), i wouldn't
|
||||||
|
know how to obtain a copy of the DDK from Symbian (other than asking
|
||||||
|
nicely, but i can't imagine that working when they inevitably ask why
|
||||||
|
you want it). soz. been speaking to bossman and it looks like you'll
|
||||||
|
have to become a Symbian licencee / partner - PSION can't help you here
|
||||||
|
because it will violate our agreement with the collective.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
IF YOU'RE INTERESTED:
|
||||||
|
if one individual is prepared to sign an NDA and many other evil
|
||||||
|
agreements (IPR etc) we have, i _might_ (not a promise, a lot of red
|
||||||
|
tape would have to be cleared and i'd have to speak to a lot of people)
|
||||||
|
be able to provide the full Windermere spec for free.
|
||||||
|
|
||||||
|
however if a few people are London based, what may a more attractive
|
||||||
|
solution, a few members of the systems team could give a short seminar
|
||||||
|
or something along those lines, answering questions in person, giving
|
||||||
|
the vital information and so forth...
|
||||||
|
|
||||||
|
n.b. both these proposals have to be confirmed with other powers that
|
||||||
|
be.
|
||||||
|
|
||||||
|
--- --- ---
|
||||||
|
.~. the way of the Sacred Penguin is the path of
|
||||||
|
/V\ the truly righteous...
|
||||||
|
// \\/
|
||||||
|
/( ) hashaday@littleworld.freeserve.co.uk
|
||||||
|
^`~'^ http://thor.prohosting.com/~hashaday/
|
||||||
|
|
||||||
|
|
||||||
|
_______________________________________________
|
||||||
|
Linux-7110-psion mailing list
|
||||||
|
Linux-7110-psion@lists.sourceforge.net
|
||||||
|
http://lists.sourceforge.net/mailman/listinfo/linux-7110-psion
|
||||||
|
|
||||||
|
---------- Forwarded message ----------
|
||||||
|
Date: Tue, 08 Aug 2000 18:45:00 +0100
|
||||||
|
From: Atish Nazir <hashaday@littleworld.freeserve.co.uk>
|
||||||
|
To: Peter Liniker <pl198@doc.ic.ac.uk>
|
||||||
|
Subject: Re: [Linux-7110-psion] psion5mx (fwd)
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> Etna is the S5 ASIC, AFAIK.
|
||||||
|
---
|
||||||
|
ETNA (aka ASIC12) is the _helper_ ASIC for Eiger (S5) and Windermere
|
||||||
|
(5MX). it adds CF capabilities and some other gubbins. basically it
|
||||||
|
adds more pins to the CPU.
|
||||||
|
|
||||||
|
re:
|
||||||
|
---
|
||||||
|
> Is the S5mx/7 ASIC called Etna? (Although you may not be able to answer
|
||||||
|
> this!)
|
||||||
|
---
|
||||||
|
the S7 and NetBook uses ASIC14 (aka "that many legged bastard"), which
|
||||||
|
has nothing really in common with ETNA other than it was designed by the
|
||||||
|
same guy (and uses same VHDL for the timers, copy and paste is a
|
||||||
|
wonderful thing). it's also a helper ASIC, the exact specifics i can't
|
||||||
|
be sure of because Enterprise have done a lot of developmental work on
|
||||||
|
it...
|
||||||
|
|
||||||
|
--- --- ---
|
||||||
|
.~. the way of the Sacred Penguin is the path of
|
||||||
|
/V\ the truly righteous...
|
||||||
|
// \\/
|
||||||
|
/( ) hashaday@littleworld.freeserve.co.uk
|
||||||
|
^`~'^ http://thor.prohosting.com/~hashaday/
|
||||||
|
|
||||||
|
|
||||||
|
_______________________________________________
|
||||||
|
Linux-7110-psion mailing list
|
||||||
|
Linux-7110-psion@lists.sourceforge.net
|
||||||
|
http://lists.sourceforge.net/mailman/listinfo/linux-7110-psion
|
|
@ -0,0 +1,8 @@
|
||||||
|
ps7110db.pdf - 7110 processor data sheet
|
||||||
|
msm7717_01_02_03.pdf - 7717 CODEC sound chip
|
||||||
|
sbas090a.pdf - 7843 ADC chip (touchscreen/battery monitor)
|
||||||
|
psion_mails.txt - Emails from a Psion Employee providing some
|
||||||
|
technical insight..
|
||||||
|
battery_info.txt - Results of hacking with the ADC in order to read
|
||||||
|
the battery level.
|
||||||
|
|
|
@ -0,0 +1,360 @@
|
||||||
|
/*
|
||||||
|
Driver for PsionW Sound output
|
||||||
|
|
||||||
|
(c) 2002 Simon Howard
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* TODO:
|
||||||
|
*
|
||||||
|
* - Microphone support
|
||||||
|
* - /dev/mixer support
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/fs.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <linux/version.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/sound.h>
|
||||||
|
#include <linux/soundcard.h>
|
||||||
|
|
||||||
|
#include <asm/irq.h>
|
||||||
|
#include <asm/mach/irq.h>
|
||||||
|
#include <asm/uaccess.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/hardware/psionw.h>
|
||||||
|
#include <asm/arch/irqs.h>
|
||||||
|
#include <asm/arch/psionw-power.h>
|
||||||
|
|
||||||
|
#include "ulaw.h"
|
||||||
|
|
||||||
|
/* these ought to be in the hardware headers: */
|
||||||
|
|
||||||
|
#define CODOUTEN (1 << 0)
|
||||||
|
#define CODINEN (1 << 1)
|
||||||
|
|
||||||
|
#define SAMPLE_RATE 8000 /* this cant be changed */
|
||||||
|
|
||||||
|
static int users;
|
||||||
|
static struct semaphore users_lock;
|
||||||
|
|
||||||
|
extern void enable_irq(unsigned int irq);
|
||||||
|
extern void disable_irq(unsigned int irq);
|
||||||
|
|
||||||
|
static int audio_dev;
|
||||||
|
|
||||||
|
/* buffer size */
|
||||||
|
|
||||||
|
#define BUFSIZE 128
|
||||||
|
|
||||||
|
/* lock for access to writebuf. the interrupt handler does not check
|
||||||
|
* for this but interrupts are also disabled while we access writebuf
|
||||||
|
* in write
|
||||||
|
*/
|
||||||
|
|
||||||
|
static struct semaphore writebuf_lock;
|
||||||
|
|
||||||
|
/* freelist for buffering data */
|
||||||
|
|
||||||
|
static unsigned char writebuf[BUFSIZE];
|
||||||
|
static int writebuf_head, writebuf_tail, writebuf_size;
|
||||||
|
|
||||||
|
/* interrupt routine */
|
||||||
|
|
||||||
|
void psionw_sound_isr(unsigned int irq)
|
||||||
|
{
|
||||||
|
int i, count;
|
||||||
|
|
||||||
|
/* write some more data to the speaker */
|
||||||
|
|
||||||
|
count = writebuf_size < 8 ? writebuf_size : 8;
|
||||||
|
|
||||||
|
for (i=0; i<count; ++i) {
|
||||||
|
psionw_writeb(dsp_ulaw[writebuf[writebuf_head]], CODR);
|
||||||
|
writebuf_head = (writebuf_head + 1) % BUFSIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; i<8; ++i) {
|
||||||
|
psionw_writeb(0, CODR);
|
||||||
|
}
|
||||||
|
|
||||||
|
writebuf_size -= count;
|
||||||
|
|
||||||
|
/* if we had nothing left, stop interrupts until we
|
||||||
|
* get more (set in the write function)
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (count == 0)
|
||||||
|
disable_irq(IRQ_CSINT);
|
||||||
|
|
||||||
|
/* clear interrupt */
|
||||||
|
|
||||||
|
psionw_writel(1, COEOI);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t psionw_sound_read(struct file *file, char *buffer,
|
||||||
|
size_t count, loff_t *ppos)
|
||||||
|
{
|
||||||
|
/* insert microphone code here */
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t psionw_sound_write(struct file *file, const char *buffer,
|
||||||
|
size_t count, loff_t *ppos)
|
||||||
|
{
|
||||||
|
int i, n, ret = 0;
|
||||||
|
|
||||||
|
while (count > 0) {
|
||||||
|
|
||||||
|
/* check we can fit anything into the buffer */
|
||||||
|
|
||||||
|
if (writebuf_size >= BUFSIZE) {
|
||||||
|
if (file->f_flags & O_NONBLOCK)
|
||||||
|
break;
|
||||||
|
|
||||||
|
set_current_state(TASK_INTERRUPTIBLE);
|
||||||
|
schedule_timeout(1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
down(&writebuf_lock);
|
||||||
|
|
||||||
|
/* disable irq while we do this */
|
||||||
|
|
||||||
|
disable_irq(IRQ_CSINT);
|
||||||
|
|
||||||
|
/* fit in as much as we can to the write buffer */
|
||||||
|
|
||||||
|
if (count > BUFSIZE - writebuf_size)
|
||||||
|
n = BUFSIZE - writebuf_size;
|
||||||
|
else
|
||||||
|
n = count;
|
||||||
|
|
||||||
|
/* this is complicated stuff to add to the buffer in blocks
|
||||||
|
* rather than byte-by-byte, for speed
|
||||||
|
* we dont want to disable the sound IRQ for too long or we
|
||||||
|
* get nasty breaks in the sound
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (writebuf_tail >= writebuf_head) {
|
||||||
|
|
||||||
|
/* fill in as much as possible at the end */
|
||||||
|
|
||||||
|
i = BUFSIZE - writebuf_tail;
|
||||||
|
|
||||||
|
if (i >= n) {
|
||||||
|
|
||||||
|
/* we can fit them all at the end */
|
||||||
|
|
||||||
|
memcpy(writebuf + writebuf_tail, buffer, n);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* first part at the end of buffer */
|
||||||
|
|
||||||
|
memcpy(writebuf + writebuf_tail, buffer, i);
|
||||||
|
|
||||||
|
/* second part at the beginning */
|
||||||
|
|
||||||
|
memcpy(writebuf, buffer+i, n-i);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* just fit in as much as we can */
|
||||||
|
|
||||||
|
memcpy(writebuf + writebuf_tail, buffer, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
writebuf_tail = (writebuf_tail + n) % BUFSIZE;
|
||||||
|
writebuf_size += n;
|
||||||
|
|
||||||
|
count -= n;
|
||||||
|
buffer += n;
|
||||||
|
ret += n;
|
||||||
|
|
||||||
|
/* enable irq again */
|
||||||
|
|
||||||
|
enable_irq(IRQ_CSINT);
|
||||||
|
|
||||||
|
up(&writebuf_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (file->f_flags & O_NONBLOCK && ret == 0)
|
||||||
|
return -EAGAIN;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int psionw_sound_ioctl(struct inode *inode, struct file *file,
|
||||||
|
unsigned int cmd, unsigned long arg)
|
||||||
|
{
|
||||||
|
int val;
|
||||||
|
|
||||||
|
switch (cmd) {
|
||||||
|
case OSS_GETVERSION:
|
||||||
|
return put_user(SOUND_VERSION, (int *)arg);
|
||||||
|
|
||||||
|
case SNDCTL_DSP_RESET:
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case SNDCTL_DSP_SYNC:
|
||||||
|
/* we cant really do this, but we'll pretend
|
||||||
|
* we can, to keep programs that use it happy
|
||||||
|
*/
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case SNDCTL_DSP_SPEED: /* set sample rate */
|
||||||
|
/* we cant change it */
|
||||||
|
|
||||||
|
if (get_user(val, (int *)arg))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
if (val >= 0)
|
||||||
|
return put_user(SAMPLE_RATE, (int *)arg);
|
||||||
|
else
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
case SNDCTL_DSP_STEREO: /* set stereo or mono */
|
||||||
|
|
||||||
|
if (get_user(val, (int *)arg))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
/* we are stuck in mono mode */
|
||||||
|
|
||||||
|
if (val)
|
||||||
|
printk("psionw_sound: attempt to put in stereo mode (unsupported)\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case SNDCTL_DSP_GETBLKSIZE:
|
||||||
|
return put_user(8, (int *)arg); /* 8 byte block size (?) */
|
||||||
|
|
||||||
|
case SNDCTL_DSP_GETFMTS:
|
||||||
|
return put_user(AFMT_U8, (int *)arg);
|
||||||
|
|
||||||
|
case SNDCTL_DSP_SETFMT:
|
||||||
|
return put_user(AFMT_U8, (int *)arg);
|
||||||
|
|
||||||
|
case SNDCTL_DSP_CHANNELS: /* set channels */
|
||||||
|
return put_user(1, (int *) arg);
|
||||||
|
|
||||||
|
|
||||||
|
case SNDCTL_DSP_NONBLOCK:
|
||||||
|
file->f_flags |= O_NONBLOCK;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int psionw_sound_open(struct inode *inode, struct file *file)
|
||||||
|
{
|
||||||
|
down(&users_lock);
|
||||||
|
|
||||||
|
if (users > 0) {
|
||||||
|
up(&users_lock);
|
||||||
|
return -EBUSY;
|
||||||
|
}
|
||||||
|
|
||||||
|
++users;
|
||||||
|
|
||||||
|
/* empty list */
|
||||||
|
|
||||||
|
writebuf_head = writebuf_tail = writebuf_size = 0;
|
||||||
|
|
||||||
|
/* enable codec */
|
||||||
|
|
||||||
|
psionw_writeb(psionw_readb(PDDR) | PDDR_AMPEN | PDDR_CDE, PDDR);
|
||||||
|
psionw_writel(psionw_readl(CONFG) | CODINEN | CODOUTEN, CONFG);
|
||||||
|
|
||||||
|
/* enable sound irq */
|
||||||
|
|
||||||
|
irq_desc[IRQ_CSINT].mask_ack = psionw_sound_isr;
|
||||||
|
|
||||||
|
enable_irq(IRQ_CSINT);
|
||||||
|
|
||||||
|
up(&users_lock);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int psionw_sound_release(struct inode *inode, struct file *file)
|
||||||
|
{
|
||||||
|
down(&users_lock);
|
||||||
|
|
||||||
|
--users;
|
||||||
|
|
||||||
|
/* disable codec */
|
||||||
|
|
||||||
|
psionw_writeb(psionw_readb(PDDR) & ~(PDDR_AMPEN|PDDR_CDE), PDDR);
|
||||||
|
psionw_writel(psionw_readl(CONFG) & ~(CODINEN|CODOUTEN), CONFG);
|
||||||
|
|
||||||
|
/* disable sound irq */
|
||||||
|
|
||||||
|
disable_irq(IRQ_CSINT);
|
||||||
|
|
||||||
|
up(&users_lock);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int psionw_sound_mmap(struct file *file, struct vm_area_struct *vma)
|
||||||
|
{
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct file_operations sound_ops = {
|
||||||
|
owner: THIS_MODULE,
|
||||||
|
llseek: no_llseek,
|
||||||
|
read: psionw_sound_read,
|
||||||
|
write: psionw_sound_write,
|
||||||
|
ioctl: psionw_sound_ioctl,
|
||||||
|
mmap: psionw_sound_mmap,
|
||||||
|
open: psionw_sound_open,
|
||||||
|
release: psionw_sound_release,
|
||||||
|
};
|
||||||
|
|
||||||
|
int __init init_psionw_sound(void)
|
||||||
|
{
|
||||||
|
audio_dev = register_sound_dsp(&sound_ops, -1);
|
||||||
|
|
||||||
|
if (audio_dev < 0) {
|
||||||
|
printk(KERN_ERR "psionw_sound: cannot register sound device\n");
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
init_MUTEX(&writebuf_lock);
|
||||||
|
init_MUTEX(&users_lock);
|
||||||
|
|
||||||
|
printk("psionw_sound: initialised sound output\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void __exit cleanup_psionw_sound(void)
|
||||||
|
{
|
||||||
|
unregister_sound_dsp(audio_dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
MODULE_DESCRIPTION("psionw sound output driver");
|
||||||
|
MODULE_AUTHOR("Simon Howard");
|
||||||
|
MODULE_LICENSE("GPL");
|
||||||
|
|
||||||
|
module_init(init_psionw_sound);
|
||||||
|
module_exit(cleanup_psionw_sound);
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<!--#include virtual="header"-->
|
||||||
|
|
||||||
|
<font color="red"><b>Warning: Booting linux will erase all data
|
||||||
|
stored in RAM. If you have important files stored in your palmtop,
|
||||||
|
be sure to make copies of them first.</b></font>
|
||||||
|
|
||||||
|
<h3>Downloads</h3>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li> <b> 1.1 </b>
|
||||||
|
<ul>
|
||||||
|
<li> <a href="download/1.1/ChangeLog">ChangeLog</a>
|
||||||
|
<li> <a href="download/1.1/omnibar.c">omnibar.c</a> - modified omnibar source
|
||||||
|
<li> <a href="download/1.1/lcdtux.tar.gz">lcdtux.tar.gz</a> - lcdtux theme
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<i> Revo </i>
|
||||||
|
<ul>
|
||||||
|
<li> <a href="download/1.1/revol-1.1.sis.zip">revol-1.1.sis.zip</a> (zipped EPOC package)
|
||||||
|
<li> <a href="download/1.1/revol-1.1.tar.gz">revol-1.1.tar.gz</a>
|
||||||
|
<li> <a href="download/1.1/revol-1.1.zip">revol-1.1.zip</a>
|
||||||
|
</ul>
|
||||||
|
<i>Revo Plus</i>
|
||||||
|
<ul>
|
||||||
|
<li> <a href="download/1.1/revol-1.1-revoplus.sis.zip">revol-1.1-revoplus.sis.zip</a> (zipped EPOC package)
|
||||||
|
<li> <a href="download/1.1/revol-1.1-revoplus.tar.gz">revol-1.1-revoplus.tar.gz</a>
|
||||||
|
<li> <a href="download/1.1/revol-1.1-revoplus.zip">revol-1.1-revoplus.zip</a>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<li> <b> 1.0 </b>
|
||||||
|
<ul>
|
||||||
|
<li> <a href="download/1.0/omnibar.c">omnibar.c</a> - modified omnibar source
|
||||||
|
<li> <a href="download/1.0/revol-1.0.sis.zip">revol-1.0.sis.zip</a> (zipped EPOC package)
|
||||||
|
<li> <a href="download/1.0/revol-1.0.tar.gz">revol-1.0.tar.gz</a>
|
||||||
|
<li> <a href="download/1.0/revol-1.0.zip">revol-1.0.zip</a>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<!--#include virtual="footer"-->
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
1.1:
|
||||||
|
add:
|
||||||
|
pgmon (network usage monitor)
|
||||||
|
picomail
|
||||||
|
add themes:
|
||||||
|
lcdtux (lcdgray with tux background)
|
||||||
|
classique (macos platinum theme)
|
||||||
|
removed:
|
||||||
|
pspawn (obsolete from testing)
|
||||||
|
imgview (was broken)
|
||||||
|
omnibar now includes power off menu item
|
||||||
|
(uses /proc/psionw/state)
|
||||||
|
kernel includes my kernel patches for sound and
|
||||||
|
/proc/psionw additions
|
||||||
|
|
||||||
|
1.0:
|
||||||
|
initial version
|
|
@ -0,0 +1,268 @@
|
||||||
|
/* $Id: omnibar.c,v 1.2 2001/12/01 01:12:01 gork Exp $
|
||||||
|
*
|
||||||
|
* omnibar.c - hopefully this will grow into a general interface
|
||||||
|
* for starting and manipulating applications, but
|
||||||
|
* for now it's pretty simple.
|
||||||
|
*
|
||||||
|
* PicoGUI small and efficient client/server GUI
|
||||||
|
* Copyright (C) 2000 Micah Dowty <micahjd@users.sourceforge.net>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/types.h> /* For making directory listings */
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#include <time.h> /* For clock */
|
||||||
|
|
||||||
|
/* FIXME: Check for Mac OS X using autoconf */
|
||||||
|
#if (defined(__APPLE__) && defined(__MACH__)) // Mac OS X and Darwin
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/malloc.h>
|
||||||
|
#else
|
||||||
|
#include <malloc.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h> /* file IO for getting CPU load */
|
||||||
|
|
||||||
|
#include <picogui.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#ifdef CLOCK
|
||||||
|
pghandle wClock;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
pghandle wLoad;
|
||||||
|
|
||||||
|
/********* Event handlers */
|
||||||
|
|
||||||
|
/* Applications menu
|
||||||
|
* This whole thing's a kludge, I will write
|
||||||
|
* something better (using custom menus) soon
|
||||||
|
*/
|
||||||
|
int btnAppMenu(struct pgEvent *evt) {
|
||||||
|
pghandle *items;
|
||||||
|
struct dirent *dent;
|
||||||
|
int i,l;
|
||||||
|
DIR *d;
|
||||||
|
|
||||||
|
d = opendir("/pgui/apps");
|
||||||
|
|
||||||
|
/* FIXME : Count the items and allocate the array */
|
||||||
|
items = alloca(sizeof(pghandle) * 40);
|
||||||
|
|
||||||
|
/* Enter a new context before making the handles */
|
||||||
|
pgEnterContext();
|
||||||
|
|
||||||
|
/* Make handles */
|
||||||
|
rewinddir(d);
|
||||||
|
i = 0;
|
||||||
|
while (dent = readdir(d)) {
|
||||||
|
/* Skip all but applications */
|
||||||
|
l = strlen(dent->d_name);
|
||||||
|
if (l<4) continue;
|
||||||
|
if (dent->d_name[0] == '.')
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* Add item */
|
||||||
|
items[i++] = pgNewString(dent->d_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Run it */
|
||||||
|
i = pgMenuFromArray(items,i);
|
||||||
|
|
||||||
|
/* Result? */
|
||||||
|
if (i) {
|
||||||
|
char buf[80]; /* FIXME: Buffer overflow 'sploit waiting to happen! */
|
||||||
|
strcpy(buf,"/pgui/apps/");
|
||||||
|
strcat(buf,pgGetString(items[i-1]));
|
||||||
|
if (!vfork()) {
|
||||||
|
execlp(buf,buf,NULL);
|
||||||
|
pgMessageDialogFmt("Error",0,"There was an error starting the\nfollowing program:\n%s",buf);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Free the server memory and destroy our menu */
|
||||||
|
pgLeaveContext();
|
||||||
|
|
||||||
|
closedir(d);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* sdh: power off for psionw with appropriate kernel patch */
|
||||||
|
void psion_power_off()
|
||||||
|
{
|
||||||
|
FILE *fs = fopen("/proc/psionw/state", "w");
|
||||||
|
|
||||||
|
if (!fs) {
|
||||||
|
fprintf(stderr, "Can't open /proc/psionw/state: %s\n", strerror());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(fs, "0\n");
|
||||||
|
|
||||||
|
fclose(fs);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* System menu */
|
||||||
|
int btnSysMenu(struct pgEvent *evt) {
|
||||||
|
switch (pgMenuFromString("Power Off|About PicoGUI...|"
|
||||||
|
"About Revol...|Quit PicoGUI...")) {
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
psion_power_off();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
|
||||||
|
/* Quick little about box */
|
||||||
|
pgMessageDialog("About PicoGUI",
|
||||||
|
"Welcome to PicoGUI!\n"
|
||||||
|
"This is a preview release (or a development\n"
|
||||||
|
"version if you're a developer :)\n"
|
||||||
|
"What you see may or may not represent the\n"
|
||||||
|
"future of PicoGUI, it is just a test.\n"
|
||||||
|
"For more information and the latest code, visit:\n"
|
||||||
|
" http://pgui.sourceforge.net\n"
|
||||||
|
"\n"
|
||||||
|
"-- Micah",0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
pgMessageDialog("About Revol",
|
||||||
|
"Revol: Linux on the Psion Revo\n"
|
||||||
|
"\n"
|
||||||
|
"By Simon Howard\n"
|
||||||
|
"\n"
|
||||||
|
"http://fraggle.alkali.org/stuffage/revol/\n"
|
||||||
|
"Feedback: sdh300@ecs.soton.ac.uk\n", 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
/* Beam us out! */
|
||||||
|
if (pgMessageDialog("Quit PicoGUI", "Quit PicoGUI?",
|
||||||
|
PG_MSGBTN_YES | PG_MSGBTN_NO)==PG_MSGBTN_YES)
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Called to update the clock and system load indicators */
|
||||||
|
void sysIdle(void) {
|
||||||
|
time_t now;
|
||||||
|
char *ct;
|
||||||
|
char buf[50];
|
||||||
|
FILE *f;
|
||||||
|
unsigned long cpu_user,cpu_nice,cpu_sys,cpu_idle;
|
||||||
|
unsigned long crun,ctotal;
|
||||||
|
static unsigned long ocrun = 0,octotal = 1;
|
||||||
|
|
||||||
|
#ifdef CLOCK
|
||||||
|
/* Get time */
|
||||||
|
time(&now);
|
||||||
|
ct = ctime(&now);
|
||||||
|
ct[strlen(ct)-1] = 0; /* Strip newline */
|
||||||
|
pgReplaceText(wClock,ct);
|
||||||
|
pgSubUpdate(wClock);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Get CPU load */
|
||||||
|
f = fopen("/proc/stat","r");
|
||||||
|
fgets(buf,50,f);
|
||||||
|
fclose(f);
|
||||||
|
sscanf(buf,"cpu %lu %lu %lu %lu",&cpu_user,&cpu_nice,&cpu_sys,&cpu_idle);
|
||||||
|
crun = cpu_user + cpu_sys;
|
||||||
|
ctotal = crun + cpu_nice + cpu_idle;
|
||||||
|
if (crun==ocrun || ctotal==octotal) return; /* Prevent SIGFPE */
|
||||||
|
pgSetWidget(wLoad,PG_WP_VALUE, (crun-ocrun) * 100 / (ctotal-octotal),0);
|
||||||
|
ocrun = crun;
|
||||||
|
octotal = ctotal;
|
||||||
|
pgSubUpdate(wLoad);
|
||||||
|
}
|
||||||
|
|
||||||
|
/********* Main program */
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
pghandle wLoadbox,fntLabel,fntLabelBold;
|
||||||
|
|
||||||
|
pgInit(argc,argv);
|
||||||
|
pgRegisterApp(PG_APP_TOOLBAR,"OmniBar",0);
|
||||||
|
|
||||||
|
/* A font for our labels */
|
||||||
|
fntLabel = pgNewFont("Helvetica",8,0);
|
||||||
|
fntLabelBold = pgNewFont("Helvetica",8,PG_FSTYLE_BOLD);
|
||||||
|
|
||||||
|
/* Top-level widgets */
|
||||||
|
|
||||||
|
pgNewWidget(PG_WIDGET_BUTTON,0,0);
|
||||||
|
pgSetWidget(PGDEFAULT,
|
||||||
|
PG_WP_TEXT,pgNewString("Applications"),
|
||||||
|
PG_WP_EXTDEVENTS,PG_EXEV_PNTR_DOWN,
|
||||||
|
0);
|
||||||
|
pgBind(PGDEFAULT,PG_WE_PNTR_DOWN,&btnAppMenu,NULL);
|
||||||
|
|
||||||
|
pgNewWidget(PG_WIDGET_BUTTON,0,0);
|
||||||
|
pgSetWidget(PGDEFAULT,
|
||||||
|
PG_WP_TEXT,pgNewString("System"),
|
||||||
|
PG_WP_EXTDEVENTS,PG_EXEV_PNTR_DOWN,
|
||||||
|
0);
|
||||||
|
pgBind(PGDEFAULT,PG_WE_PNTR_DOWN,&btnSysMenu,NULL);
|
||||||
|
|
||||||
|
#ifdef CLOCK
|
||||||
|
wClock = pgNewWidget(PG_WIDGET_LABEL,0,0);
|
||||||
|
pgSetWidget(PGDEFAULT,
|
||||||
|
PG_WP_SIDE,PG_S_RIGHT,
|
||||||
|
PG_WP_FONT,fntLabel,
|
||||||
|
PG_WP_TRANSPARENT,0,
|
||||||
|
0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
wLoadbox = pgNewWidget(PG_WIDGET_BOX,0,0);
|
||||||
|
pgSetWidget(PGDEFAULT,
|
||||||
|
PG_WP_SIDE,PG_S_RIGHT,
|
||||||
|
PG_WP_SIZE,200,
|
||||||
|
0);
|
||||||
|
|
||||||
|
/* Inside the load box */
|
||||||
|
|
||||||
|
pgNewWidget(PG_WIDGET_LABEL,PG_DERIVE_INSIDE,wLoadbox);
|
||||||
|
pgSetWidget(PGDEFAULT,
|
||||||
|
PG_WP_TEXT,pgNewString("CPU"),
|
||||||
|
PG_WP_SIDE,PG_S_RIGHT,
|
||||||
|
PG_WP_FONT,fntLabel,
|
||||||
|
0);
|
||||||
|
|
||||||
|
wLoad = pgNewWidget(PG_WIDGET_INDICATOR,0,0);
|
||||||
|
pgSetWidget(PGDEFAULT,
|
||||||
|
PG_WP_SIDE,PG_S_ALL,
|
||||||
|
0);
|
||||||
|
|
||||||
|
/* Run it. */
|
||||||
|
pgSetIdle(1000,&sysIdle);
|
||||||
|
pgEventLoop();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The End */
|
|
@ -0,0 +1,50 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<!--#include virtual="header"-->
|
||||||
|
|
||||||
|
<font color="red"><b>Warning: Booting linux will erase all data
|
||||||
|
stored in RAM. If you have important files stored in your palmtop,
|
||||||
|
be sure to make copies of them first.</b></font>
|
||||||
|
|
||||||
|
<h3>Downloads</h3>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li> <b> 1.1 </b>
|
||||||
|
<ul>
|
||||||
|
<li> <a href="download/1.1/ChangeLog">ChangeLog</a>
|
||||||
|
<li> <a href="download/1.1/omnibar.c">omnibar.c</a> - modified omnibar source
|
||||||
|
<li> <a href="download/1.1/lcdtux.tar.gz">lcdtux.tar.gz</a> - lcdtux theme
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<i> Revo </i>
|
||||||
|
<ul>
|
||||||
|
<li> <a href="download/1.1/revol-1.1.sis.zip">revol-1.1.sis.zip</a> (zipped EPOC package)
|
||||||
|
<li> <a href="download/1.1/revol-1.1.tar.gz">revol-1.1.tar.gz</a>
|
||||||
|
<li> <a href="download/1.1/revol-1.1.zip">revol-1.1.zip</a>
|
||||||
|
</ul>
|
||||||
|
<i>Revo Plus</i>
|
||||||
|
<ul>
|
||||||
|
<li> <a href="download/1.1/revol-1.1-revoplus.sis.zip">revol-1.1-revoplus.sis.zip</a> (zipped EPOC package)
|
||||||
|
<li> <a href="download/1.1/revol-1.1-revoplus.tar.gz">revol-1.1-revoplus.tar.gz</a>
|
||||||
|
<li> <a href="download/1.1/revol-1.1-revoplus.zip">revol-1.1-revoplus.zip</a>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<li> <b> 1.0 </b>
|
||||||
|
<ul>
|
||||||
|
<li> <a href="download/1.0/omnibar.c">omnibar.c</a> - modified omnibar source
|
||||||
|
<li> <a href="download/1.0/revol-1.0.sis.zip">revol-1.0.sis.zip</a> (zipped EPOC package)
|
||||||
|
<li> <a href="download/1.0/revol-1.0.tar.gz">revol-1.0.tar.gz</a>
|
||||||
|
<li> <a href="download/1.0/revol-1.0.zip">revol-1.0.zip</a>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<!--#include virtual="footer"-->
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,129 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<!--#include virtual="header" -->
|
||||||
|
|
||||||
|
<h3> FAQ </h3>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li> <b> Did you write this? </b>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Well, not really. Its related to <a href="http://psilinux.org/">Psilinux</a>
|
||||||
|
which is a project to port linux to Psions.
|
||||||
|
When I started, the port to the Revo was pretty much
|
||||||
|
complete, but no decent distribution existed for it (though there were
|
||||||
|
some for the Revo+).
|
||||||
|
The focus of Psilinux is on the 5MX, so
|
||||||
|
I put this distribution together to better support the Revo.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<li> <b> Can I keep all my existing files in EPOC while I try linux? </b>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Any files on your palmtop will be lost when you boot linux. It is advised
|
||||||
|
that you make backups of any essential files before you install. You will
|
||||||
|
need quite a bit of free space for the install, so you may have to delete
|
||||||
|
some files to install.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<li> <b> How can I change virtual terminal? </b>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The 'menu' key is generally the same as the 'alt' key on PC
|
||||||
|
keyboards. You can switch console by pressing menu-1,2,3 etc.
|
||||||
|
Similarly, pressing ctrl-menu-backspace equates to ctrl-alt-del
|
||||||
|
and will cause init to reboot the system.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Console 1 provides a default shell, you can start extra shells on
|
||||||
|
consoles 2-5. Consoles 9 and 10 show the syslog output and kernel
|
||||||
|
messages.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<li> <b> How do I type a pipe (|) ? </b>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Fn-T.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<li> <b> You always run as root! Dont you know this is bad practice? </b>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Maybe on desktop/server machines, but this is a PDA. I decided it was
|
||||||
|
pointless to bother with multiple users on a palmtop. If you damage
|
||||||
|
the system, you can simply install it again fairly quickly.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<li> <b> Why does the filesystem have a peculiar layout? </b>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
I wanted to keep the filesystem simple so the layout is slightly different to
|
||||||
|
a normal linux distribution. I have tried to keep it generally similar to
|
||||||
|
the usual layout, however.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<li> <b> How do I start PicoGUI? </b>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
From the console, type 'P'. This should automatically start PicoGUI.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<li> <b> How do I change the PicoGUI theme? </b>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Edit /etc/pgserver.conf and change the themes= line. There are several
|
||||||
|
themes to choose from in /pgui/themes.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<li> <b> How can I set up a serial connection to my desktop linux machine? </b>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
There is a copy of pppd included which you can use to set up a PPP link
|
||||||
|
if you wish. However, I usually use the simpler SLIP protocol.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Firstly, on your desktop machine (you need SLIP support in the kernel
|
||||||
|
or the SLIP kernel modules loaded), execute the following commands as
|
||||||
|
root:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
slattach -s 115200 /dev/ttyS0 &
|
||||||
|
ifconfig sl0 10.0.2.1 pointopoint 10.0.2.2
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
(This assumes the revo cradle is on COM1, substitute ttyS0 for your
|
||||||
|
serial port otherwise)
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Next, on the Revo, simply execute /bin/connect. This performs similar
|
||||||
|
commands to the ones above to set up the link on the Revo side.
|
||||||
|
Hopefully, if the link is running you should be able to test the link
|
||||||
|
by pinging the revo (ip 10.0.2.2) from the desktop machine. You can
|
||||||
|
perform simple transfers between the desktop and revo using netcat
|
||||||
|
(nc).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<li> <b> Shouldnt this be called GNU/Linux? </b>
|
||||||
|
<p>
|
||||||
|
Actually, no. The argument for GNU/Linux is that most linux systems
|
||||||
|
are a modified version of the GNU system which has been around for
|
||||||
|
longer than linux has. However, Revol uses embedded versions of
|
||||||
|
the standard parts of the operating system normally provided
|
||||||
|
by GNU tools (uclibc instead of glibc, busybox instead of the GNU
|
||||||
|
fileutils etc). So Revol is a non-GNU linux system and it would be
|
||||||
|
incorrect to call it GNU/Linux.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<!--#include virtual="footer" -->
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<a href="mailto:fraggle@nospam.alkali.org">Simon Howard</a>. <br>
|
||||||
|
I am not associated with Psion Digital.
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>Revol: Linux on the Psion Revo</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body bgcolor="white" text="black" link="black" vlink="black">
|
||||||
|
<h1>Revol</h1>
|
||||||
|
<a href="index.shtml">Main</a> |
|
||||||
|
<a href="sshot.shtml">Screenshots</a> |
|
||||||
|
<a href="faq.shtml">FAQ</a> |
|
||||||
|
<a href="download.shtml">Downloads</a> |
|
||||||
|
<a href="links.shtml">Links</a> |
|
||||||
|
<a href="dev.shtml">Development Stuff</a> |
|
||||||
|
<a href="pkglist.shtml">Packages</a>
|
||||||
|
<hr>
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<!--#include virtual="header"-->
|
||||||
|
|
||||||
|
<img align="right" src="revo.png" alt="Psion Revo">
|
||||||
|
<p>
|
||||||
|
Revol is a Linux Distribution for the Psion Revo.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Please note: this is designed for the original Revo, although it
|
||||||
|
runs on the Revo+ as well.
|
||||||
|
If you have a Revo+ or
|
||||||
|
a Diamond Mako, you may wish to try
|
||||||
|
<a href="http://zeniiia.linux.org.uk/pub/distributions/revo/revolinux.nm.ru/">
|
||||||
|
this distribution</a> instead which makes use of the extra memory to fit
|
||||||
|
some useful things in. It will probably not run on the 5MX. If you have
|
||||||
|
a 5MX, you may wish to try
|
||||||
|
<a href="http://www.psilinux.org/">the Psilinux project</a> which is
|
||||||
|
developing a distro.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Version 1.1 is <a href="download.shtml">available for download!</a>
|
||||||
|
I have managed to fit quite a few programs into the Revos memory.
|
||||||
|
Please feel free to try this out and send comments/suggestions/queries
|
||||||
|
to me.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Version 2.0 is under development and unlike previous versions will
|
||||||
|
be package based using <a href="spkg.shtml">spkg</a>. You can browse
|
||||||
|
a list of packages <a href="pkglist.shtml">here</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<!--#include virtual="footer"-->
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<!--#include virtual="header"-->
|
||||||
|
|
||||||
|
<h2> Links </h2>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li> <a href="http://www.picogui.org/">PicoGUI</a>
|
||||||
|
<li> <a href="http://www.psilinux.org/">PsiLinux</a>
|
||||||
|
<li> <a href="http://thomas.de-ruiter.cx/projects/psion/">Taders Psion 5mx Linux pages</a>
|
||||||
|
<li> <a href="http://revolinux.nm.ru/">Revo+ Linux</a>
|
||||||
|
<li> <a href="http://www.emdebian.org/">Embedded Debian</a>
|
||||||
|
<li> <a href="http://linux-7110.sourceforge.net/files/Kernels/5mx_and_Revo/">5mx kernel patch</a>
|
||||||
|
<li> <a href="http://uclibc.org/">uClibc</a>
|
||||||
|
<li> <a href="http://busybox.lineo.com/">Busybox</a>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<!--#include virtual="footer"-->
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,246 @@
|
||||||
|
/* $Id: omnibar.c,v 1.2 2001/12/01 01:12:01 gork Exp $
|
||||||
|
*
|
||||||
|
* omnibar.c - hopefully this will grow into a general interface
|
||||||
|
* for starting and manipulating applications, but
|
||||||
|
* for now it's pretty simple.
|
||||||
|
*
|
||||||
|
* PicoGUI small and efficient client/server GUI
|
||||||
|
* Copyright (C) 2000 Micah Dowty <micahjd@users.sourceforge.net>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/types.h> /* For making directory listings */
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#include <time.h> /* For clock */
|
||||||
|
|
||||||
|
/* FIXME: Check for Mac OS X using autoconf */
|
||||||
|
#if (defined(__APPLE__) && defined(__MACH__)) // Mac OS X and Darwin
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/malloc.h>
|
||||||
|
#else
|
||||||
|
#include <malloc.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h> /* file IO for getting CPU load */
|
||||||
|
|
||||||
|
#include <picogui.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#ifdef CLOCK
|
||||||
|
pghandle wClock;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
pghandle wLoad;
|
||||||
|
|
||||||
|
/********* Event handlers */
|
||||||
|
|
||||||
|
/* Applications menu
|
||||||
|
* This whole thing's a kludge, I will write
|
||||||
|
* something better (using custom menus) soon
|
||||||
|
*/
|
||||||
|
int btnAppMenu(struct pgEvent *evt) {
|
||||||
|
pghandle *items;
|
||||||
|
struct dirent *dent;
|
||||||
|
int i,l;
|
||||||
|
DIR *d;
|
||||||
|
|
||||||
|
d = opendir("/pgui/apps");
|
||||||
|
|
||||||
|
/* FIXME : Count the items and allocate the array */
|
||||||
|
items = alloca(sizeof(pghandle) * 40);
|
||||||
|
|
||||||
|
/* Enter a new context before making the handles */
|
||||||
|
pgEnterContext();
|
||||||
|
|
||||||
|
/* Make handles */
|
||||||
|
rewinddir(d);
|
||||||
|
i = 0;
|
||||||
|
while (dent = readdir(d)) {
|
||||||
|
/* Skip all but applications */
|
||||||
|
l = strlen(dent->d_name);
|
||||||
|
if (l<4) continue;
|
||||||
|
if (dent->d_name[0] == '.')
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* Add item */
|
||||||
|
items[i++] = pgNewString(dent->d_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Run it */
|
||||||
|
i = pgMenuFromArray(items,i);
|
||||||
|
|
||||||
|
/* Result? */
|
||||||
|
if (i) {
|
||||||
|
char buf[80]; /* FIXME: Buffer overflow 'sploit waiting to happen! */
|
||||||
|
strcpy(buf,"/pgui/apps/");
|
||||||
|
strcat(buf,pgGetString(items[i-1]));
|
||||||
|
if (!vfork()) {
|
||||||
|
execlp(buf,buf,NULL);
|
||||||
|
pgMessageDialogFmt("Error",0,"There was an error starting the\nfollowing program:\n%s",buf);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Free the server memory and destroy our menu */
|
||||||
|
pgLeaveContext();
|
||||||
|
|
||||||
|
closedir(d);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* System menu */
|
||||||
|
int btnSysMenu(struct pgEvent *evt) {
|
||||||
|
switch (pgMenuFromString("About PicoGUI...|About Revol...|Quit PicoGUI...")) {
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
|
||||||
|
/* Quick little about box */
|
||||||
|
pgMessageDialog("About PicoGUI",
|
||||||
|
"Welcome to PicoGUI!\n"
|
||||||
|
"This is a preview release (or a development\n"
|
||||||
|
"version if you're a developer :)\n"
|
||||||
|
"What you see may or may not represent the\n"
|
||||||
|
"future of PicoGUI, it is just a test.\n"
|
||||||
|
"For more information and the latest code, visit:\n"
|
||||||
|
" http://pgui.sourceforge.net\n"
|
||||||
|
"\n"
|
||||||
|
"-- Micah",0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
pgMessageDialog("About Revol",
|
||||||
|
"Revol: Linux on the Psion Revo\n"
|
||||||
|
"\n"
|
||||||
|
"By Simon Howard\n"
|
||||||
|
"\n"
|
||||||
|
"http://fraggle.alkali.org/stuffage/revol/\n"
|
||||||
|
"Feedback: sdh300@ecs.soton.ac.uk\n", 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
/* Beam us out! */
|
||||||
|
if (pgMessageDialog("Quit PicoGUI", "Quit PicoGUI?",
|
||||||
|
PG_MSGBTN_YES | PG_MSGBTN_NO)==PG_MSGBTN_YES)
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Called to update the clock and system load indicators */
|
||||||
|
void sysIdle(void) {
|
||||||
|
time_t now;
|
||||||
|
char *ct;
|
||||||
|
char buf[50];
|
||||||
|
FILE *f;
|
||||||
|
unsigned long cpu_user,cpu_nice,cpu_sys,cpu_idle;
|
||||||
|
unsigned long crun,ctotal;
|
||||||
|
static unsigned long ocrun = 0,octotal = 1;
|
||||||
|
|
||||||
|
#ifdef CLOCK
|
||||||
|
/* Get time */
|
||||||
|
time(&now);
|
||||||
|
ct = ctime(&now);
|
||||||
|
ct[strlen(ct)-1] = 0; /* Strip newline */
|
||||||
|
pgReplaceText(wClock,ct);
|
||||||
|
pgSubUpdate(wClock);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Get CPU load */
|
||||||
|
f = fopen("/proc/stat","r");
|
||||||
|
fgets(buf,50,f);
|
||||||
|
fclose(f);
|
||||||
|
sscanf(buf,"cpu %lu %lu %lu %lu",&cpu_user,&cpu_nice,&cpu_sys,&cpu_idle);
|
||||||
|
crun = cpu_user + cpu_sys;
|
||||||
|
ctotal = crun + cpu_nice + cpu_idle;
|
||||||
|
if (crun==ocrun || ctotal==octotal) return; /* Prevent SIGFPE */
|
||||||
|
pgSetWidget(wLoad,PG_WP_VALUE, (crun-ocrun) * 100 / (ctotal-octotal),0);
|
||||||
|
ocrun = crun;
|
||||||
|
octotal = ctotal;
|
||||||
|
pgSubUpdate(wLoad);
|
||||||
|
}
|
||||||
|
|
||||||
|
/********* Main program */
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
pghandle wLoadbox,fntLabel,fntLabelBold;
|
||||||
|
|
||||||
|
pgInit(argc,argv);
|
||||||
|
pgRegisterApp(PG_APP_TOOLBAR,"OmniBar",0);
|
||||||
|
|
||||||
|
/* A font for our labels */
|
||||||
|
fntLabel = pgNewFont(NULL,10,PG_FSTYLE_FIXED);
|
||||||
|
fntLabelBold = pgNewFont("Helvetica",8,PG_FSTYLE_BOLD);
|
||||||
|
|
||||||
|
/* Top-level widgets */
|
||||||
|
|
||||||
|
pgNewWidget(PG_WIDGET_BUTTON,0,0);
|
||||||
|
pgSetWidget(PGDEFAULT,
|
||||||
|
PG_WP_TEXT,pgNewString("Applications"),
|
||||||
|
PG_WP_EXTDEVENTS,PG_EXEV_PNTR_DOWN,
|
||||||
|
0);
|
||||||
|
pgBind(PGDEFAULT,PG_WE_PNTR_DOWN,&btnAppMenu,NULL);
|
||||||
|
|
||||||
|
pgNewWidget(PG_WIDGET_BUTTON,0,0);
|
||||||
|
pgSetWidget(PGDEFAULT,
|
||||||
|
PG_WP_TEXT,pgNewString("System"),
|
||||||
|
PG_WP_EXTDEVENTS,PG_EXEV_PNTR_DOWN,
|
||||||
|
0);
|
||||||
|
pgBind(PGDEFAULT,PG_WE_PNTR_DOWN,&btnSysMenu,NULL);
|
||||||
|
|
||||||
|
#ifdef CLOCK
|
||||||
|
wClock = pgNewWidget(PG_WIDGET_LABEL,0,0);
|
||||||
|
pgSetWidget(PGDEFAULT,
|
||||||
|
PG_WP_SIDE,PG_S_RIGHT,
|
||||||
|
PG_WP_FONT,fntLabel,
|
||||||
|
PG_WP_TRANSPARENT,0,
|
||||||
|
0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
wLoadbox = pgNewWidget(PG_WIDGET_BOX,0,0);
|
||||||
|
pgSetWidget(PGDEFAULT,
|
||||||
|
PG_WP_SIDE,PG_S_RIGHT,
|
||||||
|
PG_WP_SIZE,200,
|
||||||
|
0);
|
||||||
|
|
||||||
|
/* Inside the load box */
|
||||||
|
|
||||||
|
pgNewWidget(PG_WIDGET_LABEL,PG_DERIVE_INSIDE,wLoadbox);
|
||||||
|
pgSetWidget(PGDEFAULT,
|
||||||
|
PG_WP_TEXT,pgNewString("CPU"),
|
||||||
|
PG_WP_SIDE,PG_S_RIGHT,
|
||||||
|
PG_WP_FONT,fntLabel,
|
||||||
|
0);
|
||||||
|
|
||||||
|
wLoad = pgNewWidget(PG_WIDGET_INDICATOR,0,0);
|
||||||
|
pgSetWidget(PGDEFAULT,
|
||||||
|
PG_WP_SIDE,PG_S_ALL,
|
||||||
|
0);
|
||||||
|
|
||||||
|
/* Run it. */
|
||||||
|
pgSetIdle(1000,&sysIdle);
|
||||||
|
pgEventLoop();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The End */
|
|
@ -0,0 +1,30 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<!--#include virtual="header"-->
|
||||||
|
|
||||||
|
<h2> PicoTone </h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This is a small PicoGUI DTMF tone dialer that you can use to dial numbers
|
||||||
|
on phones with touch tone exchanges.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<center><img src="sshot/picotone.png"></center>
|
||||||
|
|
||||||
|
|
||||||
|
<h3>Download</h3>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li> <b> v0.2.0</b>
|
||||||
|
<ul>
|
||||||
|
<li> <a href="picotone-0.2.0.tar.gz">v0.2.0</a>
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<!--#include virtual="footer"-->
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,129 @@
|
||||||
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use CGI qw(param);
|
||||||
|
|
||||||
|
my %packages;
|
||||||
|
|
||||||
|
my $pkgdir="spkg/unstable";
|
||||||
|
my $pkgpage="pkglist.shtml";
|
||||||
|
my $package_file = "Packages";
|
||||||
|
|
||||||
|
# get md5sum of a file
|
||||||
|
|
||||||
|
sub packages_load {
|
||||||
|
my $thispkg = {};
|
||||||
|
$thispkg->{depends} = [];
|
||||||
|
|
||||||
|
open(PACKAGES, "$pkgdir/$package_file")
|
||||||
|
or die("Cant open packages file");
|
||||||
|
|
||||||
|
while (<PACKAGES>) {
|
||||||
|
chomp;
|
||||||
|
|
||||||
|
if ($_ eq '' && $thispkg->{name}) {
|
||||||
|
bless $thispkg;
|
||||||
|
$packages{$thispkg->{name}} = $thispkg;
|
||||||
|
$thispkg = {};
|
||||||
|
$thispkg->{depends} = [];
|
||||||
|
|
||||||
|
} elsif (/^\w+\:/) {
|
||||||
|
my ($var, $val) = /^(\w+)\:\s*(.*)/;
|
||||||
|
|
||||||
|
if ($var eq 'Package') {
|
||||||
|
$thispkg->{name} = $val;
|
||||||
|
} elsif ($var eq 'Filename') {
|
||||||
|
$thispkg->{file} = $val;
|
||||||
|
} elsif ($var eq 'Version') {
|
||||||
|
$thispkg->{version} = $val;
|
||||||
|
} elsif ($var eq 'MD5sum') {
|
||||||
|
$thispkg->{md5} = $val;
|
||||||
|
} elsif ($var eq 'Size') {
|
||||||
|
$thispkg->{filesize} = $val;
|
||||||
|
} elsif ($var eq 'Description') {
|
||||||
|
if ($thispkg->{description}) {
|
||||||
|
$thispkg->{longdesc} .= "$val\n";
|
||||||
|
} else {
|
||||||
|
$thispkg->{description} = $val;
|
||||||
|
}
|
||||||
|
} elsif ($var eq 'Depend') {
|
||||||
|
my $deppkg = $packages{$val};
|
||||||
|
my $depends = $thispkg->{depends};
|
||||||
|
|
||||||
|
if (!$deppkg) {
|
||||||
|
die "package not found: $val\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
push @$depends, $deppkg;
|
||||||
|
} else {
|
||||||
|
die "Invalid field: $var\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($thispkg->{name}) {
|
||||||
|
$packages{$thispkg->{name}} = $thispkg;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(PACKAGES);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub pkg_param {
|
||||||
|
my ($desc, $name, $pkg) = @_;
|
||||||
|
|
||||||
|
return if !$pkg->{$name};
|
||||||
|
|
||||||
|
print "<b>$desc:</b> $pkg->{$name} <br>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
packages_load;
|
||||||
|
|
||||||
|
if (param('pkg')) {
|
||||||
|
my $pkg = $packages{param('pkg')};
|
||||||
|
|
||||||
|
die "package not found" if !$pkg;
|
||||||
|
|
||||||
|
print "<h2>$pkg->{name}</h2>\n";
|
||||||
|
|
||||||
|
pkg_param('Version', 'version', $pkg);
|
||||||
|
if ($pkg->{file}) {
|
||||||
|
print "<b>File:</b> ";
|
||||||
|
print "<a href=\"$pkgdir/$pkg->{file}\">$pkg->{file}</a>";
|
||||||
|
print "<br>\n";
|
||||||
|
}
|
||||||
|
pkg_param('File Size', 'filesize', $pkg);
|
||||||
|
pkg_param('File MD5SUM', 'md5', $pkg);
|
||||||
|
pkg_param('Description', 'description', $pkg);
|
||||||
|
|
||||||
|
print $pkg->{longdesc} if $pkg->{longdesc};
|
||||||
|
|
||||||
|
my $depends = $pkg->{depends};
|
||||||
|
|
||||||
|
if (scalar @$depends > 0) {
|
||||||
|
print "<h3>Dependencies</h3>\n";
|
||||||
|
print "<ul>\n";
|
||||||
|
|
||||||
|
foreach (@$depends) {
|
||||||
|
print "<li> ";
|
||||||
|
print "<a href=\"$pkgpage?pkg=$_->{name}\">";
|
||||||
|
print "$_->{name}</a>\n";
|
||||||
|
}
|
||||||
|
print "</ul>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
print "<p> <a href=\"$pkgpage\">back</a>\n";
|
||||||
|
} else {
|
||||||
|
print "<h2>Packages</h2>\n";
|
||||||
|
|
||||||
|
print "The next version of Revol will be package based, using ";
|
||||||
|
print "<a href=\"spkg.shtml\">spkg</a> to build filesystems automatically. ";
|
||||||
|
print "This is a list of packages currently available in the ";
|
||||||
|
print "<a href=\"$pkgdir/\">repository</a>.";
|
||||||
|
print "<ul>\n";
|
||||||
|
foreach(sort(keys %packages)) {
|
||||||
|
print "<li> ";
|
||||||
|
print "<a href=\"$pkgpage?pkg=$_\">$_</a>\n";
|
||||||
|
}
|
||||||
|
print "</ul>\n";
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<!--#include virtual="header"-->
|
||||||
|
|
||||||
|
<!--#exec cmd="./pkglist" -->
|
||||||
|
|
||||||
|
<!--#include virtual="footer"-->
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<!--#include virtual="header"-->
|
||||||
|
|
||||||
|
<h2> Psionconf </h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This is a small PicoGUI application to control various Psion Linux settings.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<center><img src="sshot/psionconf3.png"></center>
|
||||||
|
|
||||||
|
<p align="right"
|
||||||
|
<a href="/cgi-bin/showstats.cgi?fraggle-psionconf">
|
||||||
|
<!--#include virtual="/cgi-bin/stats.cgi?fraggle-psionconf"-->
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>Download</h3>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li> <b> v1.0.0</b>
|
||||||
|
<ul>
|
||||||
|
<li> <a href="psionconf-1.0.0.tar.gz">psionconf-1.0.0.tar.gz</a>
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<!--#include virtual="footer"-->
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<!--#include virtual="header"-->
|
||||||
|
|
||||||
|
<h2> Psionconf </h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This is a small PicoGUI application to control various Psion Linux settings.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<center><img src="sshot/psionconf3.png"></center>
|
||||||
|
|
||||||
|
|
||||||
|
<h3>Download</h3>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li> <b> v1.0.0</b>
|
||||||
|
<ul>
|
||||||
|
<li> <a href="psionconf-1.0.0.tar.gz">psionconf-1.0.0.tar.gz</a>
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<!--#include virtual="footer"-->
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
After Width: | Height: | Size: 40 KiB |
|
@ -0,0 +1,42 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<!--#include virtual="header"-->
|
||||||
|
|
||||||
|
<h2> Shonky Package Manager </h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
spkg is a small package management system I have written for Revol. It
|
||||||
|
works as a "cross compiled" package system. Whereas most package managers
|
||||||
|
run on their target system, this builds the root filesystem automatically
|
||||||
|
on a host system. It is written in perl and is in some ways inspired by
|
||||||
|
debians dpkg.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
I plan to use this system as the base for the next version of Revol.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p align="right"
|
||||||
|
<a href="/cgi-bin/showstats.cgi?fraggle-spkg">
|
||||||
|
<!--#include virtual="/cgi-bin/stats.cgi?fraggle-spkg"-->
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a href="http://freshmeat.net/projects/spkg/">freshmeat page</a>
|
||||||
|
|
||||||
|
<h3>Download</h3>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li> <b> v0.9</b>
|
||||||
|
<ul>
|
||||||
|
<li> <a href="spkg/spkg-0.9.tar.gz">spkg-0.9.tar.gz</a>
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<!--#include virtual="footer"-->
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,127 @@
|
||||||
|
Package: basesystem
|
||||||
|
Filename: basesystem-2.0.tar.gz
|
||||||
|
MD5sum: a52e66e552085985630c596884cff749
|
||||||
|
Size: 2819
|
||||||
|
Description: Base file system files
|
||||||
|
Version: 2.0
|
||||||
|
|
||||||
|
Package: uclibc
|
||||||
|
Filename: uclibc-cvs020321.tar.gz
|
||||||
|
MD5sum: f3b2344e894beda71cfdc15a6c467150
|
||||||
|
Size: 154328
|
||||||
|
Description: The uClibc C library
|
||||||
|
Description: The uClibc C library is a small C library for embedded systems.
|
||||||
|
Description: See http://www.uclibc.org/
|
||||||
|
Version: cvs020321
|
||||||
|
|
||||||
|
Package: busybox
|
||||||
|
Filename: busybox-0.62.2.tar.gz
|
||||||
|
MD5sum: 0e1a2a905af594b3701e9522d8324265
|
||||||
|
Size: 114704
|
||||||
|
Description: The Swiss Army Knife of Embedded Linux
|
||||||
|
Description: BusyBox combines tiny versions of many common UNIX utilities
|
||||||
|
Description: into a single small executable.
|
||||||
|
Description: See http://www.busybox.net/
|
||||||
|
Version: 0.62.2
|
||||||
|
|
||||||
|
Package: picogui
|
||||||
|
Filename: picogui-cvs021009.tar.gz
|
||||||
|
MD5sum: 0be451aa224b7bcbf9437de5b78064d8
|
||||||
|
Size: 237465
|
||||||
|
Description: The PicoGUI window system.
|
||||||
|
Description: PicoGUI is a small flexible GUI originally designed for
|
||||||
|
Description: use on embedded systems.
|
||||||
|
Version: cvs021009
|
||||||
|
|
||||||
|
Package: picogui-games
|
||||||
|
Filename: picogui-games-cvs021009.tar.gz
|
||||||
|
MD5sum: 28cfe02f4762f2442daa6ef01a0dce2a
|
||||||
|
Size: 8792
|
||||||
|
Description: A small collection of games for PicoGUI
|
||||||
|
Depend: picogui
|
||||||
|
Version: cvs021009
|
||||||
|
|
||||||
|
Package: picogui-utils
|
||||||
|
Filename: picogui-utils-cvs021009.tar.gz
|
||||||
|
MD5sum: 5744515d6d57b0f5b3a3c9c5d8ed6629
|
||||||
|
Size: 9558
|
||||||
|
Description: Some small utilities for PicoGUI
|
||||||
|
Depend: picogui
|
||||||
|
Version: cvs021009
|
||||||
|
|
||||||
|
Package: picogui-themes
|
||||||
|
Filename: picogui-themes-cvs021009.tar.gz
|
||||||
|
MD5sum: 502ab63865a82b55150fd38a90db4a36
|
||||||
|
Size: 23225
|
||||||
|
Description: Some extra themes for picogui
|
||||||
|
Depend: picogui
|
||||||
|
Version: cvs021009
|
||||||
|
|
||||||
|
Package: psionconf
|
||||||
|
Filename: psionconf-1.0.0.tar.gz
|
||||||
|
MD5sum: 35989ed9e4ff22654654c041759b7d61
|
||||||
|
Size: 8003
|
||||||
|
Description: Psilinux config utility for PicoGUI
|
||||||
|
Depend: picogui
|
||||||
|
Version: 1.0.0
|
||||||
|
|
||||||
|
Package: sopwith
|
||||||
|
Filename: sopwith-1.5.0.tar.gz
|
||||||
|
MD5sum: 7be25c6e913b2d4219fcbc64cadda4e7
|
||||||
|
Size: 33025
|
||||||
|
Description: Classic biplane shoot 'em up
|
||||||
|
Version: 1.5.0
|
||||||
|
|
||||||
|
Package: irattach
|
||||||
|
Filename: irattach-0.9.13.tar.gz
|
||||||
|
MD5sum: 0e295be75da3daeef4336343367fa371
|
||||||
|
Size: 4635
|
||||||
|
Description: IrDA attach util
|
||||||
|
Description: From the irdautils package.
|
||||||
|
Version: 0.9.13
|
||||||
|
|
||||||
|
Package: slattach
|
||||||
|
Filename: slattach-1.60.tar.gz
|
||||||
|
MD5sum: 80c0a494c4f4b99ef9eae0c1057e2474
|
||||||
|
Size: 6768
|
||||||
|
Description: slattach for SLIP connections
|
||||||
|
Description: From the net-tools package.
|
||||||
|
Version: 1.60
|
||||||
|
|
||||||
|
Package: picotone
|
||||||
|
Filename: picotone-0.2.0.tar.gz
|
||||||
|
MD5sum: b59f6d7962038b4f70850d46250fc882
|
||||||
|
Size: 3461
|
||||||
|
Description: A small DTMF tone dialer for PicoGUI
|
||||||
|
Depend: picogui
|
||||||
|
Version: 0.2.0
|
||||||
|
|
||||||
|
Package: termcap
|
||||||
|
Filename: termcap-2.0.8.tar.gz
|
||||||
|
MD5sum: 71a09ce62a32fa6a5d91bc9ad2673a4e
|
||||||
|
Size: 7195
|
||||||
|
Description: The termcap library providing an API for terminal access
|
||||||
|
Version: 2.0.8
|
||||||
|
|
||||||
|
Package: microemacs
|
||||||
|
Filename: microemacs-0212.tar.gz
|
||||||
|
MD5sum: a5e24114a48a5a44bfc46beb7ec14103
|
||||||
|
Size: 248774
|
||||||
|
Description: Microemacs is a tiny version of the Emacs text editor
|
||||||
|
Depend: termcap
|
||||||
|
Version: 0212
|
||||||
|
|
||||||
|
Package: netcat
|
||||||
|
Filename: netcat-1.10.tar.gz
|
||||||
|
MD5sum: 8a28373b9c046811bf5ad22ce1fce3f8
|
||||||
|
Size: 9353
|
||||||
|
Description: netcat network piping utility
|
||||||
|
Version: 1.10
|
||||||
|
|
||||||
|
Package: tictac
|
||||||
|
Filename: tictac-0.5.tar.gz
|
||||||
|
MD5sum: 71083fbafd40017ee5a5fac6d2c65144
|
||||||
|
Size: 2282
|
||||||
|
Description: tic-tac-toe
|
||||||
|
Version: 0.5
|
||||||
|
|
|
@ -0,0 +1,95 @@
|
||||||
|
Package: basesystem
|
||||||
|
Filename: basesystem-2.0.tar.gz
|
||||||
|
Description: Base file system files
|
||||||
|
Version: 2.0
|
||||||
|
|
||||||
|
Package: uclibc
|
||||||
|
Filename: uclibc-cvs020321.tar.gz
|
||||||
|
Description: The uClibc C library
|
||||||
|
Description: The uClibc C library is a small C library for embedded systems.
|
||||||
|
Description: See http://www.uclibc.org/
|
||||||
|
Version: cvs020321
|
||||||
|
|
||||||
|
Package: busybox
|
||||||
|
Filename: busybox-0.62.2.tar.gz
|
||||||
|
Description: The Swiss Army Knife of Embedded Linux
|
||||||
|
Description: BusyBox combines tiny versions of many common UNIX utilities
|
||||||
|
Description: into a single small executable.
|
||||||
|
Description: See http://www.busybox.net/
|
||||||
|
Version: 0.62.2
|
||||||
|
|
||||||
|
Package: picogui
|
||||||
|
Filename: picogui-cvs021009.tar.gz
|
||||||
|
Description: The PicoGUI window system.
|
||||||
|
Description: PicoGUI is a small flexible GUI originally designed for
|
||||||
|
Description: use on embedded systems.
|
||||||
|
Version: cvs021009
|
||||||
|
|
||||||
|
Package: picogui-games
|
||||||
|
Filename: picogui-games-cvs021009.tar.gz
|
||||||
|
Description: A small collection of games for PicoGUI
|
||||||
|
Depend: picogui
|
||||||
|
Version: cvs021009
|
||||||
|
|
||||||
|
Package: picogui-utils
|
||||||
|
Filename: picogui-utils-cvs021009.tar.gz
|
||||||
|
Description: Some small utilities for PicoGUI
|
||||||
|
Depend: picogui
|
||||||
|
Version: cvs021009
|
||||||
|
|
||||||
|
Package: picogui-themes
|
||||||
|
Filename: picogui-themes-cvs021009.tar.gz
|
||||||
|
Description: Some extra themes for picogui
|
||||||
|
Depend: picogui
|
||||||
|
Version: cvs021009
|
||||||
|
|
||||||
|
Package: psionconf
|
||||||
|
Filename: psionconf-1.0.0.tar.gz
|
||||||
|
Description: Psilinux config utility for PicoGUI
|
||||||
|
Depend: picogui
|
||||||
|
Version: 1.0.0
|
||||||
|
|
||||||
|
Package: sopwith
|
||||||
|
Filename: sopwith-1.5.0.tar.gz
|
||||||
|
Description: Classic biplane shoot 'em up
|
||||||
|
Version: 1.5.0
|
||||||
|
|
||||||
|
Package: irattach
|
||||||
|
Filename: irattach-0.9.13.tar.gz
|
||||||
|
Description: IrDA attach util
|
||||||
|
Description: From the irdautils package.
|
||||||
|
Version: 0.9.13
|
||||||
|
|
||||||
|
Package: slattach
|
||||||
|
Filename: slattach-1.60.tar.gz
|
||||||
|
Description: slattach for SLIP connections
|
||||||
|
Description: From the net-tools package.
|
||||||
|
Version: 1.60
|
||||||
|
|
||||||
|
Package: picotone
|
||||||
|
Filename: picotone-0.2.0.tar.gz
|
||||||
|
Description: A small DTMF tone dialer for PicoGUI
|
||||||
|
Depend: picogui
|
||||||
|
Version: 0.2.0
|
||||||
|
|
||||||
|
Package: termcap
|
||||||
|
Filename: termcap-2.0.8.tar.gz
|
||||||
|
Description: The termcap library providing an API for terminal access
|
||||||
|
Version: 2.0.8
|
||||||
|
|
||||||
|
Package: microemacs
|
||||||
|
Filename: microemacs-0212.tar.gz
|
||||||
|
Description: Microemacs is a tiny version of the Emacs text editor
|
||||||
|
Depend: termcap
|
||||||
|
Version: 0212
|
||||||
|
|
||||||
|
Package: netcat
|
||||||
|
Filename: netcat-1.10.tar.gz
|
||||||
|
Description: netcat network piping utility
|
||||||
|
Version: 1.10
|
||||||
|
|
||||||
|
Package: tictac
|
||||||
|
Filename: tictac-0.5.tar.gz
|
||||||
|
Description: tic-tac-toe
|
||||||
|
Version: 0.5
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
#
|
||||||
|
|
||||||
|
sub get_md5sum {
|
||||||
|
my ($filename) = @_;
|
||||||
|
|
||||||
|
open(MD5PIPE, "md5sum $filename |");
|
||||||
|
|
||||||
|
my $sum = <MD5PIPE>;
|
||||||
|
chomp $sum;
|
||||||
|
|
||||||
|
close(MD5PIPE);
|
||||||
|
|
||||||
|
die if !$sum;
|
||||||
|
|
||||||
|
$sum =~ s/\s.*$//;
|
||||||
|
|
||||||
|
return $sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
open(PKGIN, "Packages.human") or die;
|
||||||
|
open(PKGOUT, ">Packages") or die;
|
||||||
|
|
||||||
|
while (<PKGIN>) {
|
||||||
|
print PKGOUT $_;
|
||||||
|
chomp;
|
||||||
|
|
||||||
|
if (/^Filename\:/) {
|
||||||
|
my ($filename) = /^Filename\:\s*(.*)/;
|
||||||
|
|
||||||
|
die "$filename does not exist!" if !-e $filename;
|
||||||
|
|
||||||
|
my @filestat = stat($filename);
|
||||||
|
|
||||||
|
print PKGOUT "MD5sum: " . get_md5sum($filename) . "\n";
|
||||||
|
print PKGOUT "Size: " . $filestat[7] . "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
close(PKGOUT);
|
||||||
|
close(PKGIN);
|
|
@ -0,0 +1,60 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<!--#include virtual="header"-->
|
||||||
|
|
||||||
|
<h2> Screenshots </h2>
|
||||||
|
|
||||||
|
<img src="sshot/picogui.png" alt="picogui"> <br>
|
||||||
|
<p>
|
||||||
|
PicoGUI running on the Revo
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<img src="sshot/battleship.png" alt="battleship"> <br>
|
||||||
|
<p>
|
||||||
|
Playing PicoGUI battleship
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<img src="sshot/aqua.png" alt="aqua theme"> <br>
|
||||||
|
<p>
|
||||||
|
PicoGUI using the aqua theme
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<img src="sshot/bx.png" alt="BitchX"> <br>
|
||||||
|
<p>
|
||||||
|
Logged on to a remote machine and using BitchX
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<img src="sshot/pine.png" alt="pine"> <br>
|
||||||
|
<p>
|
||||||
|
Logged on to a remote machine and using pine to read mail
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<img src="sshot/omnibar.png" alt="omnibar"> <br>
|
||||||
|
<p>
|
||||||
|
Omnibar running with a menu open showing the list of installed
|
||||||
|
programs.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<img src="sshot/sopwith5.png" alt="sopwith">
|
||||||
|
<p>
|
||||||
|
I ported <a href="http://fraggle.despayre.org:81/stuffage/sopwith/">
|
||||||
|
Sopwith</a> to the revo framebuffer
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<img src="sshot/emacs.png" alt="emacs">
|
||||||
|
<p>
|
||||||
|
This is <a href="http://www.jasspa.com/">microemacs</a> running in a
|
||||||
|
PicoGUI pterm window.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="sshot/">more random screenshots</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!--#include virtual="footer"-->
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.7 KiB |
|
@ -0,0 +1,37 @@
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<img src='aqua.png'><br>
|
||||||
|
<img src='battleship.png'><br>
|
||||||
|
<img src='bx.png'><br>
|
||||||
|
<img src='emacs.png'><br>
|
||||||
|
<img src='fluidity.png'><br>
|
||||||
|
<img src='font_oops.png'><br>
|
||||||
|
<img src='garbled.png'><br>
|
||||||
|
<img src='link1.png'><br>
|
||||||
|
<img src='link2.png'><br>
|
||||||
|
<img src='link3.png'><br>
|
||||||
|
<img src='mp3blaster.png'><br>
|
||||||
|
<img src='omnibar.png'><br>
|
||||||
|
<img src='ouch.png'><br>
|
||||||
|
<img src='picogui.png'><br>
|
||||||
|
<img src='picotone.png'><br>
|
||||||
|
<img src='pine.png'><br>
|
||||||
|
<img src='psionconf.png'><br>
|
||||||
|
<img src='psionconf2.png'><br>
|
||||||
|
<img src='psionconf3.png'><br>
|
||||||
|
<img src='pterm_bx.png'><br>
|
||||||
|
<img src='pterm_bx2.png'><br>
|
||||||
|
<img src='revoblah.png'><br>
|
||||||
|
<img src='sopwith1.png'><br>
|
||||||
|
<img src='sopwith2.png'><br>
|
||||||
|
<img src='sopwith3.png'><br>
|
||||||
|
<img src='sopwith4.png'><br>
|
||||||
|
<img src='sopwith5.png'><br>
|
||||||
|
<img src='sopwith6.png'><br>
|
||||||
|
<img src='sopwith_wide.png'><br>
|
||||||
|
<img src='telnet_insecure.png'><br>
|
||||||
|
<img src='tictac.png'><br>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 865 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 869 B |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 771 B |
After Width: | Height: | Size: 996 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 1.0 KiB |