hadif azli / Mbed 2 deprecated TEST123

Dependencies:   mbed Blynk

Committer:
lixianyu
Date:
Fri Jun 10 15:20:20 2016 +0000
Revision:
0:d8f4c441e032
Child:
1:0e75de2a5d21
u8glib???????????i2c???

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lixianyu 0:d8f4c441e032 1 /*
lixianyu 0:d8f4c441e032 2
lixianyu 0:d8f4c441e032 3 u8g_ll_api.c
lixianyu 0:d8f4c441e032 4
lixianyu 0:d8f4c441e032 5 low level api
lixianyu 0:d8f4c441e032 6
lixianyu 0:d8f4c441e032 7 Universal 8bit Graphics Library
lixianyu 0:d8f4c441e032 8
lixianyu 0:d8f4c441e032 9 Copyright (c) 2011, olikraus@gmail.com
lixianyu 0:d8f4c441e032 10 All rights reserved.
lixianyu 0:d8f4c441e032 11
lixianyu 0:d8f4c441e032 12 Redistribution and use in source and binary forms, with or without modification,
lixianyu 0:d8f4c441e032 13 are permitted provided that the following conditions are met:
lixianyu 0:d8f4c441e032 14
lixianyu 0:d8f4c441e032 15 * Redistributions of source code must retain the above copyright notice, this list
lixianyu 0:d8f4c441e032 16 of conditions and the following disclaimer.
lixianyu 0:d8f4c441e032 17
lixianyu 0:d8f4c441e032 18 * Redistributions in binary form must reproduce the above copyright notice, this
lixianyu 0:d8f4c441e032 19 list of conditions and the following disclaimer in the documentation and/or other
lixianyu 0:d8f4c441e032 20 materials provided with the distribution.
lixianyu 0:d8f4c441e032 21
lixianyu 0:d8f4c441e032 22 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
lixianyu 0:d8f4c441e032 23 CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
lixianyu 0:d8f4c441e032 24 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
lixianyu 0:d8f4c441e032 25 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
lixianyu 0:d8f4c441e032 26 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
lixianyu 0:d8f4c441e032 27 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
lixianyu 0:d8f4c441e032 28 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
lixianyu 0:d8f4c441e032 29 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
lixianyu 0:d8f4c441e032 30 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
lixianyu 0:d8f4c441e032 31 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
lixianyu 0:d8f4c441e032 32 STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
lixianyu 0:d8f4c441e032 33 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
lixianyu 0:d8f4c441e032 34 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
lixianyu 0:d8f4c441e032 35
lixianyu 0:d8f4c441e032 36
lixianyu 0:d8f4c441e032 37 */
lixianyu 0:d8f4c441e032 38
lixianyu 0:d8f4c441e032 39 #include <stddef.h>
lixianyu 0:d8f4c441e032 40 #include "u8g.h"
lixianyu 0:d8f4c441e032 41
lixianyu 0:d8f4c441e032 42 uint8_t u8g_call_dev_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
lixianyu 0:d8f4c441e032 43 {
lixianyu 0:d8f4c441e032 44 return dev->dev_fn(u8g, dev, msg, arg);
lixianyu 0:d8f4c441e032 45 }
lixianyu 0:d8f4c441e032 46
lixianyu 0:d8f4c441e032 47 /*====================================================================*/
lixianyu 0:d8f4c441e032 48
lixianyu 0:d8f4c441e032 49 uint8_t u8g_InitLL(u8g_t *u8g, u8g_dev_t *dev)
lixianyu 0:d8f4c441e032 50 {
lixianyu 0:d8f4c441e032 51 uint8_t r;
lixianyu 0:d8f4c441e032 52 u8g->state_cb(U8G_STATE_MSG_BACKUP_ENV);
lixianyu 0:d8f4c441e032 53 r = u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_INIT, NULL);
lixianyu 0:d8f4c441e032 54 u8g->state_cb(U8G_STATE_MSG_BACKUP_U8G);
lixianyu 0:d8f4c441e032 55 u8g->state_cb(U8G_STATE_MSG_RESTORE_ENV);
lixianyu 0:d8f4c441e032 56 return r;
lixianyu 0:d8f4c441e032 57 }
lixianyu 0:d8f4c441e032 58
lixianyu 0:d8f4c441e032 59 void u8g_FirstPageLL(u8g_t *u8g, u8g_dev_t *dev)
lixianyu 0:d8f4c441e032 60 {
lixianyu 0:d8f4c441e032 61 u8g->state_cb(U8G_STATE_MSG_BACKUP_ENV);
lixianyu 0:d8f4c441e032 62 u8g->state_cb(U8G_STATE_MSG_RESTORE_U8G);
lixianyu 0:d8f4c441e032 63 u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_PAGE_FIRST, NULL);
lixianyu 0:d8f4c441e032 64 u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_GET_PAGE_BOX, &(u8g->current_page));
lixianyu 0:d8f4c441e032 65 u8g->state_cb(U8G_STATE_MSG_RESTORE_ENV);
lixianyu 0:d8f4c441e032 66 }
lixianyu 0:d8f4c441e032 67
lixianyu 0:d8f4c441e032 68 uint8_t u8g_NextPageLL(u8g_t *u8g, u8g_dev_t *dev)
lixianyu 0:d8f4c441e032 69 {
lixianyu 0:d8f4c441e032 70 uint8_t r;
lixianyu 0:d8f4c441e032 71 u8g->state_cb(U8G_STATE_MSG_BACKUP_ENV);
lixianyu 0:d8f4c441e032 72 u8g->state_cb(U8G_STATE_MSG_RESTORE_U8G);
lixianyu 0:d8f4c441e032 73 r = u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_PAGE_NEXT, NULL);
lixianyu 0:d8f4c441e032 74 if ( r != 0 )
lixianyu 0:d8f4c441e032 75 {
lixianyu 0:d8f4c441e032 76 u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_GET_PAGE_BOX, &(u8g->current_page));
lixianyu 0:d8f4c441e032 77 }
lixianyu 0:d8f4c441e032 78 u8g->state_cb(U8G_STATE_MSG_RESTORE_ENV);
lixianyu 0:d8f4c441e032 79 return r;
lixianyu 0:d8f4c441e032 80 }
lixianyu 0:d8f4c441e032 81
lixianyu 0:d8f4c441e032 82 uint8_t u8g_SetContrastLL(u8g_t *u8g, u8g_dev_t *dev, uint8_t contrast)
lixianyu 0:d8f4c441e032 83 {
lixianyu 0:d8f4c441e032 84 return u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_CONTRAST, &contrast);
lixianyu 0:d8f4c441e032 85 }
lixianyu 0:d8f4c441e032 86
lixianyu 0:d8f4c441e032 87 void u8g_DrawPixelLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y)
lixianyu 0:d8f4c441e032 88 {
lixianyu 0:d8f4c441e032 89 u8g_dev_arg_pixel_t *arg = &(u8g->arg_pixel);
lixianyu 0:d8f4c441e032 90 arg->x = x;
lixianyu 0:d8f4c441e032 91 arg->y = y;
lixianyu 0:d8f4c441e032 92 u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_SET_PIXEL, arg);
lixianyu 0:d8f4c441e032 93 }
lixianyu 0:d8f4c441e032 94
lixianyu 0:d8f4c441e032 95 void u8g_Draw8PixelLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y, uint8_t dir, uint8_t pixel)
lixianyu 0:d8f4c441e032 96 {
lixianyu 0:d8f4c441e032 97 u8g_dev_arg_pixel_t *arg = &(u8g->arg_pixel);
lixianyu 0:d8f4c441e032 98 arg->x = x;
lixianyu 0:d8f4c441e032 99 arg->y = y;
lixianyu 0:d8f4c441e032 100 arg->dir = dir;
lixianyu 0:d8f4c441e032 101 arg->pixel = pixel;
lixianyu 0:d8f4c441e032 102 u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_SET_8PIXEL, arg);
lixianyu 0:d8f4c441e032 103 }
lixianyu 0:d8f4c441e032 104
lixianyu 0:d8f4c441e032 105 void u8g_Draw4TPixelLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y, uint8_t dir, uint8_t pixel)
lixianyu 0:d8f4c441e032 106 {
lixianyu 0:d8f4c441e032 107 u8g_dev_arg_pixel_t *arg = &(u8g->arg_pixel);
lixianyu 0:d8f4c441e032 108 arg->x = x;
lixianyu 0:d8f4c441e032 109 arg->y = y;
lixianyu 0:d8f4c441e032 110 arg->dir = dir;
lixianyu 0:d8f4c441e032 111 arg->pixel = pixel;
lixianyu 0:d8f4c441e032 112 u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_SET_4TPIXEL, arg);
lixianyu 0:d8f4c441e032 113 }
lixianyu 0:d8f4c441e032 114
lixianyu 0:d8f4c441e032 115
lixianyu 0:d8f4c441e032 116 #ifdef U8G_DEV_MSG_IS_BBX_INTERSECTION
lixianyu 0:d8f4c441e032 117 uint8_t u8g_IsBBXIntersectionLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h)
lixianyu 0:d8f4c441e032 118 {
lixianyu 0:d8f4c441e032 119 return u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_IS_BBX_INTERSECTION, &arg);
lixianyu 0:d8f4c441e032 120 }
lixianyu 0:d8f4c441e032 121 #endif
lixianyu 0:d8f4c441e032 122
lixianyu 0:d8f4c441e032 123
lixianyu 0:d8f4c441e032 124
lixianyu 0:d8f4c441e032 125 u8g_uint_t u8g_GetWidthLL(u8g_t *u8g, u8g_dev_t *dev)
lixianyu 0:d8f4c441e032 126 {
lixianyu 0:d8f4c441e032 127 u8g_uint_t r;
lixianyu 0:d8f4c441e032 128 u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_GET_WIDTH, &r);
lixianyu 0:d8f4c441e032 129 return r;
lixianyu 0:d8f4c441e032 130 }
lixianyu 0:d8f4c441e032 131
lixianyu 0:d8f4c441e032 132 u8g_uint_t u8g_GetHeightLL(u8g_t *u8g, u8g_dev_t *dev)
lixianyu 0:d8f4c441e032 133 {
lixianyu 0:d8f4c441e032 134 u8g_uint_t r;
lixianyu 0:d8f4c441e032 135 u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_GET_HEIGHT, &r);
lixianyu 0:d8f4c441e032 136 return r;
lixianyu 0:d8f4c441e032 137 }
lixianyu 0:d8f4c441e032 138
lixianyu 0:d8f4c441e032 139 u8g_uint_t u8g_GetModeLL(u8g_t *u8g, u8g_dev_t *dev)
lixianyu 0:d8f4c441e032 140 {
lixianyu 0:d8f4c441e032 141 return u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_GET_MODE, NULL);
lixianyu 0:d8f4c441e032 142 }
lixianyu 0:d8f4c441e032 143
lixianyu 0:d8f4c441e032 144
lixianyu 0:d8f4c441e032 145
lixianyu 0:d8f4c441e032 146 /*====================================================================*/
lixianyu 0:d8f4c441e032 147
lixianyu 0:d8f4c441e032 148 void u8g_UpdateDimension(u8g_t *u8g)
lixianyu 0:d8f4c441e032 149 {
lixianyu 0:d8f4c441e032 150 u8g->width = u8g_GetWidthLL(u8g, u8g->dev);
lixianyu 0:d8f4c441e032 151 u8g->height = u8g_GetHeightLL(u8g, u8g->dev);
lixianyu 0:d8f4c441e032 152 u8g->mode = u8g_GetModeLL(u8g, u8g->dev);
lixianyu 0:d8f4c441e032 153 /* 9 Dec 2012: u8g_scale.c requires update of current page */
lixianyu 0:d8f4c441e032 154 u8g_call_dev_fn(u8g, u8g->dev, U8G_DEV_MSG_GET_PAGE_BOX, &(u8g->current_page));
lixianyu 0:d8f4c441e032 155 }
lixianyu 0:d8f4c441e032 156
lixianyu 0:d8f4c441e032 157 static void u8g_init_data(u8g_t *u8g)
lixianyu 0:d8f4c441e032 158 {
lixianyu 0:d8f4c441e032 159 u8g->font = NULL;
lixianyu 0:d8f4c441e032 160 u8g->cursor_font = NULL;
lixianyu 0:d8f4c441e032 161 u8g->cursor_bg_color = 0;
lixianyu 0:d8f4c441e032 162 u8g->cursor_fg_color = 1;
lixianyu 0:d8f4c441e032 163 u8g->cursor_encoding = 34;
lixianyu 0:d8f4c441e032 164 u8g->cursor_fn = (u8g_draw_cursor_fn)0;
lixianyu 0:d8f4c441e032 165
lixianyu 0:d8f4c441e032 166 #if defined(U8G_WITH_PINLIST)
lixianyu 0:d8f4c441e032 167 {
lixianyu 0:d8f4c441e032 168 uint8_t i;
lixianyu 0:d8f4c441e032 169 for( i = 0; i < U8G_PIN_LIST_LEN; i++ )
lixianyu 0:d8f4c441e032 170 u8g->pin_list[i] = U8G_PIN_NONE;
lixianyu 0:d8f4c441e032 171 }
lixianyu 0:d8f4c441e032 172 #endif
lixianyu 0:d8f4c441e032 173
lixianyu 0:d8f4c441e032 174 u8g_SetColorIndex(u8g, 1);
lixianyu 0:d8f4c441e032 175
lixianyu 0:d8f4c441e032 176 u8g_SetFontPosBaseline(u8g);
lixianyu 0:d8f4c441e032 177
lixianyu 0:d8f4c441e032 178 u8g->font_height_mode = U8G_FONT_HEIGHT_MODE_XTEXT;
lixianyu 0:d8f4c441e032 179 u8g->font_ref_ascent = 0;
lixianyu 0:d8f4c441e032 180 u8g->font_ref_descent = 0;
lixianyu 0:d8f4c441e032 181 u8g->font_line_spacing_factor = 64; /* 64 = 1.0, 77 = 1.2 line spacing factor */
lixianyu 0:d8f4c441e032 182 u8g->line_spacing = 0;
lixianyu 0:d8f4c441e032 183
lixianyu 0:d8f4c441e032 184 u8g->state_cb = u8g_state_dummy_cb;
lixianyu 0:d8f4c441e032 185
lixianyu 0:d8f4c441e032 186 }
lixianyu 0:d8f4c441e032 187
lixianyu 0:d8f4c441e032 188 uint8_t u8g_Begin(u8g_t *u8g)
lixianyu 0:d8f4c441e032 189 {
lixianyu 0:d8f4c441e032 190 /* call and init low level driver and com device */
lixianyu 0:d8f4c441e032 191 if ( u8g_InitLL(u8g, u8g->dev) == 0 )
lixianyu 0:d8f4c441e032 192 return 0;
lixianyu 0:d8f4c441e032 193 /* fetch width and height from the low level */
lixianyu 0:d8f4c441e032 194 u8g_UpdateDimension(u8g);
lixianyu 0:d8f4c441e032 195 return 1;
lixianyu 0:d8f4c441e032 196 }
lixianyu 0:d8f4c441e032 197
lixianyu 0:d8f4c441e032 198 uint8_t u8g_Init(u8g_t *u8g, u8g_dev_t *dev)
lixianyu 0:d8f4c441e032 199 {
lixianyu 0:d8f4c441e032 200 u8g_init_data(u8g);
lixianyu 0:d8f4c441e032 201 u8g->dev = dev;
lixianyu 0:d8f4c441e032 202
lixianyu 0:d8f4c441e032 203 /* On the Arduino Environment this will lead to two calls to u8g_Begin(), the following line will be called first (by U8glib constructors) */
lixianyu 0:d8f4c441e032 204 /* if - in future releases - this is removed, then still call u8g_UpdateDimension() */
lixianyu 0:d8f4c441e032 205 /* if Arduino call u8g_UpdateDimension else u8g_Begin */
lixianyu 0:d8f4c441e032 206 /* issue 146 */
lixianyu 0:d8f4c441e032 207 return u8g_Begin(u8g);
lixianyu 0:d8f4c441e032 208 }
lixianyu 0:d8f4c441e032 209
lixianyu 0:d8f4c441e032 210 /* special init for pure ARM systems */
lixianyu 0:d8f4c441e032 211 uint8_t u8g_InitComFn(u8g_t *u8g, u8g_dev_t *dev, u8g_com_fnptr com_fn)
lixianyu 0:d8f4c441e032 212 {
lixianyu 0:d8f4c441e032 213 u8g_init_data(u8g);
lixianyu 0:d8f4c441e032 214
lixianyu 0:d8f4c441e032 215 #if defined(U8G_WITH_PINLIST)
lixianyu 0:d8f4c441e032 216 {
lixianyu 0:d8f4c441e032 217 uint8_t i;
lixianyu 0:d8f4c441e032 218 for( i = 0; i < U8G_PIN_LIST_LEN; i++ )
lixianyu 0:d8f4c441e032 219 u8g->pin_list[i] = U8G_PIN_DUMMY;
lixianyu 0:d8f4c441e032 220 }
lixianyu 0:d8f4c441e032 221 #endif
lixianyu 0:d8f4c441e032 222
lixianyu 0:d8f4c441e032 223 u8g->dev = dev;
lixianyu 0:d8f4c441e032 224
lixianyu 0:d8f4c441e032 225 /* replace the device procedure with a custom communication procedure */
lixianyu 0:d8f4c441e032 226 u8g->dev->com_fn = com_fn;
lixianyu 0:d8f4c441e032 227
lixianyu 0:d8f4c441e032 228 /* On the Arduino Environment this will lead to two calls to u8g_Begin(), the following line will be called first (by U8glib constructors) */
lixianyu 0:d8f4c441e032 229 /* if - in future releases - this is removed, then still call u8g_UpdateDimension() */
lixianyu 0:d8f4c441e032 230 /* if Arduino call u8g_UpdateDimension else u8g_Begin */
lixianyu 0:d8f4c441e032 231 /* issue 146 */
lixianyu 0:d8f4c441e032 232 return u8g_Begin(u8g);
lixianyu 0:d8f4c441e032 233 }
lixianyu 0:d8f4c441e032 234
lixianyu 0:d8f4c441e032 235
lixianyu 0:d8f4c441e032 236 #if defined(U8G_WITH_PINLIST)
lixianyu 0:d8f4c441e032 237 uint8_t u8g_InitSPI(u8g_t *u8g, u8g_dev_t *dev, uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset)
lixianyu 0:d8f4c441e032 238 {
lixianyu 0:d8f4c441e032 239
lixianyu 0:d8f4c441e032 240 /* fill data structure with some suitable values */
lixianyu 0:d8f4c441e032 241 u8g_init_data(u8g);
lixianyu 0:d8f4c441e032 242 u8g->dev = dev;
lixianyu 0:d8f4c441e032 243
lixianyu 0:d8f4c441e032 244 /* assign user pins */
lixianyu 0:d8f4c441e032 245 u8g->pin_list[U8G_PI_SCK] = sck;
lixianyu 0:d8f4c441e032 246 u8g->pin_list[U8G_PI_MOSI] = mosi;
lixianyu 0:d8f4c441e032 247 u8g->pin_list[U8G_PI_CS] = cs;
lixianyu 0:d8f4c441e032 248 u8g->pin_list[U8G_PI_A0] = a0;
lixianyu 0:d8f4c441e032 249 u8g->pin_list[U8G_PI_RESET] = reset;
lixianyu 0:d8f4c441e032 250
lixianyu 0:d8f4c441e032 251 /* On the Arduino Environment this will lead to two calls to u8g_Begin(), the following line will be called first (by U8glib constructors) */
lixianyu 0:d8f4c441e032 252 /* if - in future releases - this is removed, then still call u8g_UpdateDimension() */
lixianyu 0:d8f4c441e032 253 /* if Arduino call u8g_UpdateDimension else u8g_Begin */
lixianyu 0:d8f4c441e032 254 /* issue 146 */
lixianyu 0:d8f4c441e032 255 return u8g_Begin(u8g);
lixianyu 0:d8f4c441e032 256 }
lixianyu 0:d8f4c441e032 257
lixianyu 0:d8f4c441e032 258 uint8_t u8g_InitHWSPI(u8g_t *u8g, u8g_dev_t *dev, uint8_t cs, uint8_t a0, uint8_t reset)
lixianyu 0:d8f4c441e032 259 {
lixianyu 0:d8f4c441e032 260 /* fill data structure with some suitable values */
lixianyu 0:d8f4c441e032 261 u8g_init_data(u8g);
lixianyu 0:d8f4c441e032 262 u8g->dev = dev;
lixianyu 0:d8f4c441e032 263
lixianyu 0:d8f4c441e032 264
lixianyu 0:d8f4c441e032 265 /* assign user pins */
lixianyu 0:d8f4c441e032 266 u8g->pin_list[U8G_PI_CS] = cs;
lixianyu 0:d8f4c441e032 267 u8g->pin_list[U8G_PI_A0] = a0;
lixianyu 0:d8f4c441e032 268 u8g->pin_list[U8G_PI_RESET] = reset;
lixianyu 0:d8f4c441e032 269
lixianyu 0:d8f4c441e032 270 return u8g_Begin(u8g);
lixianyu 0:d8f4c441e032 271 }
lixianyu 0:d8f4c441e032 272
lixianyu 0:d8f4c441e032 273 uint8_t u8g_InitI2C(u8g_t *u8g, u8g_dev_t *dev, uint8_t options)
lixianyu 0:d8f4c441e032 274 {
lixianyu 0:d8f4c441e032 275 /* fill data structure with some suitable values */
lixianyu 0:d8f4c441e032 276 u8g_init_data(u8g);
lixianyu 0:d8f4c441e032 277 u8g->dev = dev;
lixianyu 0:d8f4c441e032 278
lixianyu 0:d8f4c441e032 279 u8g->pin_list[U8G_PI_I2C_OPTION] = options;
lixianyu 0:d8f4c441e032 280
lixianyu 0:d8f4c441e032 281 return u8g_Begin(u8g);
lixianyu 0:d8f4c441e032 282 }
lixianyu 0:d8f4c441e032 283
lixianyu 0:d8f4c441e032 284
lixianyu 0:d8f4c441e032 285 uint8_t u8g_Init8BitFixedPort(u8g_t *u8g, u8g_dev_t *dev, uint8_t en, uint8_t cs, uint8_t di, uint8_t rw, uint8_t reset)
lixianyu 0:d8f4c441e032 286 {
lixianyu 0:d8f4c441e032 287
lixianyu 0:d8f4c441e032 288 /* fill data structure with some suitable values */
lixianyu 0:d8f4c441e032 289 u8g_init_data(u8g);
lixianyu 0:d8f4c441e032 290 u8g->dev = dev;
lixianyu 0:d8f4c441e032 291
lixianyu 0:d8f4c441e032 292 /* assign user pins */
lixianyu 0:d8f4c441e032 293
lixianyu 0:d8f4c441e032 294 u8g->pin_list[U8G_PI_EN] = en;
lixianyu 0:d8f4c441e032 295 u8g->pin_list[U8G_PI_CS] = cs;
lixianyu 0:d8f4c441e032 296 u8g->pin_list[U8G_PI_DI] = di;
lixianyu 0:d8f4c441e032 297 u8g->pin_list[U8G_PI_RW] = rw;
lixianyu 0:d8f4c441e032 298 u8g->pin_list[U8G_PI_RESET] = reset;
lixianyu 0:d8f4c441e032 299
lixianyu 0:d8f4c441e032 300 return u8g_Begin(u8g);
lixianyu 0:d8f4c441e032 301 }
lixianyu 0:d8f4c441e032 302
lixianyu 0:d8f4c441e032 303 uint8_t u8g_Init8Bit(u8g_t *u8g, u8g_dev_t *dev, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
lixianyu 0:d8f4c441e032 304 uint8_t en, uint8_t cs1, uint8_t cs2, uint8_t di, uint8_t rw, uint8_t reset)
lixianyu 0:d8f4c441e032 305 {
lixianyu 0:d8f4c441e032 306
lixianyu 0:d8f4c441e032 307 /* fill data structure with some suitable values */
lixianyu 0:d8f4c441e032 308 u8g_init_data(u8g);
lixianyu 0:d8f4c441e032 309 u8g->dev = dev;
lixianyu 0:d8f4c441e032 310
lixianyu 0:d8f4c441e032 311 /* assign user pins */
lixianyu 0:d8f4c441e032 312
lixianyu 0:d8f4c441e032 313 u8g->pin_list[U8G_PI_D0] = d0;
lixianyu 0:d8f4c441e032 314 u8g->pin_list[U8G_PI_D1] = d1;
lixianyu 0:d8f4c441e032 315 u8g->pin_list[U8G_PI_D2] = d2;
lixianyu 0:d8f4c441e032 316 u8g->pin_list[U8G_PI_D3] = d3;
lixianyu 0:d8f4c441e032 317 u8g->pin_list[U8G_PI_D4] = d4;
lixianyu 0:d8f4c441e032 318 u8g->pin_list[U8G_PI_D5] = d5;
lixianyu 0:d8f4c441e032 319 u8g->pin_list[U8G_PI_D6] = d6;
lixianyu 0:d8f4c441e032 320 u8g->pin_list[U8G_PI_D7] = d7;
lixianyu 0:d8f4c441e032 321
lixianyu 0:d8f4c441e032 322 u8g->pin_list[U8G_PI_EN] = en;
lixianyu 0:d8f4c441e032 323 u8g->pin_list[U8G_PI_CS1] = cs1;
lixianyu 0:d8f4c441e032 324 u8g->pin_list[U8G_PI_CS2] = cs2;
lixianyu 0:d8f4c441e032 325 u8g->pin_list[U8G_PI_DI] = di;
lixianyu 0:d8f4c441e032 326 u8g->pin_list[U8G_PI_RW] = rw;
lixianyu 0:d8f4c441e032 327 u8g->pin_list[U8G_PI_RESET] = reset;
lixianyu 0:d8f4c441e032 328
lixianyu 0:d8f4c441e032 329 return u8g_Begin(u8g);
lixianyu 0:d8f4c441e032 330 }
lixianyu 0:d8f4c441e032 331
lixianyu 0:d8f4c441e032 332 /*
lixianyu 0:d8f4c441e032 333
lixianyu 0:d8f4c441e032 334 PIN_D0 8
lixianyu 0:d8f4c441e032 335 PIN_D1 9
lixianyu 0:d8f4c441e032 336 PIN_D2 10
lixianyu 0:d8f4c441e032 337 PIN_D3 11
lixianyu 0:d8f4c441e032 338 PIN_D4 4
lixianyu 0:d8f4c441e032 339 PIN_D5 5
lixianyu 0:d8f4c441e032 340 PIN_D6 6
lixianyu 0:d8f4c441e032 341 PIN_D7 7
lixianyu 0:d8f4c441e032 342
lixianyu 0:d8f4c441e032 343 PIN_CS 14
lixianyu 0:d8f4c441e032 344 PIN_A0 15
lixianyu 0:d8f4c441e032 345 PIN_RESET 16
lixianyu 0:d8f4c441e032 346 PIN_WR 17
lixianyu 0:d8f4c441e032 347 PIN_RD 18
lixianyu 0:d8f4c441e032 348
lixianyu 0:d8f4c441e032 349 u8g_InitRW8Bit(u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, cs, a0, wr, rd, reset)
lixianyu 0:d8f4c441e032 350 u8g_InitRW8Bit(u8g, dev, 8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16)
lixianyu 0:d8f4c441e032 351
lixianyu 0:d8f4c441e032 352 */
lixianyu 0:d8f4c441e032 353
lixianyu 0:d8f4c441e032 354 uint8_t u8g_InitRW8Bit(u8g_t *u8g, u8g_dev_t *dev, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
lixianyu 0:d8f4c441e032 355 uint8_t cs, uint8_t a0, uint8_t wr, uint8_t rd, uint8_t reset)
lixianyu 0:d8f4c441e032 356 {
lixianyu 0:d8f4c441e032 357
lixianyu 0:d8f4c441e032 358 /* fill data structure with some suitable values */
lixianyu 0:d8f4c441e032 359 u8g_init_data(u8g);
lixianyu 0:d8f4c441e032 360 u8g->dev = dev;
lixianyu 0:d8f4c441e032 361
lixianyu 0:d8f4c441e032 362 /* assign user pins */
lixianyu 0:d8f4c441e032 363
lixianyu 0:d8f4c441e032 364 u8g->pin_list[U8G_PI_D0] = d0;
lixianyu 0:d8f4c441e032 365 u8g->pin_list[U8G_PI_D1] = d1;
lixianyu 0:d8f4c441e032 366 u8g->pin_list[U8G_PI_D2] = d2;
lixianyu 0:d8f4c441e032 367 u8g->pin_list[U8G_PI_D3] = d3;
lixianyu 0:d8f4c441e032 368 u8g->pin_list[U8G_PI_D4] = d4;
lixianyu 0:d8f4c441e032 369 u8g->pin_list[U8G_PI_D5] = d5;
lixianyu 0:d8f4c441e032 370 u8g->pin_list[U8G_PI_D6] = d6;
lixianyu 0:d8f4c441e032 371 u8g->pin_list[U8G_PI_D7] = d7;
lixianyu 0:d8f4c441e032 372
lixianyu 0:d8f4c441e032 373 u8g->pin_list[U8G_PI_CS] = cs;
lixianyu 0:d8f4c441e032 374 u8g->pin_list[U8G_PI_A0] = a0;
lixianyu 0:d8f4c441e032 375 u8g->pin_list[U8G_PI_WR] = wr;
lixianyu 0:d8f4c441e032 376 u8g->pin_list[U8G_PI_RD] = rd;
lixianyu 0:d8f4c441e032 377 u8g->pin_list[U8G_PI_RESET] = reset;
lixianyu 0:d8f4c441e032 378
lixianyu 0:d8f4c441e032 379 return u8g_Begin(u8g);
lixianyu 0:d8f4c441e032 380 }
lixianyu 0:d8f4c441e032 381 #endif /* defined(U8G_WITH_PINLIST) */
lixianyu 0:d8f4c441e032 382
lixianyu 0:d8f4c441e032 383 void u8g_FirstPage(u8g_t *u8g)
lixianyu 0:d8f4c441e032 384 {
lixianyu 0:d8f4c441e032 385 u8g_FirstPageLL(u8g, u8g->dev);
lixianyu 0:d8f4c441e032 386 }
lixianyu 0:d8f4c441e032 387
lixianyu 0:d8f4c441e032 388 uint8_t u8g_NextPage(u8g_t *u8g)
lixianyu 0:d8f4c441e032 389 {
lixianyu 0:d8f4c441e032 390 if ( u8g->cursor_fn != (u8g_draw_cursor_fn)0 )
lixianyu 0:d8f4c441e032 391 {
lixianyu 0:d8f4c441e032 392 u8g->cursor_fn(u8g);
lixianyu 0:d8f4c441e032 393 }
lixianyu 0:d8f4c441e032 394 return u8g_NextPageLL(u8g, u8g->dev);
lixianyu 0:d8f4c441e032 395 }
lixianyu 0:d8f4c441e032 396
lixianyu 0:d8f4c441e032 397 uint8_t u8g_SetContrast(u8g_t *u8g, uint8_t contrast)
lixianyu 0:d8f4c441e032 398 {
lixianyu 0:d8f4c441e032 399 return u8g_SetContrastLL(u8g, u8g->dev, contrast);
lixianyu 0:d8f4c441e032 400 }
lixianyu 0:d8f4c441e032 401
lixianyu 0:d8f4c441e032 402 void u8g_SleepOn(u8g_t *u8g)
lixianyu 0:d8f4c441e032 403 {
lixianyu 0:d8f4c441e032 404 u8g_call_dev_fn(u8g, u8g->dev, U8G_DEV_MSG_SLEEP_ON, NULL);
lixianyu 0:d8f4c441e032 405 }
lixianyu 0:d8f4c441e032 406
lixianyu 0:d8f4c441e032 407 void u8g_SleepOff(u8g_t *u8g)
lixianyu 0:d8f4c441e032 408 {
lixianyu 0:d8f4c441e032 409 u8g_call_dev_fn(u8g, u8g->dev, U8G_DEV_MSG_SLEEP_OFF, NULL);
lixianyu 0:d8f4c441e032 410 }
lixianyu 0:d8f4c441e032 411
lixianyu 0:d8f4c441e032 412
lixianyu 0:d8f4c441e032 413 void u8g_DrawPixel(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y)
lixianyu 0:d8f4c441e032 414 {
lixianyu 0:d8f4c441e032 415 u8g_DrawPixelLL(u8g, u8g->dev, x, y);
lixianyu 0:d8f4c441e032 416 }
lixianyu 0:d8f4c441e032 417
lixianyu 0:d8f4c441e032 418 void u8g_Draw8Pixel(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, uint8_t dir, uint8_t pixel)
lixianyu 0:d8f4c441e032 419 {
lixianyu 0:d8f4c441e032 420 u8g_Draw8PixelLL(u8g, u8g->dev, x, y, dir, pixel);
lixianyu 0:d8f4c441e032 421 }
lixianyu 0:d8f4c441e032 422
lixianyu 0:d8f4c441e032 423 void u8g_Draw4TPixel(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, uint8_t dir, uint8_t pixel)
lixianyu 0:d8f4c441e032 424 {
lixianyu 0:d8f4c441e032 425 u8g_Draw4TPixelLL(u8g, u8g->dev, x, y, dir, pixel);
lixianyu 0:d8f4c441e032 426 }
lixianyu 0:d8f4c441e032 427
lixianyu 0:d8f4c441e032 428 void u8g_Draw8ColorPixel(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, uint8_t colpixel)
lixianyu 0:d8f4c441e032 429 {
lixianyu 0:d8f4c441e032 430 u8g_dev_arg_pixel_t *arg = &(u8g->arg_pixel);
lixianyu 0:d8f4c441e032 431 arg->x = x;
lixianyu 0:d8f4c441e032 432 arg->y = y;
lixianyu 0:d8f4c441e032 433 arg->dir = 0;
lixianyu 0:d8f4c441e032 434 arg->pixel = 0x80;
lixianyu 0:d8f4c441e032 435 arg->color = colpixel;
lixianyu 0:d8f4c441e032 436 u8g_call_dev_fn(u8g, u8g->dev, U8G_DEV_MSG_SET_8PIXEL, arg);
lixianyu 0:d8f4c441e032 437 }
lixianyu 0:d8f4c441e032 438
lixianyu 0:d8f4c441e032 439 /* u8g_IsBBXIntersection() has been moved to u8g_clip.c */
lixianyu 0:d8f4c441e032 440 #ifdef OBSOLETE_CODE
lixianyu 0:d8f4c441e032 441 uint8_t u8g_IsBBXIntersection(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h)
lixianyu 0:d8f4c441e032 442 {
lixianyu 0:d8f4c441e032 443 /* new code */
lixianyu 0:d8f4c441e032 444 u8g_dev_arg_bbx_t arg;
lixianyu 0:d8f4c441e032 445 arg.x = x;
lixianyu 0:d8f4c441e032 446 arg.y = y;
lixianyu 0:d8f4c441e032 447 arg.w = w;
lixianyu 0:d8f4c441e032 448 arg.h = h;
lixianyu 0:d8f4c441e032 449 return u8g_is_box_bbx_intersection(&(u8g->current_page), &arg);
lixianyu 0:d8f4c441e032 450
lixianyu 0:d8f4c441e032 451 /* old code */
lixianyu 0:d8f4c441e032 452 //return u8g_IsBBXIntersectionLL(u8g, u8g->dev, x, y, w, h);
lixianyu 0:d8f4c441e032 453 }
lixianyu 0:d8f4c441e032 454 #endif
lixianyu 0:d8f4c441e032 455
lixianyu 0:d8f4c441e032 456 /*
lixianyu 0:d8f4c441e032 457 idx: index for the palette entry (0..255)
lixianyu 0:d8f4c441e032 458 r: value for red (0..255)
lixianyu 0:d8f4c441e032 459 g: value for green (0..255)
lixianyu 0:d8f4c441e032 460 b: value for blue (0..255)
lixianyu 0:d8f4c441e032 461 */
lixianyu 0:d8f4c441e032 462 void u8g_SetColorEntry(u8g_t *u8g, uint8_t idx, uint8_t r, uint8_t g, uint8_t b)
lixianyu 0:d8f4c441e032 463 {
lixianyu 0:d8f4c441e032 464 u8g_dev_arg_irgb_t irgb;
lixianyu 0:d8f4c441e032 465 irgb.idx = idx;
lixianyu 0:d8f4c441e032 466 irgb.r = r;
lixianyu 0:d8f4c441e032 467 irgb.g = g;
lixianyu 0:d8f4c441e032 468 irgb.b = b;
lixianyu 0:d8f4c441e032 469 u8g_call_dev_fn(u8g, u8g->dev, U8G_DEV_MSG_SET_COLOR_ENTRY, &irgb);
lixianyu 0:d8f4c441e032 470 }
lixianyu 0:d8f4c441e032 471
lixianyu 0:d8f4c441e032 472 void u8g_SetColorIndex(u8g_t *u8g, uint8_t idx)
lixianyu 0:d8f4c441e032 473 {
lixianyu 0:d8f4c441e032 474 u8g->arg_pixel.color = idx;
lixianyu 0:d8f4c441e032 475 /*u8g->color_index = idx; */ /* must be removed */
lixianyu 0:d8f4c441e032 476 }
lixianyu 0:d8f4c441e032 477
lixianyu 0:d8f4c441e032 478 void u8g_SetHiColor(u8g_t *u8g, uint16_t rgb)
lixianyu 0:d8f4c441e032 479 {
lixianyu 0:d8f4c441e032 480 u8g->arg_pixel.color = rgb&255;
lixianyu 0:d8f4c441e032 481 u8g->arg_pixel.hi_color = rgb>>8;
lixianyu 0:d8f4c441e032 482 /*u8g->color_index = idx; */ /* must be removed */
lixianyu 0:d8f4c441e032 483 }
lixianyu 0:d8f4c441e032 484
lixianyu 0:d8f4c441e032 485 void u8g_SetHiColorByRGB(u8g_t *u8g, uint8_t r, uint8_t g, uint8_t b)
lixianyu 0:d8f4c441e032 486 {
lixianyu 0:d8f4c441e032 487
lixianyu 0:d8f4c441e032 488 r &= ~7;
lixianyu 0:d8f4c441e032 489 g >>= 2;
lixianyu 0:d8f4c441e032 490 b >>= 3;
lixianyu 0:d8f4c441e032 491 u8g->arg_pixel.color = b;
lixianyu 0:d8f4c441e032 492 u8g->arg_pixel.color |= (g & 7) << 5;
lixianyu 0:d8f4c441e032 493 u8g->arg_pixel.hi_color = r;
lixianyu 0:d8f4c441e032 494 u8g->arg_pixel.hi_color |= (g>>3) & 7;
lixianyu 0:d8f4c441e032 495
lixianyu 0:d8f4c441e032 496 //u8g_SetHiColor(u8g, U8G_GET_HICOLOR_BY_RGB(r,g,b));
lixianyu 0:d8f4c441e032 497 }
lixianyu 0:d8f4c441e032 498
lixianyu 0:d8f4c441e032 499 void u8g_SetRGB(u8g_t *u8g, uint8_t r, uint8_t g, uint8_t b)
lixianyu 0:d8f4c441e032 500 {
lixianyu 0:d8f4c441e032 501 if ( u8g->mode == U8G_MODE_R3G3B2 )
lixianyu 0:d8f4c441e032 502 {
lixianyu 0:d8f4c441e032 503 r &= 0x0e0;
lixianyu 0:d8f4c441e032 504 g &= 0x0e0;
lixianyu 0:d8f4c441e032 505 g >>= 3;
lixianyu 0:d8f4c441e032 506 b >>= 6;
lixianyu 0:d8f4c441e032 507 u8g->arg_pixel.color = r | g | b;
lixianyu 0:d8f4c441e032 508 }
lixianyu 0:d8f4c441e032 509 else if ( u8g->mode == U8G_MODE_HICOLOR )
lixianyu 0:d8f4c441e032 510 {
lixianyu 0:d8f4c441e032 511 u8g_SetHiColorByRGB(u8g, r,g,b);
lixianyu 0:d8f4c441e032 512 }
lixianyu 0:d8f4c441e032 513 else
lixianyu 0:d8f4c441e032 514 {
lixianyu 0:d8f4c441e032 515 u8g->arg_pixel.color = r;
lixianyu 0:d8f4c441e032 516 u8g->arg_pixel.hi_color = g;
lixianyu 0:d8f4c441e032 517 u8g->arg_pixel.blue = b;
lixianyu 0:d8f4c441e032 518 }
lixianyu 0:d8f4c441e032 519 }
lixianyu 0:d8f4c441e032 520
lixianyu 0:d8f4c441e032 521
lixianyu 0:d8f4c441e032 522 uint8_t u8g_GetColorIndex(u8g_t *u8g)
lixianyu 0:d8f4c441e032 523 {
lixianyu 0:d8f4c441e032 524 return u8g->arg_pixel.color;
lixianyu 0:d8f4c441e032 525 }
lixianyu 0:d8f4c441e032 526
lixianyu 0:d8f4c441e032 527 uint8_t u8g_GetDefaultForegroundColor(u8g_t *u8g)
lixianyu 0:d8f4c441e032 528 {
lixianyu 0:d8f4c441e032 529 uint8_t mode;
lixianyu 0:d8f4c441e032 530 mode = u8g_GetMode(u8g);
lixianyu 0:d8f4c441e032 531 if ( mode == U8G_MODE_R3G3B2 )
lixianyu 0:d8f4c441e032 532 return 255; /* white */
lixianyu 0:d8f4c441e032 533 else if ( u8g_GetMode(u8g) == U8G_MODE_GRAY2BIT )
lixianyu 0:d8f4c441e032 534 return 3; /* max intensity */
lixianyu 0:d8f4c441e032 535 /* if ( u8g.getMode() == U8G_MODE_BW ) */
lixianyu 0:d8f4c441e032 536 return 1; /* pixel on */
lixianyu 0:d8f4c441e032 537 }
lixianyu 0:d8f4c441e032 538
lixianyu 0:d8f4c441e032 539 void u8g_SetDefaultForegroundColor(u8g_t *u8g)
lixianyu 0:d8f4c441e032 540 {
lixianyu 0:d8f4c441e032 541 if ( u8g->mode == U8G_MODE_HICOLOR )
lixianyu 0:d8f4c441e032 542 {
lixianyu 0:d8f4c441e032 543 u8g->arg_pixel.color = 0x0ff;
lixianyu 0:d8f4c441e032 544 u8g->arg_pixel.hi_color = 0x0ff;
lixianyu 0:d8f4c441e032 545 }
lixianyu 0:d8f4c441e032 546 else
lixianyu 0:d8f4c441e032 547 {
lixianyu 0:d8f4c441e032 548 u8g_SetColorIndex(u8g, u8g_GetDefaultForegroundColor(u8g));
lixianyu 0:d8f4c441e032 549 }
lixianyu 0:d8f4c441e032 550 }
lixianyu 0:d8f4c441e032 551
lixianyu 0:d8f4c441e032 552 uint8_t u8g_GetDefaultBackgroundColor(u8g_t *u8g)
lixianyu 0:d8f4c441e032 553 {
lixianyu 0:d8f4c441e032 554 return 0;
lixianyu 0:d8f4c441e032 555 }
lixianyu 0:d8f4c441e032 556
lixianyu 0:d8f4c441e032 557 void u8g_SetDefaultBackgroundColor(u8g_t *u8g)
lixianyu 0:d8f4c441e032 558 {
lixianyu 0:d8f4c441e032 559 u8g_SetColorIndex(u8g, u8g_GetDefaultBackgroundColor(u8g)); /* pixel on / black */
lixianyu 0:d8f4c441e032 560 }
lixianyu 0:d8f4c441e032 561
lixianyu 0:d8f4c441e032 562 uint8_t u8g_GetDefaultMidColor(u8g_t *u8g)
lixianyu 0:d8f4c441e032 563 {
lixianyu 0:d8f4c441e032 564 uint8_t mode;
lixianyu 0:d8f4c441e032 565 mode = u8g_GetMode(u8g);
lixianyu 0:d8f4c441e032 566 if ( mode == U8G_MODE_R3G3B2 )
lixianyu 0:d8f4c441e032 567 return 0x06d; /* gray: 01101101 */
lixianyu 0:d8f4c441e032 568 else if ( mode == U8G_MODE_GRAY2BIT )
lixianyu 0:d8f4c441e032 569 return 1; /* low mid intensity */
lixianyu 0:d8f4c441e032 570 /* if ( u8g.getMode() == U8G_MODE_BW ) */
lixianyu 0:d8f4c441e032 571 return 1; /* pixel on */
lixianyu 0:d8f4c441e032 572 }
lixianyu 0:d8f4c441e032 573
lixianyu 0:d8f4c441e032 574 void u8g_SetDefaultMidColor(u8g_t *u8g)
lixianyu 0:d8f4c441e032 575 {
lixianyu 0:d8f4c441e032 576 u8g_SetColorIndex(u8g, u8g_GetDefaultMidColor(u8g));
lixianyu 0:d8f4c441e032 577 }
lixianyu 0:d8f4c441e032 578
lixianyu 0:d8f4c441e032 579
lixianyu 0:d8f4c441e032 580
lixianyu 0:d8f4c441e032 581
lixianyu 0:d8f4c441e032 582