for CountupNumber_sample3

MIP8F_SPI_Ver7.0

Ver7.0 Addtional function is SpeedMeter Sample for 4.4" MIP8F Display (Japan Display Inc)

Committer:
JDI_Mbed_Team
Date:
Wed Jan 09 01:20:53 2019 +0000
Revision:
7:4829ba349d31
Parent:
5:8cc8e00fed46
MIP8F_SPI_Ver70

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JDI_Mbed_Team 0:b2d46804658c 1 /**
JDI_Mbed_Team 0:b2d46804658c 2 * @file MIP8F_SPI.cpp
JDI_Mbed_Team 5:8cc8e00fed46 3 * @brief ver5.0 Library source code file: Class for JDI MIP8 display
JDI_Mbed_Team 0:b2d46804658c 4 * @details
JDI_Mbed_Team 5:8cc8e00fed46 5 * Ver5.0 Addtional function is checking the refresh display speed between 4bit,3bit and 1bit transfer mode
JDI_Mbed_Team 3:c67b96404016 6 * Ver4.0 Addtional function is Line buffer version
JDI_Mbed_Team 3:c67b96404016 7 * Ver3.0 Addtional function is font display
JDI_Mbed_Team 3:c67b96404016 8 * ver2.0 Addtional function is Monochome display by 1bit mode of SPI transfer.
JDI_Mbed_Team 3:c67b96404016 9 *
JDI_Mbed_Team 5:8cc8e00fed46 10 * spi-transfer to Display has 3 mode.
JDI_Mbed_Team 5:8cc8e00fed46 11 * 4bit mode is color display, this bit arrange is R,G,B,x. R,G,B = R,G,B subpixel bit. x bit is Dummy.
JDI_Mbed_Team 5:8cc8e00fed46 12 * 3bit mode is color display, this bit arrange is R,G,B. R,G,B = R,G,B subpixel bit. No bit is Dummy.
JDI_Mbed_Team 5:8cc8e00fed46 13 * 1bit mode is monocrome display,high speed refresh mode. a only Green subpixel of bitmap data is transfered.
JDI_Mbed_Team 5:8cc8e00fed46 14 *
JDI_Mbed_Team 3:c67b96404016 15 * <license>
JDI_Mbed_Team 0:b2d46804658c 16 * Copyright 2018 Japan Display Inc.
JDI_Mbed_Team 0:b2d46804658c 17 * Licensed under the Apache License, Version 2.0 (the "License");
JDI_Mbed_Team 0:b2d46804658c 18 * you may not use this file except in compliance with the License.
JDI_Mbed_Team 0:b2d46804658c 19 * You may obtain a copy of the License at
JDI_Mbed_Team 0:b2d46804658c 20 * http://www.apache.org/licenses/LICENSE-2.0
JDI_Mbed_Team 0:b2d46804658c 21 * Unless required by applicable law or agreed to in writing, software
JDI_Mbed_Team 0:b2d46804658c 22 * distributed under the License is distributed on an "AS IS" BASIS,
JDI_Mbed_Team 0:b2d46804658c 23 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
JDI_Mbed_Team 0:b2d46804658c 24 * See the License for the specific language governing permissions and
JDI_Mbed_Team 0:b2d46804658c 25 * limitations under the License.
JDI_Mbed_Team 0:b2d46804658c 26 */
JDI_Mbed_Team 0:b2d46804658c 27
JDI_Mbed_Team 0:b2d46804658c 28 #include "mbed.h"
JDI_Mbed_Team 0:b2d46804658c 29 #include "MIP8F_SPI.h"
JDI_Mbed_Team 0:b2d46804658c 30
JDI_Mbed_Team 0:b2d46804658c 31 // for debug
JDI_Mbed_Team 7:4829ba349d31 32 Serial pc2(USBTX, USBRX); // tx, rx
JDI_Mbed_Team 0:b2d46804658c 33
JDI_Mbed_Team 0:b2d46804658c 34 memLCD8::memLCD8(PinName mosi,PinName miso,PinName sclk,PinName cs,PinName disp,PinName power)
JDI_Mbed_Team 0:b2d46804658c 35 : _spi(mosi, miso, sclk),_cs(cs),_disp(disp),_power(power)
JDI_Mbed_Team 0:b2d46804658c 36 {
JDI_Mbed_Team 0:b2d46804658c 37
JDI_Mbed_Team 0:b2d46804658c 38 _power= 0;
JDI_Mbed_Team 0:b2d46804658c 39 _disp= 0;
JDI_Mbed_Team 0:b2d46804658c 40 _cs = 0;
JDI_Mbed_Team 0:b2d46804658c 41 wait_us(100);
JDI_Mbed_Team 0:b2d46804658c 42
JDI_Mbed_Team 0:b2d46804658c 43 _power= 1;
JDI_Mbed_Team 0:b2d46804658c 44 _spi.format(8,0); // 8bit mode3
JDI_Mbed_Team 0:b2d46804658c 45 _spi.frequency(2000000); // 2 Mhz SPI clock
JDI_Mbed_Team 0:b2d46804658c 46 _spi.write(0x00); // mbed dummy
JDI_Mbed_Team 0:b2d46804658c 47
JDI_Mbed_Team 0:b2d46804658c 48 /*
JDI_Mbed_Team 0:b2d46804658c 49 _cs = 1;
JDI_Mbed_Team 0:b2d46804658c 50 command(0x02); // All crear mode
JDI_Mbed_Team 0:b2d46804658c 51 _cs = 0;
JDI_Mbed_Team 0:b2d46804658c 52 */
JDI_Mbed_Team 2:944f2968c19f 53 _FixedFontWidth=0;//setting:actual font width display if _FixedFontWidth !=1: font fixed witdh
JDI_Mbed_Team 7:4829ba349d31 54 #if MOVIEBUFF_MODE
JDI_Mbed_Team 7:4829ba349d31 55 //movie_height = 80;
JDI_Mbed_Team 7:4829ba349d31 56 //movie_width = 80;
JDI_Mbed_Team 7:4829ba349d31 57 _height = 240;
JDI_Mbed_Team 7:4829ba349d31 58 _width = 400;
JDI_Mbed_Team 7:4829ba349d31 59 #endif
JDI_Mbed_Team 0:b2d46804658c 60 }
JDI_Mbed_Team 0:b2d46804658c 61
JDI_Mbed_Team 0:b2d46804658c 62 /**
JDI_Mbed_Team 0:b2d46804658c 63 * @brief set font name
JDI_Mbed_Team 0:b2d46804658c 64 */
JDI_Mbed_Team 0:b2d46804658c 65 void memLCD8::set_font(unsigned char* f)
JDI_Mbed_Team 0:b2d46804658c 66 {
JDI_Mbed_Team 0:b2d46804658c 67 font = f;
JDI_Mbed_Team 0:b2d46804658c 68 }
JDI_Mbed_Team 0:b2d46804658c 69
JDI_Mbed_Team 0:b2d46804658c 70 /**
JDI_Mbed_Team 2:944f2968c19f 71 * @brief set allocation for font display
JDI_Mbed_Team 0:b2d46804658c 72 */
JDI_Mbed_Team 0:b2d46804658c 73 void memLCD8::locate(int x, int y)
JDI_Mbed_Team 0:b2d46804658c 74 {
JDI_Mbed_Team 0:b2d46804658c 75 char_x = x;
JDI_Mbed_Team 0:b2d46804658c 76 char_y = y;
JDI_Mbed_Team 0:b2d46804658c 77 }
JDI_Mbed_Team 2:944f2968c19f 78
JDI_Mbed_Team 0:b2d46804658c 79 /**
JDI_Mbed_Team 3:c67b96404016 80 * @brief setting fixed width between charactor and charctor for font display
JDI_Mbed_Team 2:944f2968c19f 81 */
JDI_Mbed_Team 2:944f2968c19f 82 void memLCD8::set_FixedFontWidth( unsigned char width )
JDI_Mbed_Team 2:944f2968c19f 83 {
JDI_Mbed_Team 2:944f2968c19f 84 _FixedFontWidth = width;
JDI_Mbed_Team 2:944f2968c19f 85 }
JDI_Mbed_Team 3:c67b96404016 86 /**
JDI_Mbed_Team 3:c67b96404016 87 * @brief setting Actual width between charactor and charctor for font display
JDI_Mbed_Team 3:c67b96404016 88 */
JDI_Mbed_Team 2:944f2968c19f 89 void memLCD8::set_ActualFontWidth(void)
JDI_Mbed_Team 2:944f2968c19f 90 {
JDI_Mbed_Team 2:944f2968c19f 91 _FixedFontWidth = 0;
JDI_Mbed_Team 2:944f2968c19f 92 }
JDI_Mbed_Team 3:c67b96404016 93
JDI_Mbed_Team 2:944f2968c19f 94 /**
JDI_Mbed_Team 3:c67b96404016 95 * @brief set Configuration for transfer mode
JDI_Mbed_Team 3:c67b96404016 96 * @param[in] int transfermode : instruction the transfer data size ,4bit,3bit,1bit and some parameter
JDI_Mbed_Team 3:c67b96404016 97 */
JDI_Mbed_Team 3:c67b96404016 98 void memLCD8::SetTransfermode(int transfermode)
JDI_Mbed_Team 3:c67b96404016 99 {
JDI_Mbed_Team 3:c67b96404016 100 switch(transfermode)
JDI_Mbed_Team 3:c67b96404016 101 {
JDI_Mbed_Team 3:c67b96404016 102 case TrBIT4:
JDI_Mbed_Team 3:c67b96404016 103 TrModeCommand = 0x90;
JDI_Mbed_Team 3:c67b96404016 104 TrAdd = 1;
JDI_Mbed_Team 3:c67b96404016 105 TrValNum = 1;
JDI_Mbed_Team 3:c67b96404016 106 break;
JDI_Mbed_Team 3:c67b96404016 107 case TrBIT3:
JDI_Mbed_Team 3:c67b96404016 108 TrModeCommand = 0x80;
JDI_Mbed_Team 3:c67b96404016 109 TrAdd = 4;
JDI_Mbed_Team 3:c67b96404016 110 TrValNum = 3;
JDI_Mbed_Team 3:c67b96404016 111 break;
JDI_Mbed_Team 3:c67b96404016 112 case TrBIT1:
JDI_Mbed_Team 3:c67b96404016 113 TrModeCommand = 0x88;
JDI_Mbed_Team 3:c67b96404016 114 TrAdd = 4;
JDI_Mbed_Team 3:c67b96404016 115 TrValNum = 1;
JDI_Mbed_Team 3:c67b96404016 116 break;
JDI_Mbed_Team 3:c67b96404016 117 }
JDI_Mbed_Team 3:c67b96404016 118 }
JDI_Mbed_Team 3:c67b96404016 119
JDI_Mbed_Team 3:c67b96404016 120 /**
JDI_Mbed_Team 3:c67b96404016 121 * @brief set a display size ,width ,height
JDI_Mbed_Team 3:c67b96404016 122 */
JDI_Mbed_Team 3:c67b96404016 123 void memLCD8::setWH(int width, int height)
JDI_Mbed_Team 3:c67b96404016 124 {
JDI_Mbed_Team 3:c67b96404016 125 _width = width;
JDI_Mbed_Team 3:c67b96404016 126 _height = height;
JDI_Mbed_Team 3:c67b96404016 127 }
JDI_Mbed_Team 3:c67b96404016 128
JDI_Mbed_Team 3:c67b96404016 129 /**
JDI_Mbed_Team 3:c67b96404016 130 * @brief set color data of foreground
JDI_Mbed_Team 3:c67b96404016 131 */
JDI_Mbed_Team 3:c67b96404016 132 void memLCD8::foreground(uint8_t colour)
JDI_Mbed_Team 3:c67b96404016 133 {
JDI_Mbed_Team 3:c67b96404016 134 _foreground = colour;
JDI_Mbed_Team 3:c67b96404016 135 }
JDI_Mbed_Team 3:c67b96404016 136
JDI_Mbed_Team 3:c67b96404016 137 /**
JDI_Mbed_Team 3:c67b96404016 138 * @brief set color data of background
JDI_Mbed_Team 3:c67b96404016 139 */
JDI_Mbed_Team 3:c67b96404016 140 void memLCD8::background(uint8_t colour)
JDI_Mbed_Team 3:c67b96404016 141 {
JDI_Mbed_Team 3:c67b96404016 142 _background = colour;
JDI_Mbed_Team 3:c67b96404016 143 }
JDI_Mbed_Team 3:c67b96404016 144
JDI_Mbed_Team 3:c67b96404016 145 /**
JDI_Mbed_Team 3:c67b96404016 146 * @brief set the Diaplay On/Off data
JDI_Mbed_Team 3:c67b96404016 147 */
JDI_Mbed_Team 3:c67b96404016 148 void memLCD8::SwDisp(bool ONorOFF)
JDI_Mbed_Team 3:c67b96404016 149 {
JDI_Mbed_Team 3:c67b96404016 150 _disp= ONorOFF;
JDI_Mbed_Team 3:c67b96404016 151 }
JDI_Mbed_Team 3:c67b96404016 152
JDI_Mbed_Team 3:c67b96404016 153 /**
JDI_Mbed_Team 3:c67b96404016 154 * @brief transfer a command code to the display by SPI
JDI_Mbed_Team 3:c67b96404016 155 */
JDI_Mbed_Team 3:c67b96404016 156 void memLCD8::command(char command)
JDI_Mbed_Team 3:c67b96404016 157 {
JDI_Mbed_Team 3:c67b96404016 158 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 159 _cs = 1;
JDI_Mbed_Team 3:c67b96404016 160 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 161 _spi.write(command);//
JDI_Mbed_Team 3:c67b96404016 162 _spi.write(0x00);// dummy
JDI_Mbed_Team 3:c67b96404016 163 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 164 _cs = 0;
JDI_Mbed_Team 3:c67b96404016 165 }
JDI_Mbed_Team 3:c67b96404016 166
JDI_Mbed_Team 3:c67b96404016 167 /**
JDI_Mbed_Team 3:c67b96404016 168 * @brief putc
JDI_Mbed_Team 3:c67b96404016 169 */
JDI_Mbed_Team 3:c67b96404016 170 int memLCD8::_putc(int value)
JDI_Mbed_Team 3:c67b96404016 171 {
JDI_Mbed_Team 3:c67b96404016 172 if (value == '\n') { // new line
JDI_Mbed_Team 3:c67b96404016 173 char_x = 0;
JDI_Mbed_Team 3:c67b96404016 174 char_y = char_y + font[3];
JDI_Mbed_Team 3:c67b96404016 175 if (char_y >= _height - font[3]) {
JDI_Mbed_Team 3:c67b96404016 176 char_y = 0;
JDI_Mbed_Team 3:c67b96404016 177 }
JDI_Mbed_Team 3:c67b96404016 178 }
JDI_Mbed_Team 3:c67b96404016 179 #if FRAMEBUFF_MODE
JDI_Mbed_Team 3:c67b96404016 180 else {
JDI_Mbed_Team 3:c67b96404016 181 character(char_x, char_y, value);
JDI_Mbed_Team 3:c67b96404016 182 }
JDI_Mbed_Team 3:c67b96404016 183 #endif
JDI_Mbed_Team 3:c67b96404016 184 return value;
JDI_Mbed_Team 3:c67b96404016 185 }
JDI_Mbed_Team 3:c67b96404016 186
JDI_Mbed_Team 3:c67b96404016 187 /**
JDI_Mbed_Team 3:c67b96404016 188 * @brief getc
JDI_Mbed_Team 3:c67b96404016 189 */
JDI_Mbed_Team 3:c67b96404016 190 int memLCD8::_getc()
JDI_Mbed_Team 3:c67b96404016 191 {
JDI_Mbed_Team 3:c67b96404016 192 return -1;
JDI_Mbed_Team 3:c67b96404016 193 }
JDI_Mbed_Team 3:c67b96404016 194 /**
JDI_Mbed_Team 3:c67b96404016 195 * @brief get color data of background
JDI_Mbed_Team 3:c67b96404016 196 */
JDI_Mbed_Team 3:c67b96404016 197 unsigned char memLCD8::get_Background(void)
JDI_Mbed_Team 3:c67b96404016 198 {
JDI_Mbed_Team 3:c67b96404016 199 return _background;
JDI_Mbed_Team 3:c67b96404016 200 }
JDI_Mbed_Team 3:c67b96404016 201 /*
JDI_Mbed_Team 3:c67b96404016 202 void memLCD8::setmarge(bool ifMarge)
JDI_Mbed_Team 3:c67b96404016 203 {
JDI_Mbed_Team 3:c67b96404016 204 _ifMarge = ifMarge;
JDI_Mbed_Team 3:c67b96404016 205 }
JDI_Mbed_Team 3:c67b96404016 206 */
JDI_Mbed_Team 3:c67b96404016 207 //////////////////////////////////////////////////////////////////////////////
JDI_Mbed_Team 3:c67b96404016 208 // line buffer mode
JDI_Mbed_Team 3:c67b96404016 209 //////////////////////////////////////////////////////////////////////////////
JDI_Mbed_Team 3:c67b96404016 210 #if LINEBUFF_MODE
JDI_Mbed_Team 3:c67b96404016 211 /**
JDI_Mbed_Team 3:c67b96404016 212 * @brief Transfer One Pixel Data with x,y allocation Line buffer mode
JDI_Mbed_Team 3:c67b96404016 213 * @param[in] int x : horizontal allocation left to right
JDI_Mbed_Team 3:c67b96404016 214 * @param[in] uint8_t color : the color data for Drawing 0x0X x is color data(RGBC) C is not used
JDI_Mbed_Team 3:c67b96404016 215 */
JDI_Mbed_Team 3:c67b96404016 216 void memLCD8::pixel(int x, uint8_t color)
JDI_Mbed_Team 3:c67b96404016 217 {
JDI_Mbed_Team 3:c67b96404016 218 if(!(x % 2)) _dispLINEBUF[x/2] = _dispLINEBUF[x/2]&0x0F | (color << 4)&0xF0 ; //MASK 0000 1111
JDI_Mbed_Team 3:c67b96404016 219 else _dispLINEBUF[x/2] = _dispLINEBUF[x/2]&0xF0 | (color )&0x0F ; //MASK 1111 0000
JDI_Mbed_Team 3:c67b96404016 220 }
JDI_Mbed_Team 3:c67b96404016 221
JDI_Mbed_Team 3:c67b96404016 222 /**
JDI_Mbed_Team 3:c67b96404016 223 * @brief Transfer Pixel Data from same Line buffer to Display
JDI_Mbed_Team 3:c67b96404016 224 */
JDI_Mbed_Team 3:c67b96404016 225 void memLCD8::writeDISPLinebuffer(void) // refresh whole display
JDI_Mbed_Team 3:c67b96404016 226 {
JDI_Mbed_Team 3:c67b96404016 227
JDI_Mbed_Team 3:c67b96404016 228 char pol = 0;
JDI_Mbed_Team 3:c67b96404016 229 char command = 0x90; // 8b 1*0xNNNN *=POL x=AutoW A 1010
JDI_Mbed_Team 3:c67b96404016 230
JDI_Mbed_Team 3:c67b96404016 231 // frame
JDI_Mbed_Team 3:c67b96404016 232 for (int i=0; i<_height; i++) {
JDI_Mbed_Team 3:c67b96404016 233 // line
JDI_Mbed_Team 3:c67b96404016 234 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 235 _cs = 1;
JDI_Mbed_Team 3:c67b96404016 236 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 237 _spi.write(command | (pol << 6) | (i+1)>>8 ); // COMMAND
JDI_Mbed_Team 3:c67b96404016 238 _spi.write((i+1)& 0x00FF ); // V ADDR
JDI_Mbed_Team 3:c67b96404016 239 for(int j=0; j<_width/2; j++) _spi.write(_dispLINEBUF[j]);
JDI_Mbed_Team 3:c67b96404016 240 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 241 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 242 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 243 _cs = 0;
JDI_Mbed_Team 3:c67b96404016 244 if(pol) pol=0x00;
JDI_Mbed_Team 3:c67b96404016 245 else pol=0x01;
JDI_Mbed_Team 3:c67b96404016 246 }
JDI_Mbed_Team 3:c67b96404016 247 }
JDI_Mbed_Team 3:c67b96404016 248
JDI_Mbed_Team 3:c67b96404016 249 /**
JDI_Mbed_Team 3:c67b96404016 250 * @brief Transfer Pixel Data from line buffer to Display
JDI_Mbed_Team 3:c67b96404016 251 * @param[in] int line : set line number for display.
JDI_Mbed_Team 3:c67b96404016 252 * @param[in] int transfermode : instruction the transfer data size ,4bit,3bit,1bit
JDI_Mbed_Team 3:c67b96404016 253 */
JDI_Mbed_Team 3:c67b96404016 254 void memLCD8::writeDISP(int line,int transfermode) // refresh gate line display
JDI_Mbed_Team 3:c67b96404016 255 {
JDI_Mbed_Team 3:c67b96404016 256
JDI_Mbed_Team 3:c67b96404016 257 char pol = 0;
JDI_Mbed_Team 3:c67b96404016 258 //char command = 0x90; // 8b 1*0xNNNN *=POL x=AutoW A 1010
JDI_Mbed_Team 3:c67b96404016 259 SetTransfermode(transfermode);
JDI_Mbed_Team 3:c67b96404016 260
JDI_Mbed_Team 3:c67b96404016 261 // frame
JDI_Mbed_Team 3:c67b96404016 262 // line
JDI_Mbed_Team 3:c67b96404016 263 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 264 _cs = 1;
JDI_Mbed_Team 3:c67b96404016 265 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 266 _spi.write(TrModeCommand | (pol << 6) | (line+1)>>8 ); // COMMAND
JDI_Mbed_Team 3:c67b96404016 267 //pc2.printf("com 0x%x\n",TrModeCommand | (pol << 6) | (i+1)>>8);
JDI_Mbed_Team 3:c67b96404016 268
JDI_Mbed_Team 3:c67b96404016 269 _spi.write((line+1)& 0x00FF ); // V ADDR
JDI_Mbed_Team 3:c67b96404016 270 //pc2.printf("v adr 0x%x\n",(i+1)& 0x00FF);
JDI_Mbed_Team 3:c67b96404016 271
JDI_Mbed_Team 3:c67b96404016 272 for(int j=0; j<_width; j+=TrAdd)
JDI_Mbed_Team 3:c67b96404016 273 {
JDI_Mbed_Team 3:c67b96404016 274 GetPixelValueFromLineBuffer(j,_dispLINEBUF);
JDI_Mbed_Team 3:c67b96404016 275 //pc2.printf("data=[%d]{%d][%d]/[%d]\n",j*TrAdd,i,TrValue[0],TrAdd);
JDI_Mbed_Team 3:c67b96404016 276 for(int k=0;k<TrValNum;k++)
JDI_Mbed_Team 3:c67b96404016 277 _spi.write(TrValue[k]);
JDI_Mbed_Team 3:c67b96404016 278 }
JDI_Mbed_Team 3:c67b96404016 279 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 280 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 281 // wait_ms(1); //1.8Hz simulation
JDI_Mbed_Team 3:c67b96404016 282 // wait_ms(2); //1.35Hz simulation
JDI_Mbed_Team 3:c67b96404016 283 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 284 _cs = 0;
JDI_Mbed_Team 3:c67b96404016 285 if(pol) pol=0x00;
JDI_Mbed_Team 3:c67b96404016 286 else pol=0x01;
JDI_Mbed_Team 3:c67b96404016 287
JDI_Mbed_Team 3:c67b96404016 288 }
JDI_Mbed_Team 3:c67b96404016 289
JDI_Mbed_Team 3:c67b96404016 290 /**
JDI_Mbed_Team 3:c67b96404016 291 * @brief Get Edited data for SPI transfer from line buffer
JDI_Mbed_Team 3:c67b96404016 292 * @param[in] int x : horizontal allocation left to right
JDI_Mbed_Team 3:c67b96404016 293 * @param[in] uint8_t* buff : buffer data for Display
JDI_Mbed_Team 3:c67b96404016 294 */
JDI_Mbed_Team 3:c67b96404016 295 int* memLCD8::GetPixelValueFromLineBuffer(int _x,uint8_t* buff)
JDI_Mbed_Team 3:c67b96404016 296 {
JDI_Mbed_Team 3:c67b96404016 297 //bitmap data = 4bit data => modify transfer data bit size;
JDI_Mbed_Team 3:c67b96404016 298 switch(TrModeCommand)
JDI_Mbed_Team 3:c67b96404016 299 {
JDI_Mbed_Team 3:c67b96404016 300 case 0x90: //TrBIT4:
JDI_Mbed_Team 3:c67b96404016 301 // buffer 2pixel/1byte => 2pixel/1byte buffe 2byte毎進める。
JDI_Mbed_Team 3:c67b96404016 302 TrValue[0] = _dispLINEBUF[_x];
JDI_Mbed_Team 3:c67b96404016 303 break;
JDI_Mbed_Team 3:c67b96404016 304 case 0x80://TrBIT3:
JDI_Mbed_Team 3:c67b96404016 305 // buffer 2pixel/1byte => 3pixel-1subpixel/1bye (24 pixel/3byte) buffer 3byte毎進める。
JDI_Mbed_Team 3:c67b96404016 306 for(int j=0;j<3;j++) TrValue[j] = 0;
JDI_Mbed_Team 3:c67b96404016 307 //for( int i = 0 ; i<12 ; i--)
JDI_Mbed_Team 3:c67b96404016 308 {
JDI_Mbed_Team 3:c67b96404016 309 //4 bit RGBN(Nは予備) => 3bit RGB
JDI_Mbed_Team 3:c67b96404016 310 if( _width/2 > _x )
JDI_Mbed_Team 3:c67b96404016 311 {
JDI_Mbed_Team 3:c67b96404016 312 TrValue[0] = TrValue[0] | ( ( (_dispLINEBUF[_x ]&0xE0) ) );
JDI_Mbed_Team 3:c67b96404016 313 TrValue[0] = TrValue[0] | ( ( (_dispLINEBUF[_x ]&0x0E) ) << 1);
JDI_Mbed_Team 3:c67b96404016 314 }
JDI_Mbed_Team 3:c67b96404016 315 if( _width/2 > _x + 1 )
JDI_Mbed_Team 3:c67b96404016 316 {
JDI_Mbed_Team 3:c67b96404016 317 TrValue[0] = TrValue[0] | ( ( (_dispLINEBUF[_x + 1]&0xC0) ) >> 6);
JDI_Mbed_Team 3:c67b96404016 318
JDI_Mbed_Team 3:c67b96404016 319 TrValue[1] = TrValue[1] | ( ( (_dispLINEBUF[_x + 1]&0x20) ) << 2);
JDI_Mbed_Team 3:c67b96404016 320 TrValue[1] = TrValue[1] | ( ( (_dispLINEBUF[_x + 1]&0x0E) ) << 3);
JDI_Mbed_Team 3:c67b96404016 321 }
JDI_Mbed_Team 3:c67b96404016 322 if( _width/2 > _x + 2 )
JDI_Mbed_Team 3:c67b96404016 323 {
JDI_Mbed_Team 3:c67b96404016 324 TrValue[1] = TrValue[1] | ( ( (_dispLINEBUF[ _x + 2]&0xE0) ) >> 4);
JDI_Mbed_Team 3:c67b96404016 325 TrValue[1] = TrValue[1] | ( ( (_dispLINEBUF[ _x + 2]&0x08) ) >> 3);
JDI_Mbed_Team 3:c67b96404016 326
JDI_Mbed_Team 3:c67b96404016 327 TrValue[2] = TrValue[2] | ( ( (_dispLINEBUF[_x + 2]&0x06) ) << 5);
JDI_Mbed_Team 3:c67b96404016 328 }
JDI_Mbed_Team 3:c67b96404016 329 if( _width/2 > _x + 3 )
JDI_Mbed_Team 3:c67b96404016 330 {
JDI_Mbed_Team 3:c67b96404016 331 TrValue[2] = TrValue[2] | ( ( (_dispLINEBUF[ _x + 3]&0xE0) ) >> 2);
JDI_Mbed_Team 3:c67b96404016 332 TrValue[2] = TrValue[2] | ( ( (_dispLINEBUF[_x + 3]&0x0E) ) >> 1);
JDI_Mbed_Team 3:c67b96404016 333 }
JDI_Mbed_Team 3:c67b96404016 334 }
JDI_Mbed_Team 3:c67b96404016 335 break;
JDI_Mbed_Team 3:c67b96404016 336 case 0x88://TrBIT1:
JDI_Mbed_Team 3:c67b96404016 337 // buffer 2pixel/1byte => 8 pixel/1byte buffe 4byte毎進める。
JDI_Mbed_Team 3:c67b96404016 338 for(int j=0;j<3;j++) TrValue[j] = 0;
JDI_Mbed_Team 3:c67b96404016 339 for(int i = 0 ; i<4 ; i++)
JDI_Mbed_Team 3:c67b96404016 340 {
JDI_Mbed_Team 3:c67b96404016 341 //Green bit => monochrome bit
JDI_Mbed_Team 3:c67b96404016 342 if( _width/2 > _x + i )
JDI_Mbed_Team 3:c67b96404016 343 {
JDI_Mbed_Team 3:c67b96404016 344 TrValue[0] = TrValue[0] | ( ( (_dispLINEBUF[_x + i]&0x40) == 0 ? 0 : 1 ) << (7-i*2) );
JDI_Mbed_Team 3:c67b96404016 345 TrValue[0] = TrValue[0] | ( ( (_dispLINEBUF[_x + i]&0x04) == 0 ? 0 : 1 ) << (7-i*2)-1 );
JDI_Mbed_Team 3:c67b96404016 346 //pc2.printf("[%d+%d][%d]<0x%x>\n",_x,i,_y,_dispBUF[_y* _width/2 + _x + i]);
JDI_Mbed_Team 3:c67b96404016 347 }
JDI_Mbed_Team 3:c67b96404016 348 }
JDI_Mbed_Team 3:c67b96404016 349 break;
JDI_Mbed_Team 3:c67b96404016 350 }
JDI_Mbed_Team 3:c67b96404016 351 return TrValue;
JDI_Mbed_Team 3:c67b96404016 352 }
JDI_Mbed_Team 3:c67b96404016 353
JDI_Mbed_Team 3:c67b96404016 354 /**
JDI_Mbed_Team 3:c67b96404016 355 * @brief clear line buffer data by background color data
JDI_Mbed_Team 3:c67b96404016 356 */
JDI_Mbed_Team 3:c67b96404016 357 void memLCD8::clsLINEBUF(void)
JDI_Mbed_Team 3:c67b96404016 358 {
JDI_Mbed_Team 3:c67b96404016 359
JDI_Mbed_Team 3:c67b96404016 360 for (int j=0; j<_width; j++) {
JDI_Mbed_Team 3:c67b96404016 361 pixel(j,_background);
JDI_Mbed_Team 3:c67b96404016 362 }
JDI_Mbed_Team 3:c67b96404016 363 }
JDI_Mbed_Team 3:c67b96404016 364 #endif
JDI_Mbed_Team 3:c67b96404016 365 //////////////////////////////////////////////////////////////////////////////
JDI_Mbed_Team 3:c67b96404016 366 // Frame buffer mode
JDI_Mbed_Team 3:c67b96404016 367 //////////////////////////////////////////////////////////////////////////////
JDI_Mbed_Team 3:c67b96404016 368 #if FRAMEBUFF_MODE
JDI_Mbed_Team 3:c67b96404016 369
JDI_Mbed_Team 3:c67b96404016 370 /**
JDI_Mbed_Team 3:c67b96404016 371 * @brief display the text.
JDI_Mbed_Team 3:c67b96404016 372 * @param[in] int x : horizontal allocation , up-left of text
JDI_Mbed_Team 3:c67b96404016 373 * @param[in] int y : vertical allocation , bottom-right of text
JDI_Mbed_Team 3:c67b96404016 374 * @param[in] char* text : strings
JDI_Mbed_Team 3:c67b96404016 375 */
JDI_Mbed_Team 3:c67b96404016 376 int memLCD8::textout(int x,int y,char* text)
JDI_Mbed_Team 3:c67b96404016 377 {
JDI_Mbed_Team 3:c67b96404016 378 int i=0;
JDI_Mbed_Team 3:c67b96404016 379 char_x = x;
JDI_Mbed_Team 3:c67b96404016 380 char_y = y;
JDI_Mbed_Team 3:c67b96404016 381
JDI_Mbed_Team 3:c67b96404016 382 while(text[i] != 0x00 )
JDI_Mbed_Team 3:c67b96404016 383 {
JDI_Mbed_Team 3:c67b96404016 384 character(char_x, char_y, text[i]);
JDI_Mbed_Team 3:c67b96404016 385 i++;
JDI_Mbed_Team 3:c67b96404016 386 }
JDI_Mbed_Team 3:c67b96404016 387 return text[i];
JDI_Mbed_Team 3:c67b96404016 388 }
JDI_Mbed_Team 3:c67b96404016 389
JDI_Mbed_Team 3:c67b96404016 390 /**
JDI_Mbed_Team 3:c67b96404016 391 * @brief display the oblique text.
JDI_Mbed_Team 3:c67b96404016 392 * @param[in] int x : horizontal allocation , up-left of text
JDI_Mbed_Team 3:c67b96404016 393 * @param[in] int y : vertical allocation , bottom-right of text
JDI_Mbed_Team 3:c67b96404016 394 * @param[in] char* text : strings
JDI_Mbed_Team 3:c67b96404016 395 */
JDI_Mbed_Team 3:c67b96404016 396 int memLCD8::obliqueout(int x,int y,char* text)
JDI_Mbed_Team 3:c67b96404016 397 {
JDI_Mbed_Team 3:c67b96404016 398 int i=0;
JDI_Mbed_Team 3:c67b96404016 399 char_x = x;
JDI_Mbed_Team 3:c67b96404016 400 char_y = y;
JDI_Mbed_Team 3:c67b96404016 401
JDI_Mbed_Team 3:c67b96404016 402 while(text[i] != 0x00 )
JDI_Mbed_Team 3:c67b96404016 403 {
JDI_Mbed_Team 3:c67b96404016 404 oblique(char_x, char_y, text[i]);
JDI_Mbed_Team 3:c67b96404016 405 i++;
JDI_Mbed_Team 3:c67b96404016 406 }
JDI_Mbed_Team 3:c67b96404016 407 return text[i];
JDI_Mbed_Team 3:c67b96404016 408 }
JDI_Mbed_Team 3:c67b96404016 409
JDI_Mbed_Team 3:c67b96404016 410 /**
JDI_Mbed_Team 7:4829ba349d31 411 * @brief display the oblique text.
JDI_Mbed_Team 7:4829ba349d31 412 * @param[in] int x : horizontal allocation , up-left of text
JDI_Mbed_Team 7:4829ba349d31 413 * @param[in] int y : vertical allocation , bottom-right of text
JDI_Mbed_Team 7:4829ba349d31 414 * @param[in] char* text : strings
JDI_Mbed_Team 7:4829ba349d31 415 * @param[in] int rx : a horizontal multiple numbler
JDI_Mbed_Team 7:4829ba349d31 416 * @param[in] int ry : a vertical multiple numbler
JDI_Mbed_Team 7:4829ba349d31 417 */
JDI_Mbed_Team 7:4829ba349d31 418 int memLCD8::obliqueout_multi(int x,int y,char* text,int rx,int ry)
JDI_Mbed_Team 7:4829ba349d31 419 {
JDI_Mbed_Team 7:4829ba349d31 420 int i=0;
JDI_Mbed_Team 7:4829ba349d31 421 char_x = x;
JDI_Mbed_Team 7:4829ba349d31 422 char_y = y;
JDI_Mbed_Team 7:4829ba349d31 423
JDI_Mbed_Team 7:4829ba349d31 424 while(text[i] != 0x00 )
JDI_Mbed_Team 7:4829ba349d31 425 {
JDI_Mbed_Team 7:4829ba349d31 426 oblique_multi(char_x, char_y, text[i],rx,ry);
JDI_Mbed_Team 7:4829ba349d31 427 i++;
JDI_Mbed_Team 7:4829ba349d31 428 }
JDI_Mbed_Team 7:4829ba349d31 429 return text[i];
JDI_Mbed_Team 7:4829ba349d31 430 }
JDI_Mbed_Team 7:4829ba349d31 431
JDI_Mbed_Team 7:4829ba349d31 432
JDI_Mbed_Team 7:4829ba349d31 433 /**
JDI_Mbed_Team 3:c67b96404016 434 * @brief dispay a character by bog font. big font is that "char data" byte size is over 0xff.
JDI_Mbed_Team 3:c67b96404016 435 * @param[in] int x : horizontal allocation , up-left of text
JDI_Mbed_Team 3:c67b96404016 436 * @param[in] int y : vertical allocation , bottom-right of text
JDI_Mbed_Team 3:c67b96404016 437 * @param[in] char c : a charactor.
JDI_Mbed_Team 1:2b85e7edcc4e 438 *
JDI_Mbed_Team 0:b2d46804658c 439 */
JDI_Mbed_Team 2:944f2968c19f 440 void memLCD8::character(int x, int y, int c)
JDI_Mbed_Team 0:b2d46804658c 441 {
JDI_Mbed_Team 0:b2d46804658c 442 unsigned int hor,vert,offset0,offset1,bpl,j,i,b; // T.Okamoto modified, for big font
JDI_Mbed_Team 2:944f2968c19f 443 unsigned int headroffset;// 2018-10-26 added by Y.Saruhashi
JDI_Mbed_Team 0:b2d46804658c 444 unsigned char* zeichen;
JDI_Mbed_Team 0:b2d46804658c 445 unsigned char z,w;
JDI_Mbed_Team 2:944f2968c19f 446
JDI_Mbed_Team 3:c67b96404016 447 if ((c < 32) || (c > 127)) return; // test char range
JDI_Mbed_Team 1:2b85e7edcc4e 448
JDI_Mbed_Team 2:944f2968c19f 449 //for big font
JDI_Mbed_Team 2:944f2968c19f 450 offset0 = font[0]; // bytes / char uppser adress
JDI_Mbed_Team 2:944f2968c19f 451 offset1 = font[1]; // bytes / char lower adress
JDI_Mbed_Team 2:944f2968c19f 452 hor = font[2]; // get hor size of font
JDI_Mbed_Team 2:944f2968c19f 453 vert = font[3]; // get vert size of font
JDI_Mbed_Team 2:944f2968c19f 454 bpl = font[4]; // bytes per line
JDI_Mbed_Team 2:944f2968c19f 455 headroffset = 5;
JDI_Mbed_Team 0:b2d46804658c 456
JDI_Mbed_Team 2:944f2968c19f 457 if (char_x + hor > _width) {
JDI_Mbed_Team 2:944f2968c19f 458 char_x = 0;
JDI_Mbed_Team 2:944f2968c19f 459 char_y = char_y + vert;
JDI_Mbed_Team 2:944f2968c19f 460 if (char_y >= _height - vert) char_y = 0; // original = font[2] T.Okamoto modified, for big font
JDI_Mbed_Team 2:944f2968c19f 461 }
JDI_Mbed_Team 0:b2d46804658c 462
JDI_Mbed_Team 2:944f2968c19f 463 zeichen = &font[(c -32) * (offset0 *256 + offset1) + headroffset]; // start of char bitmap // original = +4 T.Okamoto modified, for big font
JDI_Mbed_Team 1:2b85e7edcc4e 464
JDI_Mbed_Team 2:944f2968c19f 465 if( _FixedFontWidth == 0 ) w = zeichen[0]; // width of actual char
JDI_Mbed_Team 2:944f2968c19f 466 else w = _FixedFontWidth; // fixed width of char
JDI_Mbed_Team 2:944f2968c19f 467
JDI_Mbed_Team 0:b2d46804658c 468 for (j=0; j<vert; j++) { // vert line
JDI_Mbed_Team 0:b2d46804658c 469 for (i=0; i<hor; i++) { // horz line
JDI_Mbed_Team 0:b2d46804658c 470 z = zeichen[bpl * i + ((j & 0xF8) >> 3)+1];
JDI_Mbed_Team 0:b2d46804658c 471 b = 1 << (j & 0x07);
JDI_Mbed_Team 0:b2d46804658c 472 if (( z & b ) != 0x00) pixel(x+i,y+j,_foreground);
JDI_Mbed_Team 0:b2d46804658c 473 else if (_ifMarge == 0) pixel(x+i,y+j,_background);// _background -> _LayerBUF[index];
JDI_Mbed_Team 0:b2d46804658c 474
JDI_Mbed_Team 0:b2d46804658c 475 }
JDI_Mbed_Team 0:b2d46804658c 476 }
JDI_Mbed_Team 0:b2d46804658c 477 if ((w + 2) < hor) char_x += w + 2; // x offset to next char
JDI_Mbed_Team 0:b2d46804658c 478 else char_x += hor;
JDI_Mbed_Team 0:b2d46804658c 479 }
JDI_Mbed_Team 0:b2d46804658c 480
JDI_Mbed_Team 0:b2d46804658c 481 /**
JDI_Mbed_Team 3:c67b96404016 482 * @brief dispay a oblique typte character by big font.
JDI_Mbed_Team 3:c67b96404016 483 * @param[in] int x : horizontal allocation , up-left of text
JDI_Mbed_Team 3:c67b96404016 484 * @param[in] int y : vertical allocation , bottom-right of text
JDI_Mbed_Team 3:c67b96404016 485 * @param[in] char c : a charactor.
JDI_Mbed_Team 2:944f2968c19f 486 */
JDI_Mbed_Team 2:944f2968c19f 487 void memLCD8::oblique(int x, int y, int c)
JDI_Mbed_Team 2:944f2968c19f 488 {
JDI_Mbed_Team 2:944f2968c19f 489 unsigned int hor,vert,offset0,offset1,bpl,j,i,b; // T.Okamoto modified, for big font
JDI_Mbed_Team 2:944f2968c19f 490 unsigned int headroffset;// 2018-10-26 added by Y.Saruhashi
JDI_Mbed_Team 2:944f2968c19f 491 unsigned char* zeichen;
JDI_Mbed_Team 2:944f2968c19f 492 unsigned char z,w;
JDI_Mbed_Team 3:c67b96404016 493 if ((c < 32) || (c > 127)) return; // test char range
JDI_Mbed_Team 2:944f2968c19f 494
JDI_Mbed_Team 2:944f2968c19f 495 //for big font
JDI_Mbed_Team 2:944f2968c19f 496 offset0 = font[0]; // bytes / char uppser adress
JDI_Mbed_Team 2:944f2968c19f 497 offset1 = font[1]; // bytes / char lower adress
JDI_Mbed_Team 2:944f2968c19f 498 hor = font[2]; // get hor size of font
JDI_Mbed_Team 2:944f2968c19f 499 vert = font[3]; // get vert size of font
JDI_Mbed_Team 2:944f2968c19f 500 bpl = font[4]; // bytes per line
JDI_Mbed_Team 2:944f2968c19f 501 headroffset = 5;
JDI_Mbed_Team 2:944f2968c19f 502
JDI_Mbed_Team 2:944f2968c19f 503 int oblique_raio=3; // 3 = 30(%percentage) / 10
JDI_Mbed_Team 2:944f2968c19f 504 int shift_x = (hor*oblique_raio)/10; //oblique pixel x size, top of char;
JDI_Mbed_Team 2:944f2968c19f 505 int shift_y = vert / shift_x; //oblique ratio for vertical.
JDI_Mbed_Team 2:944f2968c19f 506
JDI_Mbed_Team 2:944f2968c19f 507 if (char_x + hor > _width) {
JDI_Mbed_Team 2:944f2968c19f 508 char_x = 0;
JDI_Mbed_Team 2:944f2968c19f 509 char_y = char_y + vert;
JDI_Mbed_Team 2:944f2968c19f 510 if (char_y >= _height - vert) char_y = 0;
JDI_Mbed_Team 2:944f2968c19f 511 }
JDI_Mbed_Team 2:944f2968c19f 512
JDI_Mbed_Team 2:944f2968c19f 513 zeichen = &font[(c -32) * (offset0 *256 + offset1) + headroffset];
JDI_Mbed_Team 2:944f2968c19f 514 if( _FixedFontWidth == 0 ) w = zeichen[0]; // actual width of char
JDI_Mbed_Team 2:944f2968c19f 515 else w = _FixedFontWidth; // fixed width of char
JDI_Mbed_Team 2:944f2968c19f 516
JDI_Mbed_Team 2:944f2968c19f 517 for (j=0; j<vert; j++) { // vert line
JDI_Mbed_Team 2:944f2968c19f 518 for (i=0; i<hor; i++) { // horz line
JDI_Mbed_Team 2:944f2968c19f 519 z = zeichen[bpl * i + ((j & 0xF8) >> 3)+1];
JDI_Mbed_Team 2:944f2968c19f 520 b = 1 << (j & 0x07);
JDI_Mbed_Team 2:944f2968c19f 521 if (( z & b ) != 0x00) pixel(x+i+shift_x-(j/shift_y),y+j,_foreground);
JDI_Mbed_Team 2:944f2968c19f 522 else if (_ifMarge == 0) pixel(x+i+shift_x-(j/shift_y),y+j,_background);// _background -> _LayerBUF[index];
JDI_Mbed_Team 2:944f2968c19f 523
JDI_Mbed_Team 2:944f2968c19f 524 }
JDI_Mbed_Team 2:944f2968c19f 525 }
JDI_Mbed_Team 2:944f2968c19f 526 if ((w + 2) < hor) char_x += w + 2; // x offset to next char
JDI_Mbed_Team 2:944f2968c19f 527 else char_x += hor;
JDI_Mbed_Team 2:944f2968c19f 528 }
JDI_Mbed_Team 7:4829ba349d31 529 /**
JDI_Mbed_Team 7:4829ba349d31 530 * @brief dispay a oblique typte character by big font.
JDI_Mbed_Team 7:4829ba349d31 531 * @param[in] int x : horizontal allocation , up-left of text
JDI_Mbed_Team 7:4829ba349d31 532 * @param[in] int y : vertical allocation , bottom-right of text
JDI_Mbed_Team 7:4829ba349d31 533 * @param[in] char c : a charactor.
JDI_Mbed_Team 7:4829ba349d31 534 * @param[in] int rx : a horizontal multiple numbler
JDI_Mbed_Team 7:4829ba349d31 535 * @param[in] int ry : a vertical multiple numbler
JDI_Mbed_Team 7:4829ba349d31 536 */
JDI_Mbed_Team 7:4829ba349d31 537 void memLCD8::oblique_multi(int x, int y, int c,int rx,int ry)
JDI_Mbed_Team 7:4829ba349d31 538 {
JDI_Mbed_Team 7:4829ba349d31 539 unsigned int hor,vert,offset0,offset1,bpl,j,i,b; // T.Okamoto modified, for big font
JDI_Mbed_Team 7:4829ba349d31 540 unsigned int headroffset;// 2018-10-26 added by Y.Saruhashi
JDI_Mbed_Team 7:4829ba349d31 541 unsigned char* zeichen;
JDI_Mbed_Team 7:4829ba349d31 542 unsigned char z,w;
JDI_Mbed_Team 7:4829ba349d31 543 int k,l;
JDI_Mbed_Team 7:4829ba349d31 544
JDI_Mbed_Team 7:4829ba349d31 545 if ((c < 32) || (c > 127)) return; // test char range
JDI_Mbed_Team 7:4829ba349d31 546
JDI_Mbed_Team 7:4829ba349d31 547 //for big font
JDI_Mbed_Team 7:4829ba349d31 548 offset0 = font[0]; // bytes / char uppser adress
JDI_Mbed_Team 7:4829ba349d31 549 offset1 = font[1]; // bytes / char lower adress
JDI_Mbed_Team 7:4829ba349d31 550 hor = font[2]-30; // get hor size of font
JDI_Mbed_Team 7:4829ba349d31 551 vert = font[3]; // get vert size of font
JDI_Mbed_Team 7:4829ba349d31 552 bpl = font[4]; // bytes per line
JDI_Mbed_Team 7:4829ba349d31 553 headroffset = 5;
JDI_Mbed_Team 7:4829ba349d31 554
JDI_Mbed_Team 7:4829ba349d31 555 int oblique_raio=3; // 3 = 30(%percentage) / 10
JDI_Mbed_Team 7:4829ba349d31 556 int shift_x = (hor*oblique_raio)/10; //oblique pixel x size, top of char;
JDI_Mbed_Team 7:4829ba349d31 557 int shift_y = vert / shift_x; //oblique ratio for vertical.
JDI_Mbed_Team 7:4829ba349d31 558
JDI_Mbed_Team 7:4829ba349d31 559 if (char_x + hor > _width) {
JDI_Mbed_Team 7:4829ba349d31 560 char_x = 0;
JDI_Mbed_Team 7:4829ba349d31 561 char_y = char_y + vert;
JDI_Mbed_Team 7:4829ba349d31 562 if (char_y >= _height - vert) char_y = 0;
JDI_Mbed_Team 7:4829ba349d31 563 }
JDI_Mbed_Team 7:4829ba349d31 564
JDI_Mbed_Team 7:4829ba349d31 565 zeichen = &font[(c -32) * (offset0 *256 + offset1) + headroffset];
JDI_Mbed_Team 7:4829ba349d31 566 if( _FixedFontWidth == 0 ) w = zeichen[0]; // actual width of char
JDI_Mbed_Team 7:4829ba349d31 567 else w = _FixedFontWidth; // fixed width of char
JDI_Mbed_Team 7:4829ba349d31 568
JDI_Mbed_Team 7:4829ba349d31 569 for (j=0; j<vert; j++) { // vert line
JDI_Mbed_Team 7:4829ba349d31 570 for (i=0; i<hor; i++) { // horz line
JDI_Mbed_Team 7:4829ba349d31 571 z = zeichen[bpl * i + ((j & 0xF8) >> 3)+1];
JDI_Mbed_Team 7:4829ba349d31 572 b = 1 << (j & 0x07);
JDI_Mbed_Team 7:4829ba349d31 573 if (( z & b ) != 0x00){
JDI_Mbed_Team 7:4829ba349d31 574 //pixel(x+i*rx+shift_x-(j*ry/shift_y) ,y+j*ry ,_foreground);
JDI_Mbed_Team 7:4829ba349d31 575 //pixel(x+i*rx+shift_x-(j*ry/shift_y)+1,y+j*ry ,_foreground);
JDI_Mbed_Team 7:4829ba349d31 576 //pixel(x+i*rx+shift_x-(j*ry/shift_y) ,y+j*ry+1,_foreground);
JDI_Mbed_Team 7:4829ba349d31 577 //pixel(x+i*rx+shift_x-(j*ry/shift_y)+1,y+j*ry+1,_foreground);
JDI_Mbed_Team 7:4829ba349d31 578 for(l=0;l<ry;l++)
JDI_Mbed_Team 7:4829ba349d31 579 {
JDI_Mbed_Team 7:4829ba349d31 580 for(k=0;k<rx;k++)
JDI_Mbed_Team 7:4829ba349d31 581 {
JDI_Mbed_Team 7:4829ba349d31 582 pixel(x+i*rx+shift_x-(j*ry/shift_y)+k ,y+j*ry+l ,_foreground);
JDI_Mbed_Team 7:4829ba349d31 583 }
JDI_Mbed_Team 7:4829ba349d31 584 }
JDI_Mbed_Team 7:4829ba349d31 585
JDI_Mbed_Team 7:4829ba349d31 586 }
JDI_Mbed_Team 7:4829ba349d31 587 else if (_ifMarge == 0){
JDI_Mbed_Team 7:4829ba349d31 588 pixel(x+i*rx+shift_x-(j*ry/shift_y) ,y+j*ry ,_background);
JDI_Mbed_Team 7:4829ba349d31 589 pixel(x+i*rx+shift_x-(j*ry/shift_y)+1,y+j*ry ,_background);
JDI_Mbed_Team 7:4829ba349d31 590 pixel(x+i*rx+shift_x-(j*ry/shift_y) ,y+j*ry+1,_background);
JDI_Mbed_Team 7:4829ba349d31 591 pixel(x+i*rx+shift_x-(j*ry/shift_y)+1,y+j*ry+1,_background);
JDI_Mbed_Team 7:4829ba349d31 592 }
JDI_Mbed_Team 7:4829ba349d31 593
JDI_Mbed_Team 7:4829ba349d31 594 }
JDI_Mbed_Team 7:4829ba349d31 595 }
JDI_Mbed_Team 7:4829ba349d31 596 if ((w + 2) < hor) char_x += w*rx + 2; // x offset to next char
JDI_Mbed_Team 7:4829ba349d31 597 else char_x += hor*rx;
JDI_Mbed_Team 7:4829ba349d31 598 }
JDI_Mbed_Team 2:944f2968c19f 599
JDI_Mbed_Team 2:944f2968c19f 600 /**
JDI_Mbed_Team 2:944f2968c19f 601 * @brief dispay the image from symbol data
JDI_Mbed_Team 0:b2d46804658c 602 */
JDI_Mbed_Team 0:b2d46804658c 603 void memLCD8::Symbol(unsigned int x, unsigned int y, unsigned char *symbol)
JDI_Mbed_Team 0:b2d46804658c 604 {
JDI_Mbed_Team 0:b2d46804658c 605 unsigned int hor,vert,bpl,j,i,b;
JDI_Mbed_Team 0:b2d46804658c 606 unsigned char* zeichen;
JDI_Mbed_Team 0:b2d46804658c 607 unsigned char z,w;
JDI_Mbed_Team 0:b2d46804658c 608 hor = symbol[0]; // get hor size of font
JDI_Mbed_Team 0:b2d46804658c 609 vert = symbol[1]; // get vert size of font
JDI_Mbed_Team 0:b2d46804658c 610 bpl = symbol[2]; // bytes per line
JDI_Mbed_Team 0:b2d46804658c 611
JDI_Mbed_Team 0:b2d46804658c 612 if (char_x + hor > _width) {
JDI_Mbed_Team 0:b2d46804658c 613 char_x = 0;
JDI_Mbed_Team 0:b2d46804658c 614 char_y = char_y + vert;
JDI_Mbed_Team 0:b2d46804658c 615 if (char_y >= _height - symbol[1]) char_y = 0;
JDI_Mbed_Team 0:b2d46804658c 616 }
JDI_Mbed_Team 2:944f2968c19f 617
JDI_Mbed_Team 0:b2d46804658c 618 zeichen = &symbol[3];
JDI_Mbed_Team 2:944f2968c19f 619 w = zeichen[0]; // actual width of char
JDI_Mbed_Team 0:b2d46804658c 620 for (j=0; j<vert; j++) { // vert line
JDI_Mbed_Team 0:b2d46804658c 621 for (i=0; i<hor; i++) { // horz line
JDI_Mbed_Team 0:b2d46804658c 622 z = zeichen[bpl * i + ((j & 0xF8) >> 3)+1];
JDI_Mbed_Team 0:b2d46804658c 623 b = 1 << (j & 0x07);
JDI_Mbed_Team 0:b2d46804658c 624 if (( z & b ) != 0x00) pixel(x+i,y+j,_foreground);
JDI_Mbed_Team 0:b2d46804658c 625 else if (_ifMarge == 0) pixel(x+i,y+j,_background);// _background -> _LayerBUF[index];
JDI_Mbed_Team 0:b2d46804658c 626 }
JDI_Mbed_Team 0:b2d46804658c 627 }
JDI_Mbed_Team 0:b2d46804658c 628 if ((w + 2) < hor) char_x += w + 2; // x offset to next char
JDI_Mbed_Team 0:b2d46804658c 629 else char_x += hor;
JDI_Mbed_Team 0:b2d46804658c 630 }
JDI_Mbed_Team 0:b2d46804658c 631
JDI_Mbed_Team 0:b2d46804658c 632 /**
JDI_Mbed_Team 0:b2d46804658c 633 * @brief dispay a circle line by color data
JDI_Mbed_Team 0:b2d46804658c 634 */
JDI_Mbed_Team 0:b2d46804658c 635 void memLCD8::circle(int x0, int y0, int r, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 636 {
JDI_Mbed_Team 0:b2d46804658c 637 int x = -r, y = 0, err = 2-2*r, e2;
JDI_Mbed_Team 0:b2d46804658c 638 do {
JDI_Mbed_Team 0:b2d46804658c 639 pixel(x0-x, y0+y,color);
JDI_Mbed_Team 0:b2d46804658c 640 pixel(x0+x, y0+y,color);
JDI_Mbed_Team 0:b2d46804658c 641 pixel(x0+x, y0-y,color);
JDI_Mbed_Team 0:b2d46804658c 642 pixel(x0-x, y0-y,color);
JDI_Mbed_Team 0:b2d46804658c 643 e2 = err;
JDI_Mbed_Team 0:b2d46804658c 644 if (e2 <= y) {
JDI_Mbed_Team 0:b2d46804658c 645 err += ++y*2+1;
JDI_Mbed_Team 0:b2d46804658c 646 if (-x == y && e2 <= x) e2 = 0;
JDI_Mbed_Team 0:b2d46804658c 647 }
JDI_Mbed_Team 0:b2d46804658c 648 if (e2 > x) err += ++x*2+1;
JDI_Mbed_Team 0:b2d46804658c 649 } while (x <= 0);
JDI_Mbed_Team 0:b2d46804658c 650
JDI_Mbed_Team 0:b2d46804658c 651 }
JDI_Mbed_Team 3:c67b96404016 652
JDI_Mbed_Team 0:b2d46804658c 653 /**
JDI_Mbed_Team 0:b2d46804658c 654 * @brief dispay a filled circle by color data
JDI_Mbed_Team 0:b2d46804658c 655 */
JDI_Mbed_Team 0:b2d46804658c 656 void memLCD8::fillcircle(int x0, int y0, int r, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 657 {
JDI_Mbed_Team 0:b2d46804658c 658 int x = -r, y = 0, err = 2-2*r, e2;
JDI_Mbed_Team 0:b2d46804658c 659 do {
JDI_Mbed_Team 0:b2d46804658c 660 vline(x0-x, y0-y, y0+y, color);
JDI_Mbed_Team 0:b2d46804658c 661 vline(x0+x, y0-y, y0+y, color);
JDI_Mbed_Team 0:b2d46804658c 662 e2 = err;
JDI_Mbed_Team 0:b2d46804658c 663 if (e2 <= y) {
JDI_Mbed_Team 0:b2d46804658c 664 err += ++y*2+1;
JDI_Mbed_Team 0:b2d46804658c 665 if (-x == y && e2 <= x) e2 = 0;
JDI_Mbed_Team 0:b2d46804658c 666 }
JDI_Mbed_Team 0:b2d46804658c 667 if (e2 > x) err += ++x*2+1;
JDI_Mbed_Team 0:b2d46804658c 668 } while (x <= 0);
JDI_Mbed_Team 0:b2d46804658c 669 }
JDI_Mbed_Team 2:944f2968c19f 670
JDI_Mbed_Team 0:b2d46804658c 671 /**
JDI_Mbed_Team 0:b2d46804658c 672 * @brief dispay a horizontal line by color data
JDI_Mbed_Team 0:b2d46804658c 673 */
JDI_Mbed_Team 0:b2d46804658c 674 void memLCD8::hline(int x0, int x1, int y, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 675 {
JDI_Mbed_Team 0:b2d46804658c 676 int w;
JDI_Mbed_Team 0:b2d46804658c 677 w = x1 - x0 + 1;
JDI_Mbed_Team 0:b2d46804658c 678 for (int j=0; j<w; j++) pixel(x0+j, y,color);
JDI_Mbed_Team 0:b2d46804658c 679 }
JDI_Mbed_Team 0:b2d46804658c 680 /**
JDI_Mbed_Team 0:b2d46804658c 681 * @brief dispay a vertical line by color data
JDI_Mbed_Team 0:b2d46804658c 682 */
JDI_Mbed_Team 0:b2d46804658c 683 void memLCD8::vline(int x, int y0, int y1, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 684 {
JDI_Mbed_Team 0:b2d46804658c 685 int h;
JDI_Mbed_Team 0:b2d46804658c 686 h = y1 - y0 + 1;
JDI_Mbed_Team 0:b2d46804658c 687 for (int j=0; j<h; j++) pixel(x, y0+j,color);
JDI_Mbed_Team 0:b2d46804658c 688 }
JDI_Mbed_Team 3:c67b96404016 689
JDI_Mbed_Team 0:b2d46804658c 690 /**
JDI_Mbed_Team 0:b2d46804658c 691 * @brief dispay a line by color data
JDI_Mbed_Team 0:b2d46804658c 692 */
JDI_Mbed_Team 0:b2d46804658c 693 void memLCD8::line(int x0, int y0, int x1, int y1, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 694 {
JDI_Mbed_Team 0:b2d46804658c 695 int dx = 0, dy = 0;
JDI_Mbed_Team 0:b2d46804658c 696 int dx_sym = 0, dy_sym = 0;
JDI_Mbed_Team 0:b2d46804658c 697 int dx_x2 = 0, dy_x2 = 0;
JDI_Mbed_Team 0:b2d46804658c 698 int di = 0;
JDI_Mbed_Team 0:b2d46804658c 699
JDI_Mbed_Team 0:b2d46804658c 700 dx = x1-x0;
JDI_Mbed_Team 0:b2d46804658c 701 dy = y1-y0;
JDI_Mbed_Team 0:b2d46804658c 702
JDI_Mbed_Team 3:c67b96404016 703 if (dx == 0) { // vertical line
JDI_Mbed_Team 0:b2d46804658c 704 if (y1 > y0) vline(x0,y0,y1,color);
JDI_Mbed_Team 0:b2d46804658c 705 else vline(x0,y1,y0,color);
JDI_Mbed_Team 0:b2d46804658c 706 return;
JDI_Mbed_Team 0:b2d46804658c 707 }
JDI_Mbed_Team 0:b2d46804658c 708
JDI_Mbed_Team 0:b2d46804658c 709 if (dx > 0) {
JDI_Mbed_Team 0:b2d46804658c 710 dx_sym = 1;
JDI_Mbed_Team 0:b2d46804658c 711 } else {
JDI_Mbed_Team 0:b2d46804658c 712 dx_sym = -1;
JDI_Mbed_Team 0:b2d46804658c 713 }
JDI_Mbed_Team 3:c67b96404016 714 if (dy == 0) { // horizontal line
JDI_Mbed_Team 0:b2d46804658c 715 if (x1 > x0) hline(x0,x1,y0,color);
JDI_Mbed_Team 0:b2d46804658c 716 else hline(x1,x0,y0,color);
JDI_Mbed_Team 0:b2d46804658c 717 return;
JDI_Mbed_Team 0:b2d46804658c 718 }
JDI_Mbed_Team 0:b2d46804658c 719
JDI_Mbed_Team 0:b2d46804658c 720 if (dy > 0) {
JDI_Mbed_Team 0:b2d46804658c 721 dy_sym = 1;
JDI_Mbed_Team 0:b2d46804658c 722 } else {
JDI_Mbed_Team 0:b2d46804658c 723 dy_sym = -1;
JDI_Mbed_Team 0:b2d46804658c 724 }
JDI_Mbed_Team 0:b2d46804658c 725
JDI_Mbed_Team 0:b2d46804658c 726 dx = dx_sym*dx;
JDI_Mbed_Team 0:b2d46804658c 727 dy = dy_sym*dy;
JDI_Mbed_Team 0:b2d46804658c 728
JDI_Mbed_Team 0:b2d46804658c 729 dx_x2 = dx*2;
JDI_Mbed_Team 0:b2d46804658c 730 dy_x2 = dy*2;
JDI_Mbed_Team 0:b2d46804658c 731
JDI_Mbed_Team 0:b2d46804658c 732 if (dx >= dy) {
JDI_Mbed_Team 0:b2d46804658c 733 di = dy_x2 - dx;
JDI_Mbed_Team 0:b2d46804658c 734 while (x0 != x1) {
JDI_Mbed_Team 0:b2d46804658c 735
JDI_Mbed_Team 0:b2d46804658c 736 pixel(x0, y0, color);
JDI_Mbed_Team 0:b2d46804658c 737 x0 += dx_sym;
JDI_Mbed_Team 0:b2d46804658c 738 if (di<0) {
JDI_Mbed_Team 0:b2d46804658c 739 di += dy_x2;
JDI_Mbed_Team 0:b2d46804658c 740 } else {
JDI_Mbed_Team 0:b2d46804658c 741 di += dy_x2 - dx_x2;
JDI_Mbed_Team 0:b2d46804658c 742 y0 += dy_sym;
JDI_Mbed_Team 0:b2d46804658c 743 }
JDI_Mbed_Team 0:b2d46804658c 744 }
JDI_Mbed_Team 0:b2d46804658c 745 pixel(x0, y0, color);
JDI_Mbed_Team 0:b2d46804658c 746 } else {
JDI_Mbed_Team 0:b2d46804658c 747 di = dx_x2 - dy;
JDI_Mbed_Team 0:b2d46804658c 748 while (y0 != y1) {
JDI_Mbed_Team 0:b2d46804658c 749 pixel(x0, y0, color);
JDI_Mbed_Team 0:b2d46804658c 750 y0 += dy_sym;
JDI_Mbed_Team 0:b2d46804658c 751 if (di < 0) {
JDI_Mbed_Team 0:b2d46804658c 752 di += dx_x2;
JDI_Mbed_Team 0:b2d46804658c 753 } else {
JDI_Mbed_Team 0:b2d46804658c 754 di += dx_x2 - dy_x2;
JDI_Mbed_Team 0:b2d46804658c 755 x0 += dx_sym;
JDI_Mbed_Team 0:b2d46804658c 756 }
JDI_Mbed_Team 0:b2d46804658c 757 }
JDI_Mbed_Team 0:b2d46804658c 758 pixel(x0, y0, color);
JDI_Mbed_Team 0:b2d46804658c 759 }
JDI_Mbed_Team 0:b2d46804658c 760 return;
JDI_Mbed_Team 0:b2d46804658c 761 }
JDI_Mbed_Team 0:b2d46804658c 762 /**
JDI_Mbed_Team 0:b2d46804658c 763 * @brief dispay a rectangle line by color data
JDI_Mbed_Team 0:b2d46804658c 764 */
JDI_Mbed_Team 0:b2d46804658c 765 void memLCD8::rect(int x0, int y0, int x1, int y1, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 766 {
JDI_Mbed_Team 0:b2d46804658c 767
JDI_Mbed_Team 0:b2d46804658c 768 if (x1 > x0) hline(x0,x1,y0,color);
JDI_Mbed_Team 0:b2d46804658c 769 else hline(x1,x0,y0,color);
JDI_Mbed_Team 0:b2d46804658c 770
JDI_Mbed_Team 0:b2d46804658c 771 if (y1 > y0) vline(x0,y0,y1,color);
JDI_Mbed_Team 0:b2d46804658c 772 else vline(x0,y1,y0,color);
JDI_Mbed_Team 0:b2d46804658c 773
JDI_Mbed_Team 0:b2d46804658c 774 if (x1 > x0) hline(x0,x1,y1,color);
JDI_Mbed_Team 0:b2d46804658c 775 else hline(x1,x0,y1,color);
JDI_Mbed_Team 0:b2d46804658c 776
JDI_Mbed_Team 0:b2d46804658c 777 if (y1 > y0) vline(x1,y0,y1,color);
JDI_Mbed_Team 0:b2d46804658c 778 else vline(x1,y1,y0,color);
JDI_Mbed_Team 0:b2d46804658c 779
JDI_Mbed_Team 0:b2d46804658c 780 return;
JDI_Mbed_Team 0:b2d46804658c 781 }
JDI_Mbed_Team 0:b2d46804658c 782 /**
JDI_Mbed_Team 0:b2d46804658c 783 * @brief dispay a filled rectangle by color data
JDI_Mbed_Team 0:b2d46804658c 784 */
JDI_Mbed_Team 0:b2d46804658c 785 void memLCD8::fillrect(int x0, int y0, int x1, int y1, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 786 {
JDI_Mbed_Team 0:b2d46804658c 787 int h = y1 - y0 + 1;
JDI_Mbed_Team 0:b2d46804658c 788 for (int i=0; i<h; i++) hline(x0, x1, y0+i, color);
JDI_Mbed_Team 0:b2d46804658c 789 }
JDI_Mbed_Team 0:b2d46804658c 790 /**
JDI_Mbed_Team 0:b2d46804658c 791 * @brief Transfer One Pixel Data with x,y allocation
JDI_Mbed_Team 0:b2d46804658c 792 * @param[in] int x : horizontal allocation left to right
JDI_Mbed_Team 0:b2d46804658c 793 * @param[in] int y : vertival allocation top to bottom
JDI_Mbed_Team 0:b2d46804658c 794 * @param[in] uint8_t color : the color data for Drawing 0x0X x is color data(RGBC) C is not used
JDI_Mbed_Team 0:b2d46804658c 795 */
JDI_Mbed_Team 0:b2d46804658c 796 void memLCD8::pixel(int x, int y, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 797 {
JDI_Mbed_Team 0:b2d46804658c 798 if(!(x % 2)) _dispBUF[y*_width/2+x/2] = _dispBUF[y*_width/2+x/2]&0x0F | (color << 4)&0xF0 ; //MASK 0000 1111
JDI_Mbed_Team 0:b2d46804658c 799 else _dispBUF[y*_width/2+x/2] = _dispBUF[y*_width/2+x/2]&0xF0 | (color )&0x0F ; //MASK 1111 0000
JDI_Mbed_Team 0:b2d46804658c 800 }
JDI_Mbed_Team 2:944f2968c19f 801
JDI_Mbed_Team 0:b2d46804658c 802 /**
JDI_Mbed_Team 0:b2d46804658c 803 * @brief Get Edited data for SPI transfer
JDI_Mbed_Team 3:c67b96404016 804 * @param[in] int x : horizontal allocation left to right
JDI_Mbed_Team 3:c67b96404016 805 * @param[in] int y : vertival allocation top to bottom
JDI_Mbed_Team 3:c67b96404016 806 * @param[in] uint8_t* buff : buffer data for Display
JDI_Mbed_Team 0:b2d46804658c 807 */
JDI_Mbed_Team 0:b2d46804658c 808 int* memLCD8::GetPixelValue(int _x, int _y ,uint8_t* buff)
JDI_Mbed_Team 0:b2d46804658c 809 {
JDI_Mbed_Team 0:b2d46804658c 810 //bitmap data = 4bit data => modify transfer data bit size;
JDI_Mbed_Team 0:b2d46804658c 811 switch(TrModeCommand)
JDI_Mbed_Team 0:b2d46804658c 812 {
JDI_Mbed_Team 0:b2d46804658c 813 case 0x90: //TrBIT4:
JDI_Mbed_Team 0:b2d46804658c 814 // buffer 2pixel/1byte => 2pixel/1byte buffe 2byte毎進める。
JDI_Mbed_Team 7:4829ba349d31 815 TrValue[0] = buff[_y* _width/2 + _x];
JDI_Mbed_Team 0:b2d46804658c 816 break;
JDI_Mbed_Team 0:b2d46804658c 817 case 0x80://TrBIT3:
JDI_Mbed_Team 0:b2d46804658c 818 // buffer 2pixel/1byte => 3pixel-1subpixel/1bye (24 pixel/3byte) buffer 3byte毎進める。
JDI_Mbed_Team 0:b2d46804658c 819 for(int j=0;j<3;j++) TrValue[j] = 0;
JDI_Mbed_Team 0:b2d46804658c 820 //for( int i = 0 ; i<12 ; i--)
JDI_Mbed_Team 0:b2d46804658c 821 {
JDI_Mbed_Team 0:b2d46804658c 822 //4 bit RGBN(Nは予備) => 3bit RGB
JDI_Mbed_Team 0:b2d46804658c 823 if( _width/2 > _x )
JDI_Mbed_Team 0:b2d46804658c 824 {
JDI_Mbed_Team 7:4829ba349d31 825 TrValue[0] = TrValue[0] | ( ( (buff[_y* _width/2 + _x ]&0xE0) ) );
JDI_Mbed_Team 7:4829ba349d31 826 TrValue[0] = TrValue[0] | ( ( (buff[_y* _width/2 + _x ]&0x0E) ) << 1);
JDI_Mbed_Team 0:b2d46804658c 827 }
JDI_Mbed_Team 0:b2d46804658c 828 if( _width/2 > _x + 1 )
JDI_Mbed_Team 0:b2d46804658c 829 {
JDI_Mbed_Team 7:4829ba349d31 830 TrValue[0] = TrValue[0] | ( ( (buff[_y* _width/2 + _x + 1]&0xC0) ) >> 6);
JDI_Mbed_Team 0:b2d46804658c 831
JDI_Mbed_Team 7:4829ba349d31 832 TrValue[1] = TrValue[1] | ( ( (buff[_y* _width/2 + _x + 1]&0x20) ) << 2);
JDI_Mbed_Team 7:4829ba349d31 833 TrValue[1] = TrValue[1] | ( ( (buff[_y* _width/2 + _x + 1]&0x0E) ) << 3);
JDI_Mbed_Team 0:b2d46804658c 834 }
JDI_Mbed_Team 0:b2d46804658c 835 if( _width/2 > _x + 2 )
JDI_Mbed_Team 0:b2d46804658c 836 {
JDI_Mbed_Team 7:4829ba349d31 837 TrValue[1] = TrValue[1] | ( ( (buff[_y* _width/2 + _x + 2]&0xE0) ) >> 4);
JDI_Mbed_Team 7:4829ba349d31 838 TrValue[1] = TrValue[1] | ( ( (buff[_y* _width/2 + _x + 2]&0x08) ) >> 3);
JDI_Mbed_Team 0:b2d46804658c 839
JDI_Mbed_Team 7:4829ba349d31 840 TrValue[2] = TrValue[2] | ( ( (buff[_y* _width/2 + _x + 2]&0x06) ) << 5);
JDI_Mbed_Team 0:b2d46804658c 841 }
JDI_Mbed_Team 0:b2d46804658c 842 if( _width/2 > _x + 3 )
JDI_Mbed_Team 0:b2d46804658c 843 {
JDI_Mbed_Team 7:4829ba349d31 844 TrValue[2] = TrValue[2] | ( ( (buff[_y* _width/2 + _x + 3]&0xE0) ) >> 2);
JDI_Mbed_Team 7:4829ba349d31 845 TrValue[2] = TrValue[2] | ( ( (buff[_y* _width/2 + _x + 3]&0x0E) ) >> 1);
JDI_Mbed_Team 0:b2d46804658c 846 }
JDI_Mbed_Team 0:b2d46804658c 847 }
JDI_Mbed_Team 0:b2d46804658c 848 break;
JDI_Mbed_Team 0:b2d46804658c 849 case 0x88://TrBIT1:
JDI_Mbed_Team 0:b2d46804658c 850 // buffer 2pixel/1byte => 8 pixel/1byte buffe 4byte毎進める。
JDI_Mbed_Team 0:b2d46804658c 851 for(int j=0;j<3;j++) TrValue[j] = 0;
JDI_Mbed_Team 0:b2d46804658c 852 for(int i = 0 ; i<4 ; i++)
JDI_Mbed_Team 0:b2d46804658c 853 {
JDI_Mbed_Team 0:b2d46804658c 854 //Green bit => monochrome bit
JDI_Mbed_Team 0:b2d46804658c 855 if( _width/2 > _x + i )
JDI_Mbed_Team 0:b2d46804658c 856 {
JDI_Mbed_Team 7:4829ba349d31 857 TrValue[0] = TrValue[0] | ( ( (buff[_y* _width/2 + _x + i]&0x40) == 0 ? 0 : 1 ) << (7-i*2) );
JDI_Mbed_Team 7:4829ba349d31 858 TrValue[0] = TrValue[0] | ( ( (buff[_y* _width/2 + _x + i]&0x04) == 0 ? 0 : 1 ) << (7-i*2)-1 );
JDI_Mbed_Team 0:b2d46804658c 859 //pc2.printf("[%d+%d][%d]<0x%x>\n",_x,i,_y,_dispBUF[_y* _width/2 + _x + i]);
JDI_Mbed_Team 0:b2d46804658c 860 }
JDI_Mbed_Team 0:b2d46804658c 861 }
JDI_Mbed_Team 0:b2d46804658c 862 break;
JDI_Mbed_Team 0:b2d46804658c 863 }
JDI_Mbed_Team 0:b2d46804658c 864 return TrValue;
JDI_Mbed_Team 0:b2d46804658c 865 }
JDI_Mbed_Team 2:944f2968c19f 866
JDI_Mbed_Team 0:b2d46804658c 867 /**
JDI_Mbed_Team 3:c67b96404016 868 * @brief Transfer Pixel Data from buffer to Display
JDI_Mbed_Team 3:c67b96404016 869 * @param[in] int transfermode : instruction the transfer data size ,4bit,3bit,1bit
JDI_Mbed_Team 0:b2d46804658c 870 */
JDI_Mbed_Team 3:c67b96404016 871 void memLCD8::writeDISP(int transfermode) // refresh whole display
JDI_Mbed_Team 3:c67b96404016 872 {
JDI_Mbed_Team 3:c67b96404016 873 char pol = 0;
JDI_Mbed_Team 3:c67b96404016 874 //char command = 0x90; // 8b 1*0xNNNN *=POL x=AutoW A 1010
JDI_Mbed_Team 3:c67b96404016 875 SetTransfermode(transfermode);
JDI_Mbed_Team 3:c67b96404016 876
JDI_Mbed_Team 3:c67b96404016 877 // frame
JDI_Mbed_Team 3:c67b96404016 878 for (int i=0; i<_height; i++) {
JDI_Mbed_Team 3:c67b96404016 879 // line
JDI_Mbed_Team 3:c67b96404016 880 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 881 _cs = 1;
JDI_Mbed_Team 3:c67b96404016 882 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 883 _spi.write(TrModeCommand | (pol << 6) | (i+1)>>8 ); // COMMAND
JDI_Mbed_Team 3:c67b96404016 884 //pc2.printf("com 0x%x\n",TrModeCommand | (pol << 6) | (i+1)>>8);
JDI_Mbed_Team 3:c67b96404016 885
JDI_Mbed_Team 3:c67b96404016 886 _spi.write((i+1)& 0x00FF ); // V ADDR
JDI_Mbed_Team 3:c67b96404016 887 //pc2.printf("v adr 0x%x\n",(i+1)& 0x00FF);
JDI_Mbed_Team 3:c67b96404016 888
JDI_Mbed_Team 3:c67b96404016 889 for(int j=0; j<_width; j+=TrAdd)
JDI_Mbed_Team 3:c67b96404016 890 {
JDI_Mbed_Team 3:c67b96404016 891 GetPixelValue(j,i,_dispBUF);
JDI_Mbed_Team 3:c67b96404016 892 //pc2.printf("data=[%d]{%d][%d]/[%d]\n",j*TrAdd,i,TrValue[0],TrAdd);
JDI_Mbed_Team 3:c67b96404016 893 for(int k=0;k<TrValNum;k++)
JDI_Mbed_Team 3:c67b96404016 894 _spi.write(TrValue[k]);
JDI_Mbed_Team 3:c67b96404016 895 }
JDI_Mbed_Team 3:c67b96404016 896 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 897 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 898 // wait_ms(1); //1.8Hz simulation
JDI_Mbed_Team 3:c67b96404016 899 // wait_ms(2); //1.35Hz simulation
JDI_Mbed_Team 3:c67b96404016 900 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 901 _cs = 0;
JDI_Mbed_Team 3:c67b96404016 902 if(pol) pol=0x00;
JDI_Mbed_Team 3:c67b96404016 903 else pol=0x01;
JDI_Mbed_Team 3:c67b96404016 904 }
JDI_Mbed_Team 3:c67b96404016 905 }
JDI_Mbed_Team 3:c67b96404016 906
JDI_Mbed_Team 3:c67b96404016 907 /**
JDI_Mbed_Team 3:c67b96404016 908 * @brief Transfer Pixel Data : from Start line number to Display of frame buffer
JDI_Mbed_Team 3:c67b96404016 909 * @param[in] int startline : Start line number to Display
JDI_Mbed_Team 3:c67b96404016 910 * @param[in] int endline : end line number to Display
JDI_Mbed_Team 3:c67b96404016 911 * @param[in] int transfermode : instruction the transfer data size ,4bit,3bit,1bit
JDI_Mbed_Team 3:c67b96404016 912 */
JDI_Mbed_Team 3:c67b96404016 913 void memLCD8::writeDISP(int startline , int endline , int transfermode) // refresh display selected line
JDI_Mbed_Team 0:b2d46804658c 914 {
JDI_Mbed_Team 3:c67b96404016 915 char pol = 0;
JDI_Mbed_Team 3:c67b96404016 916 //char command = 0x90; // 8b 1*0xNNNN *=POL x=AutoW A 1010
JDI_Mbed_Team 3:c67b96404016 917 SetTransfermode(transfermode);
JDI_Mbed_Team 3:c67b96404016 918
JDI_Mbed_Team 3:c67b96404016 919 // frame
JDI_Mbed_Team 3:c67b96404016 920 for (int i=startline; i<=endline; i++) {
JDI_Mbed_Team 7:4829ba349d31 921 if( i >= _height ) continue;
JDI_Mbed_Team 7:4829ba349d31 922 if( i <0 ) continue;
JDI_Mbed_Team 7:4829ba349d31 923
JDI_Mbed_Team 3:c67b96404016 924 // line
JDI_Mbed_Team 3:c67b96404016 925 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 926 _cs = 1;
JDI_Mbed_Team 3:c67b96404016 927 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 928 _spi.write(TrModeCommand | (pol << 6) | (i+1)>>8 ); // COMMAND
JDI_Mbed_Team 3:c67b96404016 929 //pc2.printf("com 0x%x\n",TrModeCommand | (pol << 6) | (i+1)>>8);
JDI_Mbed_Team 3:c67b96404016 930
JDI_Mbed_Team 3:c67b96404016 931 _spi.write((i+1)& 0x00FF ); // V ADDR
JDI_Mbed_Team 3:c67b96404016 932 //pc2.printf("v adr 0x%x\n",(i+1)& 0x00FF);
JDI_Mbed_Team 3:c67b96404016 933
JDI_Mbed_Team 3:c67b96404016 934 for(int j=0; j<_width; j+=TrAdd)
JDI_Mbed_Team 3:c67b96404016 935 //for(int j=0; j<100; j+=TrAdd)
JDI_Mbed_Team 3:c67b96404016 936 {
JDI_Mbed_Team 3:c67b96404016 937 GetPixelValue(j,i,_dispBUF);
JDI_Mbed_Team 3:c67b96404016 938 //pc2.printf("data=[%d]{%d][%d]/[%d]\n",j*TrAdd,i,TrValue[0],TrAdd);
JDI_Mbed_Team 3:c67b96404016 939 for(int k=0;k<TrValNum;k++)
JDI_Mbed_Team 3:c67b96404016 940 _spi.write(TrValue[k]);
JDI_Mbed_Team 3:c67b96404016 941 }
JDI_Mbed_Team 3:c67b96404016 942 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 943 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 944 // wait_ms(1); //1.8Hz simulation
JDI_Mbed_Team 3:c67b96404016 945 // wait_ms(2); //1.35Hz simulation
JDI_Mbed_Team 3:c67b96404016 946 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 947 _cs = 0;
JDI_Mbed_Team 3:c67b96404016 948 if(pol) pol=0x00;
JDI_Mbed_Team 3:c67b96404016 949 else pol=0x01;
JDI_Mbed_Team 3:c67b96404016 950 }
JDI_Mbed_Team 3:c67b96404016 951 }
JDI_Mbed_Team 3:c67b96404016 952
JDI_Mbed_Team 3:c67b96404016 953 /**
JDI_Mbed_Team 3:c67b96404016 954 * @brief Transfer Pixel Data from frame buffer to Display
JDI_Mbed_Team 3:c67b96404016 955 */
JDI_Mbed_Team 3:c67b96404016 956 void memLCD8::writeDISP(void) // refresh whole display
JDI_Mbed_Team 3:c67b96404016 957 {
JDI_Mbed_Team 3:c67b96404016 958
JDI_Mbed_Team 3:c67b96404016 959 char pol = 0;
JDI_Mbed_Team 3:c67b96404016 960 char command = 0x90; // 8b 1*0xNNNN *=POL x=AutoW A 1010
JDI_Mbed_Team 3:c67b96404016 961
JDI_Mbed_Team 3:c67b96404016 962 // frame
JDI_Mbed_Team 3:c67b96404016 963 for (int i=0; i<_height; i++) {
JDI_Mbed_Team 3:c67b96404016 964 // line
JDI_Mbed_Team 3:c67b96404016 965 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 966 _cs = 1;
JDI_Mbed_Team 3:c67b96404016 967 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 968 _spi.write(command | (pol << 6) | (i+1)>>8 ); // COMMAND
JDI_Mbed_Team 3:c67b96404016 969 _spi.write((i+1)& 0x00FF ); // V ADDR
JDI_Mbed_Team 3:c67b96404016 970 for(int j=0; j<_width/2; j++) _spi.write(_dispBUF[i*_width/2 + j]);
JDI_Mbed_Team 3:c67b96404016 971 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 972 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 973 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 974 _cs = 0;
JDI_Mbed_Team 3:c67b96404016 975 if(pol) pol=0x00;
JDI_Mbed_Team 3:c67b96404016 976 else pol=0x01;
JDI_Mbed_Team 0:b2d46804658c 977 }
JDI_Mbed_Team 0:b2d46804658c 978 }
JDI_Mbed_Team 2:944f2968c19f 979
JDI_Mbed_Team 0:b2d46804658c 980 /**
JDI_Mbed_Team 0:b2d46804658c 981 * @brief clear buffer data by background color data
JDI_Mbed_Team 0:b2d46804658c 982 */
JDI_Mbed_Team 0:b2d46804658c 983 void memLCD8::clsBUF(void)
JDI_Mbed_Team 0:b2d46804658c 984 {
JDI_Mbed_Team 0:b2d46804658c 985
JDI_Mbed_Team 0:b2d46804658c 986 for (int i=0; i<_height; i++) {
JDI_Mbed_Team 0:b2d46804658c 987 for (int j=0; j<_width; j++) {
JDI_Mbed_Team 0:b2d46804658c 988 pixel(j,i,_background);
JDI_Mbed_Team 0:b2d46804658c 989 }
JDI_Mbed_Team 0:b2d46804658c 990 }
JDI_Mbed_Team 0:b2d46804658c 991 }
JDI_Mbed_Team 7:4829ba349d31 992 #if MOVIEBUFF_MODE
JDI_Mbed_Team 7:4829ba349d31 993 /**
JDI_Mbed_Team 7:4829ba349d31 994 * @brief Transfer One Pixel Data with x,y allocation to Animation buffer
JDI_Mbed_Team 7:4829ba349d31 995 * @param[in] int x : horizontal allocation left to right
JDI_Mbed_Team 7:4829ba349d31 996 * @param[in] int y : vertival allocation top to bottom
JDI_Mbed_Team 7:4829ba349d31 997 * @param[in] uint8_t color : the color data for Drawing 0x0X x is color data(RGBC) C is not used
JDI_Mbed_Team 7:4829ba349d31 998 * @param[in] int memnu : animation buffer number.
JDI_Mbed_Team 7:4829ba349d31 999 */
JDI_Mbed_Team 7:4829ba349d31 1000 void memLCD8::movie_pixel(int x, int y, uint8_t color,int memnum)
JDI_Mbed_Team 7:4829ba349d31 1001 {
JDI_Mbed_Team 7:4829ba349d31 1002 //pc2.printf("movie_pixel[%d][%d]col[%d]\n",x,y,color);
JDI_Mbed_Team 7:4829ba349d31 1003 if(!(x % 2)) _dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+x/2] = _dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+x/2]&0x0F | (color << 4)&0xF0 ; //MASK 0000 1111
JDI_Mbed_Team 7:4829ba349d31 1004 else _dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+x/2] = _dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+x/2]&0xF0 | (color )&0x0F ; //MASK 1111 0000
JDI_Mbed_Team 7:4829ba349d31 1005 }
JDI_Mbed_Team 7:4829ba349d31 1006
JDI_Mbed_Team 7:4829ba349d31 1007 /**
JDI_Mbed_Team 7:4829ba349d31 1008 * @brief Transfer Pixel Data of Animation buffer with x,y allocation to frame buffer.
JDI_Mbed_Team 7:4829ba349d31 1009 * @param[in] int sx : horizontal start allocation left to right
JDI_Mbed_Team 7:4829ba349d31 1010 * @param[in] int sy : vertival start allocation top to bottom
JDI_Mbed_Team 7:4829ba349d31 1011 * @param[in] int memnu : animation buffer number.
JDI_Mbed_Team 7:4829ba349d31 1012 */
JDI_Mbed_Team 7:4829ba349d31 1013 void memLCD8::makeMovieFrame(int sx , int sy, int memnum)
JDI_Mbed_Team 7:4829ba349d31 1014 {
JDI_Mbed_Team 7:4829ba349d31 1015 int x,y;
JDI_Mbed_Team 7:4829ba349d31 1016 //pc2.printf("1<%d,%d>\n",_width,_height);
JDI_Mbed_Team 7:4829ba349d31 1017 for(y = 0; y < MOVIE_VERT_SIZE;y++)
JDI_Mbed_Team 7:4829ba349d31 1018 {
JDI_Mbed_Team 7:4829ba349d31 1019 for(x = 0; x < MOVIE_HORI_SIZE ;x+=2)
JDI_Mbed_Team 7:4829ba349d31 1020 {
JDI_Mbed_Team 7:4829ba349d31 1021 if( (sx + x) >= _width ) continue;
JDI_Mbed_Team 7:4829ba349d31 1022 if( (sx + x) < 0 ) continue;
JDI_Mbed_Team 7:4829ba349d31 1023 if( (sy + y) >= _height ) continue;
JDI_Mbed_Team 7:4829ba349d31 1024 if( (sy + y) < 0 ) continue;
JDI_Mbed_Team 7:4829ba349d31 1025
JDI_Mbed_Team 7:4829ba349d31 1026 _dispBACKUPBUF[y*MOVIE_HORI_SIZE/2+x/2] = _dispBUF[(sy+y)*(_width)/2+(sx+x)/2];
JDI_Mbed_Team 7:4829ba349d31 1027
JDI_Mbed_Team 7:4829ba349d31 1028 if( (_dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+x/2]&0xF0) != 0 )
JDI_Mbed_Team 7:4829ba349d31 1029 _dispBUF[(sy+y)*(_width)/2+(sx+x)/2] = _dispBUF[(sy+y)*(_width)/2+(sx+x)/2]&0x0F | _dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+x/2]&0xF0; //MASK 0000 1111
JDI_Mbed_Team 7:4829ba349d31 1030
JDI_Mbed_Team 7:4829ba349d31 1031 if( (_dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+x/2]&0x0F) != 0 )
JDI_Mbed_Team 7:4829ba349d31 1032 _dispBUF[(sy+y)*(_width)/2+(sx+x)/2] = _dispBUF[(sy+y)*(_width)/2+(sx+x)/2]&0xF0 | _dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+x/2]&0x0F; //MASK 0000 1111
JDI_Mbed_Team 7:4829ba349d31 1033
JDI_Mbed_Team 7:4829ba349d31 1034 //pc2.printf("dispMOVIEBUF[%d][%d] = %d\n",x,y,_dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+x/2]);
JDI_Mbed_Team 7:4829ba349d31 1035 //_dispBUF[(sy+y)*(_width)/2+(sx+x)/2] = _dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+x/2];
JDI_Mbed_Team 7:4829ba349d31 1036 }
JDI_Mbed_Team 7:4829ba349d31 1037 }
JDI_Mbed_Team 7:4829ba349d31 1038 //pc2.printf("memnum=%d,x=%d,y=%d>sx=%d,sy=%d\n",memnum,sx,sy,(sx+x)-1,(sy+y)-1);
JDI_Mbed_Team 7:4829ba349d31 1039
JDI_Mbed_Team 7:4829ba349d31 1040 }
JDI_Mbed_Team 7:4829ba349d31 1041 /**
JDI_Mbed_Team 7:4829ba349d31 1042 * @brief Transfer Pixel Data of Animation buffer with x,y allocation to frame buffer. animation data read right to left.
JDI_Mbed_Team 7:4829ba349d31 1043 * @param[in] int sx : horizontal start allocation left to right
JDI_Mbed_Team 7:4829ba349d31 1044 * @param[in] int sy : vertival start allocation top to bottom
JDI_Mbed_Team 7:4829ba349d31 1045 * @param[in] int memnu : animation buffer number.
JDI_Mbed_Team 7:4829ba349d31 1046 */
JDI_Mbed_Team 7:4829ba349d31 1047 void memLCD8::makeMovieFrame_Reverse(int sx , int sy, int memnum)
JDI_Mbed_Team 7:4829ba349d31 1048 {
JDI_Mbed_Team 7:4829ba349d31 1049 int x,y;
JDI_Mbed_Team 7:4829ba349d31 1050 //pc2.printf("1<%d,%d>\n",_width,_height);
JDI_Mbed_Team 7:4829ba349d31 1051 for(y = 0; y < MOVIE_VERT_SIZE ;y++)
JDI_Mbed_Team 7:4829ba349d31 1052 {
JDI_Mbed_Team 7:4829ba349d31 1053 for(x = 0; x < MOVIE_HORI_SIZE ;x+=2)
JDI_Mbed_Team 7:4829ba349d31 1054 {
JDI_Mbed_Team 7:4829ba349d31 1055 if( (sx + x) >= _width ) continue;
JDI_Mbed_Team 7:4829ba349d31 1056 if( (sx + x) < 0 ) continue;
JDI_Mbed_Team 7:4829ba349d31 1057 if( (sy + y) >= _height ) continue;
JDI_Mbed_Team 7:4829ba349d31 1058 if( (sy + y) < 0 ) continue;
JDI_Mbed_Team 7:4829ba349d31 1059
JDI_Mbed_Team 7:4829ba349d31 1060 _dispBACKUPBUF[y*MOVIE_HORI_SIZE/2+x/2] = _dispBUF[(sy+y)*(_width)/2+(sx+x)/2];
JDI_Mbed_Team 7:4829ba349d31 1061
JDI_Mbed_Team 7:4829ba349d31 1062 if( (_dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+(MOVIE_HORI_SIZE-2-x)/2]&0xF0) != 0 )
JDI_Mbed_Team 7:4829ba349d31 1063 _dispBUF[(sy+y)*(_width)/2+(sx+x)/2] = _dispBUF[(sy+y)*(_width)/2+(sx+x)/2]&0x0F | _dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+(MOVIE_HORI_SIZE-2-x)/2]&0xF0; //MASK 0000 1111
JDI_Mbed_Team 7:4829ba349d31 1064
JDI_Mbed_Team 7:4829ba349d31 1065 if( (_dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+(MOVIE_HORI_SIZE-2-x)/2]&0x0F) != 0 )
JDI_Mbed_Team 7:4829ba349d31 1066 _dispBUF[(sy+y)*(_width)/2+(sx+x)/2] = _dispBUF[(sy+y)*(_width)/2+(sx+x)/2]&0xF0 | _dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+(MOVIE_HORI_SIZE-2-x)/2]&0x0F; //MASK 0000 1111
JDI_Mbed_Team 7:4829ba349d31 1067
JDI_Mbed_Team 7:4829ba349d31 1068 //pc2.printf("dispMOVIEBUF[%d][%d] = %d\n",x,y,_dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+x/2]);
JDI_Mbed_Team 7:4829ba349d31 1069 //_dispBUF[(sy+y)*(_width)/2+(sx+x)/2] = _dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+x/2];
JDI_Mbed_Team 7:4829ba349d31 1070 }
JDI_Mbed_Team 7:4829ba349d31 1071 }
JDI_Mbed_Team 7:4829ba349d31 1072 //pc2.printf("memnum=%d,x=%d,y=%d>sx=%d,sy=%d\n",memnum,sx,sy,(sx+x)-1,(sy+y)-1);
JDI_Mbed_Team 7:4829ba349d31 1073
JDI_Mbed_Team 7:4829ba349d31 1074 }
JDI_Mbed_Team 7:4829ba349d31 1075 /**
JDI_Mbed_Team 7:4829ba349d31 1076 * @brief Transfer Pixel Data of Animation buffer with x,y allocation to frame buffer. animation data bottom to top.
JDI_Mbed_Team 7:4829ba349d31 1077 * @param[in] int sx : horizontal start allocation left to right
JDI_Mbed_Team 7:4829ba349d31 1078 * @param[in] int sy : vertival start allocation top to bottom
JDI_Mbed_Team 7:4829ba349d31 1079 * @param[in] int memnu : animation buffer number.
JDI_Mbed_Team 7:4829ba349d31 1080 */
JDI_Mbed_Team 7:4829ba349d31 1081 void memLCD8::makeMovieFrame_Updown(int sx , int sy, int memnum)
JDI_Mbed_Team 7:4829ba349d31 1082 {
JDI_Mbed_Team 7:4829ba349d31 1083 int x,y;
JDI_Mbed_Team 7:4829ba349d31 1084 //pc2.printf("1<%d,%d>\n",_width,_height);
JDI_Mbed_Team 7:4829ba349d31 1085 for(y = 0; y < MOVIE_VERT_SIZE ;y++)
JDI_Mbed_Team 7:4829ba349d31 1086 {
JDI_Mbed_Team 7:4829ba349d31 1087 for(x = 0; x < MOVIE_HORI_SIZE ;x+=2)
JDI_Mbed_Team 7:4829ba349d31 1088 {
JDI_Mbed_Team 7:4829ba349d31 1089 if( (sx + x) >= _width ) continue;
JDI_Mbed_Team 7:4829ba349d31 1090 if( (sx + x) < 0 ) continue;
JDI_Mbed_Team 7:4829ba349d31 1091 if( (sy + y) >= _height ) continue;
JDI_Mbed_Team 7:4829ba349d31 1092 if( (sy + y) < 0 ) continue;
JDI_Mbed_Team 7:4829ba349d31 1093
JDI_Mbed_Team 7:4829ba349d31 1094 _dispBACKUPBUF[y*MOVIE_HORI_SIZE/2+x/2] = _dispBUF[(sy+y)*(_width)/2+(sx+x)/2];
JDI_Mbed_Team 7:4829ba349d31 1095
JDI_Mbed_Team 7:4829ba349d31 1096 if( (_dispMOVIEBUF[memnum][(MOVIE_VERT_SIZE-1-y)*MOVIE_HORI_SIZE/2+x/2]&0xF0) != 0 )
JDI_Mbed_Team 7:4829ba349d31 1097 _dispBUF[(sy+y)*(_width)/2+(sx+x)/2] = _dispBUF[(sy+y)*(_width)/2+(sx+x)/2]&0x0F | _dispMOVIEBUF[memnum][(MOVIE_VERT_SIZE-1-y)*MOVIE_HORI_SIZE/2+x/2]&0xF0; //MASK 0000 1111
JDI_Mbed_Team 7:4829ba349d31 1098
JDI_Mbed_Team 7:4829ba349d31 1099 if( (_dispMOVIEBUF[memnum][(MOVIE_VERT_SIZE-1-y)*MOVIE_HORI_SIZE/2+x/2]&0x0F) != 0 )
JDI_Mbed_Team 7:4829ba349d31 1100 _dispBUF[(sy+y)*(_width)/2+(sx+x)/2] = _dispBUF[(sy+y)*(_width)/2+(sx+x)/2]&0xF0 | _dispMOVIEBUF[memnum][(MOVIE_VERT_SIZE-1-y)*MOVIE_HORI_SIZE/2+x/2]&0x0F; //MASK 0000 1111
JDI_Mbed_Team 7:4829ba349d31 1101
JDI_Mbed_Team 7:4829ba349d31 1102 //pc2.printf("dispMOVIEBUF[%d][%d] = %d\n",x,y,_dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+x/2]);
JDI_Mbed_Team 7:4829ba349d31 1103 //_dispBUF[(sy+y)*(_width)/2+(sx+x)/2] = _dispMOVIEBUF[memnum][y*MOVIE_HORI_SIZE/2+x/2];
JDI_Mbed_Team 7:4829ba349d31 1104 }
JDI_Mbed_Team 7:4829ba349d31 1105 }
JDI_Mbed_Team 7:4829ba349d31 1106 //pc2.printf("memnum=%d,x=%d,y=%d>sx=%d,sy=%d\n",memnum,sx,sy,(sx+x)-1,(sy+y)-1);
JDI_Mbed_Team 7:4829ba349d31 1107
JDI_Mbed_Team 7:4829ba349d31 1108 }
JDI_Mbed_Team 7:4829ba349d31 1109 /**
JDI_Mbed_Team 7:4829ba349d31 1110 * @brief Transfer Pixel Data of backuped original frame buffer with x,y allocation to frame buffer.
JDI_Mbed_Team 7:4829ba349d31 1111 * @param[in] int sx : horizontal start allocation left to right
JDI_Mbed_Team 7:4829ba349d31 1112 * @param[in] int sy : vertival start allocation top to bottom
JDI_Mbed_Team 7:4829ba349d31 1113 * @param[in] int memnu : animation buffer number.
JDI_Mbed_Team 7:4829ba349d31 1114 */
JDI_Mbed_Team 7:4829ba349d31 1115 void memLCD8::RestoreMovieFrame(int sx , int sy, int memnum)
JDI_Mbed_Team 7:4829ba349d31 1116 {
JDI_Mbed_Team 7:4829ba349d31 1117 int x,y;
JDI_Mbed_Team 7:4829ba349d31 1118 //pc2.printf("1<%d,%d>\n",_width,_height);
JDI_Mbed_Team 7:4829ba349d31 1119 for(y = 0; y < MOVIE_VERT_SIZE;y++)
JDI_Mbed_Team 7:4829ba349d31 1120 {
JDI_Mbed_Team 7:4829ba349d31 1121 for(x = 0; x < MOVIE_HORI_SIZE ;x++)
JDI_Mbed_Team 7:4829ba349d31 1122 {
JDI_Mbed_Team 7:4829ba349d31 1123 if( (sx + x) >= _width ) continue;
JDI_Mbed_Team 7:4829ba349d31 1124 if( (sx + x) < 0 ) continue;
JDI_Mbed_Team 7:4829ba349d31 1125 if( (sy + y) >= _height ) continue;
JDI_Mbed_Team 7:4829ba349d31 1126 if( (sy + y) < 0 ) continue;
JDI_Mbed_Team 7:4829ba349d31 1127 _dispBUF[(sy+y)*(_width)/2+(sx+x)/2]=_dispBACKUPBUF[y*MOVIE_HORI_SIZE/2+x/2];
JDI_Mbed_Team 7:4829ba349d31 1128 }
JDI_Mbed_Team 7:4829ba349d31 1129 }
JDI_Mbed_Team 7:4829ba349d31 1130 //pc2.printf("memnum=%d,x=%d,y=%d>sx=%d,sy=%d\n",memnum,sx,sy,(sx+x)-1,(sy+y)-1);
JDI_Mbed_Team 7:4829ba349d31 1131
JDI_Mbed_Team 7:4829ba349d31 1132 }
JDI_Mbed_Team 7:4829ba349d31 1133 //end MOVIEBUFF_MODE
JDI_Mbed_Team 7:4829ba349d31 1134 #endif
JDI_Mbed_Team 7:4829ba349d31 1135 //end FRAMEBUFF_MODE
JDI_Mbed_Team 3:c67b96404016 1136 #endif
JDI_Mbed_Team 2:944f2968c19f 1137