hadif azli / Mbed 2 deprecated TEST123

Dependencies:   mbed Blynk

Committer:
lixianyu
Date:
Mon Jun 13 02:21:11 2016 +0000
Revision:
1:0e75de2a5d21
Parent:
0:d8f4c441e032
u8glib???????????????????????????Adafruit_GFX????OLED????????bitmap??????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lixianyu 1:0e75de2a5d21 1 /*
lixianyu 1:0e75de2a5d21 2
lixianyu 1:0e75de2a5d21 3 u8g_pb8v1.c
lixianyu 1:0e75de2a5d21 4
lixianyu 1:0e75de2a5d21 5 8bit height monochrom (1 bit) page buffer
lixianyu 1:0e75de2a5d21 6 byte has vertical orientation
lixianyu 1:0e75de2a5d21 7
lixianyu 1:0e75de2a5d21 8 Universal 8bit Graphics Library
lixianyu 1:0e75de2a5d21 9
lixianyu 1:0e75de2a5d21 10 Copyright (c) 2011, olikraus@gmail.com
lixianyu 1:0e75de2a5d21 11 All rights reserved.
lixianyu 1:0e75de2a5d21 12
lixianyu 1:0e75de2a5d21 13 Redistribution and use in source and binary forms, with or without modification,
lixianyu 1:0e75de2a5d21 14 are permitted provided that the following conditions are met:
lixianyu 1:0e75de2a5d21 15
lixianyu 1:0e75de2a5d21 16 * Redistributions of source code must retain the above copyright notice, this list
lixianyu 1:0e75de2a5d21 17 of conditions and the following disclaimer.
lixianyu 1:0e75de2a5d21 18
lixianyu 1:0e75de2a5d21 19 * Redistributions in binary form must reproduce the above copyright notice, this
lixianyu 1:0e75de2a5d21 20 list of conditions and the following disclaimer in the documentation and/or other
lixianyu 1:0e75de2a5d21 21 materials provided with the distribution.
lixianyu 1:0e75de2a5d21 22
lixianyu 1:0e75de2a5d21 23 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
lixianyu 1:0e75de2a5d21 24 CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
lixianyu 1:0e75de2a5d21 25 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
lixianyu 1:0e75de2a5d21 26 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
lixianyu 1:0e75de2a5d21 27 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
lixianyu 1:0e75de2a5d21 28 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
lixianyu 1:0e75de2a5d21 29 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
lixianyu 1:0e75de2a5d21 30 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
lixianyu 1:0e75de2a5d21 31 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
lixianyu 1:0e75de2a5d21 32 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
lixianyu 1:0e75de2a5d21 33 STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
lixianyu 1:0e75de2a5d21 34 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
lixianyu 1:0e75de2a5d21 35 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
lixianyu 1:0e75de2a5d21 36
lixianyu 1:0e75de2a5d21 37
lixianyu 1:0e75de2a5d21 38 */
lixianyu 1:0e75de2a5d21 39
lixianyu 1:0e75de2a5d21 40 #include "u8g.h"
lixianyu 1:0e75de2a5d21 41 #include <string.h>
lixianyu 1:0e75de2a5d21 42
lixianyu 1:0e75de2a5d21 43
lixianyu 1:0e75de2a5d21 44 void u8g_pb8v1_Init(u8g_pb_t *b, void *buf, u8g_uint_t width) U8G_NOINLINE;
lixianyu 1:0e75de2a5d21 45 void u8g_pb8v1_set_pixel(u8g_pb_t *b, u8g_uint_t x, u8g_uint_t y, uint8_t color_index) U8G_NOINLINE;
lixianyu 1:0e75de2a5d21 46 void u8g_pb8v1_SetPixel(u8g_pb_t *b, const u8g_dev_arg_pixel_t * const arg_pixel) U8G_NOINLINE ;
lixianyu 1:0e75de2a5d21 47 void u8g_pb8v1_Set8PixelStd(u8g_pb_t *b, u8g_dev_arg_pixel_t *arg_pixel) U8G_NOINLINE;
lixianyu 1:0e75de2a5d21 48
lixianyu 1:0e75de2a5d21 49 /* Obsolete, usually set by the init of the structure */
lixianyu 1:0e75de2a5d21 50 void u8g_pb8v1_Init(u8g_pb_t *b, void *buf, u8g_uint_t width)
lixianyu 1:0e75de2a5d21 51 {
lixianyu 1:0e75de2a5d21 52 b->buf = buf;
lixianyu 1:0e75de2a5d21 53 b->width = width;
lixianyu 1:0e75de2a5d21 54 u8g_pb_Clear(b);
lixianyu 1:0e75de2a5d21 55 }
lixianyu 1:0e75de2a5d21 56 #define _BV(bit) (1<<(bit))
lixianyu 1:0e75de2a5d21 57 void u8g_pb8v1_set_pixel(u8g_pb_t *b, u8g_uint_t x, u8g_uint_t y, uint8_t color_index)
lixianyu 1:0e75de2a5d21 58 {
lixianyu 1:0e75de2a5d21 59 register uint8_t mask;
lixianyu 1:0e75de2a5d21 60 uint8_t *ptr = b->buf;
lixianyu 1:0e75de2a5d21 61
lixianyu 1:0e75de2a5d21 62 y -= b->p.page_y0;
lixianyu 1:0e75de2a5d21 63 #if 1
lixianyu 1:0e75de2a5d21 64 mask = 1;
lixianyu 1:0e75de2a5d21 65 y &= 0x07;
lixianyu 1:0e75de2a5d21 66 mask <<= y;
lixianyu 1:0e75de2a5d21 67 ptr += x;
lixianyu 1:0e75de2a5d21 68 //printf("color_index = %d\r\n", color_index);
lixianyu 1:0e75de2a5d21 69 //color_index = 0;
lixianyu 1:0e75de2a5d21 70 if ( color_index ) {
lixianyu 1:0e75de2a5d21 71 *ptr |= mask;
lixianyu 1:0e75de2a5d21 72 } else {
lixianyu 1:0e75de2a5d21 73 mask ^=0xff;
lixianyu 1:0e75de2a5d21 74 *ptr &= mask;
lixianyu 1:0e75de2a5d21 75 }
lixianyu 1:0e75de2a5d21 76 #else
lixianyu 1:0e75de2a5d21 77 if (color_index)
lixianyu 1:0e75de2a5d21 78 ptr[x+ (y/8)*128] |= _BV((y%8));
lixianyu 1:0e75de2a5d21 79 else // else black
lixianyu 1:0e75de2a5d21 80 ptr[x+ (y/8)*128] &= ~_BV((y%8));
lixianyu 1:0e75de2a5d21 81 #endif
lixianyu 1:0e75de2a5d21 82 }
lixianyu 1:0e75de2a5d21 83
lixianyu 1:0e75de2a5d21 84
lixianyu 1:0e75de2a5d21 85 void u8g_pb8v1_SetPixel(u8g_pb_t *b, const u8g_dev_arg_pixel_t * const arg_pixel)
lixianyu 1:0e75de2a5d21 86 {
lixianyu 1:0e75de2a5d21 87 if ( arg_pixel->y < b->p.page_y0 )
lixianyu 1:0e75de2a5d21 88 return;
lixianyu 1:0e75de2a5d21 89 if ( arg_pixel->y > b->p.page_y1 )
lixianyu 1:0e75de2a5d21 90 return;
lixianyu 1:0e75de2a5d21 91 if ( arg_pixel->x >= b->width )
lixianyu 1:0e75de2a5d21 92 return;
lixianyu 1:0e75de2a5d21 93 u8g_pb8v1_set_pixel(b, arg_pixel->x, arg_pixel->y, arg_pixel->color);
lixianyu 1:0e75de2a5d21 94 }
lixianyu 0:d8f4c441e032 95
lixianyu 1:0e75de2a5d21 96 void u8g_pb8v1_Set8PixelStd(u8g_pb_t *b, u8g_dev_arg_pixel_t *arg_pixel)
lixianyu 1:0e75de2a5d21 97 {
lixianyu 1:0e75de2a5d21 98 register uint8_t pixel = arg_pixel->pixel;
lixianyu 1:0e75de2a5d21 99 do {
lixianyu 1:0e75de2a5d21 100 if ( pixel & 128 ) {
lixianyu 1:0e75de2a5d21 101 u8g_pb8v1_SetPixel(b, arg_pixel);
lixianyu 1:0e75de2a5d21 102 }
lixianyu 1:0e75de2a5d21 103 switch( arg_pixel->dir ) {
lixianyu 1:0e75de2a5d21 104 case 0:
lixianyu 1:0e75de2a5d21 105 arg_pixel->x++;
lixianyu 1:0e75de2a5d21 106 break;
lixianyu 1:0e75de2a5d21 107 case 1:
lixianyu 1:0e75de2a5d21 108 arg_pixel->y++;
lixianyu 1:0e75de2a5d21 109 break;
lixianyu 1:0e75de2a5d21 110 case 2:
lixianyu 1:0e75de2a5d21 111 arg_pixel->x--;
lixianyu 1:0e75de2a5d21 112 break;
lixianyu 1:0e75de2a5d21 113 case 3:
lixianyu 1:0e75de2a5d21 114 arg_pixel->y--;
lixianyu 1:0e75de2a5d21 115 break;
lixianyu 1:0e75de2a5d21 116 }
lixianyu 1:0e75de2a5d21 117 pixel <<= 1;
lixianyu 1:0e75de2a5d21 118 } while( pixel != 0 );
lixianyu 1:0e75de2a5d21 119 }
lixianyu 1:0e75de2a5d21 120
lixianyu 1:0e75de2a5d21 121
lixianyu 1:0e75de2a5d21 122 void u8g_pb8v1_Set8PixelOpt2(u8g_pb_t *b, u8g_dev_arg_pixel_t *arg_pixel)
lixianyu 1:0e75de2a5d21 123 {
lixianyu 1:0e75de2a5d21 124 register uint8_t pixel = arg_pixel->pixel;
lixianyu 1:0e75de2a5d21 125 u8g_uint_t dx = 0;
lixianyu 1:0e75de2a5d21 126 u8g_uint_t dy = 0;
lixianyu 1:0e75de2a5d21 127 //printf("u8g_pb8v1_Set8PixelOpt2()\r\n");
lixianyu 1:0e75de2a5d21 128 switch( arg_pixel->dir ) {
lixianyu 1:0e75de2a5d21 129 case 0:
lixianyu 1:0e75de2a5d21 130 dx++;
lixianyu 1:0e75de2a5d21 131 break;
lixianyu 1:0e75de2a5d21 132 case 1:
lixianyu 1:0e75de2a5d21 133 dy++;
lixianyu 1:0e75de2a5d21 134 break;
lixianyu 1:0e75de2a5d21 135 case 2:
lixianyu 1:0e75de2a5d21 136 dx--;
lixianyu 1:0e75de2a5d21 137 break;
lixianyu 1:0e75de2a5d21 138 case 3:
lixianyu 1:0e75de2a5d21 139 dy--;
lixianyu 1:0e75de2a5d21 140 break;
lixianyu 1:0e75de2a5d21 141 }
lixianyu 1:0e75de2a5d21 142
lixianyu 1:0e75de2a5d21 143 do {
lixianyu 1:0e75de2a5d21 144 if ( pixel & 128 )
lixianyu 1:0e75de2a5d21 145 u8g_pb8v1_SetPixel(b, arg_pixel);
lixianyu 1:0e75de2a5d21 146 arg_pixel->x += dx;
lixianyu 1:0e75de2a5d21 147 arg_pixel->y += dy;
lixianyu 1:0e75de2a5d21 148 pixel <<= 1;
lixianyu 1:0e75de2a5d21 149 } while( pixel != 0 );
lixianyu 1:0e75de2a5d21 150
lixianyu 1:0e75de2a5d21 151 }
lixianyu 1:0e75de2a5d21 152
lixianyu 1:0e75de2a5d21 153 uint8_t u8g_dev_pb8v1_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
lixianyu 1:0e75de2a5d21 154 {
lixianyu 1:0e75de2a5d21 155 u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
lixianyu 1:0e75de2a5d21 156 switch(msg) {
lixianyu 1:0e75de2a5d21 157 case U8G_DEV_MSG_SET_8PIXEL:
lixianyu 1:0e75de2a5d21 158 if ( u8g_pb_Is8PixelVisible(pb, (u8g_dev_arg_pixel_t *)arg) ) {
lixianyu 1:0e75de2a5d21 159 u8g_pb8v1_Set8PixelOpt2(pb, (u8g_dev_arg_pixel_t *)arg);
lixianyu 1:0e75de2a5d21 160 }
lixianyu 1:0e75de2a5d21 161 break;
lixianyu 1:0e75de2a5d21 162 case U8G_DEV_MSG_SET_PIXEL:
lixianyu 1:0e75de2a5d21 163 u8g_pb8v1_SetPixel(pb, (u8g_dev_arg_pixel_t *)arg);
lixianyu 1:0e75de2a5d21 164 break;
lixianyu 1:0e75de2a5d21 165 case U8G_DEV_MSG_INIT:
lixianyu 1:0e75de2a5d21 166 break;
lixianyu 1:0e75de2a5d21 167 case U8G_DEV_MSG_STOP:
lixianyu 1:0e75de2a5d21 168 break;
lixianyu 1:0e75de2a5d21 169 case U8G_DEV_MSG_PAGE_FIRST:
lixianyu 1:0e75de2a5d21 170 u8g_pb_Clear(pb);
lixianyu 1:0e75de2a5d21 171 u8g_page_First(&(pb->p));
lixianyu 1:0e75de2a5d21 172 break;
lixianyu 1:0e75de2a5d21 173 case U8G_DEV_MSG_PAGE_NEXT:
lixianyu 1:0e75de2a5d21 174 if ( u8g_page_Next(&(pb->p)) == 0 )
lixianyu 1:0e75de2a5d21 175 return 0;
lixianyu 1:0e75de2a5d21 176 u8g_pb_Clear(pb);
lixianyu 1:0e75de2a5d21 177 break;
lixianyu 1:0e75de2a5d21 178 #ifdef U8G_DEV_MSG_IS_BBX_INTERSECTION
lixianyu 1:0e75de2a5d21 179 case U8G_DEV_MSG_IS_BBX_INTERSECTION:
lixianyu 1:0e75de2a5d21 180 return u8g_pb_IsIntersection(pb, (u8g_dev_arg_bbx_t *)arg);
lixianyu 1:0e75de2a5d21 181 #endif
lixianyu 1:0e75de2a5d21 182 case U8G_DEV_MSG_GET_PAGE_BOX:
lixianyu 1:0e75de2a5d21 183 u8g_pb_GetPageBox(pb, (u8g_box_t *)arg);
lixianyu 1:0e75de2a5d21 184 break;
lixianyu 1:0e75de2a5d21 185 case U8G_DEV_MSG_GET_WIDTH:
lixianyu 1:0e75de2a5d21 186 *((u8g_uint_t *)arg) = pb->width;
lixianyu 1:0e75de2a5d21 187 break;
lixianyu 1:0e75de2a5d21 188 case U8G_DEV_MSG_GET_HEIGHT:
lixianyu 1:0e75de2a5d21 189 *((u8g_uint_t *)arg) = pb->p.total_height;
lixianyu 1:0e75de2a5d21 190 break;
lixianyu 1:0e75de2a5d21 191 case U8G_DEV_MSG_SET_COLOR_ENTRY:
lixianyu 1:0e75de2a5d21 192 break;
lixianyu 1:0e75de2a5d21 193 case U8G_DEV_MSG_SET_XY_CB:
lixianyu 1:0e75de2a5d21 194 break;
lixianyu 1:0e75de2a5d21 195 case U8G_DEV_MSG_GET_MODE:
lixianyu 1:0e75de2a5d21 196 return U8G_MODE_BW;
lixianyu 1:0e75de2a5d21 197 }
lixianyu 1:0e75de2a5d21 198 return 1;
lixianyu 1:0e75de2a5d21 199 }
lixianyu 1:0e75de2a5d21 200
lixianyu 1:0e75de2a5d21 201
lixianyu 1:0e75de2a5d21 202