ME11C Sample Code in Maxim Integrated Team

Dependencies:   BMI160 max32630hsp3 MemoryLCD USBDevice

Fork of Host_Software_MAX32664GWEC_SpO2_HR-_EXTE by Seyhmus Cacina

Committer:
seyhmus.cacina
Date:
Mon Mar 18 14:09:48 2019 +0300
Revision:
0:b259fd1a88f5
ME11C Sample Code First Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
seyhmus.cacina 0:b259fd1a88f5 1 /* mbed GraphicsDisplay Display Library Base Class
seyhmus.cacina 0:b259fd1a88f5 2 * Copyright (c) 2007-2009 sford
seyhmus.cacina 0:b259fd1a88f5 3 * Released under the MIT License: http://mbed.org/license/mit
seyhmus.cacina 0:b259fd1a88f5 4 */
seyhmus.cacina 0:b259fd1a88f5 5
seyhmus.cacina 0:b259fd1a88f5 6 #include "../screen/GraphicsDisplay.h"
seyhmus.cacina 0:b259fd1a88f5 7
seyhmus.cacina 0:b259fd1a88f5 8 #define incx() x++, dxt += d2xt, t += dxt
seyhmus.cacina 0:b259fd1a88f5 9 #define incy() y--, dyt += d2yt, t += dyt
seyhmus.cacina 0:b259fd1a88f5 10
seyhmus.cacina 0:b259fd1a88f5 11 const unsigned char FONT8x8[97][8] = {
seyhmus.cacina 0:b259fd1a88f5 12 {0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00}, // columns, rows, num_bytes_per_char
seyhmus.cacina 0:b259fd1a88f5 13 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // space 0x20
seyhmus.cacina 0:b259fd1a88f5 14 {0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00}, // !
seyhmus.cacina 0:b259fd1a88f5 15 {0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00}, // "
seyhmus.cacina 0:b259fd1a88f5 16 {0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00}, // #
seyhmus.cacina 0:b259fd1a88f5 17 {0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00}, // $
seyhmus.cacina 0:b259fd1a88f5 18 {0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00}, // %
seyhmus.cacina 0:b259fd1a88f5 19 {0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00}, // &
seyhmus.cacina 0:b259fd1a88f5 20 {0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00}, // '
seyhmus.cacina 0:b259fd1a88f5 21 {0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00}, // (
seyhmus.cacina 0:b259fd1a88f5 22 {0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00}, // )
seyhmus.cacina 0:b259fd1a88f5 23 {0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00}, // *
seyhmus.cacina 0:b259fd1a88f5 24 {0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00}, // +
seyhmus.cacina 0:b259fd1a88f5 25 {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30}, // ,
seyhmus.cacina 0:b259fd1a88f5 26 {0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00}, // -
seyhmus.cacina 0:b259fd1a88f5 27 {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00}, // .
seyhmus.cacina 0:b259fd1a88f5 28 {0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00}, // / (forward slash)
seyhmus.cacina 0:b259fd1a88f5 29 {0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00}, // 0 0x30
seyhmus.cacina 0:b259fd1a88f5 30 {0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00}, // 1
seyhmus.cacina 0:b259fd1a88f5 31 {0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00}, // 2
seyhmus.cacina 0:b259fd1a88f5 32 {0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00}, // 3
seyhmus.cacina 0:b259fd1a88f5 33 {0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00}, // 4
seyhmus.cacina 0:b259fd1a88f5 34 {0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00}, // 5
seyhmus.cacina 0:b259fd1a88f5 35 {0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00}, // 6
seyhmus.cacina 0:b259fd1a88f5 36 {0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00}, // 7
seyhmus.cacina 0:b259fd1a88f5 37 {0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00}, // 8
seyhmus.cacina 0:b259fd1a88f5 38 {0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00}, // 9
seyhmus.cacina 0:b259fd1a88f5 39 {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00}, // :
seyhmus.cacina 0:b259fd1a88f5 40 {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30}, // ;
seyhmus.cacina 0:b259fd1a88f5 41 {0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00}, // <
seyhmus.cacina 0:b259fd1a88f5 42 {0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00}, // =
seyhmus.cacina 0:b259fd1a88f5 43 {0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00}, // >
seyhmus.cacina 0:b259fd1a88f5 44 {0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00}, // ?
seyhmus.cacina 0:b259fd1a88f5 45 {0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00}, // @ 0x40
seyhmus.cacina 0:b259fd1a88f5 46 {0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00}, // A
seyhmus.cacina 0:b259fd1a88f5 47 {0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00}, // B
seyhmus.cacina 0:b259fd1a88f5 48 {0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00}, // C
seyhmus.cacina 0:b259fd1a88f5 49 {0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00}, // D
seyhmus.cacina 0:b259fd1a88f5 50 {0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00}, // E
seyhmus.cacina 0:b259fd1a88f5 51 {0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00}, // F
seyhmus.cacina 0:b259fd1a88f5 52 {0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00}, // G
seyhmus.cacina 0:b259fd1a88f5 53 {0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00}, // H
seyhmus.cacina 0:b259fd1a88f5 54 {0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // I
seyhmus.cacina 0:b259fd1a88f5 55 {0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00}, // J
seyhmus.cacina 0:b259fd1a88f5 56 {0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00}, // K
seyhmus.cacina 0:b259fd1a88f5 57 {0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00}, // L
seyhmus.cacina 0:b259fd1a88f5 58 {0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00}, // M
seyhmus.cacina 0:b259fd1a88f5 59 {0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00}, // N
seyhmus.cacina 0:b259fd1a88f5 60 {0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00}, // O
seyhmus.cacina 0:b259fd1a88f5 61 {0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00}, // P 0x50
seyhmus.cacina 0:b259fd1a88f5 62 {0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00}, // Q
seyhmus.cacina 0:b259fd1a88f5 63 {0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00}, // R
seyhmus.cacina 0:b259fd1a88f5 64 {0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00}, // S
seyhmus.cacina 0:b259fd1a88f5 65 {0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00}, // T
seyhmus.cacina 0:b259fd1a88f5 66 {0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00}, // U
seyhmus.cacina 0:b259fd1a88f5 67 {0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00}, // V
seyhmus.cacina 0:b259fd1a88f5 68 {0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00}, // W
seyhmus.cacina 0:b259fd1a88f5 69 {0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00}, // X
seyhmus.cacina 0:b259fd1a88f5 70 {0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00}, // Y
seyhmus.cacina 0:b259fd1a88f5 71 {0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00}, // Z
seyhmus.cacina 0:b259fd1a88f5 72 {0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00}, // [
seyhmus.cacina 0:b259fd1a88f5 73 {0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00}, // \ (back slash)
seyhmus.cacina 0:b259fd1a88f5 74 {0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00}, // ]
seyhmus.cacina 0:b259fd1a88f5 75 {0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00}, // ^
seyhmus.cacina 0:b259fd1a88f5 76 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF}, // _
seyhmus.cacina 0:b259fd1a88f5 77 {0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00}, // ` 0x60
seyhmus.cacina 0:b259fd1a88f5 78 {0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00}, // a
seyhmus.cacina 0:b259fd1a88f5 79 {0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00}, // b
seyhmus.cacina 0:b259fd1a88f5 80 {0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00}, // c
seyhmus.cacina 0:b259fd1a88f5 81 {0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00}, // d
seyhmus.cacina 0:b259fd1a88f5 82 {0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00}, // e
seyhmus.cacina 0:b259fd1a88f5 83 {0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00}, // f
seyhmus.cacina 0:b259fd1a88f5 84 {0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C}, // g
seyhmus.cacina 0:b259fd1a88f5 85 {0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00}, // h
seyhmus.cacina 0:b259fd1a88f5 86 {0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00}, // i
seyhmus.cacina 0:b259fd1a88f5 87 {0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C}, // j
seyhmus.cacina 0:b259fd1a88f5 88 {0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00}, // k
seyhmus.cacina 0:b259fd1a88f5 89 {0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // l
seyhmus.cacina 0:b259fd1a88f5 90 {0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00}, // m
seyhmus.cacina 0:b259fd1a88f5 91 {0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00}, // n
seyhmus.cacina 0:b259fd1a88f5 92 {0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00}, // o
seyhmus.cacina 0:b259fd1a88f5 93 {0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78}, // p
seyhmus.cacina 0:b259fd1a88f5 94 {0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F}, // q
seyhmus.cacina 0:b259fd1a88f5 95 {0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00}, // r
seyhmus.cacina 0:b259fd1a88f5 96 {0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00}, // s
seyhmus.cacina 0:b259fd1a88f5 97 {0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00}, // t
seyhmus.cacina 0:b259fd1a88f5 98 {0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00}, // u
seyhmus.cacina 0:b259fd1a88f5 99 {0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00}, // v
seyhmus.cacina 0:b259fd1a88f5 100 {0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00}, // w
seyhmus.cacina 0:b259fd1a88f5 101 {0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00}, // x
seyhmus.cacina 0:b259fd1a88f5 102 {0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C}, // y
seyhmus.cacina 0:b259fd1a88f5 103 {0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00}, // z
seyhmus.cacina 0:b259fd1a88f5 104 {0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00}, // {
seyhmus.cacina 0:b259fd1a88f5 105 {0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00}, // |
seyhmus.cacina 0:b259fd1a88f5 106 {0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00}, // }
seyhmus.cacina 0:b259fd1a88f5 107 {0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00}, // ~
seyhmus.cacina 0:b259fd1a88f5 108 {0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00}}; // DEL
seyhmus.cacina 0:b259fd1a88f5 109
seyhmus.cacina 0:b259fd1a88f5 110 GraphicsDisplay::GraphicsDisplay(const char *name):TextDisplay(name) {
seyhmus.cacina 0:b259fd1a88f5 111 foreground((uint16_t)Black);
seyhmus.cacina 0:b259fd1a88f5 112 background((uint16_t)White);
seyhmus.cacina 0:b259fd1a88f5 113 // current pixel location
seyhmus.cacina 0:b259fd1a88f5 114 _x = 0;
seyhmus.cacina 0:b259fd1a88f5 115 _y = 0;
seyhmus.cacina 0:b259fd1a88f5 116 // window settings
seyhmus.cacina 0:b259fd1a88f5 117 _x1 = 0;
seyhmus.cacina 0:b259fd1a88f5 118 _x2 = 0;
seyhmus.cacina 0:b259fd1a88f5 119 _y1 = 0;
seyhmus.cacina 0:b259fd1a88f5 120 _y2 = 0;
seyhmus.cacina 0:b259fd1a88f5 121 }
seyhmus.cacina 0:b259fd1a88f5 122
seyhmus.cacina 0:b259fd1a88f5 123 void GraphicsDisplay::character(int column, int row, int value) {
seyhmus.cacina 0:b259fd1a88f5 124 if(externalfont){ // send external font
seyhmus.cacina 0:b259fd1a88f5 125 unsigned int hor,vert,offset,bpl,j,i,b;
seyhmus.cacina 0:b259fd1a88f5 126 const unsigned char* sign;
seyhmus.cacina 0:b259fd1a88f5 127 unsigned char z,w;
seyhmus.cacina 0:b259fd1a88f5 128 if ((value < 31) || (value > 127)) return; // test char range
seyhmus.cacina 0:b259fd1a88f5 129 // read font parameter from start of array
seyhmus.cacina 0:b259fd1a88f5 130 offset = font[0]; // bytes / char
seyhmus.cacina 0:b259fd1a88f5 131 hor = font[1]; // get hor size of font
seyhmus.cacina 0:b259fd1a88f5 132 vert = font[2]; // get vert size of font
seyhmus.cacina 0:b259fd1a88f5 133 bpl = font[3]; // bytes per line
seyhmus.cacina 0:b259fd1a88f5 134 if (char_x + hor > width()) {
seyhmus.cacina 0:b259fd1a88f5 135 char_x = 0;
seyhmus.cacina 0:b259fd1a88f5 136 char_y = char_y + vert;
seyhmus.cacina 0:b259fd1a88f5 137 if (char_y >= height() - font[2]) {
seyhmus.cacina 0:b259fd1a88f5 138 char_y = 0;
seyhmus.cacina 0:b259fd1a88f5 139 }
seyhmus.cacina 0:b259fd1a88f5 140 }
seyhmus.cacina 0:b259fd1a88f5 141 window(char_x, char_y,hor,vert); // char box
seyhmus.cacina 0:b259fd1a88f5 142 sign = &font[((value -32) * offset) + 4]; // start of char bitmap
seyhmus.cacina 0:b259fd1a88f5 143 w = sign[0]; // width of actual char
seyhmus.cacina 0:b259fd1a88f5 144 for (j=0; j<vert; j++) { // vert line
seyhmus.cacina 0:b259fd1a88f5 145 for (i=0; i<hor; i++) { // horz line
seyhmus.cacina 0:b259fd1a88f5 146 z = sign[bpl * i + ((j & 0xF8) >> 3)+1];
seyhmus.cacina 0:b259fd1a88f5 147 b = 1 << (j & 0x07);
seyhmus.cacina 0:b259fd1a88f5 148 if (( z & b ) == 0x00) {
seyhmus.cacina 0:b259fd1a88f5 149 putp(_foreground);
seyhmus.cacina 0:b259fd1a88f5 150 }
seyhmus.cacina 0:b259fd1a88f5 151 else {
seyhmus.cacina 0:b259fd1a88f5 152 putp(_background);
seyhmus.cacina 0:b259fd1a88f5 153 }
seyhmus.cacina 0:b259fd1a88f5 154 }
seyhmus.cacina 0:b259fd1a88f5 155 }
seyhmus.cacina 0:b259fd1a88f5 156 if ((w + 2) < hor) { // x offset to next char
seyhmus.cacina 0:b259fd1a88f5 157 char_x += w + 2;
seyhmus.cacina 0:b259fd1a88f5 158 }
seyhmus.cacina 0:b259fd1a88f5 159 else char_x += hor;
seyhmus.cacina 0:b259fd1a88f5 160 }
seyhmus.cacina 0:b259fd1a88f5 161 // send default font
seyhmus.cacina 0:b259fd1a88f5 162 else {
seyhmus.cacina 0:b259fd1a88f5 163 blitbit(column * 8, row * 8, 8, 8, (char*)&(FONT8x8[value - 0x1F][0]));
seyhmus.cacina 0:b259fd1a88f5 164 }
seyhmus.cacina 0:b259fd1a88f5 165 }
seyhmus.cacina 0:b259fd1a88f5 166
seyhmus.cacina 0:b259fd1a88f5 167 void GraphicsDisplay::window(int x, int y, int w, int h) {
seyhmus.cacina 0:b259fd1a88f5 168 // current pixel location
seyhmus.cacina 0:b259fd1a88f5 169 _x = x;
seyhmus.cacina 0:b259fd1a88f5 170 _y = y;
seyhmus.cacina 0:b259fd1a88f5 171 // window settings
seyhmus.cacina 0:b259fd1a88f5 172 _x1 = x;
seyhmus.cacina 0:b259fd1a88f5 173 _x2 = x + w - 1;
seyhmus.cacina 0:b259fd1a88f5 174 _y1 = y;
seyhmus.cacina 0:b259fd1a88f5 175 _y2 = y + h - 1;
seyhmus.cacina 0:b259fd1a88f5 176 }
seyhmus.cacina 0:b259fd1a88f5 177
seyhmus.cacina 0:b259fd1a88f5 178 void GraphicsDisplay::putp(int colour) {
seyhmus.cacina 0:b259fd1a88f5 179 // put pixel at current pixel location
seyhmus.cacina 0:b259fd1a88f5 180 pixel(_x, _y, colour);
seyhmus.cacina 0:b259fd1a88f5 181 // update pixel location based on window settings
seyhmus.cacina 0:b259fd1a88f5 182 _x++;
seyhmus.cacina 0:b259fd1a88f5 183 if(_x > _x2) {
seyhmus.cacina 0:b259fd1a88f5 184 _x = _x1;
seyhmus.cacina 0:b259fd1a88f5 185 _y++;
seyhmus.cacina 0:b259fd1a88f5 186 if(_y > _y2) {
seyhmus.cacina 0:b259fd1a88f5 187 _y = _y1;
seyhmus.cacina 0:b259fd1a88f5 188 }
seyhmus.cacina 0:b259fd1a88f5 189 }
seyhmus.cacina 0:b259fd1a88f5 190 }
seyhmus.cacina 0:b259fd1a88f5 191
seyhmus.cacina 0:b259fd1a88f5 192 void GraphicsDisplay::rect(int x0, int y0, int x1, int y1, int color) {
seyhmus.cacina 0:b259fd1a88f5 193 if (x1 > x0) hline(x0,x1,y0,color);
seyhmus.cacina 0:b259fd1a88f5 194 else hline(x1,x0,y0,color);
seyhmus.cacina 0:b259fd1a88f5 195 if (y1 > y0) vline(x0,y0,y1,color);
seyhmus.cacina 0:b259fd1a88f5 196 else vline(x0,y1,y0,color);
seyhmus.cacina 0:b259fd1a88f5 197 if (x1 > x0) hline(x0,x1,y1,color);
seyhmus.cacina 0:b259fd1a88f5 198 else hline(x1,x0,y1,color);
seyhmus.cacina 0:b259fd1a88f5 199 if (y1 > y0) vline(x1,y0,y1,color);
seyhmus.cacina 0:b259fd1a88f5 200 else vline(x1,y1,y0,color);
seyhmus.cacina 0:b259fd1a88f5 201 return;
seyhmus.cacina 0:b259fd1a88f5 202 }
seyhmus.cacina 0:b259fd1a88f5 203
seyhmus.cacina 0:b259fd1a88f5 204 void GraphicsDisplay::fillrect(int x0, int y0, int w, int h, int colour) {
seyhmus.cacina 0:b259fd1a88f5 205 unsigned long int index=0;
seyhmus.cacina 0:b259fd1a88f5 206 if (w < 0) {
seyhmus.cacina 0:b259fd1a88f5 207 x0 = x0 + w;
seyhmus.cacina 0:b259fd1a88f5 208 w = -w;
seyhmus.cacina 0:b259fd1a88f5 209 }
seyhmus.cacina 0:b259fd1a88f5 210 if (h < 0) {
seyhmus.cacina 0:b259fd1a88f5 211 y0 = y0 + h;
seyhmus.cacina 0:b259fd1a88f5 212 h = -h;
seyhmus.cacina 0:b259fd1a88f5 213 }
seyhmus.cacina 0:b259fd1a88f5 214 window(x0,y0,w,h);
seyhmus.cacina 0:b259fd1a88f5 215 int num = h*w;
seyhmus.cacina 0:b259fd1a88f5 216 for( index = 0; index<num; index++ ) {
seyhmus.cacina 0:b259fd1a88f5 217 putp(colour);
seyhmus.cacina 0:b259fd1a88f5 218 }
seyhmus.cacina 0:b259fd1a88f5 219 return;
seyhmus.cacina 0:b259fd1a88f5 220 }
seyhmus.cacina 0:b259fd1a88f5 221
seyhmus.cacina 0:b259fd1a88f5 222 void GraphicsDisplay::fill(int x, int y, int w, int h, int colour) {
seyhmus.cacina 0:b259fd1a88f5 223 fillrect(x, y, w, h, colour);
seyhmus.cacina 0:b259fd1a88f5 224 }
seyhmus.cacina 0:b259fd1a88f5 225
seyhmus.cacina 0:b259fd1a88f5 226 void GraphicsDisplay::circle(int x, int y, int r,int colour){
seyhmus.cacina 0:b259fd1a88f5 227 int ce = -r;
seyhmus.cacina 0:b259fd1a88f5 228 int cx = r;
seyhmus.cacina 0:b259fd1a88f5 229 int cy = 0;
seyhmus.cacina 0:b259fd1a88f5 230 while(cx >= cy){
seyhmus.cacina 0:b259fd1a88f5 231 pixel(x+cx,y+cy,colour);
seyhmus.cacina 0:b259fd1a88f5 232 pixel(x-cx,y-cy,colour);
seyhmus.cacina 0:b259fd1a88f5 233 pixel(x-cx,y+cy,colour);
seyhmus.cacina 0:b259fd1a88f5 234 pixel(x+cx,y-cy,colour);
seyhmus.cacina 0:b259fd1a88f5 235 pixel(x+cy,y+cx,colour);
seyhmus.cacina 0:b259fd1a88f5 236 pixel(x-cy,y+cx,colour);
seyhmus.cacina 0:b259fd1a88f5 237 pixel(x-cy,y-cx,colour);
seyhmus.cacina 0:b259fd1a88f5 238 pixel(x+cy,y-cx,colour);
seyhmus.cacina 0:b259fd1a88f5 239 ce += 2*cy++ + 1;
seyhmus.cacina 0:b259fd1a88f5 240 if(ce >= 0){
seyhmus.cacina 0:b259fd1a88f5 241 ce -= 2*cx---1;
seyhmus.cacina 0:b259fd1a88f5 242 }
seyhmus.cacina 0:b259fd1a88f5 243
seyhmus.cacina 0:b259fd1a88f5 244 }
seyhmus.cacina 0:b259fd1a88f5 245
seyhmus.cacina 0:b259fd1a88f5 246 }
seyhmus.cacina 0:b259fd1a88f5 247
seyhmus.cacina 0:b259fd1a88f5 248 // To draw circle set a and b to the same values
seyhmus.cacina 0:b259fd1a88f5 249 void GraphicsDisplay::ellipse(int xc, int yc, int a, int b, unsigned int colour)
seyhmus.cacina 0:b259fd1a88f5 250 {
seyhmus.cacina 0:b259fd1a88f5 251 /* e(x,y) = b^2*x^2 + a^2*y^2 - a^2*b^2 */
seyhmus.cacina 0:b259fd1a88f5 252 int x = 0, y = b;
seyhmus.cacina 0:b259fd1a88f5 253 long a2 = (long)a*a, b2 = (long)b*b;
seyhmus.cacina 0:b259fd1a88f5 254 long crit1 = -(a2/4 + a%2 + b2);
seyhmus.cacina 0:b259fd1a88f5 255 long crit2 = -(b2/4 + b%2 + a2);
seyhmus.cacina 0:b259fd1a88f5 256 long crit3 = -(b2/4 + b%2);
seyhmus.cacina 0:b259fd1a88f5 257 long t = -a2*y; // e(x+1/2,y-1/2) - (a^2+b^2)/4
seyhmus.cacina 0:b259fd1a88f5 258 long dxt = 2*b2*x, dyt = -2*a2*y;
seyhmus.cacina 0:b259fd1a88f5 259 long d2xt = 2*b2, d2yt = 2*a2;
seyhmus.cacina 0:b259fd1a88f5 260
seyhmus.cacina 0:b259fd1a88f5 261 while (y>=0 && x<=a) {
seyhmus.cacina 0:b259fd1a88f5 262 pixel(xc+x, yc+y, colour);
seyhmus.cacina 0:b259fd1a88f5 263 if (x!=0 || y!=0)
seyhmus.cacina 0:b259fd1a88f5 264 pixel(xc-x, yc-y, colour);
seyhmus.cacina 0:b259fd1a88f5 265 if (x!=0 && y!=0) {
seyhmus.cacina 0:b259fd1a88f5 266 pixel(xc+x, yc-y, colour);
seyhmus.cacina 0:b259fd1a88f5 267 pixel(xc-x, yc+y, colour);
seyhmus.cacina 0:b259fd1a88f5 268 }
seyhmus.cacina 0:b259fd1a88f5 269 if (t + b2*x <= crit1 || // e(x+1,y-1/2) <= 0
seyhmus.cacina 0:b259fd1a88f5 270 t + a2*y <= crit3) // e(x+1/2,y) <= 0
seyhmus.cacina 0:b259fd1a88f5 271 incx();
seyhmus.cacina 0:b259fd1a88f5 272 else if (t - a2*y > crit2) // e(x+1/2,y-1) > 0
seyhmus.cacina 0:b259fd1a88f5 273 incy();
seyhmus.cacina 0:b259fd1a88f5 274 else {
seyhmus.cacina 0:b259fd1a88f5 275 incx();
seyhmus.cacina 0:b259fd1a88f5 276 incy();
seyhmus.cacina 0:b259fd1a88f5 277 }
seyhmus.cacina 0:b259fd1a88f5 278 }
seyhmus.cacina 0:b259fd1a88f5 279 }
seyhmus.cacina 0:b259fd1a88f5 280 // To draw circle set a and b to the same values
seyhmus.cacina 0:b259fd1a88f5 281 void GraphicsDisplay::fillellipse(int xc, int yc, int a, int b, unsigned int colour)
seyhmus.cacina 0:b259fd1a88f5 282 {
seyhmus.cacina 0:b259fd1a88f5 283 /* e(x,y) = b^2*x^2 + a^2*y^2 - a^2*b^2 */
seyhmus.cacina 0:b259fd1a88f5 284 int x = 0, y = b;
seyhmus.cacina 0:b259fd1a88f5 285 int rx = x, ry = y;
seyhmus.cacina 0:b259fd1a88f5 286 unsigned int width = 1;
seyhmus.cacina 0:b259fd1a88f5 287 unsigned int height = 1;
seyhmus.cacina 0:b259fd1a88f5 288 long a2 = (long)a*a, b2 = (long)b*b;
seyhmus.cacina 0:b259fd1a88f5 289 long crit1 = -(a2/4 + a%2 + b2);
seyhmus.cacina 0:b259fd1a88f5 290 long crit2 = -(b2/4 + b%2 + a2);
seyhmus.cacina 0:b259fd1a88f5 291 long crit3 = -(b2/4 + b%2);
seyhmus.cacina 0:b259fd1a88f5 292 long t = -a2*y; // e(x+1/2,y-1/2) - (a^2+b^2)/4
seyhmus.cacina 0:b259fd1a88f5 293 long dxt = 2*b2*x, dyt = -2*a2*y;
seyhmus.cacina 0:b259fd1a88f5 294 long d2xt = 2*b2, d2yt = 2*a2;
seyhmus.cacina 0:b259fd1a88f5 295 if (b == 0) {
seyhmus.cacina 0:b259fd1a88f5 296 fillrect(xc-a, yc, 2*a+1, 1, colour);
seyhmus.cacina 0:b259fd1a88f5 297 return;
seyhmus.cacina 0:b259fd1a88f5 298 }
seyhmus.cacina 0:b259fd1a88f5 299 while (y>=0 && x<=a) {
seyhmus.cacina 0:b259fd1a88f5 300 if (t + b2*x <= crit1 || // e(x+1,y-1/2) <= 0
seyhmus.cacina 0:b259fd1a88f5 301 t + a2*y <= crit3) { // e(x+1/2,y) <= 0
seyhmus.cacina 0:b259fd1a88f5 302 if (height == 1)
seyhmus.cacina 0:b259fd1a88f5 303 ; // draw nothing
seyhmus.cacina 0:b259fd1a88f5 304 else if (ry*2+1 > (height-1)*2) {
seyhmus.cacina 0:b259fd1a88f5 305 fillrect(xc-rx, yc-ry, width, height-1, colour);
seyhmus.cacina 0:b259fd1a88f5 306 fillrect(xc-rx, yc+ry+1, width, 1-height, colour);
seyhmus.cacina 0:b259fd1a88f5 307 ry -= height-1;
seyhmus.cacina 0:b259fd1a88f5 308 height = 1;
seyhmus.cacina 0:b259fd1a88f5 309 } else {
seyhmus.cacina 0:b259fd1a88f5 310 fillrect(xc-rx, yc-ry, width, ry*2+1, colour);
seyhmus.cacina 0:b259fd1a88f5 311 ry -= ry;
seyhmus.cacina 0:b259fd1a88f5 312 height = 1;
seyhmus.cacina 0:b259fd1a88f5 313 }
seyhmus.cacina 0:b259fd1a88f5 314 incx();
seyhmus.cacina 0:b259fd1a88f5 315 rx++;
seyhmus.cacina 0:b259fd1a88f5 316 width += 2;
seyhmus.cacina 0:b259fd1a88f5 317 } else if (t - a2*y > crit2) { // e(x+1/2,y-1) > 0
seyhmus.cacina 0:b259fd1a88f5 318 incy();
seyhmus.cacina 0:b259fd1a88f5 319 height++;
seyhmus.cacina 0:b259fd1a88f5 320 } else {
seyhmus.cacina 0:b259fd1a88f5 321 if (ry*2+1 > height*2) {
seyhmus.cacina 0:b259fd1a88f5 322 fillrect(xc-rx, yc-ry, width, height, colour);
seyhmus.cacina 0:b259fd1a88f5 323 fillrect(xc-rx, yc+ry+1, width, -height, colour);
seyhmus.cacina 0:b259fd1a88f5 324 } else {
seyhmus.cacina 0:b259fd1a88f5 325 fillrect(xc-rx, yc-ry, width, ry*2+1, colour);
seyhmus.cacina 0:b259fd1a88f5 326 }
seyhmus.cacina 0:b259fd1a88f5 327 incx();
seyhmus.cacina 0:b259fd1a88f5 328 incy();
seyhmus.cacina 0:b259fd1a88f5 329 rx++;
seyhmus.cacina 0:b259fd1a88f5 330 width += 2;
seyhmus.cacina 0:b259fd1a88f5 331 ry -= height;
seyhmus.cacina 0:b259fd1a88f5 332 height = 1;
seyhmus.cacina 0:b259fd1a88f5 333 }
seyhmus.cacina 0:b259fd1a88f5 334 }
seyhmus.cacina 0:b259fd1a88f5 335 if (ry > height) {
seyhmus.cacina 0:b259fd1a88f5 336 fillrect(xc-rx, yc-ry, width, height, colour);
seyhmus.cacina 0:b259fd1a88f5 337 fillrect(xc-rx, yc+ry+1, width, -height, colour);
seyhmus.cacina 0:b259fd1a88f5 338 } else {
seyhmus.cacina 0:b259fd1a88f5 339 fillrect(xc-rx, yc-ry, width, ry*2+1, colour);
seyhmus.cacina 0:b259fd1a88f5 340 }
seyhmus.cacina 0:b259fd1a88f5 341 }
seyhmus.cacina 0:b259fd1a88f5 342
seyhmus.cacina 0:b259fd1a88f5 343
seyhmus.cacina 0:b259fd1a88f5 344 void GraphicsDisplay::line(int x0, int y0, int x1, int y1, int colour) {
seyhmus.cacina 0:b259fd1a88f5 345 //window(x0, y, w, h);
seyhmus.cacina 0:b259fd1a88f5 346 int dx = 0, dy = 0;
seyhmus.cacina 0:b259fd1a88f5 347 int dx_sym = 0, dy_sym = 0;
seyhmus.cacina 0:b259fd1a88f5 348 int dx_x2 = 0, dy_x2 = 0;
seyhmus.cacina 0:b259fd1a88f5 349 int di = 0;
seyhmus.cacina 0:b259fd1a88f5 350 dx = x1-x0;
seyhmus.cacina 0:b259fd1a88f5 351 dy = y1-y0;
seyhmus.cacina 0:b259fd1a88f5 352
seyhmus.cacina 0:b259fd1a88f5 353 if (dx == 0) { /* vertical line */
seyhmus.cacina 0:b259fd1a88f5 354 if (y1 > y0) vline(x0,y0,y1,colour);
seyhmus.cacina 0:b259fd1a88f5 355 else vline(x0,y1,y0,colour);
seyhmus.cacina 0:b259fd1a88f5 356 return;
seyhmus.cacina 0:b259fd1a88f5 357 }
seyhmus.cacina 0:b259fd1a88f5 358 if (dx > 0) {
seyhmus.cacina 0:b259fd1a88f5 359 dx_sym = 1;
seyhmus.cacina 0:b259fd1a88f5 360 } else {
seyhmus.cacina 0:b259fd1a88f5 361 dx_sym = -1;
seyhmus.cacina 0:b259fd1a88f5 362 }
seyhmus.cacina 0:b259fd1a88f5 363 if (dy == 0) { /* horizontal line */
seyhmus.cacina 0:b259fd1a88f5 364 if (x1 > x0) hline(x0,x1,y0,colour);
seyhmus.cacina 0:b259fd1a88f5 365 else hline(x1,x0,y0,colour);
seyhmus.cacina 0:b259fd1a88f5 366 return;
seyhmus.cacina 0:b259fd1a88f5 367 }
seyhmus.cacina 0:b259fd1a88f5 368 if (dy > 0) {
seyhmus.cacina 0:b259fd1a88f5 369 dy_sym = 1;
seyhmus.cacina 0:b259fd1a88f5 370 } else {
seyhmus.cacina 0:b259fd1a88f5 371 dy_sym = -1;
seyhmus.cacina 0:b259fd1a88f5 372 }
seyhmus.cacina 0:b259fd1a88f5 373 dx = dx_sym*dx;
seyhmus.cacina 0:b259fd1a88f5 374 dy = dy_sym*dy;
seyhmus.cacina 0:b259fd1a88f5 375 dx_x2 = dx*2;
seyhmus.cacina 0:b259fd1a88f5 376 dy_x2 = dy*2;
seyhmus.cacina 0:b259fd1a88f5 377 if (dx >= dy) {
seyhmus.cacina 0:b259fd1a88f5 378 di = dy_x2 - dx;
seyhmus.cacina 0:b259fd1a88f5 379 while (x0 != x1) {
seyhmus.cacina 0:b259fd1a88f5 380
seyhmus.cacina 0:b259fd1a88f5 381 pixel(x0, y0, colour);
seyhmus.cacina 0:b259fd1a88f5 382 x0 += dx_sym;
seyhmus.cacina 0:b259fd1a88f5 383 if (di<0) {
seyhmus.cacina 0:b259fd1a88f5 384 di += dy_x2;
seyhmus.cacina 0:b259fd1a88f5 385 } else {
seyhmus.cacina 0:b259fd1a88f5 386 di += dy_x2 - dx_x2;
seyhmus.cacina 0:b259fd1a88f5 387 y0 += dy_sym;
seyhmus.cacina 0:b259fd1a88f5 388 }
seyhmus.cacina 0:b259fd1a88f5 389 }
seyhmus.cacina 0:b259fd1a88f5 390 pixel(x0, y0, colour);
seyhmus.cacina 0:b259fd1a88f5 391 } else {
seyhmus.cacina 0:b259fd1a88f5 392 di = dx_x2 - dy;
seyhmus.cacina 0:b259fd1a88f5 393 while (y0 != y1) {
seyhmus.cacina 0:b259fd1a88f5 394 pixel(x0, y0, colour);
seyhmus.cacina 0:b259fd1a88f5 395 y0 += dy_sym;
seyhmus.cacina 0:b259fd1a88f5 396 if (di < 0) {
seyhmus.cacina 0:b259fd1a88f5 397 di += dx_x2;
seyhmus.cacina 0:b259fd1a88f5 398 } else {
seyhmus.cacina 0:b259fd1a88f5 399 di += dx_x2 - dy_x2;
seyhmus.cacina 0:b259fd1a88f5 400 x0 += dx_sym;
seyhmus.cacina 0:b259fd1a88f5 401 }
seyhmus.cacina 0:b259fd1a88f5 402 }
seyhmus.cacina 0:b259fd1a88f5 403 pixel(x0, y0, colour);
seyhmus.cacina 0:b259fd1a88f5 404 }
seyhmus.cacina 0:b259fd1a88f5 405 return;
seyhmus.cacina 0:b259fd1a88f5 406 }
seyhmus.cacina 0:b259fd1a88f5 407
seyhmus.cacina 0:b259fd1a88f5 408 void GraphicsDisplay::hline(int x0, int x1, int y, int colour) {
seyhmus.cacina 0:b259fd1a88f5 409 int w;
seyhmus.cacina 0:b259fd1a88f5 410 w = x1 - x0 + 1;
seyhmus.cacina 0:b259fd1a88f5 411 window(x0,y,w,1);
seyhmus.cacina 0:b259fd1a88f5 412 for (int x=0; x<w; x++) {
seyhmus.cacina 0:b259fd1a88f5 413 putp(colour);
seyhmus.cacina 0:b259fd1a88f5 414 }
seyhmus.cacina 0:b259fd1a88f5 415 return;
seyhmus.cacina 0:b259fd1a88f5 416 }
seyhmus.cacina 0:b259fd1a88f5 417
seyhmus.cacina 0:b259fd1a88f5 418 void GraphicsDisplay::vline(int x, int y0, int y1, int colour) {
seyhmus.cacina 0:b259fd1a88f5 419 int h;
seyhmus.cacina 0:b259fd1a88f5 420 h = y1 - y0 + 1;
seyhmus.cacina 0:b259fd1a88f5 421 window(x,y0,1,h);
seyhmus.cacina 0:b259fd1a88f5 422 for (int y=0; y<h; y++) {
seyhmus.cacina 0:b259fd1a88f5 423 putp(colour);
seyhmus.cacina 0:b259fd1a88f5 424 }
seyhmus.cacina 0:b259fd1a88f5 425 return;
seyhmus.cacina 0:b259fd1a88f5 426 }
seyhmus.cacina 0:b259fd1a88f5 427
seyhmus.cacina 0:b259fd1a88f5 428 void GraphicsDisplay::cls() {
seyhmus.cacina 0:b259fd1a88f5 429 fill(0, 0, width(), height(), _background);
seyhmus.cacina 0:b259fd1a88f5 430 }
seyhmus.cacina 0:b259fd1a88f5 431
seyhmus.cacina 0:b259fd1a88f5 432 void GraphicsDisplay::blit(int x, int y, int w, int h, const int *colour) {
seyhmus.cacina 0:b259fd1a88f5 433 window(x, y, w, h);
seyhmus.cacina 0:b259fd1a88f5 434 for(int i=0; i<w*h; i++) {
seyhmus.cacina 0:b259fd1a88f5 435 putp(colour[i]);
seyhmus.cacina 0:b259fd1a88f5 436 }
seyhmus.cacina 0:b259fd1a88f5 437 }
seyhmus.cacina 0:b259fd1a88f5 438
seyhmus.cacina 0:b259fd1a88f5 439 void GraphicsDisplay::blitbit(int x, int y, int w, int h, const char* colour) {
seyhmus.cacina 0:b259fd1a88f5 440 window(x, y, w, h);
seyhmus.cacina 0:b259fd1a88f5 441 for(int i = 0; i < w*h; i++) {
seyhmus.cacina 0:b259fd1a88f5 442 char byte = colour[i >> 3];
seyhmus.cacina 0:b259fd1a88f5 443 int offset = i & 0x7;
seyhmus.cacina 0:b259fd1a88f5 444 int c = ((byte << (offset)) & 0x80) ? _foreground : _background;
seyhmus.cacina 0:b259fd1a88f5 445 putp(c);
seyhmus.cacina 0:b259fd1a88f5 446 }
seyhmus.cacina 0:b259fd1a88f5 447 }
seyhmus.cacina 0:b259fd1a88f5 448
seyhmus.cacina 0:b259fd1a88f5 449 int GraphicsDisplay::columns() {
seyhmus.cacina 0:b259fd1a88f5 450 return width() / 8;
seyhmus.cacina 0:b259fd1a88f5 451 }
seyhmus.cacina 0:b259fd1a88f5 452
seyhmus.cacina 0:b259fd1a88f5 453 int GraphicsDisplay::rows() {
seyhmus.cacina 0:b259fd1a88f5 454 return height() / 8;
seyhmus.cacina 0:b259fd1a88f5 455 }
seyhmus.cacina 0:b259fd1a88f5 456
seyhmus.cacina 0:b259fd1a88f5 457