annotate lcd.c @ 81:d7002925c15d

Fix compilation on newer toolchain. http://www.atollic.com/index.php/kb/1-kb_building/117-kb_error_in_strexb
author Daniel O'Connor <darius@dons.net.au>
date Mon, 02 Mar 2015 14:30:58 +1030
parents 662e7f01c991
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
1 /*
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
2 * Example code (I think)
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
3 * ~/projects/STM32Strive/奋斗STM32开发板例程/奋斗STM32开发板例程/奋斗STM32开发板MINI/STM32奋斗版ucOS II V2.86 uCGUI 3.9 DEMO-V2/STM32奋斗版ucOS II V2.86 uCGUI 3.9 DEMO
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
4 *
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
5 * Schematics
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
6 * Main board docs/Strive\ Mini\ STM32\ Schematic.pdf
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
7 * LCD board docs/Strive Mini LCD STM32 Schematic.pdf
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
8 * MCU reference manual docs/CD00171190.pdf
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
9 * MCU Data sheet (pinout) docs/CD00191185.pdf
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
10 * LCD controller data sheet docs/ili9325-v0.35.pdf
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
11 * LCD controller app notes docs/ILI9325AN_V0.22.pdf
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
12 * XXX: not sure what panel is connected
3
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
13 *
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
14 */
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
15 /* LCD board MCU
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
16 1 VCC
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
17 2 TC_SCK PA5/SPI1_SCK
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
18 3 GND
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
19 4 TC_CS PB7/SPI1_CS3
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
20 5 RST PE1 FSMC_NBL1? (unlikely)
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
21 6 TC_DIN PA7/SPI1_MOSI
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
22 7 nOE PD4/FSMC_nOE
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
23 8 TC_DOUT PA6/SPI1_MISO
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
24 9 nWR PD5/FSMC_nWE
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
25 10 TC_INT PB6
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
26 11 CS PD7/FSMC_NE1/FSMC_NCE2
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
27 12 NC
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
28 13 RS PD11/FSMC_A16
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
29 14 NC
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
30 15 D7 PE10/FSMC_D7
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
31 16 NC
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
32 17 D6 PE9/FSMC_D6
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
33 18 NC
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
34 19 D3 PD1/FSMC_D3
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
35 20 D13 PD8/FSMC_D13
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
36 21 D5 PE8/FSMC_D5
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
37 22 D12 PE15/FSMC_D12
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
38 23 D4 PE7/FSMC_D4
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
39 24 GND
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
40 25 NC
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
41 26 D11 PE14/FSMC_D11
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
42 27 D2 PD0/FSMC_D2
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
43 28 D10 PE13/FSMC_D10
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
44 29 D1 PD15/FSMC_D1
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
45 30 D9 PE12/FSMC_D9
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
46 31 D0 PD14/FSMC_D0
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
47 32 D14 PD9/FSMC_D14
3
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
48 33 NC
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
49 34 D8 PE11/FSMC_D8
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
50 35 NC
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
51 36 NC
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
52 37 NC
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
53 38 LCD_PWM PD13/TIM4_CH2
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
54 39 NC
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
55 40 D15 PD10/FSMC_D15
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
56 */
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
57
4
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
58 #include <stdio.h>
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
59 #include <stdint.h>
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
60 #include <stdlib.h>
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
61 #include <ctype.h>
3
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
62 #include "stm32f10x.h"
74e9b3baac1e Jumbo commit to make things work.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
63 #include "lcd.h"
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
64 #include "delay.h"
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
65
4
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
66 #define Bank1_LCD_C ((uint32_t)0x60000000) /* Register Address */
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
67 #define Bank1_LCD_D ((uint32_t)0x60020000) /* Data Address */
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
68
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
69 #define COLINCVAL 7968 /* 255.0 / 320.0 * 10000 */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
70
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
71 void colinc(uint16_t *mag, uint16_t *err, uint16_t amt, uint16_t max) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
72 *err += amt;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
73 if (*err > max) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
74 (*mag) = (*mag) + 1;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
75 (*err) = (*err) - max;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
76 }
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
77 }
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
78
4
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
79 void
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
80 lcd_writereg(uint16_t index, uint16_t val) {
4
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
81 *(__IO uint16_t *)(Bank1_LCD_C) = index;
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
82 *(__IO uint16_t *)(Bank1_LCD_D) = val;
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
83 }
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
84
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
85 uint16_t
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
86 lcd_readreg(uint16_t index) {
4
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
87 *(__IO uint16_t *)(Bank1_LCD_C) = index;
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
88 return(*(__IO uint16_t *)(Bank1_LCD_D));
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
89 }
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
90
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
91 uint16_t
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
92 lcd_readdata(int first) {
4
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
93 uint16_t a = 0;
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
94 if (first)
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
95 a = *(__IO uint16_t *) (Bank1_LCD_D); /* Dummy */
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
96 a = *(__IO uint16_t *) (Bank1_LCD_D); /* Read */
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
97
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
98 return (a);
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
99 }
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
100
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
101 void
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
102 lcd_startgram(uint16_t x, uint16_t y) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
103 lcd_writereg(0x20, x);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
104 lcd_writereg(0x21, y);
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
105 *(__IO uint16_t *)(Bank1_LCD_C) = 0x22; /* Start GRAM write */
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
106 }
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
107
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
108 void
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
109 lcd_writedata(uint16_t val) {
4
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
110 *(__IO uint16_t *)(Bank1_LCD_D) = val;
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
111 }
2c87e30c982d Add LCD init, touch screen writing etc..
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
112
5
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
113 void
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
114 lcd_setpwm(uint16_t val) {
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
115 TIM_OCInitTypeDef TIM_OCInitStructure;
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
116
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
117 /* Channel 2 configuration in PWM mode */
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
118 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
119 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
120 TIM_OCInitStructure.TIM_Pulse = val;
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
121 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
122
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
123 TIM_OC2Init(TIM4, &TIM_OCInitStructure);
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
124
efa2c22266e3 PWM control LED backlight.
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
125 }
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
126
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
127 void
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
128 lcd_init(void) {
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
129 uint16_t id, x, y;
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
130
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
131 /* Initialise LCD panel */
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
132
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
133 /* Pull reset pin low */
64
ff29436c0224 - Make sure the line is high before pulling low for reset.
Daniel O'Connor <darius@dons.net.au>
parents: 62
diff changeset
134 GPIO_SetBits(GPIOE, GPIO_Pin_1);
62
bb52e6dad784 The LCD works better when the GPIO clocks are enabled before frobbing them.
Daniel O'Connor <darius@dons.net.au>
parents: 9
diff changeset
135 delay(10);
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
136 GPIO_ResetBits(GPIOE, GPIO_Pin_1);
64
ff29436c0224 - Make sure the line is high before pulling low for reset.
Daniel O'Connor <darius@dons.net.au>
parents: 62
diff changeset
137 delay(2000);
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
138 GPIO_SetBits(GPIOE, GPIO_Pin_1);
62
bb52e6dad784 The LCD works better when the GPIO clocks are enabled before frobbing them.
Daniel O'Connor <darius@dons.net.au>
parents: 9
diff changeset
139 delay(500);
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
140
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
141 id = lcd_readreg(0x00);
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
142 if (id != 0x9325) {
65
662e7f01c991 Convert \r\n to \n.
Daniel O'Connor <darius@dons.net.au>
parents: 64
diff changeset
143 printf("LCD ID doesn't match, expected 0x9325 got 0x%x\n", id);
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
144 return;
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
145 }
65
662e7f01c991 Convert \r\n to \n.
Daniel O'Connor <darius@dons.net.au>
parents: 64
diff changeset
146 printf("LCD ID matches\n");
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
147
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
148 lcd_writereg(0x00e3, 0x3008); /* Set internal timing (not documented) */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
149 lcd_writereg(0x00e7, 0x0012); /* Set internal timing (not documented) */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
150 lcd_writereg(0x00ef, 0x1231); /* Set internal timing (not documented) */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
151 lcd_writereg(0x0000, 0x0001); /* Start Oscillation */
64
ff29436c0224 - Make sure the line is high before pulling low for reset.
Daniel O'Connor <darius@dons.net.au>
parents: 62
diff changeset
152 delay(50000);
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
153 lcd_writereg(0x0001, 0x0100); /* set SS (S720 -> S1) */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
154 lcd_writereg(0x0002, 0x0700); /* set line inversion (B/C + EOR) */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
155 lcd_writereg(0x0004, 0x0000); /* no resizing */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
156 lcd_writereg(0x0008, 0x0202); /* set the back porch and front porch (2 lines each) */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
157 lcd_writereg(0x0009, 0x0000); /* set non-display area refresh cycle ISC[3:0] */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
158 lcd_writereg(0x000a, 0x0000); /* FMARK function */
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
159
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
160 lcd_writereg(0x000c, 0x0000); /* RGB ctl - Internal clock, 18bit interface */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
161 lcd_writereg(0x000d, 0x0000); /* Frame marker Position */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
162 lcd_writereg(0x000f, 0x0000); /* RGB interface polarity */
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
163
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
164 /* Power On sequence */
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
165 lcd_writereg(0x0010, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
166 lcd_writereg(0x0011, 0x0007); /* DC1[2:0], DC0[2:0], VC[2:0] */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
167 lcd_writereg(0x0012, 0x0000); /* VREG1OUT voltage */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
168 lcd_writereg(0x0013, 0x0000); /* VDV[4:0] for VCOM amplitude */
64
ff29436c0224 - Make sure the line is high before pulling low for reset.
Daniel O'Connor <darius@dons.net.au>
parents: 62
diff changeset
169 delay(200000); /* Dis-charge capacitor power voltage */
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
170 lcd_writereg(0x0010, 0x1690); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
171 lcd_writereg(0x0011, 0x0227); /* R11h = 0x0221 at VCI = 3.3V, DC1[2:0], DC0[2:0], VC[2:0] */
64
ff29436c0224 - Make sure the line is high before pulling low for reset.
Daniel O'Connor <darius@dons.net.au>
parents: 62
diff changeset
172 delay(50000); /* delay 50ms */
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
173 lcd_writereg(0x0012, 0x001c); /* External reference voltage= Vci; */
64
ff29436c0224 - Make sure the line is high before pulling low for reset.
Daniel O'Connor <darius@dons.net.au>
parents: 62
diff changeset
174 delay(50000); /* delay 50ms */
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
175 lcd_writereg(0x0013, 0x1800); /* R13 = 1200 when R12 = 009D; VDV[4:0] for VCOM amplitude */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
176 lcd_writereg(0x0029, 0x001c); /* R29 = 000C when R12 = 009D; VCM[5:0] for VCOMH */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
177 lcd_writereg(0x002b, 0x000d); /* Frame Rate = 91Hz */
64
ff29436c0224 - Make sure the line is high before pulling low for reset.
Daniel O'Connor <darius@dons.net.au>
parents: 62
diff changeset
178 delay(50000); /* delay 50ms */
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
179
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
180 /* Set GRAM area */
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
181 lcd_writereg(0x0050, 0x0000); /* Horizontal GRAM Start Address */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
182 lcd_writereg(0x0051, 0x00ef); /* Horizontal GRAM End Address */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
183 lcd_writereg(0x0052, 0x0000); /* Vertical GRAM Start Address */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
184 lcd_writereg(0x0053, 0x013f); /* Vertical GRAM Start Address */
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
185
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
186 lcd_writereg(0x0060, 0xa700); /* Gate Scan Line, drive G320 -> G1 */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
187 lcd_writereg(0x0061, 0x0003); /* VLE & REV */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
188 lcd_writereg(0x006a, 0x0000); /* set scrolling line */
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
189
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
190 /* Partial Display Control */
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
191 lcd_writereg(0x0080, 0x0000); /* Image 1 */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
192 lcd_writereg(0x0081, 0x0000);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
193 lcd_writereg(0x0082, 0x0000);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
194 lcd_writereg(0x0083, 0x0000); /* Image 2 */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
195 lcd_writereg(0x0084, 0x0000);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
196 lcd_writereg(0x0085, 0x0000);
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
197
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
198 /* Panel Control */
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
199 lcd_writereg(0x0090, 0x0010);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
200 lcd_writereg(0x0092, 0x0000);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
201 lcd_writereg(0x0093, 0x0003);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
202 lcd_writereg(0x0095, 0x0110);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
203 lcd_writereg(0x0097, 0x0000); /* Undocumented */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
204 lcd_writereg(0x0098, 0x0000); /* Undocumented */
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
205
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
206 lcd_writereg(0x0007, 0x0133); /* Display on, 262k colour mode (vs 8) */
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
207
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
208 lcd_writereg(0x0003, 0x1030); /* set GRAM write direction and enable BGR, 64K colours, 1 transfers/pixel. */
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
209
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
210 /* Adjust the Gamma Curve */
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
211 lcd_writereg(0x0030, 0x0006);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
212 lcd_writereg(0x0031, 0x0101);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
213 lcd_writereg(0x0032, 0x0003);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
214 lcd_writereg(0x0035, 0x0106);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
215 lcd_writereg(0x0036, 0x0b02);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
216 lcd_writereg(0x0037, 0x0302);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
217 lcd_writereg(0x0038, 0x0707);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
218 lcd_writereg(0x0039, 0x0007);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
219 lcd_writereg(0x003c, 0x0600);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
220 lcd_writereg(0x003d, 0x020b);
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
221
65
662e7f01c991 Convert \r\n to \n.
Daniel O'Connor <darius@dons.net.au>
parents: 64
diff changeset
222 fputs("Filling\n", stdout);
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
223 /* Fill panel */
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
224 lcd_startgram(0, 0);
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
225
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
226 for (y = 0; y < 320; y++)
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
227 for (x = 0; x < 240; x++)
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
228 lcd_writedata(LCD_BLACK);
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
229 }
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
230
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
231 void
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
232 lcd_pixel(uint16_t x, uint16_t y, uint16_t colour) {
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
233 if (x > LCD_WIDTH || y > LCD_HEIGHT)
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
234 return;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
235
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
236 /* Rotate for landscape */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
237 lcd_startgram(y, x);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
238 lcd_writedata(colour);
7
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
239 }
9404b9869c27 Make the LCD panel work (timings, GPIOE clock needs to be on, etc)
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
240
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
241 /*
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
242 * Draw a circle
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
243 * From http://en.wikipedia.org/wiki/Midpoint_circle_algorithm
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
244 */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
245 void
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
246 lcd_circle(uint16_t x0, uint16_t y0, uint16_t radius, uint8_t fill, uint16_t colour) {
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
247 int16_t f;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
248 uint16_t ddF_x, ddF_y, x, y;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
249
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
250 f = 1 - radius;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
251 ddF_x = 1;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
252 ddF_y = -2 * radius;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
253 x = 0;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
254 y = radius;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
255
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
256
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
257 if (fill) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
258 lcd_line(x0, y0 + radius, x0, y0 - radius, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
259 lcd_line(x0 + radius, y0, x0 - radius, y0, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
260 } else {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
261 lcd_pixel(x0, y0 + radius, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
262 lcd_pixel(x0, y0 - radius, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
263 lcd_pixel(x0 + radius, y0, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
264 lcd_pixel(x0 - radius, y0, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
265 }
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
266
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
267 while(x < y) {
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
268 if(f >= 0) {
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
269 y--;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
270 ddF_y += 2;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
271 f += ddF_y;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
272 }
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
273 x++;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
274 ddF_x += 2;
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
275 f += ddF_x;
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
276 if (fill) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
277 lcd_line(x0 + x, y0 + y, x0 - x, y0 + y, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
278 lcd_line(x0 + x, y0 - y, x0 - x, y0 - y, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
279 lcd_line(x0 + y, y0 + x, x0 - y, y0 + x, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
280 lcd_line(x0 + y, y0 - x, x0 - y, y0 - x, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
281 } else {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
282 lcd_pixel(x0 + x, y0 + y, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
283 lcd_pixel(x0 - x, y0 + y, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
284 lcd_pixel(x0 + x, y0 - y, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
285 lcd_pixel(x0 - x, y0 - y, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
286 lcd_pixel(x0 + y, y0 + x, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
287 lcd_pixel(x0 - y, y0 + x, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
288 lcd_pixel(x0 + y, y0 - x, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
289 lcd_pixel(x0 - y, y0 - x, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
290 }
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
291 }
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
292 }
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
293
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
294
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
295 /*
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
296 * Draw a line
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
297 * From http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
298 */
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
299 void
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
300 lcd_line(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t colour) {
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
301 uint16_t dx, dy;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
302 int16_t sx, sy, err, e2;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
303
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
304 dx = abs(x1 - x0);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
305 dy = abs(y1 - y0);
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
306
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
307 if (x0 < x1)
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
308 sx = 1;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
309 else
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
310 sx = -1;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
311
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
312 if (y0 < y1)
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
313 sy = 1;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
314 else
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
315 sy = -1;
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
316
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
317 err = dx - dy;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
318
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
319 while (1) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
320
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
321 lcd_pixel(x0, y0, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
322
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
323 if (x0 == x1 && y0 == y1)
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
324 break;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
325
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
326 e2 = 2 * err;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
327
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
328 if (e2 > -dy) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
329 err = err - dy;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
330 x0 = x0 + sx;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
331 }
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
332
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
333 if (e2 < dx) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
334 err = err + dx;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
335 y0 = y0 + sy;
8
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
336 }
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
337 }
58d76cf522ff Split out code into separate files.
Daniel O'Connor <darius@dons.net.au>
parents: 7
diff changeset
338 }
9
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
339
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
340 static void
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
341 _lcd_ellipsedraw(uint16_t xc, uint16_t yc, uint16_t x, uint16_t y, uint8_t fill, uint16_t colour) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
342 if (fill) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
343 lcd_line(xc + x, yc + y, xc - x, yc + y, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
344 lcd_line(xc - x, yc - y, xc + x, yc - y, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
345 } else {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
346 lcd_pixel(xc + x, yc + y, colour); /* 1st quadrant */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
347 lcd_pixel(xc - x, yc + y, colour); /* 2nd quadrant */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
348 lcd_pixel(xc - x, yc - y, colour); /* 3rd quadrant */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
349 lcd_pixel(xc + x, yc - y, colour); /* 4th quadrant */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
350 }
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
351 }
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
352
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
353 /* Draw an ellipse, from
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
354 * http://rooparam.blogspot.com.au/2009/09/midpoint-ellipse-algorithm.html
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
355 */
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
356 void lcd_ellipse(int xc, int yc, int rx, int ry, uint8_t fill, uint16_t colour) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
357 long long int rx_2 = rx * rx, ry_2 = ry * ry;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
358 long long int p = ry_2 - rx_2 * ry + (ry_2 >> 2);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
359 int x = 0, y = ry;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
360 long long int two_ry_2_x = 0, two_rx_2_y = (rx_2 << 1) * y;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
361
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
362 _lcd_ellipsedraw(xc, yc, x, y, fill, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
363
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
364 while (two_rx_2_y >= two_ry_2_x) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
365 x++;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
366 two_ry_2_x += ry_2 << 1;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
367
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
368 p += two_ry_2_x + ry_2;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
369
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
370 if (p >= 0){
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
371 y--;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
372 two_rx_2_y -= rx_2 << 1;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
373
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
374 p -= two_rx_2_y;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
375 }
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
376 _lcd_ellipsedraw(xc, yc, x, y, fill, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
377 }
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
378
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
379 p = (long long int)(ry_2 * (x + 1 / 2.0) * (x + 1 / 2.0) + rx_2 * (y - 1) * (y - 1) - rx_2 * ry_2);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
380 while (y >= 0) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
381 p += rx_2;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
382 y--;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
383 two_rx_2_y -= rx_2 << 1;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
384 p -= two_rx_2_y;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
385
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
386 if (p <= 0) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
387 x++;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
388 two_ry_2_x += ry_2 << 1;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
389 p += two_ry_2_x;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
390 }
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
391 _lcd_ellipsedraw(xc, yc, x, y, fill, colour);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
392 }
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
393 }
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
394
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
395 void lcd_stripes(void) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
396 uint16_t x, y, mag, err;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
397
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
398 lcd_startgram(0, 0);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
399
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
400 mag = err = 0;
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
401 for (y = 0; y < 320; y++) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
402 for (x = 0; x < 240; x++) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
403 if (((x / 80) % 3) == 0) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
404 lcd_writedata(RGB24_565(mag, 0, 0));
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
405 } else if (((x / 80) % 3) == 1) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
406 lcd_writedata(RGB24_565(0, mag, 0));
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
407 } else {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
408 lcd_writedata(RGB24_565(0, 0, mag));
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
409 }
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
410 }
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
411 colinc(&mag, &err, COLINCVAL, 10000);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
412 }
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
413 }
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
414 uint16_t
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
415 lcd_parsecol(char c) {
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
416 c = toupper(c);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
417 if (c == 'R')
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
418 return(LCD_RED);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
419 else if (c == 'G')
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
420 return(LCD_GREEN);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
421 else if (c == 'B')
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
422 return(LCD_BLUE);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
423 else if (c == 'L')
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
424 return(LCD_BLACK);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
425 else
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
426 return(LCD_WHITE);
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
427
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
428 }
be0a1ac64d97 - Add ellipse drawing.
Daniel O'Connor <darius@dons.net.au>
parents: 8
diff changeset
429