for CountupNumber_sample3
MIP8F_SPI_Ver7.0
Ver7.0 Addtional function is SpeedMeter Sample for 4.4" MIP8F Display (Japan Display Inc)
MIP8F_SPI.cpp@7:4829ba349d31, 2019-01-09 (annotated)
- 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?
User | Revision | Line number | New 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 |