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

Revision:
0:5e04d85f928a
--- /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;");
+ }
+
+
+
+
+
+
+
+