First quick attempt at an API and demo for the stampdock software of http://stampdock.com/ it demonstrates how to use the stampdock software from an mbed

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
apspijkerman
Date:
Tue Nov 02 15:28:35 2010 +0000
Commit message:
first attempt

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
stampdock.cpp Show annotated file Show diff for this revision Revisions of this file
stampdock.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Nov 02 15:28:35 2010 +0000
@@ -0,0 +1,298 @@
+
+#include "mbed.h"
+#include "stampdock.h"
+
+Stampdock stampdock;
+
+
+
+DigitalOut myled1(LED1);
+DigitalOut myled2(LED2);
+DigitalOut myled3(LED3);
+DigitalOut myled4(LED4);
+
+
+
+void SetLed(int led, int mode)
+{
+   if (led == 0) myled1 = mode;
+   if (led == 1) myled2 = mode;
+   if (led == 2) myled3 = mode;
+   if (led == 3) myled4 = mode;
+}
+
+void Blink(int led)
+{
+   if (led == 0) myled1 = 1;
+   if (led == 1) myled2 = 1;
+   if (led == 2) myled3 = 1;
+   if (led == 3) myled4 = 1;
+   wait(0.1);
+   if (led == 0) myled1 = 0;
+   if (led == 1) myled2 = 0;
+   if (led == 2) myled3 = 0;
+   if (led == 3) myled4 = 0;   
+}
+
+void SetLeds(void)
+{
+   int t;
+
+// flash all leds
+/*
+   for (t = 0; t < 4; t++){
+      SetLed(t, 1);
+   }
+   wait(1);
+   for (t = 0; t < 4; t++){
+      SetLed(t, 0);
+   }   
+*/
+// kitt led test
+   for (t = 0; t < 4; t++){
+      SetLed(t, 1);
+      wait(0.2);
+      SetLed(t, 0);
+   }
+}
+
+void ToggleLed(int led)
+{
+   if (led == 0) myled1 = !myled1;
+   if (led == 1) myled2 = !myled2;
+   if (led == 2) myled3 = !myled3;
+   if (led == 3) myled4 = !myled4;
+   wait(0.25);
+}
+
+
+
+#define boolean int
+
+  // ChanXMode    '0=off, 1=low, 2=high, 3=gnd ?
+ //  Mode          '0=scope,  1=XY,  2=record   (3=off ?)
+
+int main() {
+   boolean ready;    // Bit
+   int   x, s, cnt = 0, ptr, speed = 0;     // Byte
+   int   x1, y1, x2, y2, ecnt = 0;
+   int mem[10];   //  int    [] mem;
+
+   //stampdock *Stampdock = new stampdock();
+
+   //StringBuffer serbuf = new StringBuffer(80);
+
+   //mem      = new int [10];
+
+   //InitStampdock();
+
+   //serial.printf("demo running .. \r\n");
+   stampdock.printf("demo running %d .. \r\n", 123);
+
+
+   for (cnt = 0; cnt < 100; cnt++){
+      stampdock.SetValue(cnt, 0);
+   }
+
+   stampdock.Cmd("!j0,250,0,0;");    // LED 0 to red
+   stampdock.Cmd("!j1,0,250,0;");    // LED 1 to green
+   stampdock.Cmd("!j2,0,0,250;");    // LED 2 to blue
+   stampdock.Cmd("!j3,4;");          // LED 3 to white
+
+   stampdock.Cmd4( 'j', 0, 250, 0, 0 );   // LED 0 to red
+
+   stampdock.SetColor(100,100,200);
+   stampdock.ClearScreen();            // clear graph
+
+   stampdock.SetColor(128,128,228);
+   stampdock.DrawGrid(20,20,29,19,55,12);
+
+   stampdock.SetColor(0,0,0);   // black
+   for (cnt = 0; cnt < 20; cnt++){
+
+      x1 = cnt * 10;
+      y1 = 15;
+
+      stampdock.Plot(x1, y1);
+   }
+
+   for (cnt = 0; cnt < 20; cnt++){
+      x1 = 10 * cnt;
+      x2 = 15 * cnt;
+      y1 = 20;
+      y2 = 40;
+      stampdock.DrawLine(x1,y1,x2,y2);
+   }
+
+   stampdock.Cmd("!f12;");      // set greyscale value 12
+   stampdock.Cmd("!r60,60,100,100;");    // draw rectangle
+
+   stampdock.Cmd("!h10,70;");     // set draw position to home or 10,70
+   stampdock.Cmd("!g50;");        // draw grey pixel and increase
+   stampdock.Cmd("!g100;");       // draw grey pixel and increase
+   stampdock.Cmd("!g150;");       // draw grey pixel and increase
+   stampdock.Cmd("!g200;");       // draw grey pixel and increase
+   stampdock.Cmd("!w10;");        // draw 10 white pixels and increase
+   stampdock.Cmd("!b10;");        // draw 10 black pixels and increase
+
+
+   s = 80;
+   //serbuf.clear();
+   //serbuf.append("!Pb");        // poly line, binary mode
+   //serbuf.append((char)33);     // 33 values follow
+   //serbuf.append((char)20);     // dx=20
+   //serbuf.append((char) 0);     // dy=0 .. so only y values
+   //serbuf.append((char)60);     // x start
+   //serbuf.append((char) s);     // y start
+
+   stampdock.printf("!Pb%c%c%c%c%c", 33, 20, 0, 60, s );
+
+   for (cnt = 0; cnt <= 28; cnt++){
+      x = cnt * cnt;
+      //serbuf.append((char) x  );    // y value of next line
+
+      stampdock.printf("%c", x );
+   }
+
+   //serbuf.append(";");     // end poly line cmd
+   //System.out.print(serbuf.toString());
+   stampdock.print(";");
+
+
+   // do some file access
+
+   stampdock.Cmd("!Otempfile.txt;");    // open file for writing
+   stampdock.Cmd("!e12,24,48,96;");     // write some values
+   stampdock.Cmd("!O;");                // close file
+
+   stampdock.Cmd("?Otempfile.txt;");   // open file for reading
+   stampdock.ReadByte();
+   stampdock.ReadByte();
+   stampdock.ReadByte();
+   s = stampdock.ReadByte();    // read LSB size of file
+   stampdock.printf("file is ");
+   stampdock.printf( "%d", s );
+   stampdock.printf(" bytes.\r\n");
+
+   stampdock.printf("read values: ");
+   for (cnt = 0; cnt < s; cnt++){
+      stampdock.Cmd("?e;");    // read a byte
+      x = stampdock.ReadByte();
+      stampdock.printf( "%d", x );
+      stampdock.printf(",");
+   }
+   stampdock.printf("\r\n");
+   stampdock.Cmd("?O;");    // close file
+   stampdock.ReadByte();
+
+
+   stampdock.printf("ticks is: ");
+   stampdock.Cmd("?t0;");    // request ticks
+   for (cnt = 0; cnt < 4; cnt++){
+      mem[cnt] = (int) stampdock.ReadByte();
+   }
+   for (cnt = 0; cnt < 4; cnt++){
+      stampdock.printf( "%d", mem[cnt] );
+      stampdock.printf(",");
+   }
+   stampdock.printf("\r\n");
+
+
+
+   stampdock.printf("time: y2 y1 mon day hour min sec tic : ");
+   stampdock.Cmd("?t1;");    // request time
+   for (cnt = 0; cnt < 8; cnt++){
+      mem[cnt] = stampdock.ReadByte();
+   }
+   for (cnt = 0; cnt < 8; cnt++){
+      stampdock.printf( "%d", mem[cnt] );
+      stampdock.printf(",");
+   }
+   stampdock.printf("\r\n");
+
+   // for (cnt = 0; cnt < 50; cnt++)
+   // Cmd2( 'G', 20, 1 );          // do "!G20,1;"
+
+
+   stampdock.Cmd("!nThis is a speech test.;");
+
+   stampdock.Cmd("!LThis is a log file test;");
+
+   stampdock.Cmd("!Vmedia/video.mpg;");
+   wait( 1.1 ); // CPU.delay(1000);
+   stampdock.Cmd("!Vmedia/sound.mp3;");
+   wait (1.1); // CPU.delay(1000);
+   stampdock.Cmd("!Vmedia/pic.jpg;");
+
+   while (true){
+      if (ecnt == 2){        // test speed up
+         x = stampdock.GetEvent();
+         ecnt = 0;
+      }else{
+         ecnt++;
+         x = 0;
+      }
+
+      if (x != 0){      // do we have a gui click or event ?
+        ecnt = 0;            // just had an event, so max wait
+        s = stampdock.GetValue(x);     // get value of gui element x
+
+        // now handle GUI element x with value/state s
+        if (x == 1){
+           //mode = s;
+           // clear graph
+           //'DEBUG "!s100,100,200;!c;"    'set blue color , clear screen    17c
+           //DEBUG "!sb",3, 100,100,200, ";!c;"     'fast binary way to set color  
+
+
+           //serial.printf("!s100,100,200;!c;");
+           stampdock.SetColor(100,100,200);
+           stampdock.ClearScreen();
+        } else
+
+        if (x == 10){     // checkmark 0
+           stampdock.SetValue(12, s);    // set checkmark 2
+        } else
+        if (x == 11){     // checkmark 1
+           stampdock.SetValue(13, s);    // set checkmark 3
+        } else
+
+        if (x == 20){     // hor switch 0
+           stampdock.SetValue(21, s);    // set hor switch 1
+        } else
+         if (x == 21){     // hor switch1
+           stampdock.SetValue(20, s);    // set hor switch 0
+        } else
+
+        if (x == 40){     // hor potm 0
+           stampdock.SetValue(41, s);    // hor potm 1
+           stampdock.SetValue(60, s);    // set analog meter
+        } else
+        if (x == 41){     // hor potm 1
+           stampdock.SetValue(40, s);    // hor potm 0
+           stampdock.SetValue(61, s);    // set analog meter
+        } else
+
+         if (x == 100){     // turn knob 0
+           stampdock.SetValue(101, s);    // turn knob 1
+        } else
+        if (x == 101){     // turn knob 1
+           stampdock.SetValue(100, s);    // turn knob 0
+        } else
+
+        if (x == 90){     // button 1
+           stampdock.ScrollLeft();    // scroll left 1 pixel
+        }
+
+
+       }  // if event
+
+       wait(0.1);   // CPU.delay(100);
+
+       // do ..
+
+
+   }   // end while true
+ }       // end main
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue Nov 02 15:28:35 2010 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stampdock.cpp	Tue Nov 02 15:28:35 2010 +0000
@@ -0,0 +1,581 @@
+
+#include "mbed.h"
+#include "stampdock.h"
+#include <stdarg.h>     // var_args
+
+Serial serial(USBTX, USBRX);   // tx, rx     default 9600 8N1
+
+//stampdock *stampdock::instance;
+
+Stampdock::Stampdock(void)
+{
+
+#ifdef qmbed
+   //serial.baud(9600);          // causes error
+   //serial.baud(19200);
+   //serial.format(8,None,1);
+#endif
+#ifdef qarduino
+   serial.begin( 9600 );
+#endif
+
+}
+
+Stampdock::~Stampdock(void)
+{
+
+}
+
+
+int Stampdock::init(void)
+{
+   // set baud ?
+   return 0;
+}
+  
+int Stampdock::print(char *p)
+{
+   serial.printf("%s", p); 
+}
+
+int Stampdock::printf(char *fmt, ... )
+{
+   va_list var_args;
+   char string[256];
+   int len = 0;
+
+   va_start(var_args, fmt);
+   
+   len = vsprintf(string, fmt, var_args);
+   
+   va_end(var_args);
+
+   serial.printf( string );
+
+   return len;
+}
+
+
+
+ int Stampdock::GetEvent(void)
+  {
+      int e = 0, ready = 0, cnt = 0;
+      char v;
+      //  DEBUG "?Q;"     'query for events .. also sync with PC
+      //  SERIN 16, Baud, [x]             '16468
+      //  PAUSE 1   ' millisecs .. let serial bus settle
+
+      serial.printf("?Q;");     // query for event .. also sync with PC
+      do{
+      if (serial.readable()){
+         //v = Serial.read();
+         v = serial.getc();
+
+         e = v;
+         if (e < 0) e += 256;      // signed char to int ?
+
+         //e = (255-v) + 1;   // 2's complement
+
+         //serial.printf("EVENT:");
+         //serial.printf(e);
+         //serial.printf("<-");
+         ready = 1;
+      }else{
+         //serial.printf("no event");
+         wait(0.0001);
+         cnt++;
+         if (cnt == 1000) ready = 1;
+         //Blink(0);
+      }
+      }while(!ready);
+      //CPU.delay(10);
+
+      // .. flush out of sync events ..
+      //while (serial.readable()){
+      if (serial.readable()){
+         // Serial.read();
+         serial.getc();
+         //Blink(1);
+      }
+
+      if (serial.readable()){
+         // Serial.read();
+         serial.getc();
+         //Blink(2);
+      }
+      
+      return e;
+  }
+
+  // request the state of GUI element i
+
+int Stampdock::GetValue(int i)
+  {
+      int e = 0, ready = 0, cnt = 0;
+      char v;
+      //StringBuffer buf=new StringBuffer(12);
+
+      // DEBUG "?i",DEC x,";"      'get state of gui element x
+      // SERIN 16, Baud, [s]             '16468
+      // PAUSE 1   ' millisecs
+
+      //serial.printf("?i");     // query for event
+      //serial.printf(i);
+      //serial.printf(";");
+
+      //buf.clear();
+      //buf.append("?i");
+      //buf.append( i );
+      //buf.append(";");
+      //System.out.print(buf.toString());
+ 
+      serial.printf("?i%d;", i );
+
+      //wait(0.1);         //CPU.delay(1);         // ??
+      do {
+      if (serial.readable()){
+         //v = Serial.read();
+         v = serial.getc();
+
+         e = v;
+         if (e < 0) e += 256;    // signed char to int ?
+
+         //e = (255-v) + 1;   // 2's complement
+         ready = 1;
+      }else{
+         wait(0.0001);
+         cnt++;
+         if (cnt == 1000) ready = 1;
+      }
+      //CPU.delay(10);
+      }while(!ready);
+      return e;
+  }
+
+  // set the state (v) of gui element i
+
+ void Stampdock::SetValue(int i, int v)
+  {
+      //StringBuffer buf=new StringBuffer(16);
+
+      // DEBUG "?i",DEC x,";"      'get state of gui element x
+      // SERIN 16, Baud, [s]             '16468
+      // PAUSE 1   ' millisecs
+
+      //serial.printf("!i");     // set value
+      //serial.printf(i);
+      //serial.printf(",")
+      //serial.printf(v);
+      //serial.printf(";");
+
+      //buf.clear();      // slow ascii method to allow values > 255
+      if (i <= 255){
+         //buf.append("!ib");      // fast binary way
+         //buf.append((char) 2 );  // write 2 bytes
+         //buf.append((char) i );  // write id
+         //buf.append((char) v );  // always smaller als 256
+
+         serial.printf("!ib%c%c%c;", 2 , i , v );
+      }else{
+         //buf.append("!i");   // slow ascii way
+         //buf.append( i );    // in case ID greater as 255
+         //buf.append(",");
+         //buf.append( v );
+
+         serial.printf("!i%d,%d;", i, v);
+      }
+      //buf.append(";");
+      //System.out.print(buf.toString());
+
+      //CPU.delay(1);         // ??
+  }
+
+
+char Stampdock::ReadByte(void)
+  {
+     char v = 0, ready = 0, cnt = 0;
+
+     //wait(0.1);
+     do {
+     if (serial.readable()){
+         //v =  Serial.read();
+         v = serial.getc();
+
+         //e = v;
+         //if (e < 0) e += 256;    // signed char to int ?
+         ready = 1;
+     }else{
+        wait(0.0001);
+        cnt++;
+        if (cnt == 1000) ready = 1;
+     }
+     }while(!ready);
+     return v;
+  }
+
+
+void Stampdock::SetColor(int r, int g, int b)
+  {
+     // StringBuffer buf=new StringBuffer(12);
+
+    if (r == 0 && g == 0 && b == 0){
+      serial.printf("!s;");      // black
+    }else{
+      //buf.clear();
+      //buf.append("!sb");     // fast binary method .. so values <= 255
+      //buf.append((char) 3 ); // write 3 bytes
+      //buf.append((char) r );
+      //buf.append((char) g );
+      //buf.append((char) b );
+      //buf.append(";"      );
+      //System.out.print(buf.toString());
+
+      serial.printf("!sb%c%c%c%c;", 3, r, g, b );
+    }
+      //CPU.delay(1);         // ??
+  }
+
+
+void Stampdock::SetGrey(int g)
+  {
+     // StringBuffer buf=new StringBuffer(12);
+
+    // DEBUG "!fb", 1, dat, ";"
+
+    if (g == 0){
+      //System.out.print("!f;");      // black
+      serial.printf("!f;");      // black
+    }else{
+      //buf.clear();
+      //buf.append("!fb");     // fast binary method .. so values <= 255
+      //buf.append((char) 1 ); // write 3 bytes
+      //buf.append((char) g );
+      //buf.append(";"      );
+      //System.out.print(buf.toString());
+
+
+      serial.printf("!sf%c%c;", 1, g );
+    }
+      //CPU.delay(1);         // ??
+  }
+
+
+
+void Stampdock::SetLED(int i, int r, int g, int b)
+  {
+     // StringBuffer buf=new StringBuffer(12);
+
+      //buf.clear();
+      //buf.append("!jb");     // fast binary method .. so values <= 255
+      //buf.append((char) 4 ); // write 4 bytes
+      //buf.append((char) i );
+      //buf.append((char) r );
+      //buf.append((char) g );
+      //buf.append((char) b );
+      //buf.append(";"      );
+      //System.out.print(buf.toString());
+
+      serial.printf("!jb%c%c%c%c%c;", 4, i, r, g, b );
+
+      //CPU.delay(1);         // ??
+  }
+
+void Stampdock::DrawLine(int x1, int y1, int x2, int y2)
+  {
+      //StringBuffer buf=new StringBuffer(36);
+
+      //if (x1 < 0) x1 = 0;
+      //if (y1 < 0) y1 = 0;
+      //if (x2 < 0) x2 = 0;
+      //if (y2 < 0) y2 = 0;
+
+      //buf.clear();
+      if (x1 >= 0 && x1 <= 255 && y1 >= 0 && y1 <= 255 && x2 >= 0 && x2 <= 255 && y2 
+
+>= 0 && x2 <= 255){
+        //buf.append("!lb");        // fast binary method
+        //buf.append((char) 4  );   // write 4 bytes
+        //buf.append((char) x1 );
+        //buf.append((char) y1 );
+        //buf.append((char) x2 );
+        //buf.append((char) y2 );
+
+        serial.printf("!lb%c%c%c%c%c;", 4, x1, y1, x2, y2 );
+      }else{
+        //buf.append("!l");     // slow method .. so values > 255
+        //buf.append( x1 );
+        //buf.append("," );
+        //buf.append( y1 );
+        //buf.append("," );
+        //buf.append( x2 );
+        //buf.append("," );
+        //buf.append( y2 );
+
+        serial.printf("!l%d,%d,%d,%d;", x1, y1, x2, y2);
+      }
+      //buf.append(";" );
+      //System.out.print(buf.toString());
+
+      //CPU.delay(1);         // ??
+  }
+
+void Stampdock::Plot(int x, int y)
+  {
+      //StringBuffer buf=new StringBuffer(16);
+
+      //if (x < 0) x = 0;
+      //if (y < 0) y = 0;
+
+      //buf.clear();
+      if (x >= 0 && x <= 255 && y >= 0 && y <= 255){
+         //buf.append("!pb");       // fast method .. so values <= 255
+         //buf.append((char) 2  );  // write 2 bytes
+         //buf.append((char) x  );
+         //buf.append((char) y  );
+
+         serial.printf("!pb%c%c%c;", 2, x, y);
+      }else{
+         //buf.append("!p");        // slow method .. so values > 255
+         //buf.append( x  );
+         //buf.append("," );
+         //buf.append( y  );
+
+         serial.printf("!p%d,%d;", x, y);
+      }
+      //buf.append(";" );
+      //System.out.print(buf.toString());
+
+      //CPU.delay(1);         // ??
+  }
+
+
+void Stampdock::DrawGrid(int a, int b, int c, int d, int e, int f)
+  {
+      //StringBuffer buf=new StringBuffer(36);
+
+      //buf.clear();
+      //buf.append("!ab");        // fast binary method
+      //buf.append((char) 6  );   // write 6 bytes
+      //buf.append((char) a  );   // xspace
+      //buf.append((char) b  );   // yspace
+      //buf.append((char) c  );   // xlines
+      //buf.append((char) d  );   // ylines
+      //buf.append((char) e  );   // xoffset
+      //buf.append((char) f  );   // yoffset
+      //buf.append(";" );
+      //System.out.print(buf.toString());
+
+      serial.printf("!ab%c%c%c%c%c%c%c;", 6, a, b, c, d, e, f );
+
+      //CPU.delay(1);         // ??
+  }
+
+void Stampdock::ClearScreen(void)
+  {
+      serial.printf("!c;");
+  }
+
+  // shortcut:     Cmd("!c;");  or Cmd("?O;");
+
+void Stampdock::Cmd(char *p)
+  {
+      serial.printf(p);
+  }
+
+  // for "!nSpeech;" or "!Llog file;"
+
+void Stampdock::CmdStr(char cmd, char *p  )
+  {
+       //buf.clear();
+       //buf.append("!");
+       //buf.append( cmd  );
+       //buf.append( p    );
+       //buf.append(";" );
+       //System.out.print(buf.toString());
+
+       serial.printf("!%c%s;", cmd, p);
+  }
+
+  // cmd with no argument so  Cmd0('s');  = "!s;"
+
+void Stampdock::Cmd0(char cmd  )
+  {
+       //buf.clear();
+       //buf.append("!");
+       //buf.append( cmd  );
+       //buf.append(";" );
+       //System.out.print(buf.toString());
+
+       serial.printf("!%c;", cmd);
+  }
+
+  // request with no arguments
+  // Req0( 'm' );  =  "?m;"
+
+ void Stampdock::Req0(char req  )
+  {
+       //buf.clear();
+       //buf.append("?");
+       //buf.append( req  );
+       //buf.append(";" );
+       //System.out.print(buf.toString());
+
+       serial.printf("?%c;", req );
+  }
+
+  // cmd with 1 arg   Cmd1('a' , 1 );  =  "!a1;"
+
+void Stampdock::Cmd1(char cmd, int arg1 )
+  {
+     //buf.clear();
+     //buf.append("!");
+     //buf.append( cmd  );
+     if (arg1 < 256){
+       //buf.append( 'b'  );      // binary mode
+       //buf.append((char) 1  );  // 1 argument
+       //buf.append((char) arg1 );
+
+       serial.printf("!%cb%c%c;", cmd, 1, arg1 );
+     }else{
+       //buf.append( arg1 );       // slow ascii mode
+
+       serial.printf("!%c%d;", cmd, arg1 );
+    }
+    //buf.append(";" );
+    //System.out.print(buf.toString());
+  }
+
+  // cmd with 2 args    Cmd2('G', 20, 1);  = "!G20,1;"
+  // plot = Cmd2( 'p', x, y );
+
+void Stampdock::Cmd2(char cmd, int arg1, int arg2 )
+  {
+    //buf.clear();
+    //buf.append("!"   );       // !
+    //buf.append( cmd  );
+    if (arg1 < 255 && arg2 < 255){
+       //buf.append( 'b'  );      // binary mode
+       //buf.append((char) 2  );  // 2 arguments
+       //buf.append((char) arg1 );
+       //buf.append((char) arg2 );
+
+       serial.printf("!%cb%c%c%c;", cmd, 2, arg1, arg2 );
+     }else{
+       //buf.append( arg1 );        // slow ascii mode
+       //buf.append(","   );
+       //buf.append( arg2 );
+ 
+       serial.printf("!%c%d,%d;", cmd, arg1, arg2 );
+     }
+     //buf.append(";"   );
+     //System.out.print(buf.toString());
+  }
+
+  // cmd with 3 args
+  // setcolor = Cmd3( 's', r, g, b );
+
+ void Stampdock::Cmd3(char cmd, int arg1, int arg2, int arg3 )
+  {
+    //buf.clear();
+    //buf.append("!"   );       // !
+    //buf.append( cmd  );
+    if (arg1 < 255 && arg2 < 255 && arg3 < 255){
+       //buf.append( 'b'  );      // binary mode
+       //buf.append((char) 3  );  // 3 arguments
+       //buf.append((char) arg1 );
+       //buf.append((char) arg2 );
+       //buf.append((char) arg3 );
+
+       serial.printf("!%cb%c%c%c%c;", cmd, 3, arg1, arg2, arg3 );
+    }else{
+       //buf.append( arg1 );     // slow ascii mode
+       //buf.append(","   );
+       //buf.append( arg2 );
+       //buf.append(","   );
+       //buf.append( arg3 );
+
+       serial.printf("!%c%d,%d,%d;", cmd, arg1, arg2, arg3 );
+     }
+     //buf.append(";"   );
+     //System.out.print(buf.toString());
+  }
+
+  // cmd with 4 args
+  // line = Cmd4( 'l', x1, y1, x2, y2);
+
+void Stampdock::Cmd4(char cmd, int arg1, int arg2, int arg3, int arg4 )
+  {
+    //buf.clear();
+    //buf.append("!"   );       // !
+    //buf.append( cmd  );
+    if (arg1 < 255 && arg2 < 255 && arg3 < 255 && arg4 < 255){
+       //buf.append( 'b'  );      // binary mode
+       //buf.append((char) 4  );  // 4 arguments
+       //buf.append((char) arg1 );
+       //buf.append((char) arg2 );
+       //buf.append((char) arg3 );
+       //buf.append((char) arg4 );
+
+       serial.printf("!%cb%c%c%c%c%c;", cmd, 4, arg1, arg2, arg3, arg4 );
+    }else{
+       //buf.append( arg1 );    // slow ascii mode
+       //buf.append(","   );
+       //buf.append( arg2 );
+       //buf.append(","   );
+       //buf.append( arg3 );
+       //buf.append(","   );
+       //buf.append( arg4 );
+ 
+       serial.printf("!%c%d,%d,%d,%d;", cmd, arg1, arg2, arg3, arg4 );
+    }
+     //buf.append(";"   );
+     //System.out.print(buf.toString());
+  }
+
+  // play video, mp3 or picture
+
+void Stampdock::Media(char *p)
+  {
+       //buf.clear();
+       //buf.append("!V");
+       //buf.append( p );
+       //buf.append(";" );
+       //System.out.print(buf.toString());
+  
+       serial.printf("!V%s;", p);
+  }
+
+void Stampdock::Speech(char *p)
+  {
+       //buf.clear();
+       //buf.append("!n");
+       //buf.append( p );
+       //buf.append(";" );
+       //System.out.print(buf.toString());
+ 
+       serial.printf("!n%s;", p);
+  }
+
+void Stampdock::Log(char *p)
+  {
+       //buf.clear();
+       //buf.append("!L");
+       //buf.append( p );
+       //buf.append(";" );
+       //System.out.print(buf.toString());
+  
+       serial.printf("!L%s;", p);
+ }
+
+ void Stampdock::ScrollLeft()
+ {
+     serial.printf("!G20,1;");
+ }
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stampdock.h	Tue Nov 02 15:28:35 2010 +0000
@@ -0,0 +1,82 @@
+
+
+
+
+#ifndef STAMPDOCK_H
+#define STAMPDOCK_H
+
+#include "mbed.h"
+
+// #define qarduino 1
+#define qmbed  1
+
+class Stampdock {
+public:
+   Stampdock(void);
+  ~Stampdock(void);
+  
+   int init(void);
+  
+   int print(char *p);
+   int printf(char *fmt, ... );
+  
+   int GetEvent(void);
+
+   // request the state of GUI element i
+   int GetValue(int i);
+
+   // set the state (v) of gui element i
+   void SetValue(int i, int v);
+
+   char ReadByte(void);
+
+   void SetColor(int r, int g, int b);
+
+   void SetGrey(int g);
+
+   void SetLED(int i, int r, int g, int b);
+
+   void DrawLine(int x1, int y1, int x2, int y2);
+
+   void Plot(int x, int y);
+
+   void DrawGrid(int a, int b, int c, int d, int e, int f);
+
+   void ClearScreen(void);
+   
+   void Cmd(char *p);   
+   
+   void CmdStr(char cmd, char *p  );
+
+   void Cmd0(char cmd  );
+
+   void Req0(char req  );
+
+   void Cmd1(char cmd, int arg1 );
+
+   void Cmd2(char cmd, int arg1, int arg2 );
+
+   void Cmd3(char cmd, int arg1, int arg2, int arg3 );
+
+   void Cmd4(char cmd, int arg1, int arg2, int arg3, int arg4 );
+
+   void Media(char *p);
+
+   void Speech(char *p);
+
+   void Log(char *p);
+   
+   void ScrollLeft(void);   
+   
+
+private:
+
+    //static stampdock *instance;
+    //Serial _serial;
+
+};
+
+
+
+
+#endif
\ No newline at end of file