Extended library from C12832 Lib. by Peter Drescher, Chris Styles & Mihail Stoyanov. LCD in the market such as AQM1248A (Akizuki), AD-12864-SPI (antendo), NHD-C12832 (Newhaven), ST7565 (adafruit) and so on

Dependents:   CW_Decoder_using_FFT_on_F446 LPC1114_SPI_LCD_ST7565family_test

Fork of C12832 by Components

Original library is below link.
http://mbed.org/teams/components/code/C12832/
https://mbed.org/users/dreschpe/code/C12832_lcd/

I extended applicable LCD's not only 128 x 32 but also 128 x 48 and 128 x 64 type of SPI LCD using ST7565 controller.
I have checked AD-12864-SPI and AQM1248 LCD.
/media/uploads/kenjiArai/ad-12864-spi_12.png /media/uploads/kenjiArai/aqm12848_2.png

Import programLPC1114_SPI_LCD_ST7565family_test

Controller chip is ST7565

Committer:
kenjiArai
Date:
Sun Sep 21 01:04:42 2014 +0000
Revision:
19:871eed87d8ea
Child:
21:a1fc999cd8f3
Extend not only 128x32(C12832) but also 128x48 & 128x64 Graphic LCD controlled by ST7565 Chip / Changed Lib name from C12832

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 19:871eed87d8ea 1 /*
kenjiArai 19:871eed87d8ea 2 EXTEND for SPI interface LCD which is using ST7565 controller
kenjiArai 19:871eed87d8ea 3 Modified by Kenji Arai / JH1PJL
kenjiArai 19:871eed87d8ea 4 http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 19:871eed87d8ea 5 http://mbed.org/users/kenjiArai/
kenjiArai 19:871eed87d8ea 6 Started: September 20th, 2014
kenjiArai 19:871eed87d8ea 7 Revised: September 21st, 2014
kenjiArai 19:871eed87d8ea 8
kenjiArai 19:871eed87d8ea 9 original file: C12832.h
kenjiArai 19:871eed87d8ea 10 original Library name: C12832
kenjiArai 19:871eed87d8ea 11 */
kenjiArai 19:871eed87d8ea 12
kenjiArai 19:871eed87d8ea 13 //---------- ORIGINAL Header ----------------------------------------------------
kenjiArai 19:871eed87d8ea 14 /* mbed library for the mbed Lab Board 128*32 pixel LCD
kenjiArai 19:871eed87d8ea 15 * use C12832 controller
kenjiArai 19:871eed87d8ea 16 * Copyright (c) 2012 Peter Drescher - DC2PD
kenjiArai 19:871eed87d8ea 17 * Released under the MIT License: http://mbed.org/license/mit
kenjiArai 19:871eed87d8ea 18 *
kenjiArai 19:871eed87d8ea 19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
kenjiArai 19:871eed87d8ea 20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
kenjiArai 19:871eed87d8ea 21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
kenjiArai 19:871eed87d8ea 22 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
kenjiArai 19:871eed87d8ea 23 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 19:871eed87d8ea 24 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
kenjiArai 19:871eed87d8ea 25 * THE SOFTWARE.
kenjiArai 19:871eed87d8ea 26 */
kenjiArai 19:871eed87d8ea 27
kenjiArai 19:871eed87d8ea 28 #ifndef ST7565_SPI_LCD_H
kenjiArai 19:871eed87d8ea 29 #define ST7565_SPI_LCD_H
kenjiArai 19:871eed87d8ea 30
kenjiArai 19:871eed87d8ea 31 #include "mbed.h"
kenjiArai 19:871eed87d8ea 32 #include "GraphicsDisplay.h"
kenjiArai 19:871eed87d8ea 33
kenjiArai 19:871eed87d8ea 34 /** Draw color
kenjiArai 19:871eed87d8ea 35 */
kenjiArai 19:871eed87d8ea 36 enum {WHITE = 0,BLACK};
kenjiArai 19:871eed87d8ea 37
kenjiArai 19:871eed87d8ea 38 /** Draw mode
kenjiArai 19:871eed87d8ea 39 * NORMAl
kenjiArai 19:871eed87d8ea 40 * XOR set pixel by xor the screen
kenjiArai 19:871eed87d8ea 41 */
kenjiArai 19:871eed87d8ea 42 enum {NORMAL,XOR};
kenjiArai 19:871eed87d8ea 43
kenjiArai 19:871eed87d8ea 44 /** Bitmap
kenjiArai 19:871eed87d8ea 45 */
kenjiArai 19:871eed87d8ea 46 struct Bitmap{
kenjiArai 19:871eed87d8ea 47 int xSize;
kenjiArai 19:871eed87d8ea 48 int ySize;
kenjiArai 19:871eed87d8ea 49 int Byte_in_Line;
kenjiArai 19:871eed87d8ea 50 char* data;
kenjiArai 19:871eed87d8ea 51 };
kenjiArai 19:871eed87d8ea 52
kenjiArai 19:871eed87d8ea 53 /** SPI LCD control library for ST7565 Controller
kenjiArai 19:871eed87d8ea 54 * http://www.ladyada.net/learn/lcd/st7565.html
kenjiArai 19:871eed87d8ea 55 *
kenjiArai 19:871eed87d8ea 56 * AD-12864-SPI http://www.aitendo.com/product/1622
kenjiArai 19:871eed87d8ea 57 * AQM12848A http://akizukidenshi.com/catalog/g/gK-07007/
kenjiArai 19:871eed87d8ea 58 *
kenjiArai 19:871eed87d8ea 59 * @code
kenjiArai 19:871eed87d8ea 60 * #include "mbed.h"
kenjiArai 19:871eed87d8ea 61 *
kenjiArai 19:871eed87d8ea 62 * #if 1
kenjiArai 19:871eed87d8ea 63 * ST7565 lcd(dp2, dp6, dp10, dp4, dp9, ST7565::AD12864SPI); // mosi, sck, reset, a0, ncs
kenjiArai 19:871eed87d8ea 64 * #else
kenjiArai 19:871eed87d8ea 65 * SPI spi_lcd(dp2, dp1, dp6); // mosi, miso, sck
kenjiArai 19:871eed87d8ea 66 * ST7565 lcd(spi_lcd, dp10, dp4, dp9, ST7565::AD12864SPI); // spi, reset, a0, ncs
kenjiArai 19:871eed87d8ea 67 * #endif
kenjiArai 19:871eed87d8ea 68 *
kenjiArai 19:871eed87d8ea 69 * int main() {
kenjiArai 19:871eed87d8ea 70 * lcd.cls();
kenjiArai 19:871eed87d8ea 71 * lcd.set_contrast(0x06);
kenjiArai 19:871eed87d8ea 72 * lcd.printf("123456789012345678901234567890\r\n");
kenjiArai 19:871eed87d8ea 73 * lcd.rect(10,10,100,50,BLACK);
kenjiArai 19:871eed87d8ea 74 * lcd.circle(10,10,10,BLACK);
kenjiArai 19:871eed87d8ea 75 * lcd.fillcircle(50,40,10,BLACK);
kenjiArai 19:871eed87d8ea 76 * lcd.line(0,0,110,60,BLACK);
kenjiArai 19:871eed87d8ea 77 * while(1){;}
kenjiArai 19:871eed87d8ea 78 * }
kenjiArai 19:871eed87d8ea 79 * @endcode
kenjiArai 19:871eed87d8ea 80 */
kenjiArai 19:871eed87d8ea 81
kenjiArai 19:871eed87d8ea 82 class ST7565 : public GraphicsDisplay{
kenjiArai 19:871eed87d8ea 83 public:
kenjiArai 19:871eed87d8ea 84
kenjiArai 19:871eed87d8ea 85 /** LCD panel format */
kenjiArai 19:871eed87d8ea 86 enum LCDType {
kenjiArai 19:871eed87d8ea 87 LCD128x32,
kenjiArai 19:871eed87d8ea 88 LCD128x48,
kenjiArai 19:871eed87d8ea 89 LCD128x64,
kenjiArai 19:871eed87d8ea 90 AQM1248A = LCD128x48,
kenjiArai 19:871eed87d8ea 91 AD12864SPI = LCD128x64,
kenjiArai 19:871eed87d8ea 92 ST7565LCD = LCD128x64
kenjiArai 19:871eed87d8ea 93 };
kenjiArai 19:871eed87d8ea 94
kenjiArai 19:871eed87d8ea 95 /**
kenjiArai 19:871eed87d8ea 96 * Create a ST7565 object connected to SPI1
kenjiArai 19:871eed87d8ea 97 */
kenjiArai 19:871eed87d8ea 98 ST7565(PinName mosi, PinName sck,
kenjiArai 19:871eed87d8ea 99 PinName reset, PinName a0, PinName ncs, LCDType type, const char* name = "LCD");
kenjiArai 19:871eed87d8ea 100 ST7565(SPI& _spi,
kenjiArai 19:871eed87d8ea 101 PinName reset, PinName a0, PinName ncs, LCDType type, const char* name = "LCD");
kenjiArai 19:871eed87d8ea 102
kenjiArai 19:871eed87d8ea 103 /**
kenjiArai 19:871eed87d8ea 104 * Get the width of the screen in pixel
kenjiArai 19:871eed87d8ea 105 *
kenjiArai 19:871eed87d8ea 106 * @returns width of screen in pixel
kenjiArai 19:871eed87d8ea 107 *
kenjiArai 19:871eed87d8ea 108 */
kenjiArai 19:871eed87d8ea 109 virtual int width();
kenjiArai 19:871eed87d8ea 110
kenjiArai 19:871eed87d8ea 111 /**
kenjiArai 19:871eed87d8ea 112 * Get the height of the screen in pixel
kenjiArai 19:871eed87d8ea 113 *
kenjiArai 19:871eed87d8ea 114 * @returns height of screen in pixel
kenjiArai 19:871eed87d8ea 115 */
kenjiArai 19:871eed87d8ea 116 virtual int height();
kenjiArai 19:871eed87d8ea 117
kenjiArai 19:871eed87d8ea 118 /**
kenjiArai 19:871eed87d8ea 119 * Draw a pixel at x,y black or white
kenjiArai 19:871eed87d8ea 120 *
kenjiArai 19:871eed87d8ea 121 * @param x horizontal position
kenjiArai 19:871eed87d8ea 122 * @param y vertical position
kenjiArai 19:871eed87d8ea 123 * @param color - 1 set pixel, 0 erase pixel
kenjiArai 19:871eed87d8ea 124 */
kenjiArai 19:871eed87d8ea 125 virtual void pixel(int x, int y,int colour);
kenjiArai 19:871eed87d8ea 126
kenjiArai 19:871eed87d8ea 127 /**
kenjiArai 19:871eed87d8ea 128 * Draw a circle
kenjiArai 19:871eed87d8ea 129 *
kenjiArai 19:871eed87d8ea 130 * @param x0,y0 center
kenjiArai 19:871eed87d8ea 131 * @param r radius
kenjiArai 19:871eed87d8ea 132 * @param color - 1 set pixel, 0 erase pixel
kenjiArai 19:871eed87d8ea 133 */
kenjiArai 19:871eed87d8ea 134 void circle(int x, int y, int r, int colour);
kenjiArai 19:871eed87d8ea 135
kenjiArai 19:871eed87d8ea 136 /**
kenjiArai 19:871eed87d8ea 137 * Draw a filled circle
kenjiArai 19:871eed87d8ea 138 *
kenjiArai 19:871eed87d8ea 139 * @param x0,y0 center
kenjiArai 19:871eed87d8ea 140 * @param r radius
kenjiArai 19:871eed87d8ea 141 * @param color - 1 set pixel, 0 erase pixel
kenjiArai 19:871eed87d8ea 142 *
kenjiArai 19:871eed87d8ea 143 * Use circle with different radius,
kenjiArai 19:871eed87d8ea 144 * Can miss some pixels
kenjiArai 19:871eed87d8ea 145 */
kenjiArai 19:871eed87d8ea 146 void fillcircle(int x, int y, int r, int colour);
kenjiArai 19:871eed87d8ea 147
kenjiArai 19:871eed87d8ea 148 /**
kenjiArai 19:871eed87d8ea 149 * Draw a 1 pixel line
kenjiArai 19:871eed87d8ea 150 *
kenjiArai 19:871eed87d8ea 151 * @param x0,y0 start point
kenjiArai 19:871eed87d8ea 152 * @param x1,y1 stop point
kenjiArai 19:871eed87d8ea 153 * @param color - 1 set pixel, 0 erase pixel
kenjiArai 19:871eed87d8ea 154 */
kenjiArai 19:871eed87d8ea 155 void line(int x0, int y0, int x1, int y1, int colour);
kenjiArai 19:871eed87d8ea 156
kenjiArai 19:871eed87d8ea 157 /**
kenjiArai 19:871eed87d8ea 158 * Draw a rect
kenjiArai 19:871eed87d8ea 159 *
kenjiArai 19:871eed87d8ea 160 * @param x0,y0 top left corner
kenjiArai 19:871eed87d8ea 161 * @param x1,y1 down right corner
kenjiArai 19:871eed87d8ea 162 * @param color - 1 set pixel, 0 erase pixel
kenjiArai 19:871eed87d8ea 163 */
kenjiArai 19:871eed87d8ea 164 void rect(int x0, int y0, int x1, int y1, int colour);
kenjiArai 19:871eed87d8ea 165
kenjiArai 19:871eed87d8ea 166 /**
kenjiArai 19:871eed87d8ea 167 * Draw a filled rect
kenjiArai 19:871eed87d8ea 168 *
kenjiArai 19:871eed87d8ea 169 * @param x0,y0 top left corner
kenjiArai 19:871eed87d8ea 170 * @param x1,y1 down right corner
kenjiArai 19:871eed87d8ea 171 * @param color - 1 set pixel, 0 erase pixel
kenjiArai 19:871eed87d8ea 172 */
kenjiArai 19:871eed87d8ea 173 void fillrect(int x0, int y0, int x1, int y1, int colour);
kenjiArai 19:871eed87d8ea 174
kenjiArai 19:871eed87d8ea 175 /**
kenjiArai 19:871eed87d8ea 176 * set the contrast level
kenjiArai 19:871eed87d8ea 177 */
kenjiArai 19:871eed87d8ea 178 void set_contrast(unsigned int o);
kenjiArai 19:871eed87d8ea 179
kenjiArai 19:871eed87d8ea 180 /**
kenjiArai 19:871eed87d8ea 181 * read the contrast level
kenjiArai 19:871eed87d8ea 182 */
kenjiArai 19:871eed87d8ea 183 unsigned int get_contrast(void);
kenjiArai 19:871eed87d8ea 184
kenjiArai 19:871eed87d8ea 185 /**
kenjiArai 19:871eed87d8ea 186 * Invert the screen
kenjiArai 19:871eed87d8ea 187 *
kenjiArai 19:871eed87d8ea 188 * @param o = 0 normal, 1 invert
kenjiArai 19:871eed87d8ea 189 */
kenjiArai 19:871eed87d8ea 190 void invert(unsigned int o);
kenjiArai 19:871eed87d8ea 191
kenjiArai 19:871eed87d8ea 192 /**
kenjiArai 19:871eed87d8ea 193 * Clear the screen
kenjiArai 19:871eed87d8ea 194 */
kenjiArai 19:871eed87d8ea 195 virtual void cls(void);
kenjiArai 19:871eed87d8ea 196
kenjiArai 19:871eed87d8ea 197 /**
kenjiArai 19:871eed87d8ea 198 * Set the drawing mode
kenjiArai 19:871eed87d8ea 199 *
kenjiArai 19:871eed87d8ea 200 * @param mode NORMAl or XOR
kenjiArai 19:871eed87d8ea 201 */
kenjiArai 19:871eed87d8ea 202 void setmode(int mode);
kenjiArai 19:871eed87d8ea 203
kenjiArai 19:871eed87d8ea 204 /**
kenjiArai 19:871eed87d8ea 205 * Calculate the max number of columns.
kenjiArai 19:871eed87d8ea 206 * Depends on actual font size
kenjiArai 19:871eed87d8ea 207 *
kenjiArai 19:871eed87d8ea 208 * @returns max column
kenjiArai 19:871eed87d8ea 209 */
kenjiArai 19:871eed87d8ea 210 virtual int columns(void);
kenjiArai 19:871eed87d8ea 211
kenjiArai 19:871eed87d8ea 212 /**
kenjiArai 19:871eed87d8ea 213 * calculate the max number of rows
kenjiArai 19:871eed87d8ea 214 *
kenjiArai 19:871eed87d8ea 215 * @returns max rows
kenjiArai 19:871eed87d8ea 216 * depends on actual font size
kenjiArai 19:871eed87d8ea 217 *
kenjiArai 19:871eed87d8ea 218 */
kenjiArai 19:871eed87d8ea 219 virtual int rows(void);
kenjiArai 19:871eed87d8ea 220
kenjiArai 19:871eed87d8ea 221 /**
kenjiArai 19:871eed87d8ea 222 * Draw a character on given position out of the active font to the LCD
kenjiArai 19:871eed87d8ea 223 *
kenjiArai 19:871eed87d8ea 224 * @param x x-position of char (top left)
kenjiArai 19:871eed87d8ea 225 * @param y y-position
kenjiArai 19:871eed87d8ea 226 * @param c char to print
kenjiArai 19:871eed87d8ea 227 */
kenjiArai 19:871eed87d8ea 228 virtual void character(int x, int y, int c);
kenjiArai 19:871eed87d8ea 229
kenjiArai 19:871eed87d8ea 230 /**
kenjiArai 19:871eed87d8ea 231 * Setup cursor position
kenjiArai 19:871eed87d8ea 232 *
kenjiArai 19:871eed87d8ea 233 * @param x x-position (top left)
kenjiArai 19:871eed87d8ea 234 * @param y y-position
kenjiArai 19:871eed87d8ea 235 */
kenjiArai 19:871eed87d8ea 236 virtual void locate(int x, int y);
kenjiArai 19:871eed87d8ea 237
kenjiArai 19:871eed87d8ea 238 /**
kenjiArai 19:871eed87d8ea 239 * Setup auto update of screen
kenjiArai 19:871eed87d8ea 240 *
kenjiArai 19:871eed87d8ea 241 * @param up 1 = on , 0 = off
kenjiArai 19:871eed87d8ea 242 *
kenjiArai 19:871eed87d8ea 243 * if switched off the program has to call copy_to_lcd()
kenjiArai 19:871eed87d8ea 244 * to update screen from framebuffer
kenjiArai 19:871eed87d8ea 245 */
kenjiArai 19:871eed87d8ea 246 void set_auto_up(unsigned int up);
kenjiArai 19:871eed87d8ea 247
kenjiArai 19:871eed87d8ea 248 /**
kenjiArai 19:871eed87d8ea 249 * Get status of the auto update function
kenjiArai 19:871eed87d8ea 250 *
kenjiArai 19:871eed87d8ea 251 * @returns if auto update is on
kenjiArai 19:871eed87d8ea 252 */
kenjiArai 19:871eed87d8ea 253 unsigned int get_auto_up(void);
kenjiArai 19:871eed87d8ea 254
kenjiArai 19:871eed87d8ea 255 /**
kenjiArai 19:871eed87d8ea 256 * Select the font to use
kenjiArai 19:871eed87d8ea 257 *
kenjiArai 19:871eed87d8ea 258 * @param f pointer to font array
kenjiArai 19:871eed87d8ea 259 *
kenjiArai 19:871eed87d8ea 260 * font array can created with GLCD Font Creator from http://www.mikroe.com
kenjiArai 19:871eed87d8ea 261 * you have to add 4 parameter at the beginning of the font array to use:
kenjiArai 19:871eed87d8ea 262 * - the number of byte / char
kenjiArai 19:871eed87d8ea 263 * - the vertial size in pixel
kenjiArai 19:871eed87d8ea 264 * - the horizontal size in pixel
kenjiArai 19:871eed87d8ea 265 * - the number of byte per vertical line
kenjiArai 19:871eed87d8ea 266 * you also have to change the array to char[]
kenjiArai 19:871eed87d8ea 267 */
kenjiArai 19:871eed87d8ea 268 void set_font(unsigned char* f);
kenjiArai 19:871eed87d8ea 269
kenjiArai 19:871eed87d8ea 270 /**
kenjiArai 19:871eed87d8ea 271 * Print bitmap to buffer
kenjiArai 19:871eed87d8ea 272 *
kenjiArai 19:871eed87d8ea 273 * @param bm Bitmap in flash
kenjiArai 19:871eed87d8ea 274 * @param x x start
kenjiArai 19:871eed87d8ea 275 * @param y y start
kenjiArai 19:871eed87d8ea 276 */
kenjiArai 19:871eed87d8ea 277 void print_bm(Bitmap bm, int x, int y);
kenjiArai 19:871eed87d8ea 278
kenjiArai 19:871eed87d8ea 279 #if DOXYGEN_ONLY
kenjiArai 19:871eed87d8ea 280 /**
kenjiArai 19:871eed87d8ea 281 * Write a character to the LCD
kenjiArai 19:871eed87d8ea 282 *
kenjiArai 19:871eed87d8ea 283 * @param c The character to write to the display
kenjiArai 19:871eed87d8ea 284 */
kenjiArai 19:871eed87d8ea 285 int putc(int c);
kenjiArai 19:871eed87d8ea 286
kenjiArai 19:871eed87d8ea 287 /**
kenjiArai 19:871eed87d8ea 288 * Write a formated string to the LCD
kenjiArai 19:871eed87d8ea 289 *
kenjiArai 19:871eed87d8ea 290 * @param format A printf-style format string, followed by the
kenjiArai 19:871eed87d8ea 291 * variables to use in formating the string.
kenjiArai 19:871eed87d8ea 292 */
kenjiArai 19:871eed87d8ea 293 int printf(const char* format, ...);
kenjiArai 19:871eed87d8ea 294 #endif
kenjiArai 19:871eed87d8ea 295
kenjiArai 19:871eed87d8ea 296 unsigned char* font;
kenjiArai 19:871eed87d8ea 297 unsigned int draw_mode;
kenjiArai 19:871eed87d8ea 298
kenjiArai 19:871eed87d8ea 299 protected:
kenjiArai 19:871eed87d8ea 300 /** Vars */
kenjiArai 19:871eed87d8ea 301 SPI _spi;
kenjiArai 19:871eed87d8ea 302 DigitalOut _reset;
kenjiArai 19:871eed87d8ea 303 DigitalOut _A0;
kenjiArai 19:871eed87d8ea 304 DigitalOut _CS;
kenjiArai 19:871eed87d8ea 305
kenjiArai 19:871eed87d8ea 306 void hline(int x0, int x1, int y, int colour);
kenjiArai 19:871eed87d8ea 307 void vline(int y0, int y1, int x, int colour);
kenjiArai 19:871eed87d8ea 308 void lcd_reset();
kenjiArai 19:871eed87d8ea 309 void wr_dat(unsigned char value);
kenjiArai 19:871eed87d8ea 310 void wr_cmd(unsigned char value);
kenjiArai 19:871eed87d8ea 311 void wr_cnt(unsigned char cmd);
kenjiArai 19:871eed87d8ea 312 void line_clear(int y);
kenjiArai 19:871eed87d8ea 313 void copy_to_lcd(void);
kenjiArai 19:871eed87d8ea 314 void initialize(LCDType type);
kenjiArai 19:871eed87d8ea 315
kenjiArai 19:871eed87d8ea 316 virtual int _putc(int value);
kenjiArai 19:871eed87d8ea 317
kenjiArai 19:871eed87d8ea 318 unsigned int lcd_width;
kenjiArai 19:871eed87d8ea 319 unsigned int lcd_height;
kenjiArai 19:871eed87d8ea 320 unsigned int char_x;
kenjiArai 19:871eed87d8ea 321 unsigned int char_y;
kenjiArai 19:871eed87d8ea 322 unsigned char buffer[1024];
kenjiArai 19:871eed87d8ea 323 unsigned int contrast;
kenjiArai 19:871eed87d8ea 324 unsigned int auto_up;
kenjiArai 19:871eed87d8ea 325 };
kenjiArai 19:871eed87d8ea 326
kenjiArai 19:871eed87d8ea 327 #endif