Browse Source

Clean up code examples, update publish list for GD3

James Bowman 6 years ago
parent
commit
73c1ba3e34
4 changed files with 33 additions and 104 deletions
  1. 24 34
      cube.ino
  2. 7 27
      cube2.ino
  3. 1 1
      publish.py
  4. 1 42
      video2.ino

+ 24 - 34
cube.ino

@@ -183,9 +183,9 @@ static void quad(int x1, int y1,
 
   // Set the new bitmap transform
   GD.cmd32(0xffffff21UL); // bitmap transform
-  GD.cmd32(x1); GD.cmd32(y1);
-  GD.cmd32(x2); GD.cmd32(y2);
-  GD.cmd32(x3); GD.cmd32(y3);
+  GD.cmd32(x1 - minx); GD.cmd32(y1 - miny);
+  GD.cmd32(x2 - minx); GD.cmd32(y2 - miny);
+  GD.cmd32(x3 - minx); GD.cmd32(y3 - miny);
 
   GD.cmd32(bx1); GD.cmd32(by1);
   GD.cmd32(bx1); GD.cmd32(by3);
@@ -193,7 +193,7 @@ static void quad(int x1, int y1,
   GD.cmd32(0);
 
   // Draw the quad
-  GD.Vertex2f(0, 0);
+  GD.Vertex2f(PIXELS(minx), PIXELS(miny));
 }
 
 void draw_faces(int dir)
@@ -306,50 +306,41 @@ trackMotion(int x, int y)
 
 /*****************************************************************/
 
+Bitmap background, foreground;
+
 void setup()
 {
-  Serial.begin(1000000);
+  Serial.begin(1000000); // JCB
   GD.begin();
-  GD.cmd_loadimage(0, 0);
-  GD.load("healsky3.jpg");
+
+  background.fromfile("tree.jpg");
+  foreground.fromfile("healsky3.jpg");
+
+  foreground.bind(PICTURE_HANDLE);
   GD.BitmapHandle(PICTURE_HANDLE);
   GD.BitmapSize(NEAREST, BORDER, BORDER, GD.w, GD.h);
+
   startMotion(240, 136);
   trackMotion(247, 138);
-
-  GD.cmd_memwrite(0xf0000U, 4 * (4 + 100));
-  GD.Begin(POINTS);
-  GD.ColorA(20);
-  GD.ColorRGB(0x8B2500UL);
-  GD.BlendFunc(SRC_ALPHA, ONE);
-  for (int i = 0; i < 100; i++) {
-    GD.Vertex2f(GD.random(16 * GD.w), GD.random(16 * GD.h));
-  }
-
-  Serial.print("HSIZE: ");
-  Serial.println(GD.w, DEC);
 }
 
-static byte prev_touching;
-static uint16_t t;
+byte prev_touching;
 
 void loop()
 {
-  GD.Clear();
-  GD.PointSize(16 * 80 + GD.rsin(16 * 20, t << 7));
-  GD.cmd_append(0xf0000U, 4 * (4 + 100));
-
-  GD.RestoreContext();
-
   GD.get_inputs();
-  unsigned long t0 = micros();
 
-  byte touching = (GD.inputs.x != -32768);
-  if (!prev_touching && touching)
+  GD.Clear();
+  GD.SaveContext();         // {
+  GD.ColorRGB(0x605040);
+  background.wallpaper();
+  GD.RestoreContext();      // }
+
+  if (!prev_touching && GD.inputs.touching)
     startMotion(GD.inputs.x, GD.inputs.y);
-  else if (touching)
+  else if (GD.inputs.touching)
     trackMotion(GD.inputs.x, GD.inputs.y);
-  prev_touching = touching;
+  prev_touching = GD.inputs.touching;
 
   if (angle != 0.0f)
     rotation(angle, axis);
@@ -360,6 +351,5 @@ void loop()
   GD.RestoreContext();
 
   GD.swap();
-
-  t++;
+  GD.dumpscreen();
 }

+ 7 - 27
cube2.ino

@@ -184,9 +184,9 @@ static void quad(int x1, int y1,
 
   // Set the new bitmap transform
   GD.cmd32(0xffffff21UL); // bitmap transform
-  GD.cmd32(x1); GD.cmd32(y1);
-  GD.cmd32(x2); GD.cmd32(y2);
-  GD.cmd32(x3); GD.cmd32(y3);
+  GD.cmd32(x1 - minx); GD.cmd32(y1 - miny);
+  GD.cmd32(x2 - minx); GD.cmd32(y2 - miny);
+  GD.cmd32(x3 - minx); GD.cmd32(y3 - miny);
 
   GD.cmd32(bx1); GD.cmd32(by1);
   GD.cmd32(bx1); GD.cmd32(by3);
@@ -194,7 +194,7 @@ static void quad(int x1, int y1,
   GD.cmd32(0);
 
   // Draw the quad
-  GD.Vertex2f(0, 0);
+  GD.Vertex2f(PIXELS(minx), PIXELS(miny));
 }
 
 void draw_faces(int dir)
@@ -359,7 +359,7 @@ GD.finish();
 f0 = millis();
     return 1;
   }
-  int play() {
+  int service() {
     if (r.eof()) {
       return 0;
     } else {
@@ -410,7 +410,6 @@ void setup()
   GD.BitmapHandle(FACE_BACK);
   GD.BitmapSize(NEAREST, BORDER, BORDER, GD.w, GD.h);
   GD.BitmapSource(GD.loadptr);
-  Serial.println(__LINE__);
 
   startMotion(240, 136);
   trackMotion(247, 138);
@@ -421,29 +420,10 @@ byte prev_touching;
 void loop()
 {
   unsigned long t0 = micros();
-  mp.play();
+  mp.service();
   unsigned long took = micros() - t0;
-#if 1
   GD.get_inputs();
-  Serial.print("INPUTS ");
-  byte *bi = (byte*)&GD.inputs;
-  for (size_t i = 0; i < sizeof(GD.inputs); i++) {
-    Serial.print(bi[i], HEX);
-    Serial.print(" ");
-  }
-  Serial.println();
-#else
-  byte *bi = (byte*)&GD.inputs;
-  Serial.write(0xa7);
-  for (size_t i = 0; i < sizeof(GD.inputs); i++) {
-    int s;
-    do {
-      s = Serial.read();
-    } while (s == -1);
-    bi[i] = s;
-  }
-#endif
-  GD.cmd_videoframe(GD.loadptr, 0xefffcUL);
+  GD.cmd_videoframe(GD.loadptr + 4, GD.loadptr);
 
   GD.Clear();
   GD.ColorRGB(48, 48, 90);

+ 1 - 1
publish.py

@@ -12,7 +12,7 @@ inventory = {
     '4.Utilities'   : "viewer radarchart selftest",
     '5.Demos'       : "cobra jnr kenney sprites widgets",
     '6.Games'       : "nightstrike chess frogger",
-    '7.GD3'         : "movie cube2",
+    '7.GD3'         : "video1 video2 cube cube2",
 }
 
 import zipfile

+ 1 - 42
video2.ino

@@ -2,46 +2,6 @@
 #include <SPI.h>
 #include <GD2.h>
 
-MoviePlayer mp;
-
-class Dirsearch {
-  struct dirent de;
-  int index;
-  
-public:
-  char name[13];
-  void begin() {
-    index = 0;
-  }
-  int get(const char *ext) {
-    byte i;
-
-    GD.__end();
-    char e3[3];
-
-    do {
-      GD.SD.rdn((byte*)&de, GD.SD.o_root + index++ * 32, sizeof(de));
-      for (i = 0; i < 3; i++)
-        e3[i] = tolower(de.ext[i]);
-    } while (de.name[0] &&
-             ((de.name[0] & 0x80) || (memcmp(ext, e3, 3) != 0)));
-
-    GD.resume();
-
-    char *pc = name;
-    for (i = 0; i < 8 && de.name[i] != ' '; i++)
-      *pc++ = tolower(de.name[i]);
-    *pc++ = '.';
-    for (i = 0; i < 3 && de.ext[i] != ' '; i++)
-      *pc++ = tolower(de.ext[i]);
-    *pc++ = 0;
-    Serial.println(de.name[0], HEX);
-    Serial.println(name);
-
-    return de.name[0];
-  }
-};
-  
 Dirsearch ds;
 
 char *pickfile(char *ext)
@@ -63,8 +23,6 @@ char *pickfile(char *ext)
   ds.begin();
   for (byte i = 0; i <= (GD.inputs.tag - 1); i++)
     ds.get(ext);
-  Serial.println(GD.inputs.tag);
-  Serial.println(ds.name);
   return ds.name;
 }
 
@@ -83,6 +41,7 @@ void loop()
   GD.cmd_text(GD.w / 2, GD.h / 2 + 30, 31, OPT_CENTER, avi);
   GD.swap();
 
+  MoviePlayer mp;
   mp.begin(avi);
   mp.play();
 }