Minitel.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. /**
  2. * Minitel library for Arduino (v0.1) / May 2013
  3. * http://github.com/01010101/Minitel
  4. *
  5. * By Jerome Saint-Clair aka 01010101
  6. * http://saint-clair.net
  7. *
  8. * For the Graffiti Research Lab France
  9. * http://graffitiresearchlab.fr
  10. *
  11. * Based on works by the Tetalab (Fabrice, Renaud, PG & Phil)
  12. * http://tetalab.org
  13. */
  14. #ifndef Minitel_h
  15. #define Minitel_h
  16. #include "Arduino.h"
  17. #include "SoftwareSerial.h"
  18. // Modes
  19. #define GRAPHIC_MODE 14
  20. #define TEXT_MODE 15
  21. #define HORIZONTAL 0
  22. #define VERTICAL 1
  23. // Cursor moves
  24. #define LEFT 8
  25. #define RIGHT 9
  26. #define DOWN 10
  27. #define UP 11
  28. // Cursor positionning
  29. #define HOME 13
  30. #define LINE_END 24
  31. #define TOP_LEFT 30
  32. #define TOP_RIGHT 1001
  33. #define BOTTOM_LEFT 1002
  34. #define BOTTOM_RIGHT 1003
  35. #define CENTER 1004
  36. // Cursor visibility
  37. // Preceeded by 27
  38. #define CURSOR_SHOW 17
  39. #define CURSOR_HIDE 20
  40. // Clear screen
  41. #define CLEARSCREEN 12
  42. // Font type
  43. // Preceeded by 27
  44. // DOUBLE-HEIGHT and DOUBLE may not work on certain Minitels
  45. #define SIZE_NORMAL 76
  46. #define SIZE_DOUBLE_HEIGHT 77
  47. #define SIZE_DOUBLE_WIDTH 78
  48. #define SIZE_DOUBLE 79
  49. // Colors (+80 for background, +64 for text)
  50. // Preceeded by 27
  51. // 64->71 txt color black, red, green, yellow, blue, magenta, cyan, white
  52. // 80->87 bg color black, red, green, yellow, blue, magenta, cyan, white
  53. #define BLACK 0
  54. #define RED 1
  55. #define GREEN 2
  56. #define YELLOW 3
  57. #define MAGENTA 4
  58. #define BLUE 5
  59. #define CYAN 6
  60. #define WHITE 7
  61. // Blink
  62. // Preceeded by 27
  63. #define BLINK_ON 72
  64. #define BLINK_OFF 73
  65. // Incrustation
  66. // Preceeded by 27
  67. #define INCRUSTATION_ON 75
  68. #define INCRUSTATION_OFF 74
  69. // Underline
  70. #define UNDERLINE_ON 90
  71. #define UNDERLINE_OFF 89
  72. // Underline
  73. #define LINE_MASK_ON 88
  74. #define LINE_MASK_OFF 95
  75. // Video mode
  76. #define VIDEO_INVERT 93
  77. #define VIDEO_STANDARD 92
  78. #define VIDEO_TRANSPARENT 94
  79. // Speeds
  80. #define SPEED_75 0
  81. #define SPEED_300 1
  82. #define SPEED_4800 100
  83. #define SPEED_9600 111 // ??? Minitel 2 ???
  84. // Bip
  85. #define BIP 7
  86. // Accents
  87. #define ACCUTE 65
  88. #define GRAVE 66
  89. #define CIRCUMFLEX 67
  90. #define UMLAUT 72
  91. #define SUB_ARTICLE_SEPARATOR 31;
  92. // Preceeded by 25
  93. #define SPE_CHAR_BOOK 35
  94. #define SPE_CHAR_PARAGRAPH 39
  95. #define SPE_CHAR_ARROW_LEFT 44
  96. #define SPE_CHAR_ARROW_UP 45
  97. #define SPE_CHAR_ARROW_RIGHT 46
  98. #define SPE_CHAR_ARROW_DOWN 47
  99. #define SPE_CHAR_CIRCLE 48
  100. #define SPE_CHAR_MINUS_PLUS 49
  101. #define SPE_CHAR_1_4 60
  102. #define SPE_CHAR_1_2 61
  103. #define SPE_CHAR_3_4 62
  104. #define SPE_CHAR_UPPER_OE 106
  105. #define SPE_CHAR_LOWER_OE 122
  106. #define SPE_CHAR_BETA 123
  107. /*
  108. #define kPause 160
  109. #define k1 177
  110. #define k2 178
  111. #define k3 51
  112. #define k4 180
  113. #define k5 53
  114. #define k6 54
  115. #define k7 183
  116. #define k8 184
  117. #define k9 57
  118. #define k0 48
  119. #define kStar 170
  120. #define kHash 163
  121. #define kComa 172
  122. #define kDot 46
  123. #define kExcl 39
  124. #define kSemi 187
  125. #define kDash 45
  126. #define kColon 58
  127. #define kInterro 63
  128. #define kMenu 147
  129. #define kSomm 198
  130. #define kGuide 68
  131. #define kAnnul 197
  132. #define kCorrect 71
  133. #define kRetour 66
  134. #define kSuite 72
  135. #define kRepet 195
  136. #define kEnvoi 65
  137. #define kA 65
  138. #define kB 66
  139. #define kC 195
  140. #define kD 68
  141. #define kE 197
  142. #define kF 198
  143. #define kG 71
  144. #define kH 72
  145. #define kI 201
  146. #define kJ 202
  147. #define kK 75
  148. #define kL 204
  149. #define kM 77
  150. #define kN 78
  151. #define kO 207
  152. #define kP 80
  153. #define kQ 209
  154. #define kR 210
  155. #define kS 83
  156. #define kT 212
  157. #define kU 85
  158. #define kV 86
  159. #define kW 215
  160. #define kX 216
  161. #define kY 89
  162. #define kZ 90
  163. */
  164. class Minitel : public SoftwareSerial {
  165. private :
  166. //String _characters;
  167. //String _accents;
  168. byte _currentBgColor;
  169. byte _currentTextColor;
  170. byte _currentMode;
  171. byte _currentVideo;
  172. byte _currentSize;
  173. boolean _currentUnderline;
  174. boolean _currentBlink;
  175. boolean _currentShowCursor;
  176. boolean _menuKeyPressed;
  177. void init();
  178. void refreshSettings();
  179. void mode(byte mode);
  180. void cursor(boolean b);
  181. void blink(boolean b);
  182. void pixelate(boolean b);
  183. void video(byte v);
  184. void incrustation(boolean b);
  185. void lineMask(boolean b);
  186. boolean isValidChar(byte index);
  187. boolean isAccent(char c);
  188. boolean printAccentChar(char c);
  189. void printAccent(int index);
  190. char getAccentLetter(int letterIndex);
  191. public :
  192. Minitel();
  193. Minitel(int rx, int tx);
  194. byte getGraphicChar(String s);
  195. void serialprint7(byte b);
  196. void graphic(String s, int x, int y);
  197. void graphic(String s);
  198. void textByte(byte c);
  199. void textByte(byte b, int x, int y);
  200. boolean textChar(byte c);
  201. boolean textChar(byte c, int x, int y);
  202. void text(String s, int x, int y);
  203. void text(String s);
  204. void text(String s, int x, int y, int orientation);
  205. void text(String s, int orientation);
  206. byte getCharByte(char c);
  207. void specialChar(byte c, int x, int y);
  208. void specialChar(byte c);
  209. void repeat(byte n);
  210. void bgColor(byte c);
  211. void textColor(byte c);
  212. void useDefaultColors();
  213. void moveCursorTo(int x, int y);
  214. void moveCursor(byte dir);
  215. void moveCursorTo(byte location);
  216. void moveCursor(byte dir, int n);
  217. void cursor();
  218. void noCursor();
  219. void clearScreen();
  220. void graphicMode();
  221. void textMode();
  222. void blink();
  223. void noBlink();
  224. void charSize(byte type);
  225. void incrustation();
  226. void noIncrustation();
  227. void pixelate();
  228. void noPixelate();
  229. void lineMask();
  230. void noLineMask();
  231. void standardVideo();
  232. void invertVideo();
  233. void transparentVideo();
  234. void setMaxSpeed();
  235. void bip(long duration);
  236. char getKey();
  237. byte getKeyCode();
  238. boolean isMenuKey();
  239. void rect(char c, int x, int y, int w, int h);
  240. void rect(byte c, int x, int y, int w, int h);
  241. void spiral(int x, int y, int siz, int c);
  242. };
  243. #endif