Smart

Dependencies:   Hexi_KW40Z

Committer:
Team_Eta_MBED
Date:
Wed Feb 28 16:34:40 2018 +0000
Revision:
0:69293b19ee19
Smart Baby Monitor Foundations

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Team_Eta_MBED 0:69293b19ee19 1 /** OLED Display Driver for Hexiwear
Team_Eta_MBED 0:69293b19ee19 2 * This file contains OLED driver functionality for drawing images and text
Team_Eta_MBED 0:69293b19ee19 3 *
Team_Eta_MBED 0:69293b19ee19 4 * Redistribution and use in source and binary forms, with or without modification,
Team_Eta_MBED 0:69293b19ee19 5 * are permitted provided that the following conditions are met:
Team_Eta_MBED 0:69293b19ee19 6 *
Team_Eta_MBED 0:69293b19ee19 7 * Redistributions of source code must retain the above copyright notice, this list
Team_Eta_MBED 0:69293b19ee19 8 * of conditions and the following disclaimer.
Team_Eta_MBED 0:69293b19ee19 9 *
Team_Eta_MBED 0:69293b19ee19 10 * Redistributions in binary form must reproduce the above copyright notice, this
Team_Eta_MBED 0:69293b19ee19 11 * list of conditions and the following disclaimer in the documentation and/or
Team_Eta_MBED 0:69293b19ee19 12 * other materials provided with the distribution.
Team_Eta_MBED 0:69293b19ee19 13 *
Team_Eta_MBED 0:69293b19ee19 14 * Neither the name of NXP, nor the names of its
Team_Eta_MBED 0:69293b19ee19 15 * contributors may be used to endorse or promote products derived from this
Team_Eta_MBED 0:69293b19ee19 16 * software without specific prior written permission.
Team_Eta_MBED 0:69293b19ee19 17 *
Team_Eta_MBED 0:69293b19ee19 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
Team_Eta_MBED 0:69293b19ee19 19 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
Team_Eta_MBED 0:69293b19ee19 20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Team_Eta_MBED 0:69293b19ee19 21 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
Team_Eta_MBED 0:69293b19ee19 22 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
Team_Eta_MBED 0:69293b19ee19 23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
Team_Eta_MBED 0:69293b19ee19 24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
Team_Eta_MBED 0:69293b19ee19 25 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Team_Eta_MBED 0:69293b19ee19 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
Team_Eta_MBED 0:69293b19ee19 27 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Team_Eta_MBED 0:69293b19ee19 28 *
Team_Eta_MBED 0:69293b19ee19 29 * visit: http://www.mikroe.com and http://www.nxp.com
Team_Eta_MBED 0:69293b19ee19 30 *
Team_Eta_MBED 0:69293b19ee19 31 * get support at: http://www.mikroe.com/forum and https://community.nxp.com
Team_Eta_MBED 0:69293b19ee19 32 *
Team_Eta_MBED 0:69293b19ee19 33 * Project HEXIWEAR, 2015
Team_Eta_MBED 0:69293b19ee19 34 */
Team_Eta_MBED 0:69293b19ee19 35
Team_Eta_MBED 0:69293b19ee19 36 #include "OLED_types.h"
Team_Eta_MBED 0:69293b19ee19 37 #include "OLED_info.h"
Team_Eta_MBED 0:69293b19ee19 38 #include "mbed.h"
Team_Eta_MBED 0:69293b19ee19 39 #include "Hexi_OLED_SSD1351.h"
Team_Eta_MBED 0:69293b19ee19 40 #include "OpenSans_Font.h"
Team_Eta_MBED 0:69293b19ee19 41
Team_Eta_MBED 0:69293b19ee19 42 const init_cmd_t seq[] = {
Team_Eta_MBED 0:69293b19ee19 43 OLED_CMD_SET_CMD_LOCK, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 44 OLED_UNLOCK, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 45 OLED_CMD_SET_CMD_LOCK, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 46 OLED_ACC_TO_CMD_YES, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 47 OLED_CMD_DISPLAYOFF, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 48 OLED_CMD_SET_OSC_FREQ_AND_CLOCKDIV, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 49 0xF1, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 50 OLED_CMD_SET_MUX_RATIO, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 51 0x5F, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 52 OLED_CMD_SET_REMAP, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 53 OLED_REMAP_SETTINGS, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 54 OLED_CMD_SET_COLUMN, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 55 0x00, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 56 0x5F, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 57 OLED_CMD_SET_ROW, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 58 0x00, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 59 0x5F, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 60 OLED_CMD_STARTLINE, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 61 0x80, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 62 OLED_CMD_DISPLAYOFFSET, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 63 0x60, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 64 OLED_CMD_PRECHARGE, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 65 0x32, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 66 OLED_CMD_VCOMH, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 67 0x05, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 68 OLED_CMD_NORMALDISPLAY, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 69 OLED_CMD_CONTRASTABC, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 70 0x8A, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 71 0x51, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 72 0x8A, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 73 OLED_CMD_CONTRASTMASTER, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 74 0xCF, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 75 OLED_CMD_SETVSL, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 76 0xA0, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 77 0xB5, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 78 0x55, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 79 OLED_CMD_PRECHARGE2, CMD_BYTE,
Team_Eta_MBED 0:69293b19ee19 80 0x01, DATA_BYTE,
Team_Eta_MBED 0:69293b19ee19 81 OLED_CMD_DISPLAYON, CMD_BYTE
Team_Eta_MBED 0:69293b19ee19 82 };
Team_Eta_MBED 0:69293b19ee19 83
Team_Eta_MBED 0:69293b19ee19 84
Team_Eta_MBED 0:69293b19ee19 85
Team_Eta_MBED 0:69293b19ee19 86 SSD1351::SSD1351(PinName mosiPin,PinName sclkPin,PinName pwrPin, PinName csPin,PinName rstPin, PinName dcPin): spi(mosiPin,NC,sclkPin) , power(pwrPin), cs(csPin),rst(rstPin),dc(dcPin)
Team_Eta_MBED 0:69293b19ee19 87 {
Team_Eta_MBED 0:69293b19ee19 88
Team_Eta_MBED 0:69293b19ee19 89 spi.frequency(8000000);
Team_Eta_MBED 0:69293b19ee19 90
Team_Eta_MBED 0:69293b19ee19 91
Team_Eta_MBED 0:69293b19ee19 92 dc =0;
Team_Eta_MBED 0:69293b19ee19 93 PowerOFF();
Team_Eta_MBED 0:69293b19ee19 94 wait_ms(1);
Team_Eta_MBED 0:69293b19ee19 95 rst = 0 ;
Team_Eta_MBED 0:69293b19ee19 96 wait_ms(1);
Team_Eta_MBED 0:69293b19ee19 97 rst = 1 ;
Team_Eta_MBED 0:69293b19ee19 98 wait_ms(1);
Team_Eta_MBED 0:69293b19ee19 99 PowerON();
Team_Eta_MBED 0:69293b19ee19 100
Team_Eta_MBED 0:69293b19ee19 101 currentChar_width = 0,
Team_Eta_MBED 0:69293b19ee19 102 currentChar_height = 0;
Team_Eta_MBED 0:69293b19ee19 103 colorMask = COLOR_WHITE;
Team_Eta_MBED 0:69293b19ee19 104
Team_Eta_MBED 0:69293b19ee19 105 oled_text_properties.alignParam = OLED_TEXT_ALIGN_CENTER;
Team_Eta_MBED 0:69293b19ee19 106 oled_text_properties.background = NULL;
Team_Eta_MBED 0:69293b19ee19 107 oled_text_properties.font = OpenSans_10x15_Regular;
Team_Eta_MBED 0:69293b19ee19 108 oled_text_properties.fontColor = COLOR_WHITE;
Team_Eta_MBED 0:69293b19ee19 109 SetTextProperties(&oled_text_properties);
Team_Eta_MBED 0:69293b19ee19 110
Team_Eta_MBED 0:69293b19ee19 111 oled_dynamic_area.areaBuffer = NULL;
Team_Eta_MBED 0:69293b19ee19 112 oled_dynamic_area.height = 0;
Team_Eta_MBED 0:69293b19ee19 113 oled_dynamic_area.width = 0;
Team_Eta_MBED 0:69293b19ee19 114 oled_dynamic_area.xCrd = 0;
Team_Eta_MBED 0:69293b19ee19 115 oled_dynamic_area.yCrd = 0;
Team_Eta_MBED 0:69293b19ee19 116
Team_Eta_MBED 0:69293b19ee19 117
Team_Eta_MBED 0:69293b19ee19 118 for (int i=0;i<39;i++)
Team_Eta_MBED 0:69293b19ee19 119 {
Team_Eta_MBED 0:69293b19ee19 120 SendCmd(seq[i].cmd, seq[i].type);
Team_Eta_MBED 0:69293b19ee19 121 }
Team_Eta_MBED 0:69293b19ee19 122
Team_Eta_MBED 0:69293b19ee19 123
Team_Eta_MBED 0:69293b19ee19 124
Team_Eta_MBED 0:69293b19ee19 125 }
Team_Eta_MBED 0:69293b19ee19 126
Team_Eta_MBED 0:69293b19ee19 127
Team_Eta_MBED 0:69293b19ee19 128 SSD1351::~SSD1351(void)
Team_Eta_MBED 0:69293b19ee19 129 {
Team_Eta_MBED 0:69293b19ee19 130 //TO_DO
Team_Eta_MBED 0:69293b19ee19 131 //Run Free and zero pointers.
Team_Eta_MBED 0:69293b19ee19 132
Team_Eta_MBED 0:69293b19ee19 133 }
Team_Eta_MBED 0:69293b19ee19 134
Team_Eta_MBED 0:69293b19ee19 135
Team_Eta_MBED 0:69293b19ee19 136
Team_Eta_MBED 0:69293b19ee19 137
Team_Eta_MBED 0:69293b19ee19 138 void SSD1351::SendCmd(uint32_t cmd,
Team_Eta_MBED 0:69293b19ee19 139 uint8_t isFirst)
Team_Eta_MBED 0:69293b19ee19 140 {
Team_Eta_MBED 0:69293b19ee19 141
Team_Eta_MBED 0:69293b19ee19 142
Team_Eta_MBED 0:69293b19ee19 143
Team_Eta_MBED 0:69293b19ee19 144 uint8_t
Team_Eta_MBED 0:69293b19ee19 145 txSize = 1,
Team_Eta_MBED 0:69293b19ee19 146 txBuf[4];
Team_Eta_MBED 0:69293b19ee19 147
Team_Eta_MBED 0:69293b19ee19 148 memcpy((void*)txBuf, (void*)&cmd, txSize );
Team_Eta_MBED 0:69293b19ee19 149
Team_Eta_MBED 0:69293b19ee19 150 if (isFirst )
Team_Eta_MBED 0:69293b19ee19 151 {
Team_Eta_MBED 0:69293b19ee19 152 dc = 0;
Team_Eta_MBED 0:69293b19ee19 153 }
Team_Eta_MBED 0:69293b19ee19 154 else
Team_Eta_MBED 0:69293b19ee19 155 {
Team_Eta_MBED 0:69293b19ee19 156 dc = 1;
Team_Eta_MBED 0:69293b19ee19 157 }
Team_Eta_MBED 0:69293b19ee19 158
Team_Eta_MBED 0:69293b19ee19 159 cs = 0;
Team_Eta_MBED 0:69293b19ee19 160 spi.write(*txBuf);
Team_Eta_MBED 0:69293b19ee19 161 cs = 1;
Team_Eta_MBED 0:69293b19ee19 162
Team_Eta_MBED 0:69293b19ee19 163 }
Team_Eta_MBED 0:69293b19ee19 164
Team_Eta_MBED 0:69293b19ee19 165
Team_Eta_MBED 0:69293b19ee19 166
Team_Eta_MBED 0:69293b19ee19 167 void SSD1351::SendData ( const uint8_t* dataToSend,
Team_Eta_MBED 0:69293b19ee19 168 uint32_t dataSize)
Team_Eta_MBED 0:69293b19ee19 169
Team_Eta_MBED 0:69293b19ee19 170 {
Team_Eta_MBED 0:69293b19ee19 171
Team_Eta_MBED 0:69293b19ee19 172
Team_Eta_MBED 0:69293b19ee19 173 uint16_t* arrayPtr = (uint16_t*)dataToSend;
Team_Eta_MBED 0:69293b19ee19 174
Team_Eta_MBED 0:69293b19ee19 175 for( uint32_t i = 0; i < dataSize/2; i++ )
Team_Eta_MBED 0:69293b19ee19 176 {
Team_Eta_MBED 0:69293b19ee19 177 arrayPtr[i] &= colorMask;
Team_Eta_MBED 0:69293b19ee19 178 }
Team_Eta_MBED 0:69293b19ee19 179
Team_Eta_MBED 0:69293b19ee19 180
Team_Eta_MBED 0:69293b19ee19 181 SendCmd( OLED_CMD_WRITERAM, CMD_BYTE );
Team_Eta_MBED 0:69293b19ee19 182
Team_Eta_MBED 0:69293b19ee19 183 /* sending data -> set DC pin */
Team_Eta_MBED 0:69293b19ee19 184 dc = 1;
Team_Eta_MBED 0:69293b19ee19 185 cs = 0 ;
Team_Eta_MBED 0:69293b19ee19 186
Team_Eta_MBED 0:69293b19ee19 187 const uint8_t*
Team_Eta_MBED 0:69293b19ee19 188 /* traversing pointer */
Team_Eta_MBED 0:69293b19ee19 189 bufPtr = dataToSend;
Team_Eta_MBED 0:69293b19ee19 190
Team_Eta_MBED 0:69293b19ee19 191
Team_Eta_MBED 0:69293b19ee19 192 for ( uint32_t i = 0; i < dataSize; i++)
Team_Eta_MBED 0:69293b19ee19 193 {
Team_Eta_MBED 0:69293b19ee19 194 spi.write(*bufPtr);
Team_Eta_MBED 0:69293b19ee19 195 bufPtr += 1;
Team_Eta_MBED 0:69293b19ee19 196 }
Team_Eta_MBED 0:69293b19ee19 197
Team_Eta_MBED 0:69293b19ee19 198 cs = 1;
Team_Eta_MBED 0:69293b19ee19 199
Team_Eta_MBED 0:69293b19ee19 200 }
Team_Eta_MBED 0:69293b19ee19 201
Team_Eta_MBED 0:69293b19ee19 202
Team_Eta_MBED 0:69293b19ee19 203 oled_status_t SSD1351::DrawBox (
Team_Eta_MBED 0:69293b19ee19 204 int8_t xCrd,
Team_Eta_MBED 0:69293b19ee19 205 int8_t yCrd,
Team_Eta_MBED 0:69293b19ee19 206 uint8_t width,
Team_Eta_MBED 0:69293b19ee19 207 uint8_t height,
Team_Eta_MBED 0:69293b19ee19 208 uint16_t color
Team_Eta_MBED 0:69293b19ee19 209 )
Team_Eta_MBED 0:69293b19ee19 210 {
Team_Eta_MBED 0:69293b19ee19 211
Team_Eta_MBED 0:69293b19ee19 212 oled_status_t status;
Team_Eta_MBED 0:69293b19ee19 213 oled_dynamic_area_t boxArea;
Team_Eta_MBED 0:69293b19ee19 214
Team_Eta_MBED 0:69293b19ee19 215 boxArea.xCrd = xCrd;
Team_Eta_MBED 0:69293b19ee19 216 boxArea.yCrd = yCrd;
Team_Eta_MBED 0:69293b19ee19 217 boxArea.width = width;
Team_Eta_MBED 0:69293b19ee19 218 boxArea.height = height;
Team_Eta_MBED 0:69293b19ee19 219
Team_Eta_MBED 0:69293b19ee19 220 uint32_t
Team_Eta_MBED 0:69293b19ee19 221 boxSize = width*height;
Team_Eta_MBED 0:69293b19ee19 222
Team_Eta_MBED 0:69293b19ee19 223 SetDynamicArea( &boxArea );
Team_Eta_MBED 0:69293b19ee19 224
Team_Eta_MBED 0:69293b19ee19 225 /* helper pointer */
Team_Eta_MBED 0:69293b19ee19 226 uint8_t*
Team_Eta_MBED 0:69293b19ee19 227 boxBuf = (uint8_t*)oled_dynamic_area.areaBuffer;
Team_Eta_MBED 0:69293b19ee19 228
Team_Eta_MBED 0:69293b19ee19 229 if ( NULL == boxBuf )
Team_Eta_MBED 0:69293b19ee19 230 {
Team_Eta_MBED 0:69293b19ee19 231
Team_Eta_MBED 0:69293b19ee19 232 return OLED_STATUS_ERROR;
Team_Eta_MBED 0:69293b19ee19 233 }
Team_Eta_MBED 0:69293b19ee19 234
Team_Eta_MBED 0:69293b19ee19 235 /* check the bounds */
Team_Eta_MBED 0:69293b19ee19 236 if AreCoordsNotValid( xCrd, yCrd, width, height )
Team_Eta_MBED 0:69293b19ee19 237 {
Team_Eta_MBED 0:69293b19ee19 238 status = OLED_STATUS_INIT_ERROR;
Team_Eta_MBED 0:69293b19ee19 239 }
Team_Eta_MBED 0:69293b19ee19 240
Team_Eta_MBED 0:69293b19ee19 241 else
Team_Eta_MBED 0:69293b19ee19 242 {
Team_Eta_MBED 0:69293b19ee19 243 /* fill the buffer with color */
Team_Eta_MBED 0:69293b19ee19 244
Team_Eta_MBED 0:69293b19ee19 245 for ( uint16_t i = 0; i < boxSize; i++ )
Team_Eta_MBED 0:69293b19ee19 246 {
Team_Eta_MBED 0:69293b19ee19 247 boxBuf[ 2*i ] = color >> 8;
Team_Eta_MBED 0:69293b19ee19 248 boxBuf[ 2*i + 1 ] = color;
Team_Eta_MBED 0:69293b19ee19 249 }
Team_Eta_MBED 0:69293b19ee19 250
Team_Eta_MBED 0:69293b19ee19 251 /* set the locations */
Team_Eta_MBED 0:69293b19ee19 252
Team_Eta_MBED 0:69293b19ee19 253 /* adjust for the offset */
Team_Eta_MBED 0:69293b19ee19 254 OLED_AdjustColumnOffset(xCrd);
Team_Eta_MBED 0:69293b19ee19 255 OLED_AdjustRowOffset(yCrd);
Team_Eta_MBED 0:69293b19ee19 256
Team_Eta_MBED 0:69293b19ee19 257 SendCmd( OLED_CMD_SET_COLUMN, CMD_BYTE);
Team_Eta_MBED 0:69293b19ee19 258 SendCmd( xCrd, DATA_BYTE );
Team_Eta_MBED 0:69293b19ee19 259 SendCmd( xCrd + (width-1), DATA_BYTE );
Team_Eta_MBED 0:69293b19ee19 260 SendCmd( OLED_CMD_SET_ROW, CMD_BYTE );
Team_Eta_MBED 0:69293b19ee19 261 SendCmd( yCrd, DATA_BYTE );
Team_Eta_MBED 0:69293b19ee19 262 SendCmd( yCrd + (height-1), DATA_BYTE );
Team_Eta_MBED 0:69293b19ee19 263
Team_Eta_MBED 0:69293b19ee19 264 /* fill the GRAM */
Team_Eta_MBED 0:69293b19ee19 265 SendData( (uint8_t*)boxBuf, boxSize*OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 266 DestroyDynamicArea();
Team_Eta_MBED 0:69293b19ee19 267
Team_Eta_MBED 0:69293b19ee19 268 }
Team_Eta_MBED 0:69293b19ee19 269
Team_Eta_MBED 0:69293b19ee19 270 return status;
Team_Eta_MBED 0:69293b19ee19 271 }
Team_Eta_MBED 0:69293b19ee19 272
Team_Eta_MBED 0:69293b19ee19 273 /**
Team_Eta_MBED 0:69293b19ee19 274 * fill the entire screen
Team_Eta_MBED 0:69293b19ee19 275 * @param color color to fill with
Team_Eta_MBED 0:69293b19ee19 276 * @return status flag
Team_Eta_MBED 0:69293b19ee19 277 */
Team_Eta_MBED 0:69293b19ee19 278 void SSD1351::FillScreen( uint16_t color )
Team_Eta_MBED 0:69293b19ee19 279 {
Team_Eta_MBED 0:69293b19ee19 280 /* fill the screen buffer with color */
Team_Eta_MBED 0:69293b19ee19 281 for ( uint16_t i = 0; i < ( OLED_SCREEN_WIDTH * OLED_SCREEN_HEIGHT ); i++ )
Team_Eta_MBED 0:69293b19ee19 282 {
Team_Eta_MBED 0:69293b19ee19 283 screenBuf[ 2*i ] = color >> 8;
Team_Eta_MBED 0:69293b19ee19 284 screenBuf[ 2*i + 1 ] = color;
Team_Eta_MBED 0:69293b19ee19 285 }
Team_Eta_MBED 0:69293b19ee19 286
Team_Eta_MBED 0:69293b19ee19 287 /* set the locations */
Team_Eta_MBED 0:69293b19ee19 288 SetBorders( 0, 0, OLED_SCREEN_WIDTH, OLED_SCREEN_HEIGHT );
Team_Eta_MBED 0:69293b19ee19 289
Team_Eta_MBED 0:69293b19ee19 290 /* fill GRAM */
Team_Eta_MBED 0:69293b19ee19 291 SendData( (uint8_t*)screenBuf, OLED_SCREEN_WIDTH * OLED_SCREEN_HEIGHT * OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 292
Team_Eta_MBED 0:69293b19ee19 293 }
Team_Eta_MBED 0:69293b19ee19 294
Team_Eta_MBED 0:69293b19ee19 295
Team_Eta_MBED 0:69293b19ee19 296
Team_Eta_MBED 0:69293b19ee19 297 oled_status_t SSD1351::DrawPixel (
Team_Eta_MBED 0:69293b19ee19 298 int8_t xCrd,
Team_Eta_MBED 0:69293b19ee19 299 int8_t yCrd,
Team_Eta_MBED 0:69293b19ee19 300 uint16_t color
Team_Eta_MBED 0:69293b19ee19 301 )
Team_Eta_MBED 0:69293b19ee19 302 {
Team_Eta_MBED 0:69293b19ee19 303 /* check the bounds */
Team_Eta_MBED 0:69293b19ee19 304 if AreCoordsNotValid( xCrd, yCrd, 1, 1 )
Team_Eta_MBED 0:69293b19ee19 305 {
Team_Eta_MBED 0:69293b19ee19 306 return OLED_STATUS_INIT_ERROR;
Team_Eta_MBED 0:69293b19ee19 307 }
Team_Eta_MBED 0:69293b19ee19 308
Team_Eta_MBED 0:69293b19ee19 309 else
Team_Eta_MBED 0:69293b19ee19 310 {
Team_Eta_MBED 0:69293b19ee19 311 /* set directions */
Team_Eta_MBED 0:69293b19ee19 312 SetBorders( xCrd, yCrd, OLED_SCREEN_WIDTH, OLED_SCREEN_HEIGHT);
Team_Eta_MBED 0:69293b19ee19 313
Team_Eta_MBED 0:69293b19ee19 314 uint16_t
Team_Eta_MBED 0:69293b19ee19 315 /* swap bytes */
Team_Eta_MBED 0:69293b19ee19 316 dot = color;
Team_Eta_MBED 0:69293b19ee19 317
Team_Eta_MBED 0:69293b19ee19 318 OLED_SwapMe(dot);
Team_Eta_MBED 0:69293b19ee19 319
Team_Eta_MBED 0:69293b19ee19 320 /* fill the GRAM */
Team_Eta_MBED 0:69293b19ee19 321 SendData( (uint8_t*)&dot, 2 );
Team_Eta_MBED 0:69293b19ee19 322
Team_Eta_MBED 0:69293b19ee19 323 return OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 324 }
Team_Eta_MBED 0:69293b19ee19 325 }
Team_Eta_MBED 0:69293b19ee19 326
Team_Eta_MBED 0:69293b19ee19 327
Team_Eta_MBED 0:69293b19ee19 328 oled_status_t SSD1351::DrawScreen (
Team_Eta_MBED 0:69293b19ee19 329 const uint8_t* image,
Team_Eta_MBED 0:69293b19ee19 330 int8_t xCrd,
Team_Eta_MBED 0:69293b19ee19 331 int8_t yCrd,
Team_Eta_MBED 0:69293b19ee19 332 uint8_t width,
Team_Eta_MBED 0:69293b19ee19 333 uint8_t height,
Team_Eta_MBED 0:69293b19ee19 334 oled_transition_t transition
Team_Eta_MBED 0:69293b19ee19 335 )
Team_Eta_MBED 0:69293b19ee19 336 {
Team_Eta_MBED 0:69293b19ee19 337 oled_status_t
Team_Eta_MBED 0:69293b19ee19 338 status = OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 339
Team_Eta_MBED 0:69293b19ee19 340 if AreCoordsNotValid( xCrd, yCrd, width, height )
Team_Eta_MBED 0:69293b19ee19 341 {
Team_Eta_MBED 0:69293b19ee19 342 return OLED_STATUS_INIT_ERROR;
Team_Eta_MBED 0:69293b19ee19 343 }
Team_Eta_MBED 0:69293b19ee19 344
Team_Eta_MBED 0:69293b19ee19 345 switch ( transition )
Team_Eta_MBED 0:69293b19ee19 346 {
Team_Eta_MBED 0:69293b19ee19 347 case OLED_TRANSITION_NONE: {
Team_Eta_MBED 0:69293b19ee19 348 /* set the locations */
Team_Eta_MBED 0:69293b19ee19 349 SetBorders( xCrd, yCrd, width, height);
Team_Eta_MBED 0:69293b19ee19 350
Team_Eta_MBED 0:69293b19ee19 351 /* fill the GRAM */
Team_Eta_MBED 0:69293b19ee19 352 SendData( (const uint8_t*)image, width * height * OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 353 break;
Team_Eta_MBED 0:69293b19ee19 354 }
Team_Eta_MBED 0:69293b19ee19 355
Team_Eta_MBED 0:69293b19ee19 356 case OLED_TRANSITION_TOP_DOWN: {
Team_Eta_MBED 0:69293b19ee19 357 TopDown( image, xCrd, yCrd, width, height );
Team_Eta_MBED 0:69293b19ee19 358 break;
Team_Eta_MBED 0:69293b19ee19 359 }
Team_Eta_MBED 0:69293b19ee19 360
Team_Eta_MBED 0:69293b19ee19 361 case OLED_TRANSITION_DOWN_TOP: {
Team_Eta_MBED 0:69293b19ee19 362 DownTop( image, xCrd, yCrd, width, height );
Team_Eta_MBED 0:69293b19ee19 363 break;
Team_Eta_MBED 0:69293b19ee19 364 }
Team_Eta_MBED 0:69293b19ee19 365
Team_Eta_MBED 0:69293b19ee19 366 case OLED_TRANSITION_LEFT_RIGHT: {
Team_Eta_MBED 0:69293b19ee19 367 LeftRight( image, xCrd, yCrd, width, height );
Team_Eta_MBED 0:69293b19ee19 368 break;
Team_Eta_MBED 0:69293b19ee19 369 }
Team_Eta_MBED 0:69293b19ee19 370
Team_Eta_MBED 0:69293b19ee19 371 case OLED_TRANSITION_RIGHT_LEFT: {
Team_Eta_MBED 0:69293b19ee19 372 RightLeft( image, xCrd, yCrd, width, height );
Team_Eta_MBED 0:69293b19ee19 373 break;
Team_Eta_MBED 0:69293b19ee19 374 }
Team_Eta_MBED 0:69293b19ee19 375
Team_Eta_MBED 0:69293b19ee19 376 default: {}
Team_Eta_MBED 0:69293b19ee19 377 }
Team_Eta_MBED 0:69293b19ee19 378
Team_Eta_MBED 0:69293b19ee19 379 return status;
Team_Eta_MBED 0:69293b19ee19 380 }
Team_Eta_MBED 0:69293b19ee19 381
Team_Eta_MBED 0:69293b19ee19 382
Team_Eta_MBED 0:69293b19ee19 383 oled_status_t SSD1351::SetFont(
Team_Eta_MBED 0:69293b19ee19 384 const uint8_t* newFont,
Team_Eta_MBED 0:69293b19ee19 385 uint16_t newColor
Team_Eta_MBED 0:69293b19ee19 386 )
Team_Eta_MBED 0:69293b19ee19 387 {
Team_Eta_MBED 0:69293b19ee19 388 /* save the new values in intern variables */
Team_Eta_MBED 0:69293b19ee19 389
Team_Eta_MBED 0:69293b19ee19 390 selectedFont = newFont;
Team_Eta_MBED 0:69293b19ee19 391 selectedFont_firstChar = newFont[2] | ( (uint16_t)newFont[3] << 8 );
Team_Eta_MBED 0:69293b19ee19 392 selectedFont_lastChar = newFont[4] | ( (uint16_t)newFont[5] << 8 );
Team_Eta_MBED 0:69293b19ee19 393 selectedFont_height = newFont[6];
Team_Eta_MBED 0:69293b19ee19 394 selectedFont_color = newColor;
Team_Eta_MBED 0:69293b19ee19 395
Team_Eta_MBED 0:69293b19ee19 396 OLED_SwapMe( selectedFont_color );
Team_Eta_MBED 0:69293b19ee19 397
Team_Eta_MBED 0:69293b19ee19 398 return OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 399 }
Team_Eta_MBED 0:69293b19ee19 400
Team_Eta_MBED 0:69293b19ee19 401
Team_Eta_MBED 0:69293b19ee19 402 void SSD1351::SetDynamicArea(oled_dynamic_area_t *dynamic_area)
Team_Eta_MBED 0:69293b19ee19 403 {
Team_Eta_MBED 0:69293b19ee19 404
Team_Eta_MBED 0:69293b19ee19 405 if( NULL == oled_dynamic_area.areaBuffer )
Team_Eta_MBED 0:69293b19ee19 406 {
Team_Eta_MBED 0:69293b19ee19 407 oled_dynamic_area.areaBuffer = (oled_pixel_t)AllocateDynamicArea( dynamic_area->width * dynamic_area->height );
Team_Eta_MBED 0:69293b19ee19 408 }
Team_Eta_MBED 0:69293b19ee19 409 else if(
Team_Eta_MBED 0:69293b19ee19 410 ( dynamic_area->height != oled_dynamic_area.height ) ||
Team_Eta_MBED 0:69293b19ee19 411 ( dynamic_area->width != oled_dynamic_area.width )
Team_Eta_MBED 0:69293b19ee19 412 )
Team_Eta_MBED 0:69293b19ee19 413 {
Team_Eta_MBED 0:69293b19ee19 414 DestroyDynamicArea();
Team_Eta_MBED 0:69293b19ee19 415 oled_dynamic_area.areaBuffer = (oled_pixel_t)AllocateDynamicArea( dynamic_area->width * dynamic_area->height );
Team_Eta_MBED 0:69293b19ee19 416 }
Team_Eta_MBED 0:69293b19ee19 417
Team_Eta_MBED 0:69293b19ee19 418 oled_dynamic_area.xCrd = dynamic_area->xCrd;
Team_Eta_MBED 0:69293b19ee19 419 oled_dynamic_area.yCrd = dynamic_area->yCrd;
Team_Eta_MBED 0:69293b19ee19 420 oled_dynamic_area.width = dynamic_area->width;
Team_Eta_MBED 0:69293b19ee19 421 oled_dynamic_area.height = dynamic_area->height;
Team_Eta_MBED 0:69293b19ee19 422 }
Team_Eta_MBED 0:69293b19ee19 423
Team_Eta_MBED 0:69293b19ee19 424
Team_Eta_MBED 0:69293b19ee19 425 void SSD1351::DestroyDynamicArea()
Team_Eta_MBED 0:69293b19ee19 426 {
Team_Eta_MBED 0:69293b19ee19 427 if ( NULL != oled_dynamic_area.areaBuffer )
Team_Eta_MBED 0:69293b19ee19 428 {
Team_Eta_MBED 0:69293b19ee19 429 DestroyDynamicArea( oled_dynamic_area.areaBuffer );
Team_Eta_MBED 0:69293b19ee19 430 oled_dynamic_area.areaBuffer = NULL;
Team_Eta_MBED 0:69293b19ee19 431 }
Team_Eta_MBED 0:69293b19ee19 432 }
Team_Eta_MBED 0:69293b19ee19 433
Team_Eta_MBED 0:69293b19ee19 434
Team_Eta_MBED 0:69293b19ee19 435 void SSD1351::SetTextProperties(oled_text_properties_t *textProperties)
Team_Eta_MBED 0:69293b19ee19 436 {
Team_Eta_MBED 0:69293b19ee19 437 oled_text_properties.font = textProperties->font;
Team_Eta_MBED 0:69293b19ee19 438 oled_text_properties.fontColor = textProperties->fontColor;
Team_Eta_MBED 0:69293b19ee19 439 oled_text_properties.alignParam = textProperties->alignParam;
Team_Eta_MBED 0:69293b19ee19 440 oled_text_properties.background = textProperties->background;
Team_Eta_MBED 0:69293b19ee19 441
Team_Eta_MBED 0:69293b19ee19 442 SetFont( oled_text_properties.font, oled_text_properties.fontColor );
Team_Eta_MBED 0:69293b19ee19 443 }
Team_Eta_MBED 0:69293b19ee19 444
Team_Eta_MBED 0:69293b19ee19 445 void SSD1351::GetTextProperties(oled_text_properties_t *textProperties)
Team_Eta_MBED 0:69293b19ee19 446 {
Team_Eta_MBED 0:69293b19ee19 447 textProperties->font = oled_text_properties.font;
Team_Eta_MBED 0:69293b19ee19 448 textProperties->fontColor = oled_text_properties.fontColor;
Team_Eta_MBED 0:69293b19ee19 449 textProperties->alignParam = oled_text_properties.alignParam;
Team_Eta_MBED 0:69293b19ee19 450 textProperties->background = oled_text_properties.background;
Team_Eta_MBED 0:69293b19ee19 451 }
Team_Eta_MBED 0:69293b19ee19 452
Team_Eta_MBED 0:69293b19ee19 453 uint8_t SSD1351::GetTextWidth(const uint8_t* text)
Team_Eta_MBED 0:69293b19ee19 454 {
Team_Eta_MBED 0:69293b19ee19 455 uint8_t chrCnt = 0;
Team_Eta_MBED 0:69293b19ee19 456 uint8_t text_width = 0;
Team_Eta_MBED 0:69293b19ee19 457
Team_Eta_MBED 0:69293b19ee19 458 while ( 0 != text[chrCnt] )
Team_Eta_MBED 0:69293b19ee19 459 {
Team_Eta_MBED 0:69293b19ee19 460 text_width += *( selectedFont + 8 + (uint16_t)( ( text[chrCnt++] - selectedFont_firstChar ) << 2 ) );
Team_Eta_MBED 0:69293b19ee19 461 /* make 1px space between chars */
Team_Eta_MBED 0:69293b19ee19 462 text_width++;
Team_Eta_MBED 0:69293b19ee19 463 }
Team_Eta_MBED 0:69293b19ee19 464 /* remove the final space */
Team_Eta_MBED 0:69293b19ee19 465 text_width--;
Team_Eta_MBED 0:69293b19ee19 466
Team_Eta_MBED 0:69293b19ee19 467 return text_width;
Team_Eta_MBED 0:69293b19ee19 468 }
Team_Eta_MBED 0:69293b19ee19 469
Team_Eta_MBED 0:69293b19ee19 470
Team_Eta_MBED 0:69293b19ee19 471
Team_Eta_MBED 0:69293b19ee19 472 uint8_t SSD1351::CharCount(uint8_t width, const uint8_t* font, const uint8_t* text, uint8_t length)
Team_Eta_MBED 0:69293b19ee19 473 {
Team_Eta_MBED 0:69293b19ee19 474 uint8_t chrCnt = 0;
Team_Eta_MBED 0:69293b19ee19 475 uint8_t text_width = 0;
Team_Eta_MBED 0:69293b19ee19 476 uint16_t firstChar;
Team_Eta_MBED 0:69293b19ee19 477
Team_Eta_MBED 0:69293b19ee19 478 firstChar = font[2] | ( (uint16_t)font[3] << 8 );
Team_Eta_MBED 0:69293b19ee19 479
Team_Eta_MBED 0:69293b19ee19 480 while ( chrCnt < length )
Team_Eta_MBED 0:69293b19ee19 481 {
Team_Eta_MBED 0:69293b19ee19 482 text_width += *( font + 8 + (uint16_t)( ( text[chrCnt++] - firstChar ) << 2 ) );
Team_Eta_MBED 0:69293b19ee19 483 if(text_width > width)
Team_Eta_MBED 0:69293b19ee19 484 {
Team_Eta_MBED 0:69293b19ee19 485 chrCnt--;
Team_Eta_MBED 0:69293b19ee19 486 break;
Team_Eta_MBED 0:69293b19ee19 487 }
Team_Eta_MBED 0:69293b19ee19 488 /* make 1px space between chars */
Team_Eta_MBED 0:69293b19ee19 489 text_width++;
Team_Eta_MBED 0:69293b19ee19 490 }
Team_Eta_MBED 0:69293b19ee19 491
Team_Eta_MBED 0:69293b19ee19 492 return chrCnt;
Team_Eta_MBED 0:69293b19ee19 493 }
Team_Eta_MBED 0:69293b19ee19 494
Team_Eta_MBED 0:69293b19ee19 495
Team_Eta_MBED 0:69293b19ee19 496
Team_Eta_MBED 0:69293b19ee19 497
Team_Eta_MBED 0:69293b19ee19 498 oled_status_t SSD1351::AddText( const uint8_t* text,int8_t xCrd, int8_t yCrd )
Team_Eta_MBED 0:69293b19ee19 499 {
Team_Eta_MBED 0:69293b19ee19 500 uint16_t
Team_Eta_MBED 0:69293b19ee19 501 chrCnt = 0;
Team_Eta_MBED 0:69293b19ee19 502 oled_pixel_t
Team_Eta_MBED 0:69293b19ee19 503 chrBuf = NULL;
Team_Eta_MBED 0:69293b19ee19 504
Team_Eta_MBED 0:69293b19ee19 505 uint8_t
Team_Eta_MBED 0:69293b19ee19 506 currentChar_x = 0,
Team_Eta_MBED 0:69293b19ee19 507 currentChar_y = 0;
Team_Eta_MBED 0:69293b19ee19 508
Team_Eta_MBED 0:69293b19ee19 509 uint8_t
Team_Eta_MBED 0:69293b19ee19 510 text_height = 0,
Team_Eta_MBED 0:69293b19ee19 511 text_width = 0;
Team_Eta_MBED 0:69293b19ee19 512
Team_Eta_MBED 0:69293b19ee19 513 text_width = GetTextWidth(text);
Team_Eta_MBED 0:69293b19ee19 514
Team_Eta_MBED 0:69293b19ee19 515 /*
Team_Eta_MBED 0:69293b19ee19 516 * set default values, if necessary
Team_Eta_MBED 0:69293b19ee19 517 */
Team_Eta_MBED 0:69293b19ee19 518
Team_Eta_MBED 0:69293b19ee19 519 text_height = selectedFont_height;
Team_Eta_MBED 0:69293b19ee19 520 oled_dynamic_area_t textArea;
Team_Eta_MBED 0:69293b19ee19 521
Team_Eta_MBED 0:69293b19ee19 522 textArea.width = text_width;
Team_Eta_MBED 0:69293b19ee19 523 textArea.height = text_height;
Team_Eta_MBED 0:69293b19ee19 524 textArea.xCrd = xCrd;
Team_Eta_MBED 0:69293b19ee19 525 textArea.yCrd = yCrd;
Team_Eta_MBED 0:69293b19ee19 526 SetDynamicArea(&textArea);
Team_Eta_MBED 0:69293b19ee19 527
Team_Eta_MBED 0:69293b19ee19 528 currentChar_y = ( oled_dynamic_area.height - text_height ) >> 1;
Team_Eta_MBED 0:69293b19ee19 529
Team_Eta_MBED 0:69293b19ee19 530 switch ( oled_text_properties.alignParam & OLED_TEXT_HALIGN_MASK )
Team_Eta_MBED 0:69293b19ee19 531 {
Team_Eta_MBED 0:69293b19ee19 532 case OLED_TEXT_ALIGN_LEFT:
Team_Eta_MBED 0:69293b19ee19 533 {
Team_Eta_MBED 0:69293b19ee19 534 currentChar_x = 0;
Team_Eta_MBED 0:69293b19ee19 535 break;
Team_Eta_MBED 0:69293b19ee19 536 }
Team_Eta_MBED 0:69293b19ee19 537
Team_Eta_MBED 0:69293b19ee19 538 case OLED_TEXT_ALIGN_RIGHT:
Team_Eta_MBED 0:69293b19ee19 539 {
Team_Eta_MBED 0:69293b19ee19 540 currentChar_x = ( oled_dynamic_area.width - text_width );
Team_Eta_MBED 0:69293b19ee19 541 break;
Team_Eta_MBED 0:69293b19ee19 542 }
Team_Eta_MBED 0:69293b19ee19 543
Team_Eta_MBED 0:69293b19ee19 544 case OLED_TEXT_ALIGN_CENTER:
Team_Eta_MBED 0:69293b19ee19 545 {
Team_Eta_MBED 0:69293b19ee19 546 currentChar_x += ( oled_dynamic_area.width - text_width ) >> 1 ;
Team_Eta_MBED 0:69293b19ee19 547 break;
Team_Eta_MBED 0:69293b19ee19 548 }
Team_Eta_MBED 0:69293b19ee19 549
Team_Eta_MBED 0:69293b19ee19 550 case OLED_TEXT_ALIGN_NONE:
Team_Eta_MBED 0:69293b19ee19 551 {
Team_Eta_MBED 0:69293b19ee19 552 break;
Team_Eta_MBED 0:69293b19ee19 553 }
Team_Eta_MBED 0:69293b19ee19 554
Team_Eta_MBED 0:69293b19ee19 555 default: {}
Team_Eta_MBED 0:69293b19ee19 556 }
Team_Eta_MBED 0:69293b19ee19 557
Team_Eta_MBED 0:69293b19ee19 558 if ( CreateTextBackground() != OLED_STATUS_SUCCESS )
Team_Eta_MBED 0:69293b19ee19 559 {
Team_Eta_MBED 0:69293b19ee19 560 return OLED_STATUS_ERROR;
Team_Eta_MBED 0:69293b19ee19 561 }
Team_Eta_MBED 0:69293b19ee19 562
Team_Eta_MBED 0:69293b19ee19 563 /*
Team_Eta_MBED 0:69293b19ee19 564 * write the characters into designated space, one by one
Team_Eta_MBED 0:69293b19ee19 565 */
Team_Eta_MBED 0:69293b19ee19 566
Team_Eta_MBED 0:69293b19ee19 567 chrCnt = 0;
Team_Eta_MBED 0:69293b19ee19 568 while ( 0 != text[chrCnt] )
Team_Eta_MBED 0:69293b19ee19 569 {
Team_Eta_MBED 0:69293b19ee19 570 WriteCharToBuf( text[chrCnt++], &chrBuf );
Team_Eta_MBED 0:69293b19ee19 571
Team_Eta_MBED 0:69293b19ee19 572 if ( NULL == chrBuf )
Team_Eta_MBED 0:69293b19ee19 573 {
Team_Eta_MBED 0:69293b19ee19 574 return OLED_STATUS_INIT_ERROR;
Team_Eta_MBED 0:69293b19ee19 575 }
Team_Eta_MBED 0:69293b19ee19 576
Team_Eta_MBED 0:69293b19ee19 577 else
Team_Eta_MBED 0:69293b19ee19 578 {
Team_Eta_MBED 0:69293b19ee19 579 if (
Team_Eta_MBED 0:69293b19ee19 580 ( ( currentChar_x + currentChar_width ) > oled_dynamic_area.width )
Team_Eta_MBED 0:69293b19ee19 581 || ( ( currentChar_y + currentChar_height ) > oled_dynamic_area.height )
Team_Eta_MBED 0:69293b19ee19 582 )
Team_Eta_MBED 0:69293b19ee19 583 {
Team_Eta_MBED 0:69293b19ee19 584 DestroyDynamicArea( chrBuf );
Team_Eta_MBED 0:69293b19ee19 585 chrBuf = NULL;
Team_Eta_MBED 0:69293b19ee19 586 return OLED_STATUS_ERROR;
Team_Eta_MBED 0:69293b19ee19 587 }
Team_Eta_MBED 0:69293b19ee19 588
Team_Eta_MBED 0:69293b19ee19 589 /* copy data */
Team_Eta_MBED 0:69293b19ee19 590 oled_pixel_t
Team_Eta_MBED 0:69293b19ee19 591 copyAddr = oled_dynamic_area.areaBuffer + ( currentChar_y * oled_dynamic_area.width + currentChar_x );
Team_Eta_MBED 0:69293b19ee19 592
Team_Eta_MBED 0:69293b19ee19 593 AddCharToTextArea( chrBuf, currentChar_width, currentChar_height, copyAddr, oled_dynamic_area.width );
Team_Eta_MBED 0:69293b19ee19 594
Team_Eta_MBED 0:69293b19ee19 595 currentChar_x += ( currentChar_width+1 );
Team_Eta_MBED 0:69293b19ee19 596 currentChar_y += 0;
Team_Eta_MBED 0:69293b19ee19 597
Team_Eta_MBED 0:69293b19ee19 598 DestroyDynamicArea( chrBuf );
Team_Eta_MBED 0:69293b19ee19 599 chrBuf = NULL;
Team_Eta_MBED 0:69293b19ee19 600 }
Team_Eta_MBED 0:69293b19ee19 601 }
Team_Eta_MBED 0:69293b19ee19 602
Team_Eta_MBED 0:69293b19ee19 603 UpdateBuffer(
Team_Eta_MBED 0:69293b19ee19 604 oled_dynamic_area.xCrd,
Team_Eta_MBED 0:69293b19ee19 605 oled_dynamic_area.yCrd,
Team_Eta_MBED 0:69293b19ee19 606 oled_dynamic_area.width,
Team_Eta_MBED 0:69293b19ee19 607 oled_dynamic_area.height,
Team_Eta_MBED 0:69293b19ee19 608 (const uint8_t*)oled_dynamic_area.areaBuffer
Team_Eta_MBED 0:69293b19ee19 609 );
Team_Eta_MBED 0:69293b19ee19 610
Team_Eta_MBED 0:69293b19ee19 611 return OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 612 }
Team_Eta_MBED 0:69293b19ee19 613
Team_Eta_MBED 0:69293b19ee19 614
Team_Eta_MBED 0:69293b19ee19 615 oled_status_t SSD1351::AddText( const uint8_t* text)
Team_Eta_MBED 0:69293b19ee19 616 {
Team_Eta_MBED 0:69293b19ee19 617 uint16_t
Team_Eta_MBED 0:69293b19ee19 618 chrCnt = 0;
Team_Eta_MBED 0:69293b19ee19 619 oled_pixel_t
Team_Eta_MBED 0:69293b19ee19 620 chrBuf = NULL;
Team_Eta_MBED 0:69293b19ee19 621
Team_Eta_MBED 0:69293b19ee19 622 uint8_t
Team_Eta_MBED 0:69293b19ee19 623 currentChar_x = 0,
Team_Eta_MBED 0:69293b19ee19 624 currentChar_y = 0;
Team_Eta_MBED 0:69293b19ee19 625
Team_Eta_MBED 0:69293b19ee19 626 uint8_t
Team_Eta_MBED 0:69293b19ee19 627 text_height = 0,
Team_Eta_MBED 0:69293b19ee19 628 text_width = 0;
Team_Eta_MBED 0:69293b19ee19 629
Team_Eta_MBED 0:69293b19ee19 630 text_width = GetTextWidth(text);
Team_Eta_MBED 0:69293b19ee19 631
Team_Eta_MBED 0:69293b19ee19 632 /**
Team_Eta_MBED 0:69293b19ee19 633 * set default values, if necessary
Team_Eta_MBED 0:69293b19ee19 634 */
Team_Eta_MBED 0:69293b19ee19 635
Team_Eta_MBED 0:69293b19ee19 636 text_height = selectedFont_height;
Team_Eta_MBED 0:69293b19ee19 637
Team_Eta_MBED 0:69293b19ee19 638 /* Disable this for now.Generated Fontwidth supposedly a lot wider than it really is*/
Team_Eta_MBED 0:69293b19ee19 639 #if 0
Team_Eta_MBED 0:69293b19ee19 640 if (( oled_dynamic_area.width < text_width )||( oled_dynamic_area.height < text_height ))
Team_Eta_MBED 0:69293b19ee19 641 {
Team_Eta_MBED 0:69293b19ee19 642 oled_dynamic_area_t textArea;
Team_Eta_MBED 0:69293b19ee19 643 textArea.width = text_width;
Team_Eta_MBED 0:69293b19ee19 644 textArea.height = text_height;
Team_Eta_MBED 0:69293b19ee19 645 SetDynamicArea(&textArea);
Team_Eta_MBED 0:69293b19ee19 646 }
Team_Eta_MBED 0:69293b19ee19 647 #endif
Team_Eta_MBED 0:69293b19ee19 648
Team_Eta_MBED 0:69293b19ee19 649 currentChar_y = ( oled_dynamic_area.height - text_height ) >> 1;
Team_Eta_MBED 0:69293b19ee19 650
Team_Eta_MBED 0:69293b19ee19 651 switch ( oled_text_properties.alignParam & OLED_TEXT_HALIGN_MASK )
Team_Eta_MBED 0:69293b19ee19 652 {
Team_Eta_MBED 0:69293b19ee19 653 case OLED_TEXT_ALIGN_LEFT:
Team_Eta_MBED 0:69293b19ee19 654 {
Team_Eta_MBED 0:69293b19ee19 655 currentChar_x = 0;
Team_Eta_MBED 0:69293b19ee19 656 break;
Team_Eta_MBED 0:69293b19ee19 657 }
Team_Eta_MBED 0:69293b19ee19 658
Team_Eta_MBED 0:69293b19ee19 659 case OLED_TEXT_ALIGN_RIGHT:
Team_Eta_MBED 0:69293b19ee19 660 {
Team_Eta_MBED 0:69293b19ee19 661 currentChar_x = ( oled_dynamic_area.width - text_width );
Team_Eta_MBED 0:69293b19ee19 662 break;
Team_Eta_MBED 0:69293b19ee19 663 }
Team_Eta_MBED 0:69293b19ee19 664
Team_Eta_MBED 0:69293b19ee19 665 case OLED_TEXT_ALIGN_CENTER:
Team_Eta_MBED 0:69293b19ee19 666 {
Team_Eta_MBED 0:69293b19ee19 667 currentChar_x += ( oled_dynamic_area.width - text_width ) >> 1 ;
Team_Eta_MBED 0:69293b19ee19 668 break;
Team_Eta_MBED 0:69293b19ee19 669 }
Team_Eta_MBED 0:69293b19ee19 670
Team_Eta_MBED 0:69293b19ee19 671 case OLED_TEXT_ALIGN_NONE:
Team_Eta_MBED 0:69293b19ee19 672 {
Team_Eta_MBED 0:69293b19ee19 673 break;
Team_Eta_MBED 0:69293b19ee19 674 }
Team_Eta_MBED 0:69293b19ee19 675
Team_Eta_MBED 0:69293b19ee19 676 default: {}
Team_Eta_MBED 0:69293b19ee19 677 }
Team_Eta_MBED 0:69293b19ee19 678
Team_Eta_MBED 0:69293b19ee19 679 if ( CreateTextBackground() != OLED_STATUS_SUCCESS )
Team_Eta_MBED 0:69293b19ee19 680 {
Team_Eta_MBED 0:69293b19ee19 681 return OLED_STATUS_ERROR;
Team_Eta_MBED 0:69293b19ee19 682 }
Team_Eta_MBED 0:69293b19ee19 683
Team_Eta_MBED 0:69293b19ee19 684 /**
Team_Eta_MBED 0:69293b19ee19 685 * write the characters into designated space, one by one
Team_Eta_MBED 0:69293b19ee19 686 */
Team_Eta_MBED 0:69293b19ee19 687
Team_Eta_MBED 0:69293b19ee19 688 chrCnt = 0;
Team_Eta_MBED 0:69293b19ee19 689 while ( 0 != text[chrCnt] )
Team_Eta_MBED 0:69293b19ee19 690 {
Team_Eta_MBED 0:69293b19ee19 691 WriteCharToBuf( text[chrCnt++], &chrBuf );
Team_Eta_MBED 0:69293b19ee19 692
Team_Eta_MBED 0:69293b19ee19 693 if ( NULL == chrBuf )
Team_Eta_MBED 0:69293b19ee19 694 {
Team_Eta_MBED 0:69293b19ee19 695 return OLED_STATUS_INIT_ERROR;
Team_Eta_MBED 0:69293b19ee19 696 }
Team_Eta_MBED 0:69293b19ee19 697
Team_Eta_MBED 0:69293b19ee19 698 else
Team_Eta_MBED 0:69293b19ee19 699 {
Team_Eta_MBED 0:69293b19ee19 700 if (
Team_Eta_MBED 0:69293b19ee19 701 ( ( currentChar_x + currentChar_width ) > oled_dynamic_area.width )
Team_Eta_MBED 0:69293b19ee19 702 || ( ( currentChar_y + currentChar_height ) > oled_dynamic_area.height )
Team_Eta_MBED 0:69293b19ee19 703 )
Team_Eta_MBED 0:69293b19ee19 704 {
Team_Eta_MBED 0:69293b19ee19 705 DestroyDynamicArea( chrBuf );
Team_Eta_MBED 0:69293b19ee19 706 chrBuf = NULL;
Team_Eta_MBED 0:69293b19ee19 707 return OLED_STATUS_ERROR;
Team_Eta_MBED 0:69293b19ee19 708 }
Team_Eta_MBED 0:69293b19ee19 709
Team_Eta_MBED 0:69293b19ee19 710 /* copy data */
Team_Eta_MBED 0:69293b19ee19 711 oled_pixel_t
Team_Eta_MBED 0:69293b19ee19 712 copyAddr = oled_dynamic_area.areaBuffer + ( currentChar_y * oled_dynamic_area.width + currentChar_x );
Team_Eta_MBED 0:69293b19ee19 713
Team_Eta_MBED 0:69293b19ee19 714 AddCharToTextArea( chrBuf, currentChar_width, currentChar_height, copyAddr, oled_dynamic_area.width );
Team_Eta_MBED 0:69293b19ee19 715
Team_Eta_MBED 0:69293b19ee19 716 currentChar_x += ( currentChar_width+1 );
Team_Eta_MBED 0:69293b19ee19 717 currentChar_y += 0;
Team_Eta_MBED 0:69293b19ee19 718
Team_Eta_MBED 0:69293b19ee19 719 DestroyDynamicArea( chrBuf );
Team_Eta_MBED 0:69293b19ee19 720 chrBuf = NULL;
Team_Eta_MBED 0:69293b19ee19 721 }
Team_Eta_MBED 0:69293b19ee19 722 }
Team_Eta_MBED 0:69293b19ee19 723
Team_Eta_MBED 0:69293b19ee19 724 UpdateBuffer(
Team_Eta_MBED 0:69293b19ee19 725 oled_dynamic_area.xCrd,
Team_Eta_MBED 0:69293b19ee19 726 oled_dynamic_area.yCrd,
Team_Eta_MBED 0:69293b19ee19 727 oled_dynamic_area.width,
Team_Eta_MBED 0:69293b19ee19 728 oled_dynamic_area.height,
Team_Eta_MBED 0:69293b19ee19 729 (const uint8_t*)oled_dynamic_area.areaBuffer
Team_Eta_MBED 0:69293b19ee19 730 );
Team_Eta_MBED 0:69293b19ee19 731
Team_Eta_MBED 0:69293b19ee19 732 return OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 733 }
Team_Eta_MBED 0:69293b19ee19 734
Team_Eta_MBED 0:69293b19ee19 735
Team_Eta_MBED 0:69293b19ee19 736
Team_Eta_MBED 0:69293b19ee19 737 oled_status_t SSD1351::DrawText( const uint8_t* text)
Team_Eta_MBED 0:69293b19ee19 738 {
Team_Eta_MBED 0:69293b19ee19 739
Team_Eta_MBED 0:69293b19ee19 740 if ( NULL == text )
Team_Eta_MBED 0:69293b19ee19 741 {
Team_Eta_MBED 0:69293b19ee19 742 return OLED_STATUS_ERROR;
Team_Eta_MBED 0:69293b19ee19 743 }
Team_Eta_MBED 0:69293b19ee19 744
Team_Eta_MBED 0:69293b19ee19 745 AddText(text);
Team_Eta_MBED 0:69293b19ee19 746 /* set the locations */
Team_Eta_MBED 0:69293b19ee19 747 SetBorders( oled_dynamic_area.xCrd, oled_dynamic_area.yCrd, oled_dynamic_area.width, oled_dynamic_area.height );
Team_Eta_MBED 0:69293b19ee19 748 /* fill the GRAM */
Team_Eta_MBED 0:69293b19ee19 749 SendData( (const uint8_t*)oled_dynamic_area.areaBuffer, oled_dynamic_area.width * oled_dynamic_area.height * OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 750
Team_Eta_MBED 0:69293b19ee19 751 //free( currentTextAreaImage );
Team_Eta_MBED 0:69293b19ee19 752 return OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 753 }
Team_Eta_MBED 0:69293b19ee19 754
Team_Eta_MBED 0:69293b19ee19 755
Team_Eta_MBED 0:69293b19ee19 756 void SSD1351::GetImageDimensions(uint8_t *width, uint8_t *height, const uint8_t* image)
Team_Eta_MBED 0:69293b19ee19 757 {
Team_Eta_MBED 0:69293b19ee19 758 *height = image[2] + (image[3] << 8);
Team_Eta_MBED 0:69293b19ee19 759 *width = image[4] + (image[5] << 8);
Team_Eta_MBED 0:69293b19ee19 760 }
Team_Eta_MBED 0:69293b19ee19 761
Team_Eta_MBED 0:69293b19ee19 762
Team_Eta_MBED 0:69293b19ee19 763 oled_status_t SSD1351::AddImage ( const uint8_t* image )
Team_Eta_MBED 0:69293b19ee19 764 {
Team_Eta_MBED 0:69293b19ee19 765 oled_status_t
Team_Eta_MBED 0:69293b19ee19 766 status = OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 767
Team_Eta_MBED 0:69293b19ee19 768 /* check the bounds */
Team_Eta_MBED 0:69293b19ee19 769 if AreCoordsNotValid( oled_dynamic_area.xCrd, oled_dynamic_area.yCrd, oled_dynamic_area.width, oled_dynamic_area.height )
Team_Eta_MBED 0:69293b19ee19 770 {
Team_Eta_MBED 0:69293b19ee19 771 status = OLED_STATUS_INIT_ERROR;
Team_Eta_MBED 0:69293b19ee19 772 }
Team_Eta_MBED 0:69293b19ee19 773
Team_Eta_MBED 0:69293b19ee19 774 else
Team_Eta_MBED 0:69293b19ee19 775 {
Team_Eta_MBED 0:69293b19ee19 776 Swap( (oled_pixel_t)oled_dynamic_area.areaBuffer, BMP_SkipHeader(image), oled_dynamic_area.width*oled_dynamic_area.height );
Team_Eta_MBED 0:69293b19ee19 777
Team_Eta_MBED 0:69293b19ee19 778 /* update the main screen buffer */
Team_Eta_MBED 0:69293b19ee19 779 UpdateBuffer( oled_dynamic_area.xCrd, oled_dynamic_area.yCrd, oled_dynamic_area.width, oled_dynamic_area.height, (const uint8_t *)oled_dynamic_area.areaBuffer );
Team_Eta_MBED 0:69293b19ee19 780 }
Team_Eta_MBED 0:69293b19ee19 781
Team_Eta_MBED 0:69293b19ee19 782 return status;
Team_Eta_MBED 0:69293b19ee19 783 }
Team_Eta_MBED 0:69293b19ee19 784
Team_Eta_MBED 0:69293b19ee19 785
Team_Eta_MBED 0:69293b19ee19 786 oled_status_t SSD1351::AddImage ( const uint8_t* image, int8_t xCrd, int8_t yCrd )
Team_Eta_MBED 0:69293b19ee19 787 {
Team_Eta_MBED 0:69293b19ee19 788 oled_status_t
Team_Eta_MBED 0:69293b19ee19 789 status = OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 790
Team_Eta_MBED 0:69293b19ee19 791 oled_dynamic_area_t image_dynamicArea;
Team_Eta_MBED 0:69293b19ee19 792
Team_Eta_MBED 0:69293b19ee19 793 image_dynamicArea.xCrd = xCrd;
Team_Eta_MBED 0:69293b19ee19 794 image_dynamicArea.yCrd = yCrd;
Team_Eta_MBED 0:69293b19ee19 795
Team_Eta_MBED 0:69293b19ee19 796 GetImageDimensions(&image_dynamicArea.width, &image_dynamicArea.height, image);
Team_Eta_MBED 0:69293b19ee19 797 SetDynamicArea(&image_dynamicArea);
Team_Eta_MBED 0:69293b19ee19 798
Team_Eta_MBED 0:69293b19ee19 799 /* check the bounds */
Team_Eta_MBED 0:69293b19ee19 800 if AreCoordsNotValid( oled_dynamic_area.xCrd, oled_dynamic_area.yCrd, oled_dynamic_area.width, oled_dynamic_area.height )
Team_Eta_MBED 0:69293b19ee19 801 {
Team_Eta_MBED 0:69293b19ee19 802 status = OLED_STATUS_INIT_ERROR;
Team_Eta_MBED 0:69293b19ee19 803 }
Team_Eta_MBED 0:69293b19ee19 804
Team_Eta_MBED 0:69293b19ee19 805 else
Team_Eta_MBED 0:69293b19ee19 806 {
Team_Eta_MBED 0:69293b19ee19 807 Swap( (oled_pixel_t)oled_dynamic_area.areaBuffer, BMP_SkipHeader(image), oled_dynamic_area.width*oled_dynamic_area.height );
Team_Eta_MBED 0:69293b19ee19 808
Team_Eta_MBED 0:69293b19ee19 809 /* update the main screen buffer */
Team_Eta_MBED 0:69293b19ee19 810 UpdateBuffer( oled_dynamic_area.xCrd, oled_dynamic_area.yCrd, oled_dynamic_area.width, oled_dynamic_area.height, (const uint8_t *)oled_dynamic_area.areaBuffer );
Team_Eta_MBED 0:69293b19ee19 811 }
Team_Eta_MBED 0:69293b19ee19 812
Team_Eta_MBED 0:69293b19ee19 813 return status;
Team_Eta_MBED 0:69293b19ee19 814 }
Team_Eta_MBED 0:69293b19ee19 815
Team_Eta_MBED 0:69293b19ee19 816
Team_Eta_MBED 0:69293b19ee19 817
Team_Eta_MBED 0:69293b19ee19 818 oled_status_t SSD1351::DrawImage ( const uint8_t* image )
Team_Eta_MBED 0:69293b19ee19 819 {
Team_Eta_MBED 0:69293b19ee19 820
Team_Eta_MBED 0:69293b19ee19 821 oled_status_t
Team_Eta_MBED 0:69293b19ee19 822 status = OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 823
Team_Eta_MBED 0:69293b19ee19 824 status = AddImage( image );
Team_Eta_MBED 0:69293b19ee19 825
Team_Eta_MBED 0:69293b19ee19 826 /* set the locations */
Team_Eta_MBED 0:69293b19ee19 827 SetBorders( oled_dynamic_area.xCrd, oled_dynamic_area.yCrd, oled_dynamic_area.width, oled_dynamic_area.height );
Team_Eta_MBED 0:69293b19ee19 828
Team_Eta_MBED 0:69293b19ee19 829 /* fill the GRAM */
Team_Eta_MBED 0:69293b19ee19 830 SendData( (const uint8_t*)oled_dynamic_area.areaBuffer, oled_dynamic_area.width * oled_dynamic_area.height * OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 831
Team_Eta_MBED 0:69293b19ee19 832
Team_Eta_MBED 0:69293b19ee19 833 return status;
Team_Eta_MBED 0:69293b19ee19 834 }
Team_Eta_MBED 0:69293b19ee19 835
Team_Eta_MBED 0:69293b19ee19 836 oled_status_t SSD1351::DrawImage ( const uint8_t* image, int8_t xCrd, int8_t yCrd )
Team_Eta_MBED 0:69293b19ee19 837 {
Team_Eta_MBED 0:69293b19ee19 838
Team_Eta_MBED 0:69293b19ee19 839 oled_status_t
Team_Eta_MBED 0:69293b19ee19 840 status = OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 841
Team_Eta_MBED 0:69293b19ee19 842 status = AddImage( image,xCrd,yCrd);
Team_Eta_MBED 0:69293b19ee19 843
Team_Eta_MBED 0:69293b19ee19 844 /* set the locations */
Team_Eta_MBED 0:69293b19ee19 845 SetBorders( oled_dynamic_area.xCrd, oled_dynamic_area.yCrd, oled_dynamic_area.width, oled_dynamic_area.height );
Team_Eta_MBED 0:69293b19ee19 846
Team_Eta_MBED 0:69293b19ee19 847 /* fill the GRAM */
Team_Eta_MBED 0:69293b19ee19 848 SendData( (const uint8_t*)oled_dynamic_area.areaBuffer, oled_dynamic_area.width * oled_dynamic_area.height * OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 849
Team_Eta_MBED 0:69293b19ee19 850
Team_Eta_MBED 0:69293b19ee19 851 return status;
Team_Eta_MBED 0:69293b19ee19 852 }
Team_Eta_MBED 0:69293b19ee19 853
Team_Eta_MBED 0:69293b19ee19 854
Team_Eta_MBED 0:69293b19ee19 855
Team_Eta_MBED 0:69293b19ee19 856 void SSD1351::DimScreenON()
Team_Eta_MBED 0:69293b19ee19 857 {
Team_Eta_MBED 0:69293b19ee19 858 for ( int i = 0; i < 16; i++ )
Team_Eta_MBED 0:69293b19ee19 859 {
Team_Eta_MBED 0:69293b19ee19 860 SendCmd( OLED_CMD_CONTRASTMASTER, CMD_BYTE );
Team_Eta_MBED 0:69293b19ee19 861 SendCmd( 0xC0 | (0xF-i), DATA_BYTE );
Team_Eta_MBED 0:69293b19ee19 862 wait_ms(20);
Team_Eta_MBED 0:69293b19ee19 863 // OSA_TimeDelay( 20 );
Team_Eta_MBED 0:69293b19ee19 864 }
Team_Eta_MBED 0:69293b19ee19 865 }
Team_Eta_MBED 0:69293b19ee19 866
Team_Eta_MBED 0:69293b19ee19 867
Team_Eta_MBED 0:69293b19ee19 868 void SSD1351::DimScreenOFF()
Team_Eta_MBED 0:69293b19ee19 869 {
Team_Eta_MBED 0:69293b19ee19 870 SendCmd( OLED_CMD_CONTRASTMASTER, CMD_BYTE );
Team_Eta_MBED 0:69293b19ee19 871 SendCmd( 0xC0 | 0xF, DATA_BYTE );
Team_Eta_MBED 0:69293b19ee19 872 }
Team_Eta_MBED 0:69293b19ee19 873
Team_Eta_MBED 0:69293b19ee19 874
Team_Eta_MBED 0:69293b19ee19 875
Team_Eta_MBED 0:69293b19ee19 876 void SSD1351::Swap(
Team_Eta_MBED 0:69293b19ee19 877 oled_pixel_t imgDst,
Team_Eta_MBED 0:69293b19ee19 878 const uint8_t* imgSrc,
Team_Eta_MBED 0:69293b19ee19 879 uint16_t imgSize
Team_Eta_MBED 0:69293b19ee19 880 )
Team_Eta_MBED 0:69293b19ee19 881 {
Team_Eta_MBED 0:69293b19ee19 882 for ( int var = 0; var < imgSize; var++ )
Team_Eta_MBED 0:69293b19ee19 883 {
Team_Eta_MBED 0:69293b19ee19 884 *imgDst = *imgSrc << 8;
Team_Eta_MBED 0:69293b19ee19 885 imgSrc++;
Team_Eta_MBED 0:69293b19ee19 886 *imgDst |= *imgSrc;
Team_Eta_MBED 0:69293b19ee19 887 imgDst++;
Team_Eta_MBED 0:69293b19ee19 888 imgSrc++;
Team_Eta_MBED 0:69293b19ee19 889 }
Team_Eta_MBED 0:69293b19ee19 890 }
Team_Eta_MBED 0:69293b19ee19 891
Team_Eta_MBED 0:69293b19ee19 892
Team_Eta_MBED 0:69293b19ee19 893 void SSD1351::PowerON()
Team_Eta_MBED 0:69293b19ee19 894 {
Team_Eta_MBED 0:69293b19ee19 895 power = 1;
Team_Eta_MBED 0:69293b19ee19 896 }
Team_Eta_MBED 0:69293b19ee19 897
Team_Eta_MBED 0:69293b19ee19 898 void SSD1351::PowerOFF()
Team_Eta_MBED 0:69293b19ee19 899 {
Team_Eta_MBED 0:69293b19ee19 900 power = 0;
Team_Eta_MBED 0:69293b19ee19 901 }
Team_Eta_MBED 0:69293b19ee19 902
Team_Eta_MBED 0:69293b19ee19 903
Team_Eta_MBED 0:69293b19ee19 904
Team_Eta_MBED 0:69293b19ee19 905 /* Formerly Known as GuiDriver_UpdateScreen */
Team_Eta_MBED 0:69293b19ee19 906 void SSD1351::UpdateBuffer (
Team_Eta_MBED 0:69293b19ee19 907 int8_t xCrd,
Team_Eta_MBED 0:69293b19ee19 908 int8_t yCrd,
Team_Eta_MBED 0:69293b19ee19 909 uint8_t width,
Team_Eta_MBED 0:69293b19ee19 910 uint8_t height,
Team_Eta_MBED 0:69293b19ee19 911 const uint8_t* image
Team_Eta_MBED 0:69293b19ee19 912 )
Team_Eta_MBED 0:69293b19ee19 913 {
Team_Eta_MBED 0:69293b19ee19 914 /* copy data */
Team_Eta_MBED 0:69293b19ee19 915 oled_pixel_t
Team_Eta_MBED 0:69293b19ee19 916 copyAddr = (oled_pixel_t)screenBuf + ( yCrd*OLED_SCREEN_WIDTH + xCrd );
Team_Eta_MBED 0:69293b19ee19 917
Team_Eta_MBED 0:69293b19ee19 918 for ( uint8_t i = 0; i < height; i++ )
Team_Eta_MBED 0:69293b19ee19 919 {
Team_Eta_MBED 0:69293b19ee19 920 memcpy( (void*)copyAddr, (void*)image, width*OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 921 copyAddr += OLED_SCREEN_WIDTH;
Team_Eta_MBED 0:69293b19ee19 922 image += width*OLED_BYTES_PER_PIXEL;
Team_Eta_MBED 0:69293b19ee19 923 }
Team_Eta_MBED 0:69293b19ee19 924 }
Team_Eta_MBED 0:69293b19ee19 925
Team_Eta_MBED 0:69293b19ee19 926
Team_Eta_MBED 0:69293b19ee19 927 oled_status_t SSD1351::Label ( const uint8_t* text,int8_t xCrd, int8_t yCrd )
Team_Eta_MBED 0:69293b19ee19 928 {
Team_Eta_MBED 0:69293b19ee19 929
Team_Eta_MBED 0:69293b19ee19 930 if ( NULL == text )
Team_Eta_MBED 0:69293b19ee19 931 {
Team_Eta_MBED 0:69293b19ee19 932 return OLED_STATUS_ERROR;
Team_Eta_MBED 0:69293b19ee19 933 }
Team_Eta_MBED 0:69293b19ee19 934
Team_Eta_MBED 0:69293b19ee19 935 AddText(text,xCrd,yCrd);
Team_Eta_MBED 0:69293b19ee19 936
Team_Eta_MBED 0:69293b19ee19 937 /* set the locations */
Team_Eta_MBED 0:69293b19ee19 938 SetBorders( oled_dynamic_area.xCrd, oled_dynamic_area.yCrd, oled_dynamic_area.width, oled_dynamic_area.height );
Team_Eta_MBED 0:69293b19ee19 939
Team_Eta_MBED 0:69293b19ee19 940 /* fill the GRAM */
Team_Eta_MBED 0:69293b19ee19 941 SendData( (const uint8_t*)oled_dynamic_area.areaBuffer, oled_dynamic_area.width * oled_dynamic_area.height * OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 942
Team_Eta_MBED 0:69293b19ee19 943 //free( currentTextAreaImage );
Team_Eta_MBED 0:69293b19ee19 944 return OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 945 }
Team_Eta_MBED 0:69293b19ee19 946
Team_Eta_MBED 0:69293b19ee19 947
Team_Eta_MBED 0:69293b19ee19 948 oled_status_t SSD1351::TextBox(const uint8_t* text, int8_t xCrd, int8_t yCrd,uint8_t width,uint8_t height)
Team_Eta_MBED 0:69293b19ee19 949 {
Team_Eta_MBED 0:69293b19ee19 950
Team_Eta_MBED 0:69293b19ee19 951 if ( NULL == text )
Team_Eta_MBED 0:69293b19ee19 952 {
Team_Eta_MBED 0:69293b19ee19 953 return OLED_STATUS_ERROR;
Team_Eta_MBED 0:69293b19ee19 954 }
Team_Eta_MBED 0:69293b19ee19 955
Team_Eta_MBED 0:69293b19ee19 956 oled_dynamic_area_t textArea;
Team_Eta_MBED 0:69293b19ee19 957 textArea.width = width;
Team_Eta_MBED 0:69293b19ee19 958 textArea.height = height;
Team_Eta_MBED 0:69293b19ee19 959 textArea.xCrd = xCrd;
Team_Eta_MBED 0:69293b19ee19 960 textArea.yCrd = yCrd;
Team_Eta_MBED 0:69293b19ee19 961
Team_Eta_MBED 0:69293b19ee19 962 SetDynamicArea(&textArea);
Team_Eta_MBED 0:69293b19ee19 963 DrawText(text);
Team_Eta_MBED 0:69293b19ee19 964
Team_Eta_MBED 0:69293b19ee19 965 return OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 966
Team_Eta_MBED 0:69293b19ee19 967 }
Team_Eta_MBED 0:69293b19ee19 968
Team_Eta_MBED 0:69293b19ee19 969
Team_Eta_MBED 0:69293b19ee19 970 /* Internal Functions */
Team_Eta_MBED 0:69293b19ee19 971
Team_Eta_MBED 0:69293b19ee19 972 /**
Team_Eta_MBED 0:69293b19ee19 973 * [transpose description]
Team_Eta_MBED 0:69293b19ee19 974 * @param transImage Transposed Image
Team_Eta_MBED 0:69293b19ee19 975 * @param image Source Image
Team_Eta_MBED 0:69293b19ee19 976 * @param width Width to Transpose
Team_Eta_MBED 0:69293b19ee19 977 * @param height Height to Transpose
Team_Eta_MBED 0:69293b19ee19 978 */
Team_Eta_MBED 0:69293b19ee19 979 void SSD1351::Transpose(
Team_Eta_MBED 0:69293b19ee19 980 oled_pixel_t transImage,
Team_Eta_MBED 0:69293b19ee19 981 const oled_pixel_t image,
Team_Eta_MBED 0:69293b19ee19 982 uint8_t width,
Team_Eta_MBED 0:69293b19ee19 983 uint8_t height
Team_Eta_MBED 0:69293b19ee19 984 )
Team_Eta_MBED 0:69293b19ee19 985 {
Team_Eta_MBED 0:69293b19ee19 986 for ( uint8_t i = 0; i < height; i++ )
Team_Eta_MBED 0:69293b19ee19 987 {
Team_Eta_MBED 0:69293b19ee19 988 for ( uint8_t j = 0; j < width ; j++ )
Team_Eta_MBED 0:69293b19ee19 989 {
Team_Eta_MBED 0:69293b19ee19 990 transImage[ j*height + i ] = image[ i*width + j ];
Team_Eta_MBED 0:69293b19ee19 991 }
Team_Eta_MBED 0:69293b19ee19 992 }
Team_Eta_MBED 0:69293b19ee19 993 }
Team_Eta_MBED 0:69293b19ee19 994
Team_Eta_MBED 0:69293b19ee19 995
Team_Eta_MBED 0:69293b19ee19 996
Team_Eta_MBED 0:69293b19ee19 997 /**
Team_Eta_MBED 0:69293b19ee19 998 * TopDown Transition Effect for Image
Team_Eta_MBED 0:69293b19ee19 999 * @param image image to be transitioned
Team_Eta_MBED 0:69293b19ee19 1000 * @param xCrd x coordinate of image
Team_Eta_MBED 0:69293b19ee19 1001 * @param yCrd y coordinate of image
Team_Eta_MBED 0:69293b19ee19 1002 * @param width width of image
Team_Eta_MBED 0:69293b19ee19 1003 * @param height height of image
Team_Eta_MBED 0:69293b19ee19 1004 * @return status flag
Team_Eta_MBED 0:69293b19ee19 1005 */
Team_Eta_MBED 0:69293b19ee19 1006 oled_status_t SSD1351::TopDown(
Team_Eta_MBED 0:69293b19ee19 1007 const uint8_t* image,
Team_Eta_MBED 0:69293b19ee19 1008 int8_t xCrd,
Team_Eta_MBED 0:69293b19ee19 1009 int8_t yCrd,
Team_Eta_MBED 0:69293b19ee19 1010 uint8_t width,
Team_Eta_MBED 0:69293b19ee19 1011 uint8_t height
Team_Eta_MBED 0:69293b19ee19 1012 )
Team_Eta_MBED 0:69293b19ee19 1013 {
Team_Eta_MBED 0:69293b19ee19 1014 uint16_t
Team_Eta_MBED 0:69293b19ee19 1015 transStep = OLED_TRANSITION_STEP;
Team_Eta_MBED 0:69293b19ee19 1016
Team_Eta_MBED 0:69293b19ee19 1017 uint16_t
Team_Eta_MBED 0:69293b19ee19 1018 partImgSize = width*transStep;
Team_Eta_MBED 0:69293b19ee19 1019
Team_Eta_MBED 0:69293b19ee19 1020 oled_status_t
Team_Eta_MBED 0:69293b19ee19 1021 status = OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 1022
Team_Eta_MBED 0:69293b19ee19 1023 uint8_t*
Team_Eta_MBED 0:69293b19ee19 1024 partImgPtr = (uint8_t*)image + ( height - transStep ) * ( width * OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 1025
Team_Eta_MBED 0:69293b19ee19 1026 /**
Team_Eta_MBED 0:69293b19ee19 1027 * set locations
Team_Eta_MBED 0:69293b19ee19 1028 */
Team_Eta_MBED 0:69293b19ee19 1029
Team_Eta_MBED 0:69293b19ee19 1030 while (1)
Team_Eta_MBED 0:69293b19ee19 1031 {
Team_Eta_MBED 0:69293b19ee19 1032 SetBorders( xCrd, yCrd, width, height );
Team_Eta_MBED 0:69293b19ee19 1033
Team_Eta_MBED 0:69293b19ee19 1034 if ( partImgSize > width*height )
Team_Eta_MBED 0:69293b19ee19 1035 {
Team_Eta_MBED 0:69293b19ee19 1036 SendData( (const uint8_t*)image, width*height*OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 1037 break;
Team_Eta_MBED 0:69293b19ee19 1038 }
Team_Eta_MBED 0:69293b19ee19 1039 else
Team_Eta_MBED 0:69293b19ee19 1040 {
Team_Eta_MBED 0:69293b19ee19 1041 SendData( (const uint8_t*)partImgPtr, partImgSize * OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 1042 }
Team_Eta_MBED 0:69293b19ee19 1043
Team_Eta_MBED 0:69293b19ee19 1044
Team_Eta_MBED 0:69293b19ee19 1045 /**
Team_Eta_MBED 0:69293b19ee19 1046 * update variables
Team_Eta_MBED 0:69293b19ee19 1047 */
Team_Eta_MBED 0:69293b19ee19 1048
Team_Eta_MBED 0:69293b19ee19 1049 partImgPtr -= ( width * transStep ) * OLED_BYTES_PER_PIXEL;
Team_Eta_MBED 0:69293b19ee19 1050 partImgSize += ( width * transStep );
Team_Eta_MBED 0:69293b19ee19 1051 transStep++;
Team_Eta_MBED 0:69293b19ee19 1052 }
Team_Eta_MBED 0:69293b19ee19 1053
Team_Eta_MBED 0:69293b19ee19 1054 return status;
Team_Eta_MBED 0:69293b19ee19 1055 }
Team_Eta_MBED 0:69293b19ee19 1056
Team_Eta_MBED 0:69293b19ee19 1057 /**
Team_Eta_MBED 0:69293b19ee19 1058 * DownTop Transition Effect for Image
Team_Eta_MBED 0:69293b19ee19 1059 * @param image image to be transitioned
Team_Eta_MBED 0:69293b19ee19 1060 * @param xCrd x coordinate of image
Team_Eta_MBED 0:69293b19ee19 1061 * @param yCrd y coordinate of image
Team_Eta_MBED 0:69293b19ee19 1062 * @param width width of image
Team_Eta_MBED 0:69293b19ee19 1063 * @param height height of image
Team_Eta_MBED 0:69293b19ee19 1064 * @return status flag
Team_Eta_MBED 0:69293b19ee19 1065 */
Team_Eta_MBED 0:69293b19ee19 1066
Team_Eta_MBED 0:69293b19ee19 1067 oled_status_t SSD1351::DownTop(
Team_Eta_MBED 0:69293b19ee19 1068 const uint8_t* image,
Team_Eta_MBED 0:69293b19ee19 1069 int8_t xCrd,
Team_Eta_MBED 0:69293b19ee19 1070 int8_t yCrd,
Team_Eta_MBED 0:69293b19ee19 1071 uint8_t width,
Team_Eta_MBED 0:69293b19ee19 1072 uint8_t height
Team_Eta_MBED 0:69293b19ee19 1073 )
Team_Eta_MBED 0:69293b19ee19 1074 {
Team_Eta_MBED 0:69293b19ee19 1075 uint16_t
Team_Eta_MBED 0:69293b19ee19 1076 transStep = OLED_TRANSITION_STEP;
Team_Eta_MBED 0:69293b19ee19 1077
Team_Eta_MBED 0:69293b19ee19 1078 uint16_t
Team_Eta_MBED 0:69293b19ee19 1079 partImgSize = width*transStep;
Team_Eta_MBED 0:69293b19ee19 1080
Team_Eta_MBED 0:69293b19ee19 1081 oled_status_t
Team_Eta_MBED 0:69293b19ee19 1082 status = OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 1083
Team_Eta_MBED 0:69293b19ee19 1084 uint8_t*
Team_Eta_MBED 0:69293b19ee19 1085 partImgPtr = (uint8_t*)image;
Team_Eta_MBED 0:69293b19ee19 1086
Team_Eta_MBED 0:69293b19ee19 1087 uint8_t
Team_Eta_MBED 0:69293b19ee19 1088 yCrd_moving = ( yCrd + height ) - 1;
Team_Eta_MBED 0:69293b19ee19 1089
Team_Eta_MBED 0:69293b19ee19 1090 /**
Team_Eta_MBED 0:69293b19ee19 1091 * set locations
Team_Eta_MBED 0:69293b19ee19 1092 */
Team_Eta_MBED 0:69293b19ee19 1093
Team_Eta_MBED 0:69293b19ee19 1094 while (1)
Team_Eta_MBED 0:69293b19ee19 1095 {
Team_Eta_MBED 0:69293b19ee19 1096 if (
Team_Eta_MBED 0:69293b19ee19 1097 ( partImgSize > OLED_SCREEN_SIZE )
Team_Eta_MBED 0:69293b19ee19 1098 || ( yCrd_moving < yCrd )
Team_Eta_MBED 0:69293b19ee19 1099 )
Team_Eta_MBED 0:69293b19ee19 1100 {
Team_Eta_MBED 0:69293b19ee19 1101 /* draw full image */
Team_Eta_MBED 0:69293b19ee19 1102 SetBorders( xCrd, yCrd, width, height );
Team_Eta_MBED 0:69293b19ee19 1103 SendData( (const uint8_t*)image, width * height * OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 1104 break;
Team_Eta_MBED 0:69293b19ee19 1105 }
Team_Eta_MBED 0:69293b19ee19 1106
Team_Eta_MBED 0:69293b19ee19 1107 else
Team_Eta_MBED 0:69293b19ee19 1108 {
Team_Eta_MBED 0:69293b19ee19 1109 SetBorders( xCrd, yCrd_moving, width, ( yCrd + height ) - yCrd_moving );
Team_Eta_MBED 0:69293b19ee19 1110 SendData( (const uint8_t*)partImgPtr, partImgSize * OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 1111 }
Team_Eta_MBED 0:69293b19ee19 1112
Team_Eta_MBED 0:69293b19ee19 1113 /**
Team_Eta_MBED 0:69293b19ee19 1114 * update variables
Team_Eta_MBED 0:69293b19ee19 1115 */
Team_Eta_MBED 0:69293b19ee19 1116
Team_Eta_MBED 0:69293b19ee19 1117 yCrd_moving -= transStep;
Team_Eta_MBED 0:69293b19ee19 1118 partImgSize += ( width * transStep );
Team_Eta_MBED 0:69293b19ee19 1119 transStep++;
Team_Eta_MBED 0:69293b19ee19 1120 }
Team_Eta_MBED 0:69293b19ee19 1121
Team_Eta_MBED 0:69293b19ee19 1122 return status;
Team_Eta_MBED 0:69293b19ee19 1123 }
Team_Eta_MBED 0:69293b19ee19 1124
Team_Eta_MBED 0:69293b19ee19 1125
Team_Eta_MBED 0:69293b19ee19 1126 /**
Team_Eta_MBED 0:69293b19ee19 1127 * LeftRight Transition Effect for Image
Team_Eta_MBED 0:69293b19ee19 1128 * @param image image to be transitioned
Team_Eta_MBED 0:69293b19ee19 1129 * @param xCrd x coordinate of image
Team_Eta_MBED 0:69293b19ee19 1130 * @param yCrd y coordinate of image
Team_Eta_MBED 0:69293b19ee19 1131 * @param width width of image
Team_Eta_MBED 0:69293b19ee19 1132 * @param height height of image
Team_Eta_MBED 0:69293b19ee19 1133 * @return status flag
Team_Eta_MBED 0:69293b19ee19 1134 */
Team_Eta_MBED 0:69293b19ee19 1135
Team_Eta_MBED 0:69293b19ee19 1136 oled_status_t SSD1351::LeftRight(
Team_Eta_MBED 0:69293b19ee19 1137 const uint8_t* image,
Team_Eta_MBED 0:69293b19ee19 1138 int8_t xCrd,
Team_Eta_MBED 0:69293b19ee19 1139 int8_t yCrd,
Team_Eta_MBED 0:69293b19ee19 1140 uint8_t width,
Team_Eta_MBED 0:69293b19ee19 1141 uint8_t height
Team_Eta_MBED 0:69293b19ee19 1142 )
Team_Eta_MBED 0:69293b19ee19 1143 {
Team_Eta_MBED 0:69293b19ee19 1144 oled_status_t
Team_Eta_MBED 0:69293b19ee19 1145 status = OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 1146
Team_Eta_MBED 0:69293b19ee19 1147 oled_dynamic_area_t
Team_Eta_MBED 0:69293b19ee19 1148 transImageArea =
Team_Eta_MBED 0:69293b19ee19 1149 {
Team_Eta_MBED 0:69293b19ee19 1150 .xCrd = 0,
Team_Eta_MBED 0:69293b19ee19 1151 .yCrd = 0,
Team_Eta_MBED 0:69293b19ee19 1152
Team_Eta_MBED 0:69293b19ee19 1153 .width = 96,
Team_Eta_MBED 0:69293b19ee19 1154 .height= 96
Team_Eta_MBED 0:69293b19ee19 1155 };
Team_Eta_MBED 0:69293b19ee19 1156
Team_Eta_MBED 0:69293b19ee19 1157 SetDynamicArea( &transImageArea );
Team_Eta_MBED 0:69293b19ee19 1158
Team_Eta_MBED 0:69293b19ee19 1159 /* helper pointer */
Team_Eta_MBED 0:69293b19ee19 1160 oled_pixel_t
Team_Eta_MBED 0:69293b19ee19 1161 transImage = (oled_pixel_t)oled_dynamic_area.areaBuffer;
Team_Eta_MBED 0:69293b19ee19 1162
Team_Eta_MBED 0:69293b19ee19 1163 if ( NULL == transImage )
Team_Eta_MBED 0:69293b19ee19 1164 {
Team_Eta_MBED 0:69293b19ee19 1165 return OLED_STATUS_INIT_ERROR;
Team_Eta_MBED 0:69293b19ee19 1166 }
Team_Eta_MBED 0:69293b19ee19 1167
Team_Eta_MBED 0:69293b19ee19 1168 Transpose( transImage,(oled_pixel_t)image, width, height );
Team_Eta_MBED 0:69293b19ee19 1169
Team_Eta_MBED 0:69293b19ee19 1170 SendCmd( OLED_CMD_SET_REMAP, CMD_BYTE );
Team_Eta_MBED 0:69293b19ee19 1171 SendCmd( OLED_REMAP_SETTINGS | REMAP_VERTICAL_INCREMENT, DATA_BYTE );
Team_Eta_MBED 0:69293b19ee19 1172
Team_Eta_MBED 0:69293b19ee19 1173 uint16_t
Team_Eta_MBED 0:69293b19ee19 1174 transStep = OLED_TRANSITION_STEP;
Team_Eta_MBED 0:69293b19ee19 1175
Team_Eta_MBED 0:69293b19ee19 1176 uint16_t
Team_Eta_MBED 0:69293b19ee19 1177 partImgSize = height*transStep;
Team_Eta_MBED 0:69293b19ee19 1178
Team_Eta_MBED 0:69293b19ee19 1179 uint8_t*
Team_Eta_MBED 0:69293b19ee19 1180 partImgPtr = (uint8_t*)transImage + ( width - transStep ) * ( height * OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 1181
Team_Eta_MBED 0:69293b19ee19 1182 /**
Team_Eta_MBED 0:69293b19ee19 1183 * set locations
Team_Eta_MBED 0:69293b19ee19 1184 */
Team_Eta_MBED 0:69293b19ee19 1185
Team_Eta_MBED 0:69293b19ee19 1186 while (1)
Team_Eta_MBED 0:69293b19ee19 1187 {
Team_Eta_MBED 0:69293b19ee19 1188 SetBorders( xCrd, yCrd, width, height );
Team_Eta_MBED 0:69293b19ee19 1189
Team_Eta_MBED 0:69293b19ee19 1190 if ( partImgSize > width*height )
Team_Eta_MBED 0:69293b19ee19 1191 {
Team_Eta_MBED 0:69293b19ee19 1192 SendData((const uint8_t*)transImage, width * height * OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 1193 break;
Team_Eta_MBED 0:69293b19ee19 1194 }
Team_Eta_MBED 0:69293b19ee19 1195 else
Team_Eta_MBED 0:69293b19ee19 1196 {
Team_Eta_MBED 0:69293b19ee19 1197 SendData( (const uint8_t*)partImgPtr, partImgSize * OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 1198 }
Team_Eta_MBED 0:69293b19ee19 1199
Team_Eta_MBED 0:69293b19ee19 1200
Team_Eta_MBED 0:69293b19ee19 1201 partImgPtr -= ( transStep * height ) * OLED_BYTES_PER_PIXEL;
Team_Eta_MBED 0:69293b19ee19 1202 partImgSize += ( transStep * height );
Team_Eta_MBED 0:69293b19ee19 1203 transStep++;
Team_Eta_MBED 0:69293b19ee19 1204
Team_Eta_MBED 0:69293b19ee19 1205 }
Team_Eta_MBED 0:69293b19ee19 1206
Team_Eta_MBED 0:69293b19ee19 1207 SendCmd( OLED_CMD_SET_REMAP, CMD_BYTE );
Team_Eta_MBED 0:69293b19ee19 1208 SendCmd( OLED_REMAP_SETTINGS, DATA_BYTE );
Team_Eta_MBED 0:69293b19ee19 1209 DestroyDynamicArea();
Team_Eta_MBED 0:69293b19ee19 1210 return status;
Team_Eta_MBED 0:69293b19ee19 1211 }
Team_Eta_MBED 0:69293b19ee19 1212
Team_Eta_MBED 0:69293b19ee19 1213
Team_Eta_MBED 0:69293b19ee19 1214 /**
Team_Eta_MBED 0:69293b19ee19 1215 * RightLeft Transition Effect for Image
Team_Eta_MBED 0:69293b19ee19 1216 * @param image image to be transitioned
Team_Eta_MBED 0:69293b19ee19 1217 * @param xCrd x coordinate of image
Team_Eta_MBED 0:69293b19ee19 1218 * @param yCrd y coordinate of image
Team_Eta_MBED 0:69293b19ee19 1219 * @param width width of image
Team_Eta_MBED 0:69293b19ee19 1220 * @param height height of image
Team_Eta_MBED 0:69293b19ee19 1221 * @return status flag
Team_Eta_MBED 0:69293b19ee19 1222 */
Team_Eta_MBED 0:69293b19ee19 1223 oled_status_t SSD1351::RightLeft(
Team_Eta_MBED 0:69293b19ee19 1224 const uint8_t* image,
Team_Eta_MBED 0:69293b19ee19 1225 int8_t xCrd,
Team_Eta_MBED 0:69293b19ee19 1226 int8_t yCrd,
Team_Eta_MBED 0:69293b19ee19 1227 uint8_t width,
Team_Eta_MBED 0:69293b19ee19 1228 uint8_t height
Team_Eta_MBED 0:69293b19ee19 1229 )
Team_Eta_MBED 0:69293b19ee19 1230 {
Team_Eta_MBED 0:69293b19ee19 1231 oled_dynamic_area_t
Team_Eta_MBED 0:69293b19ee19 1232 transImageArea =
Team_Eta_MBED 0:69293b19ee19 1233 {
Team_Eta_MBED 0:69293b19ee19 1234 .xCrd = 0,
Team_Eta_MBED 0:69293b19ee19 1235 .yCrd = 0,
Team_Eta_MBED 0:69293b19ee19 1236
Team_Eta_MBED 0:69293b19ee19 1237 .width = 96,
Team_Eta_MBED 0:69293b19ee19 1238 .height= 96
Team_Eta_MBED 0:69293b19ee19 1239 };
Team_Eta_MBED 0:69293b19ee19 1240
Team_Eta_MBED 0:69293b19ee19 1241 SetDynamicArea( &transImageArea );
Team_Eta_MBED 0:69293b19ee19 1242
Team_Eta_MBED 0:69293b19ee19 1243 /* helper pointer */
Team_Eta_MBED 0:69293b19ee19 1244 oled_pixel_t
Team_Eta_MBED 0:69293b19ee19 1245 transImage = oled_dynamic_area.areaBuffer;
Team_Eta_MBED 0:69293b19ee19 1246
Team_Eta_MBED 0:69293b19ee19 1247 if ( NULL == transImage )
Team_Eta_MBED 0:69293b19ee19 1248 {
Team_Eta_MBED 0:69293b19ee19 1249 return OLED_STATUS_INIT_ERROR;
Team_Eta_MBED 0:69293b19ee19 1250 }
Team_Eta_MBED 0:69293b19ee19 1251
Team_Eta_MBED 0:69293b19ee19 1252 Transpose(transImage, (oled_pixel_t)image, width, height );
Team_Eta_MBED 0:69293b19ee19 1253
Team_Eta_MBED 0:69293b19ee19 1254 SendCmd( OLED_CMD_SET_REMAP, CMD_BYTE );
Team_Eta_MBED 0:69293b19ee19 1255 SendCmd( OLED_REMAP_SETTINGS | REMAP_VERTICAL_INCREMENT, DATA_BYTE );
Team_Eta_MBED 0:69293b19ee19 1256
Team_Eta_MBED 0:69293b19ee19 1257
Team_Eta_MBED 0:69293b19ee19 1258 uint16_t
Team_Eta_MBED 0:69293b19ee19 1259 transStep = OLED_TRANSITION_STEP;
Team_Eta_MBED 0:69293b19ee19 1260
Team_Eta_MBED 0:69293b19ee19 1261 uint16_t
Team_Eta_MBED 0:69293b19ee19 1262 partImgSize = height * transStep;
Team_Eta_MBED 0:69293b19ee19 1263
Team_Eta_MBED 0:69293b19ee19 1264 uint8_t*
Team_Eta_MBED 0:69293b19ee19 1265 partImgPtr = (uint8_t*)transImage;
Team_Eta_MBED 0:69293b19ee19 1266
Team_Eta_MBED 0:69293b19ee19 1267 uint8_t
Team_Eta_MBED 0:69293b19ee19 1268 xCrd_moving = ( xCrd + width ) - 1;
Team_Eta_MBED 0:69293b19ee19 1269
Team_Eta_MBED 0:69293b19ee19 1270 /** set locations */
Team_Eta_MBED 0:69293b19ee19 1271
Team_Eta_MBED 0:69293b19ee19 1272 while (1)
Team_Eta_MBED 0:69293b19ee19 1273 {
Team_Eta_MBED 0:69293b19ee19 1274 if (( partImgSize > width*height )|| ( xCrd_moving < xCrd ))
Team_Eta_MBED 0:69293b19ee19 1275 {
Team_Eta_MBED 0:69293b19ee19 1276 SetBorders( xCrd, yCrd, width, height );
Team_Eta_MBED 0:69293b19ee19 1277 SendData( (const uint8_t*)transImage, height * width * OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 1278 break;
Team_Eta_MBED 0:69293b19ee19 1279 }
Team_Eta_MBED 0:69293b19ee19 1280 else
Team_Eta_MBED 0:69293b19ee19 1281 {
Team_Eta_MBED 0:69293b19ee19 1282 SetBorders( xCrd_moving, yCrd, ( xCrd + width ) - xCrd_moving, height );
Team_Eta_MBED 0:69293b19ee19 1283 SendData( (const uint8_t*)partImgPtr, partImgSize * OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 1284 }
Team_Eta_MBED 0:69293b19ee19 1285
Team_Eta_MBED 0:69293b19ee19 1286 /** update variables*/
Team_Eta_MBED 0:69293b19ee19 1287
Team_Eta_MBED 0:69293b19ee19 1288 xCrd_moving -= transStep;
Team_Eta_MBED 0:69293b19ee19 1289 partImgSize += ( height * transStep );
Team_Eta_MBED 0:69293b19ee19 1290 transStep++;
Team_Eta_MBED 0:69293b19ee19 1291 }
Team_Eta_MBED 0:69293b19ee19 1292
Team_Eta_MBED 0:69293b19ee19 1293 SendCmd( OLED_CMD_SET_REMAP, CMD_BYTE );
Team_Eta_MBED 0:69293b19ee19 1294 SendCmd( OLED_REMAP_SETTINGS, DATA_BYTE );
Team_Eta_MBED 0:69293b19ee19 1295
Team_Eta_MBED 0:69293b19ee19 1296 DestroyDynamicArea();
Team_Eta_MBED 0:69293b19ee19 1297
Team_Eta_MBED 0:69293b19ee19 1298 return OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 1299 }
Team_Eta_MBED 0:69293b19ee19 1300
Team_Eta_MBED 0:69293b19ee19 1301
Team_Eta_MBED 0:69293b19ee19 1302 /**
Team_Eta_MBED 0:69293b19ee19 1303 * [setDirection description]
Team_Eta_MBED 0:69293b19ee19 1304 * @param self [description]
Team_Eta_MBED 0:69293b19ee19 1305 * @param xCrd [description]
Team_Eta_MBED 0:69293b19ee19 1306 * @param yCrd [description]
Team_Eta_MBED 0:69293b19ee19 1307 * @return [description]
Team_Eta_MBED 0:69293b19ee19 1308 */
Team_Eta_MBED 0:69293b19ee19 1309 void SSD1351::SetBorders(
Team_Eta_MBED 0:69293b19ee19 1310 int8_t xCrd,
Team_Eta_MBED 0:69293b19ee19 1311 int8_t yCrd,
Team_Eta_MBED 0:69293b19ee19 1312 uint8_t width,
Team_Eta_MBED 0:69293b19ee19 1313 uint8_t height
Team_Eta_MBED 0:69293b19ee19 1314 )
Team_Eta_MBED 0:69293b19ee19 1315 {
Team_Eta_MBED 0:69293b19ee19 1316
Team_Eta_MBED 0:69293b19ee19 1317 /* adjust for the offset*/
Team_Eta_MBED 0:69293b19ee19 1318 OLED_AdjustColumnOffset(xCrd);
Team_Eta_MBED 0:69293b19ee19 1319 OLED_AdjustRowOffset(yCrd);
Team_Eta_MBED 0:69293b19ee19 1320
Team_Eta_MBED 0:69293b19ee19 1321 SendCmd( OLED_CMD_SET_COLUMN, CMD_BYTE );
Team_Eta_MBED 0:69293b19ee19 1322 SendCmd( xCrd, DATA_BYTE );
Team_Eta_MBED 0:69293b19ee19 1323 SendCmd( xCrd + (width-1), DATA_BYTE );
Team_Eta_MBED 0:69293b19ee19 1324 SendCmd( OLED_CMD_SET_ROW, CMD_BYTE );
Team_Eta_MBED 0:69293b19ee19 1325 SendCmd( yCrd, DATA_BYTE );
Team_Eta_MBED 0:69293b19ee19 1326 SendCmd( yCrd + (height-1), DATA_BYTE );
Team_Eta_MBED 0:69293b19ee19 1327
Team_Eta_MBED 0:69293b19ee19 1328 }
Team_Eta_MBED 0:69293b19ee19 1329
Team_Eta_MBED 0:69293b19ee19 1330 /**
Team_Eta_MBED 0:69293b19ee19 1331 * create the buffer for a partial image
Team_Eta_MBED 0:69293b19ee19 1332 * @param imgBuf [description]
Team_Eta_MBED 0:69293b19ee19 1333 * @param width [description]
Team_Eta_MBED 0:69293b19ee19 1334 * @param height [description]
Team_Eta_MBED 0:69293b19ee19 1335 * @return [description]
Team_Eta_MBED 0:69293b19ee19 1336 */
Team_Eta_MBED 0:69293b19ee19 1337 oled_status_t SSD1351::CreateTextBackground()
Team_Eta_MBED 0:69293b19ee19 1338 {
Team_Eta_MBED 0:69293b19ee19 1339 uint8_t
Team_Eta_MBED 0:69293b19ee19 1340 xCrd = oled_dynamic_area.xCrd,
Team_Eta_MBED 0:69293b19ee19 1341 yCrd = oled_dynamic_area.yCrd,
Team_Eta_MBED 0:69293b19ee19 1342 width = oled_dynamic_area.width,
Team_Eta_MBED 0:69293b19ee19 1343 height = oled_dynamic_area.height;
Team_Eta_MBED 0:69293b19ee19 1344
Team_Eta_MBED 0:69293b19ee19 1345 oled_pixel_t
Team_Eta_MBED 0:69293b19ee19 1346 imgBuf = oled_dynamic_area.areaBuffer,
Team_Eta_MBED 0:69293b19ee19 1347 copyAddr;
Team_Eta_MBED 0:69293b19ee19 1348
Team_Eta_MBED 0:69293b19ee19 1349 const uint8_t*
Team_Eta_MBED 0:69293b19ee19 1350 background = oled_text_properties.background;
Team_Eta_MBED 0:69293b19ee19 1351
Team_Eta_MBED 0:69293b19ee19 1352 /* copy data */
Team_Eta_MBED 0:69293b19ee19 1353
Team_Eta_MBED 0:69293b19ee19 1354 if (
Team_Eta_MBED 0:69293b19ee19 1355 ( NULL == imgBuf )
Team_Eta_MBED 0:69293b19ee19 1356 || ( ( xCrd + width ) > OLED_SCREEN_WIDTH )
Team_Eta_MBED 0:69293b19ee19 1357 || ( ( yCrd + height ) > OLED_SCREEN_HEIGHT )
Team_Eta_MBED 0:69293b19ee19 1358 )
Team_Eta_MBED 0:69293b19ee19 1359 {
Team_Eta_MBED 0:69293b19ee19 1360 return OLED_STATUS_INIT_ERROR;
Team_Eta_MBED 0:69293b19ee19 1361 }
Team_Eta_MBED 0:69293b19ee19 1362
Team_Eta_MBED 0:69293b19ee19 1363 if ( NULL == background )
Team_Eta_MBED 0:69293b19ee19 1364 {
Team_Eta_MBED 0:69293b19ee19 1365 for ( uint8_t i = 0; i < height; i++ )
Team_Eta_MBED 0:69293b19ee19 1366 {
Team_Eta_MBED 0:69293b19ee19 1367 memset( (void*)imgBuf, 0, width*OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 1368 imgBuf += width;
Team_Eta_MBED 0:69293b19ee19 1369 }
Team_Eta_MBED 0:69293b19ee19 1370 }
Team_Eta_MBED 0:69293b19ee19 1371
Team_Eta_MBED 0:69293b19ee19 1372 else
Team_Eta_MBED 0:69293b19ee19 1373 {
Team_Eta_MBED 0:69293b19ee19 1374 copyAddr = (oled_pixel_t)( BMP_SkipHeader( background ) ) + ( yCrd*OLED_SCREEN_WIDTH + xCrd );
Team_Eta_MBED 0:69293b19ee19 1375 for ( uint8_t i = 0; i < height; i++ )
Team_Eta_MBED 0:69293b19ee19 1376 {
Team_Eta_MBED 0:69293b19ee19 1377 Swap( (oled_pixel_t)imgBuf, (const uint8_t*)copyAddr, width );
Team_Eta_MBED 0:69293b19ee19 1378 imgBuf += width;
Team_Eta_MBED 0:69293b19ee19 1379 copyAddr += OLED_SCREEN_WIDTH;
Team_Eta_MBED 0:69293b19ee19 1380 }
Team_Eta_MBED 0:69293b19ee19 1381 }
Team_Eta_MBED 0:69293b19ee19 1382
Team_Eta_MBED 0:69293b19ee19 1383 return OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 1384 }
Team_Eta_MBED 0:69293b19ee19 1385
Team_Eta_MBED 0:69293b19ee19 1386
Team_Eta_MBED 0:69293b19ee19 1387 /**
Team_Eta_MBED 0:69293b19ee19 1388 * Write the character to Buffer
Team_Eta_MBED 0:69293b19ee19 1389 * @param charToWrite character to be written
Team_Eta_MBED 0:69293b19ee19 1390 * @param chrBuf given pointer for buffer for the character
Team_Eta_MBED 0:69293b19ee19 1391 */
Team_Eta_MBED 0:69293b19ee19 1392 void SSD1351::WriteCharToBuf(
Team_Eta_MBED 0:69293b19ee19 1393 uint16_t charToWrite,
Team_Eta_MBED 0:69293b19ee19 1394 oled_pixel_t* chrBuf
Team_Eta_MBED 0:69293b19ee19 1395 )
Team_Eta_MBED 0:69293b19ee19 1396 {
Team_Eta_MBED 0:69293b19ee19 1397 uint8_t
Team_Eta_MBED 0:69293b19ee19 1398 foo = 0,
Team_Eta_MBED 0:69293b19ee19 1399 mask;
Team_Eta_MBED 0:69293b19ee19 1400
Team_Eta_MBED 0:69293b19ee19 1401 const uint8_t*
Team_Eta_MBED 0:69293b19ee19 1402 pChTable = selectedFont + 8 + (uint16_t)( ( charToWrite - selectedFont_firstChar ) << 2 );
Team_Eta_MBED 0:69293b19ee19 1403
Team_Eta_MBED 0:69293b19ee19 1404 currentChar_width = *pChTable,
Team_Eta_MBED 0:69293b19ee19 1405 currentChar_height = selectedFont_height;
Team_Eta_MBED 0:69293b19ee19 1406
Team_Eta_MBED 0:69293b19ee19 1407 uint32_t
Team_Eta_MBED 0:69293b19ee19 1408 offset = (uint32_t)pChTable[1]
Team_Eta_MBED 0:69293b19ee19 1409 | ( (uint32_t)pChTable[2] << 8 )
Team_Eta_MBED 0:69293b19ee19 1410 | ( (uint32_t)pChTable[3] << 16 );
Team_Eta_MBED 0:69293b19ee19 1411
Team_Eta_MBED 0:69293b19ee19 1412 const uint8_t*
Team_Eta_MBED 0:69293b19ee19 1413 pChBitMap = selectedFont + offset;
Team_Eta_MBED 0:69293b19ee19 1414
Team_Eta_MBED 0:69293b19ee19 1415 /* allocate space for char image */
Team_Eta_MBED 0:69293b19ee19 1416 *chrBuf = (oled_pixel_t)AllocateDynamicArea( currentChar_height * currentChar_width );
Team_Eta_MBED 0:69293b19ee19 1417
Team_Eta_MBED 0:69293b19ee19 1418 if ( NULL == *chrBuf )
Team_Eta_MBED 0:69293b19ee19 1419 {
Team_Eta_MBED 0:69293b19ee19 1420 return;
Team_Eta_MBED 0:69293b19ee19 1421 }
Team_Eta_MBED 0:69293b19ee19 1422
Team_Eta_MBED 0:69293b19ee19 1423 for ( uint8_t yCnt = 0; yCnt < currentChar_height; yCnt++ )
Team_Eta_MBED 0:69293b19ee19 1424 {
Team_Eta_MBED 0:69293b19ee19 1425 mask = 0;
Team_Eta_MBED 0:69293b19ee19 1426
Team_Eta_MBED 0:69293b19ee19 1427 for ( uint8_t xCnt = 0; xCnt < currentChar_width; xCnt++ )
Team_Eta_MBED 0:69293b19ee19 1428 {
Team_Eta_MBED 0:69293b19ee19 1429 if ( 0 == mask )
Team_Eta_MBED 0:69293b19ee19 1430 {
Team_Eta_MBED 0:69293b19ee19 1431 mask = 1;
Team_Eta_MBED 0:69293b19ee19 1432 foo = *pChBitMap++;
Team_Eta_MBED 0:69293b19ee19 1433 }
Team_Eta_MBED 0:69293b19ee19 1434
Team_Eta_MBED 0:69293b19ee19 1435 if ( 0 != ( foo & mask ) )
Team_Eta_MBED 0:69293b19ee19 1436 {
Team_Eta_MBED 0:69293b19ee19 1437 *( *chrBuf + yCnt*currentChar_width + xCnt ) = selectedFont_color;
Team_Eta_MBED 0:69293b19ee19 1438 }
Team_Eta_MBED 0:69293b19ee19 1439
Team_Eta_MBED 0:69293b19ee19 1440 else
Team_Eta_MBED 0:69293b19ee19 1441 {
Team_Eta_MBED 0:69293b19ee19 1442 *( *chrBuf + yCnt*currentChar_width + xCnt ) = 0;
Team_Eta_MBED 0:69293b19ee19 1443 }
Team_Eta_MBED 0:69293b19ee19 1444
Team_Eta_MBED 0:69293b19ee19 1445 mask <<= 1;
Team_Eta_MBED 0:69293b19ee19 1446 }
Team_Eta_MBED 0:69293b19ee19 1447 }
Team_Eta_MBED 0:69293b19ee19 1448 }
Team_Eta_MBED 0:69293b19ee19 1449
Team_Eta_MBED 0:69293b19ee19 1450
Team_Eta_MBED 0:69293b19ee19 1451 /**
Team_Eta_MBED 0:69293b19ee19 1452 * Add subimage/character to the active image buffer
Team_Eta_MBED 0:69293b19ee19 1453 * @param xOffset offset for the x-coordinate
Team_Eta_MBED 0:69293b19ee19 1454 * @param yOffset offset for the y-coordinate
Team_Eta_MBED 0:69293b19ee19 1455 * @param width desired width
Team_Eta_MBED 0:69293b19ee19 1456 * @param height desired height
Team_Eta_MBED 0:69293b19ee19 1457 * @return status flag
Team_Eta_MBED 0:69293b19ee19 1458 */
Team_Eta_MBED 0:69293b19ee19 1459 oled_status_t SSD1351::AddCharToTextArea(
Team_Eta_MBED 0:69293b19ee19 1460 oled_pixel_t chrPtr,
Team_Eta_MBED 0:69293b19ee19 1461 uint8_t chrWidth,
Team_Eta_MBED 0:69293b19ee19 1462 uint8_t chrHeight,
Team_Eta_MBED 0:69293b19ee19 1463 oled_pixel_t copyAddr,
Team_Eta_MBED 0:69293b19ee19 1464 uint8_t imgWidth
Team_Eta_MBED 0:69293b19ee19 1465 )
Team_Eta_MBED 0:69293b19ee19 1466 {
Team_Eta_MBED 0:69293b19ee19 1467 if ( NULL == copyAddr )
Team_Eta_MBED 0:69293b19ee19 1468 {
Team_Eta_MBED 0:69293b19ee19 1469 return OLED_STATUS_INIT_ERROR;
Team_Eta_MBED 0:69293b19ee19 1470 }
Team_Eta_MBED 0:69293b19ee19 1471
Team_Eta_MBED 0:69293b19ee19 1472 for ( uint8_t i = 0; i < chrHeight; i++ )
Team_Eta_MBED 0:69293b19ee19 1473 {
Team_Eta_MBED 0:69293b19ee19 1474 for ( uint8_t j = 0; j < chrWidth; j++ )
Team_Eta_MBED 0:69293b19ee19 1475 {
Team_Eta_MBED 0:69293b19ee19 1476 if ( 0 != chrPtr[j] )
Team_Eta_MBED 0:69293b19ee19 1477 {
Team_Eta_MBED 0:69293b19ee19 1478 copyAddr[j] = chrPtr[j];
Team_Eta_MBED 0:69293b19ee19 1479 }
Team_Eta_MBED 0:69293b19ee19 1480 }
Team_Eta_MBED 0:69293b19ee19 1481 copyAddr += imgWidth;
Team_Eta_MBED 0:69293b19ee19 1482 chrPtr += chrWidth;
Team_Eta_MBED 0:69293b19ee19 1483 }
Team_Eta_MBED 0:69293b19ee19 1484 return OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 1485 }
Team_Eta_MBED 0:69293b19ee19 1486
Team_Eta_MBED 0:69293b19ee19 1487
Team_Eta_MBED 0:69293b19ee19 1488 /**
Team_Eta_MBED 0:69293b19ee19 1489 * Allocate memory for the desired image/character
Team_Eta_MBED 0:69293b19ee19 1490 * @param area desired area dimensions
Team_Eta_MBED 0:69293b19ee19 1491 */
Team_Eta_MBED 0:69293b19ee19 1492 void* SSD1351::AllocateDynamicArea( uint32_t area )
Team_Eta_MBED 0:69293b19ee19 1493 {
Team_Eta_MBED 0:69293b19ee19 1494 void*
Team_Eta_MBED 0:69293b19ee19 1495 ptr = malloc( area * OLED_BYTES_PER_PIXEL );
Team_Eta_MBED 0:69293b19ee19 1496
Team_Eta_MBED 0:69293b19ee19 1497 if ( NULL == ptr )
Team_Eta_MBED 0:69293b19ee19 1498 {
Team_Eta_MBED 0:69293b19ee19 1499 return NULL;
Team_Eta_MBED 0:69293b19ee19 1500 }
Team_Eta_MBED 0:69293b19ee19 1501
Team_Eta_MBED 0:69293b19ee19 1502 return ptr;
Team_Eta_MBED 0:69293b19ee19 1503 }
Team_Eta_MBED 0:69293b19ee19 1504
Team_Eta_MBED 0:69293b19ee19 1505
Team_Eta_MBED 0:69293b19ee19 1506 /**
Team_Eta_MBED 0:69293b19ee19 1507 * Deallocate current area
Team_Eta_MBED 0:69293b19ee19 1508 * @param area pointer to current area
Team_Eta_MBED 0:69293b19ee19 1509 */
Team_Eta_MBED 0:69293b19ee19 1510 oled_status_t SSD1351::DestroyDynamicArea( void* ptr )
Team_Eta_MBED 0:69293b19ee19 1511 {
Team_Eta_MBED 0:69293b19ee19 1512 if ( NULL == ptr )
Team_Eta_MBED 0:69293b19ee19 1513 {
Team_Eta_MBED 0:69293b19ee19 1514 return OLED_STATUS_INIT_ERROR;
Team_Eta_MBED 0:69293b19ee19 1515 }
Team_Eta_MBED 0:69293b19ee19 1516
Team_Eta_MBED 0:69293b19ee19 1517 free(ptr);
Team_Eta_MBED 0:69293b19ee19 1518
Team_Eta_MBED 0:69293b19ee19 1519 return OLED_STATUS_SUCCESS;
Team_Eta_MBED 0:69293b19ee19 1520 }