video2.ino 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include <EEPROM.h>
  2. #include <SPI.h>
  3. #include <GD2.h>
  4. MoviePlayer mp;
  5. class Dirsearch {
  6. struct dirent de;
  7. int index;
  8. public:
  9. char name[13];
  10. void begin() {
  11. index = 0;
  12. }
  13. int get(const char *ext) {
  14. byte i;
  15. GD.__end();
  16. char e3[3];
  17. do {
  18. GD.SD.rdn((byte*)&de, GD.SD.o_root + index++ * 32, sizeof(de));
  19. for (i = 0; i < 3; i++)
  20. e3[i] = tolower(de.ext[i]);
  21. } while (de.name[0] &&
  22. ((de.name[0] & 0x80) || (memcmp(ext, e3, 3) != 0)));
  23. GD.resume();
  24. char *pc = name;
  25. for (i = 0; i < 8 && de.name[i] != ' '; i++)
  26. *pc++ = tolower(de.name[i]);
  27. *pc++ = '.';
  28. for (i = 0; i < 3 && de.ext[i] != ' '; i++)
  29. *pc++ = tolower(de.ext[i]);
  30. *pc++ = 0;
  31. Serial.println(de.name[0], HEX);
  32. Serial.println(name);
  33. return de.name[0];
  34. }
  35. };
  36. Dirsearch ds;
  37. char *pickfile(char *ext)
  38. {
  39. GD.Clear();
  40. ds.begin();
  41. for (byte i = 0; ds.get(ext); i++) {
  42. int x = (i % 3) * 160;
  43. int y = (i / 3) * 68;
  44. GD.Tag(i + 1);
  45. GD.cmd_button(x, y, 150, 60, 27, OPT_FLAT, ds.name);
  46. }
  47. GD.swap();
  48. do {
  49. GD.get_inputs();
  50. } while (!GD.inputs.tag);
  51. ds.begin();
  52. for (byte i = 0; i <= (GD.inputs.tag - 1); i++)
  53. ds.get(ext);
  54. Serial.println(GD.inputs.tag);
  55. Serial.println(ds.name);
  56. return ds.name;
  57. }
  58. void setup()
  59. {
  60. Serial.begin(1000000); // JCB
  61. GD.begin();
  62. }
  63. void loop()
  64. {
  65. char *avi = pickfile("avi");
  66. GD.Clear();
  67. GD.cmd_text(GD.w / 2, GD.h / 2 - 30, 31, OPT_CENTER, "playing");
  68. GD.cmd_text(GD.w / 2, GD.h / 2 + 30, 31, OPT_CENTER, avi);
  69. GD.swap();
  70. mp.begin(avi);
  71. mp.play();
  72. }