Renesas GR-Peach LCD Interface
Dependencies: EthernetInterface HTTPD PubNub SDFileSystem mbed-rtos mbed picojson
Renesas GR-Peach LCD Interface
lcd_main.cpp@0:0b32d3eaabfe, 2015-10-23 (annotated)
- Committer:
- nikhilchaturtvedi
- Date:
- Fri Oct 23 20:16:05 2015 +0000
- Revision:
- 0:0b32d3eaabfe
Renesas LCD Interface
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nikhilchaturtvedi | 0:0b32d3eaabfe | 1 | #include "gen_helper.h" |
nikhilchaturtvedi | 0:0b32d3eaabfe | 2 | #include "math.h" |
nikhilchaturtvedi | 0:0b32d3eaabfe | 3 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 4 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 5 | /* An SPI Master for interfacing and handling an LCD Slave with GR-Peach */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 6 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 7 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 8 | /* Variables for holding previously drawn co-ordinate values */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 9 | int x_left = 0; //holder for the last updated x co-ordinate value for the left side |
nikhilchaturtvedi | 0:0b32d3eaabfe | 10 | int y_left = 0; //holder for the last updated y co-ordinate value for the left side |
nikhilchaturtvedi | 0:0b32d3eaabfe | 11 | int x_right = 0; //holder for the last updated x co-ordinate value for the right side |
nikhilchaturtvedi | 0:0b32d3eaabfe | 12 | int y_right = 0; //holder for the last updated y co-ordinate value for the right side |
nikhilchaturtvedi | 0:0b32d3eaabfe | 13 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 14 | //The number of the levels for the tree. |
nikhilchaturtvedi | 0:0b32d3eaabfe | 15 | //This is declared here for ease of change in any function and reset it to |
nikhilchaturtvedi | 0:0b32d3eaabfe | 16 | //the original value after use. |
nikhilchaturtvedi | 0:0b32d3eaabfe | 17 | int number_levels = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 18 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 19 | gen_helper::gen_helper(PinName MOSI, PinName MISO, PinName SCK, PinName CS, PinName Reset, PinName RS, PinName _USBTX, PinName _USBRX, PwmOut _pwm) : |
nikhilchaturtvedi | 0:0b32d3eaabfe | 20 | lcd(MOSI, MISO, SCK), ssel(CS), reset(Reset), rs(RS), console(_USBTX, _USBRX), pwm(_pwm) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 21 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 22 | _height = SCREEN_HEIGHT; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 23 | _width = SCREEN_WIDTH; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 24 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 25 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 26 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 27 | /* Init console by setting the baud rate */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 28 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 29 | void gen_helper::init_console() |
nikhilchaturtvedi | 0:0b32d3eaabfe | 30 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 31 | //init serial over USB here |
nikhilchaturtvedi | 0:0b32d3eaabfe | 32 | console.baud(115200); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 33 | console.printf("Console init done\n"); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 34 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 35 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 36 | /** |
nikhilchaturtvedi | 0:0b32d3eaabfe | 37 | * Draws a line by a factor of lambda value |
nikhilchaturtvedi | 0:0b32d3eaabfe | 38 | *(x0,y0) are initial co-ordinates and (x1,y1) are the end co-ordinates |
nikhilchaturtvedi | 0:0b32d3eaabfe | 39 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 40 | * x0 - starting x co-ordinate value |
nikhilchaturtvedi | 0:0b32d3eaabfe | 41 | * y0 - starting y co-ordinate value |
nikhilchaturtvedi | 0:0b32d3eaabfe | 42 | * x1 - end x co-ordinate value |
nikhilchaturtvedi | 0:0b32d3eaabfe | 43 | * y1 - end y co-ordinate value |
nikhilchaturtvedi | 0:0b32d3eaabfe | 44 | * lambda - the factor that decides the length of the resulting line segment |
nikhilchaturtvedi | 0:0b32d3eaabfe | 45 | */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 46 | void gen_helper::massaged_line(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, float lambda, uint16_t colour, uint16_t *X, uint16_t *Y) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 47 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 48 | *X = (uint16_t)(x0 + (lambda * (x1 - x0))); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 49 | *Y = (uint16_t)(y0 + (lambda * (y1 - y0))); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 50 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 51 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 52 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 53 | /** |
nikhilchaturtvedi | 0:0b32d3eaabfe | 54 | * rotate (x2,y2) around (x1,y1) by alpha degrees |
nikhilchaturtvedi | 0:0b32d3eaabfe | 55 | * combines rotation and translation also. |
nikhilchaturtvedi | 0:0b32d3eaabfe | 56 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 57 | * x1 - starting x co-ordinate |
nikhilchaturtvedi | 0:0b32d3eaabfe | 58 | * y1 - starting y co-ordinate |
nikhilchaturtvedi | 0:0b32d3eaabfe | 59 | * x2 - end x co-ordinate |
nikhilchaturtvedi | 0:0b32d3eaabfe | 60 | * y2 - end y co-ordinate |
nikhilchaturtvedi | 0:0b32d3eaabfe | 61 | * alpha - the degree of rotation required |
nikhilchaturtvedi | 0:0b32d3eaabfe | 62 | */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 63 | void gen_helper::rotate_line(float x1, float y1, float x2, float y2, uint16_t alpha, float *X, float *Y) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 64 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 65 | float radian = (3.1415 * alpha / 180); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 66 | *X = (x2 - x1) * cosf(radian) - (y2 - y1) * sinf(radian) + x1; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 67 | *Y = (y2 - y1) * cosf(radian) + (x2 - x1) * sinf(radian) + y1; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 68 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 69 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 70 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 71 | /** |
nikhilchaturtvedi | 0:0b32d3eaabfe | 72 | * Draw a line with the init and end co-ordinates |
nikhilchaturtvedi | 0:0b32d3eaabfe | 73 | * (x0, y0) - start co-ordinates |
nikhilchaturtvedi | 0:0b32d3eaabfe | 74 | * (x1, y1) - end co-ordinates |
nikhilchaturtvedi | 0:0b32d3eaabfe | 75 | * color - color of the line |
nikhilchaturtvedi | 0:0b32d3eaabfe | 76 | * Based on the ST7735 source |
nikhilchaturtvedi | 0:0b32d3eaabfe | 77 | */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 78 | void gen_helper::drawLine(int16_t x0, int16_t y0,int16_t x1, int16_t y1,uint16_t color) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 79 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 80 | int16_t x, y; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 81 | float slope; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 82 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 83 | //check for slope conditions |
nikhilchaturtvedi | 0:0b32d3eaabfe | 84 | if( (x0 != x1) && (y0 != y1) ) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 85 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 86 | slope = (y1 - y0) / (x1 - x0); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 87 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 88 | if (abs(slope) < 1) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 89 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 90 | for(x = x0; x < x1 + 1; x++) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 91 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 92 | y = (x - x0) * slope + y0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 93 | draw_pixel(x, (y + 0.5), color); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 94 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 95 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 96 | else |
nikhilchaturtvedi | 0:0b32d3eaabfe | 97 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 98 | for(y = y0; y < y1 + 1; y++) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 99 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 100 | x = (y - y0) / slope + x0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 101 | draw_pixel((x + 0.5), y, color); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 102 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 103 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 104 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 105 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 106 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 107 | /** |
nikhilchaturtvedi | 0:0b32d3eaabfe | 108 | * A helper function which is flexible enough to be |
nikhilchaturtvedi | 0:0b32d3eaabfe | 109 | * given any pattern to be drawn on the LCD |
nikhilchaturtvedi | 0:0b32d3eaabfe | 110 | * initial values are (20,0) and (20,20) and the number of levels in 7 |
nikhilchaturtvedi | 0:0b32d3eaabfe | 111 | */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 112 | void gen_helper::draw_pattern_helper() |
nikhilchaturtvedi | 0:0b32d3eaabfe | 113 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 114 | int first_x0 = 20; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 115 | int first_y0 = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 116 | int first_x1 = 20; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 117 | int first_y1 = 20; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 118 | //set the number of levels of the tree to 7 |
nikhilchaturtvedi | 0:0b32d3eaabfe | 119 | number_levels = 7; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 120 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 121 | //Draw the first tree |
nikhilchaturtvedi | 0:0b32d3eaabfe | 122 | draw_custom_pattern(first_x0, first_y0, first_x1, first_y1); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 123 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 124 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 125 | //The second tree in the same plane |
nikhilchaturtvedi | 0:0b32d3eaabfe | 126 | int next_tree_index = first_x0 + 30; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 127 | first_x0 = next_tree_index; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 128 | first_x1 = first_x0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 129 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 130 | draw_custom_pattern(first_x0, first_y0, first_x1, first_y1); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 131 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 132 | //Third tree |
nikhilchaturtvedi | 0:0b32d3eaabfe | 133 | next_tree_index += 30; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 134 | first_x0 = next_tree_index; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 135 | first_x1 = first_x0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 136 | draw_custom_pattern(first_x0, first_y0, first_x1, first_y1); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 137 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 138 | //Fourth tree |
nikhilchaturtvedi | 0:0b32d3eaabfe | 139 | next_tree_index += 30; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 140 | first_x0 = next_tree_index; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 141 | first_x1 = first_x0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 142 | draw_custom_pattern(first_x0, first_y0, first_x1, first_y1); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 143 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 144 | //Fifth tree which starts at a much higher level than the previous trees |
nikhilchaturtvedi | 0:0b32d3eaabfe | 145 | next_tree_index = 35; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 146 | first_x0 = next_tree_index; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 147 | first_x1 = first_x0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 148 | first_y0+=20; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 149 | first_y1+=20; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 150 | draw_custom_pattern(first_x0, first_y0, first_x1, first_y1); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 151 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 152 | //Sixth tree that is at the same level as fifth |
nikhilchaturtvedi | 0:0b32d3eaabfe | 153 | next_tree_index = 65; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 154 | first_x0 = next_tree_index; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 155 | first_x1 = first_x0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 156 | draw_custom_pattern(first_x0, first_y0, first_x1, first_y1); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 157 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 158 | //Seventh tree that is at the same level as sixth |
nikhilchaturtvedi | 0:0b32d3eaabfe | 159 | next_tree_index = 95; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 160 | first_x0 = next_tree_index; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 161 | first_x1 = first_x0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 162 | draw_custom_pattern(first_x0, first_y0, first_x1, first_y1); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 163 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 164 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 165 | //Eighth tree at the same level as seventh |
nikhilchaturtvedi | 0:0b32d3eaabfe | 166 | next_tree_index = 20; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 167 | first_x0 = next_tree_index; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 168 | first_x1 = first_x0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 169 | first_y0 = 90; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 170 | first_y1 = first_y0 + 20; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 171 | number_levels = 3; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 172 | draw_custom_pattern(first_x0, first_y0, first_x1, first_y1); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 173 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 174 | //Ninth tree at the same level as eight but with only 3 levels |
nikhilchaturtvedi | 0:0b32d3eaabfe | 175 | next_tree_index = 50; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 176 | first_x0 = next_tree_index; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 177 | first_x1 = first_x0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 178 | first_y0 = 90; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 179 | first_y1 = first_y0 + 20; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 180 | number_levels = 3; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 181 | draw_custom_pattern(first_x0, first_y0, first_x1, first_y1); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 182 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 183 | //Tenth tree at the same level as ninth but with only 3 levels |
nikhilchaturtvedi | 0:0b32d3eaabfe | 184 | next_tree_index = 80; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 185 | first_x0 = next_tree_index; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 186 | first_x1 = first_x0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 187 | first_y0 = 90; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 188 | first_y1 = first_y0 + 20; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 189 | number_levels = 3; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 190 | draw_custom_pattern(first_x0, first_y0, first_x1, first_y1); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 191 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 192 | //Eleventh tree at the same level as tenth but with only 3 levels |
nikhilchaturtvedi | 0:0b32d3eaabfe | 193 | next_tree_index = 110; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 194 | first_x0 = next_tree_index; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 195 | first_x1 = first_x0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 196 | first_y0 = 90; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 197 | first_y1 = first_y0 + 20; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 198 | number_levels = 3; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 199 | draw_custom_pattern(first_x0, first_y0, first_x1, first_y1); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 200 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 201 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 202 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 203 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 204 | /** |
nikhilchaturtvedi | 0:0b32d3eaabfe | 205 | * Draw the forest in any pattern that is desired with |
nikhilchaturtvedi | 0:0b32d3eaabfe | 206 | * given two sets of start and end points |
nikhilchaturtvedi | 0:0b32d3eaabfe | 207 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 208 | * x0 - starting x co-ordinate value |
nikhilchaturtvedi | 0:0b32d3eaabfe | 209 | * y0 - starting y co-ordinate value |
nikhilchaturtvedi | 0:0b32d3eaabfe | 210 | * x1 - end x co-ordinate value |
nikhilchaturtvedi | 0:0b32d3eaabfe | 211 | * y1 - end y co-ordinate value |
nikhilchaturtvedi | 0:0b32d3eaabfe | 212 | * |
nikhilchaturtvedi | 0:0b32d3eaabfe | 213 | */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 214 | void gen_helper::draw_custom_pattern(int x0, int y0, int x1, int y1) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 215 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 216 | int first_x0 = x0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 217 | int first_y0 = y0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 218 | int first_x1 = x1; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 219 | int first_y1 = y1; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 220 | int temp_leftx = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 221 | int temp_lefty = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 222 | int temp_rightx = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 223 | int temp_righty = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 224 | int r_temp_leftx = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 225 | int r_temp_lefty = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 226 | int r_temp_rightx = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 227 | int r_temp_righty = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 228 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 229 | //draw the initial trunk of the tree and the next vertical branch that is |
nikhilchaturtvedi | 0:0b32d3eaabfe | 230 | //a shrunken version of the trunk |
nikhilchaturtvedi | 0:0b32d3eaabfe | 231 | drawLine(first_x0, first_y0, first_x1, first_y0+10, BLACK); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 232 | drawLine(first_x0+1, first_y0, first_x1+1, first_y0+10, BLACK); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 233 | draw_pattern(first_x0, first_y0+10, first_x1, first_y1+10); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 234 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 235 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 236 | //The pattern for drawing the tree and hence the forest. |
nikhilchaturtvedi | 0:0b32d3eaabfe | 237 | //This can be any pattern required. |
nikhilchaturtvedi | 0:0b32d3eaabfe | 238 | temp_leftx = x_left; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 239 | temp_lefty = y_left; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 240 | temp_rightx = x_right; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 241 | temp_righty = y_right; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 242 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 243 | r_temp_leftx = x_left; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 244 | r_temp_lefty = y_left; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 245 | r_temp_rightx = x_right; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 246 | r_temp_righty = y_right; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 247 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 248 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 249 | int i = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 250 | for(i = 0; i < number_levels; i++) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 251 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 252 | draw_pattern(r_temp_leftx, r_temp_lefty, r_temp_leftx, r_temp_lefty+10); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 253 | draw_pattern(r_temp_rightx, r_temp_righty, r_temp_rightx, r_temp_righty+10); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 254 | r_temp_leftx = x_left; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 255 | r_temp_lefty = y_left; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 256 | r_temp_rightx = x_right; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 257 | r_temp_righty = y_right; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 258 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 259 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 260 | i = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 261 | for(i = 0; i < number_levels; i++) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 262 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 263 | draw_pattern(temp_rightx, temp_righty, temp_rightx, temp_righty+10); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 264 | draw_pattern(temp_leftx, temp_lefty, temp_leftx, temp_lefty+10); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 265 | temp_leftx = x_left; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 266 | temp_lefty = y_left; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 267 | temp_rightx = x_right; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 268 | temp_righty = y_right; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 269 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 270 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 271 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 272 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 273 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 274 | /** |
nikhilchaturtvedi | 0:0b32d3eaabfe | 275 | * |
nikhilchaturtvedi | 0:0b32d3eaabfe | 276 | * x1 - starting x co-ordinate value |
nikhilchaturtvedi | 0:0b32d3eaabfe | 277 | * y1 - starting y co-ordinate value |
nikhilchaturtvedi | 0:0b32d3eaabfe | 278 | * x2 - end x co-ordinate value |
nikhilchaturtvedi | 0:0b32d3eaabfe | 279 | * y2 - end y co-ordinate value |
nikhilchaturtvedi | 0:0b32d3eaabfe | 280 | */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 281 | void gen_helper::draw_pattern(int x1, int y1, int x2, int y2) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 282 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 283 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 284 | int first_x0 = x1; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 285 | int first_y0 = y1; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 286 | int first_x1 = x2; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 287 | int first_y1 = y2; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 288 | int alpha = 30; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 289 | int neg_alpha = -30; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 290 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 291 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 292 | float x0=0, y0=0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 293 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 294 | rotate_line(first_x0, first_y0, first_x1, first_y1, alpha, &x0, &y0); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 295 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 296 | drawLine(first_x0, first_y0, (int)x0, (int)y0, GREEN); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 297 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 298 | x_right = (int)x0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 299 | y_right = (int)y0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 300 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 301 | x0 = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 302 | y0 = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 303 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 304 | rotate_line(first_x0, first_y0, first_x1, first_y1, neg_alpha, &x0, &y0); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 305 | drawLine(first_x0, first_y0, (int)(x0+3), (int)y0, GREEN); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 306 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 307 | x_left = (int)x0+3; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 308 | y_left = (int)y0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 309 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 310 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 311 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 312 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 313 | /********* SD card helper functions; wrappers over the SD card file system ********/ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 314 | uint8_t gen_helper::init_disk() |
nikhilchaturtvedi | 0:0b32d3eaabfe | 315 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 316 | return sd_fs->disk_initialize(); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 317 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 318 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 319 | /** |
nikhilchaturtvedi | 0:0b32d3eaabfe | 320 | * Initialize the SD card |
nikhilchaturtvedi | 0:0b32d3eaabfe | 321 | */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 322 | uint8_t gen_helper::init_SD() |
nikhilchaturtvedi | 0:0b32d3eaabfe | 323 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 324 | sd_fs = new SDFileSystem(P8_5, P8_6, P8_3, P8_4, "sd"); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 325 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 326 | if(sd_fs) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 327 | return (uint8_t)0; //force a casting |
nikhilchaturtvedi | 0:0b32d3eaabfe | 328 | else |
nikhilchaturtvedi | 0:0b32d3eaabfe | 329 | return (uint8_t)-1; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 330 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 331 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 332 | /** |
nikhilchaturtvedi | 0:0b32d3eaabfe | 333 | * Open a file and return the file descriptor |
nikhilchaturtvedi | 0:0b32d3eaabfe | 334 | */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 335 | FILE* gen_helper::open_file(char *path, char *mode) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 336 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 337 | return fopen(path, mode); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 338 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 339 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 340 | uint8_t gen_helper::close_file(FILE *fp) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 341 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 342 | return fclose(fp); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 343 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 344 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 345 | uint8_t gen_helper::make_dir(char *path, uint32_t mode) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 346 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 347 | return mkdir(path, mode); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 348 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 349 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 350 | uint8_t gen_helper::remove_file(char *path) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 351 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 352 | return remove(path); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 353 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 354 | /****SD card function implementations end****/ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 355 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 356 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 357 | /* Initialize the LCD |
nikhilchaturtvedi | 0:0b32d3eaabfe | 358 | * |
nikhilchaturtvedi | 0:0b32d3eaabfe | 359 | *TODO : Check the row select and col select for Renesas GR-PEACH |
nikhilchaturtvedi | 0:0b32d3eaabfe | 360 | * |
nikhilchaturtvedi | 0:0b32d3eaabfe | 361 | * Based on the specs from ST7735 |
nikhilchaturtvedi | 0:0b32d3eaabfe | 362 | */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 363 | void gen_helper::lcd_init() |
nikhilchaturtvedi | 0:0b32d3eaabfe | 364 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 365 | console.printf("Writing to the lcd \n"); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 366 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 367 | lcd.format(8, 3); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 368 | //lcd.frequency(15000000); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 369 | ssel = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 370 | reset = 1; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 371 | wait_ms(500); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 372 | reset = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 373 | wait_ms(500); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 374 | reset = 1; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 375 | wait_ms(500); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 376 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 377 | write_spi_command(SW_RESET); // SW Reset |
nikhilchaturtvedi | 0:0b32d3eaabfe | 378 | wait_ms(150); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 379 | write_spi_command(AWAKE_SLEEPMODE); // Out of sleepmode |
nikhilchaturtvedi | 0:0b32d3eaabfe | 380 | wait_ms(500); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 381 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 382 | write_spi_command(FRAMERATE_NORMAL); // Frame rate in normal mode |
nikhilchaturtvedi | 0:0b32d3eaabfe | 383 | write_spi_data(0x01); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 384 | write_spi_data(0x2C); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 385 | write_spi_data(0x2D); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 386 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 387 | write_spi_command(FRAMERATE_IDLE); // Frame rate in idle mode |
nikhilchaturtvedi | 0:0b32d3eaabfe | 388 | write_spi_data(0x01); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 389 | write_spi_data(0x2C); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 390 | write_spi_data(0x2D); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 391 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 392 | write_spi_command(FRAMERATE_PARTIAL); // Frame rate in partial mode |
nikhilchaturtvedi | 0:0b32d3eaabfe | 393 | write_spi_data(0x01); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 394 | write_spi_data(0x2C); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 395 | write_spi_data(0x2D); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 396 | write_spi_data(0x01); // inversion mode settings |
nikhilchaturtvedi | 0:0b32d3eaabfe | 397 | write_spi_data(0x2C); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 398 | write_spi_data(0x2D); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 399 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 400 | write_spi_command(INVERTED_MODE_OFF); // Inverted mode off |
nikhilchaturtvedi | 0:0b32d3eaabfe | 401 | write_spi_data(0x07); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 402 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 403 | write_spi_command(POWER_CONTROL_1); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 404 | write_spi_data(0xA2); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 405 | write_spi_data(0x02); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 406 | write_spi_data(0x84); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 407 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 408 | write_spi_command(POWER_CONTROL_2); // POWER CONTROL 2 |
nikhilchaturtvedi | 0:0b32d3eaabfe | 409 | write_spi_data(0xC5); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 410 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 411 | write_spi_command(POWER_CONTROL_3); // POWER CONTROL 3 |
nikhilchaturtvedi | 0:0b32d3eaabfe | 412 | write_spi_data(0x0A); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 413 | write_spi_data(0x00); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 414 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 415 | write_spi_command(POWER_CONTROL_4); // POWER CONTROL 4 |
nikhilchaturtvedi | 0:0b32d3eaabfe | 416 | write_spi_data(0x8A); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 417 | write_spi_data(0x2A); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 418 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 419 | write_spi_command(POWER_CONTROL_5); // POWER CONTROL 5 |
nikhilchaturtvedi | 0:0b32d3eaabfe | 420 | write_spi_data(0x8A); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 421 | write_spi_data(0xEE); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 422 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 423 | write_spi_command(POWER_CONTROL_6); // POWER CONTROL 6 |
nikhilchaturtvedi | 0:0b32d3eaabfe | 424 | write_spi_data(0x0E); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 425 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 426 | write_spi_command(INVOFF); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 427 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 428 | write_spi_command(ORIENTATION); // ORIENTATION |
nikhilchaturtvedi | 0:0b32d3eaabfe | 429 | write_spi_data(0xC8); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 430 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 431 | write_spi_command(COLOR_MODE); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 432 | write_spi_data(0x05); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 433 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 434 | write_spi_command(COLUMN_ADDR_SET); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 435 | write_spi_data(0x00); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 436 | write_spi_data(0x00); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 437 | write_spi_data(0x00); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 438 | write_spi_data(0x7F); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 439 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 440 | write_spi_command(ROW_ADDR_SET); // ROW ADDR SET |
nikhilchaturtvedi | 0:0b32d3eaabfe | 441 | write_spi_data(0x00); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 442 | write_spi_data(0x00); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 443 | write_spi_data(0x00); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 444 | write_spi_data(0x9F); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 445 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 446 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 447 | write_spi_command(0xE0); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 448 | write_spi_data(0x02); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 449 | write_spi_data(0x1c); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 450 | write_spi_data(0x07); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 451 | write_spi_data(0x12); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 452 | write_spi_data(0x37); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 453 | write_spi_data(0x32); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 454 | write_spi_data(0x29); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 455 | write_spi_data(0x2d); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 456 | write_spi_data(0x29); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 457 | write_spi_data(0x25); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 458 | write_spi_data(0x2B); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 459 | write_spi_data(0x39); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 460 | write_spi_data(0x00); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 461 | write_spi_data(0x01); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 462 | write_spi_data(0x03); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 463 | write_spi_data(0x10); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 464 | write_spi_command(0xE1); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 465 | write_spi_data(0x03); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 466 | write_spi_data(0x1d); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 467 | write_spi_data(0x07); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 468 | write_spi_data(0x06); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 469 | write_spi_data(0x2E); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 470 | write_spi_data(0x2C); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 471 | write_spi_data(0x29); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 472 | write_spi_data(0x2D); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 473 | write_spi_data(0x2E); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 474 | write_spi_data(0x2E); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 475 | write_spi_data(0x37); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 476 | write_spi_data(0x3F); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 477 | write_spi_data(0x00); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 478 | write_spi_data(0x00); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 479 | write_spi_data(0x02); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 480 | write_spi_data(0x10); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 481 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 482 | write_spi_command(DISPLAY_ON); // display ON |
nikhilchaturtvedi | 0:0b32d3eaabfe | 483 | wait_ms(100); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 484 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 485 | write_spi_command(NORMAL_DISP_ON); // normal display on |
nikhilchaturtvedi | 0:0b32d3eaabfe | 486 | wait_ms(10); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 487 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 488 | pwm.period_ms(2); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 489 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 490 | // just increasing the brightness of the screen gradually |
nikhilchaturtvedi | 0:0b32d3eaabfe | 491 | for(float i = 0.0f; i < 1.0f; i += 0.1f) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 492 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 493 | wait_ms(200); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 494 | pwm = i; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 495 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 496 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 497 | console.printf("PWM done\n"); // here for debugging |
nikhilchaturtvedi | 0:0b32d3eaabfe | 498 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 499 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 500 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 501 | inline int gen_helper::spiwrite(uint8_t c) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 502 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 503 | return lcd.write(c); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 504 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 505 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 506 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 507 | /* Write command */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 508 | void gen_helper::write_spi_command(uint8_t c) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 509 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 510 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 511 | rs = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 512 | ssel = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 513 | lcd.write(c); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 514 | ssel = 1; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 515 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 516 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 517 | /* Write data */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 518 | void gen_helper::write_spi_data(uint8_t c) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 519 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 520 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 521 | rs = 1; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 522 | ssel = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 523 | lcd.write(c); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 524 | ssel = 1; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 525 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 526 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 527 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 528 | /** |
nikhilchaturtvedi | 0:0b32d3eaabfe | 529 | * Based on ST7735 source ; sets the screen co-ordinates |
nikhilchaturtvedi | 0:0b32d3eaabfe | 530 | */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 531 | void gen_helper::set_screen_coor(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 532 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 533 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 534 | write_spi_command(COLUMN_ADDR_SET); // Column addr set |
nikhilchaturtvedi | 0:0b32d3eaabfe | 535 | write_spi_data(0x00); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 536 | write_spi_data(x0+colstart); // XSTART |
nikhilchaturtvedi | 0:0b32d3eaabfe | 537 | write_spi_data(0x00); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 538 | write_spi_data(x1+colstart); // XEND |
nikhilchaturtvedi | 0:0b32d3eaabfe | 539 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 540 | write_spi_command(ROW_ADDR_SET); // Row addr set |
nikhilchaturtvedi | 0:0b32d3eaabfe | 541 | write_spi_data(0x00); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 542 | write_spi_data(y0+rowstart); // YSTART |
nikhilchaturtvedi | 0:0b32d3eaabfe | 543 | write_spi_data(0x00); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 544 | write_spi_data(y1+rowstart); // YEND |
nikhilchaturtvedi | 0:0b32d3eaabfe | 545 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 546 | write_spi_command(WRITE_RAM); // write to RAM |
nikhilchaturtvedi | 0:0b32d3eaabfe | 547 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 548 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 549 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 550 | /** |
nikhilchaturtvedi | 0:0b32d3eaabfe | 551 | * Draw a pixel on the screen |
nikhilchaturtvedi | 0:0b32d3eaabfe | 552 | */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 553 | void gen_helper::draw_pixel(int16_t x, int16_t y, uint16_t color) { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 554 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 555 | // exit if the co-ordinates are out of bounds of the screen |
nikhilchaturtvedi | 0:0b32d3eaabfe | 556 | if((x < 0) ||(x >= _width) || (y < 0) || (y >= _height)) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 557 | return; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 558 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 559 | set_screen_coor(x, y, x + 1, y + 1); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 560 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 561 | rs = 1; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 562 | ssel = 0; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 563 | lcd.format(16,3); //set the data rate to 16 bits |
nikhilchaturtvedi | 0:0b32d3eaabfe | 564 | lcd.write(color); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 565 | ssel = 1; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 566 | lcd.format(8,3); //set the data rate to 8 bits |
nikhilchaturtvedi | 0:0b32d3eaabfe | 567 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 568 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 569 | /** |
nikhilchaturtvedi | 0:0b32d3eaabfe | 570 | * Draw a vertical line |
nikhilchaturtvedi | 0:0b32d3eaabfe | 571 | * Based on ST7735 source |
nikhilchaturtvedi | 0:0b32d3eaabfe | 572 | */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 573 | void gen_helper::draw_vertical_line(int16_t x, int16_t y, int16_t h, uint16_t color) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 574 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 575 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 576 | if((x >= _width) || (y >= _height)) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 577 | return; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 578 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 579 | if((y + h - 1) >= _height) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 580 | h = _height - y; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 581 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 582 | set_screen_coor(x, y, x, y + h - 1); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 583 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 584 | uint8_t hi = color >> 8, lo = color; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 585 | while (h--) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 586 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 587 | spiwrite(hi); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 588 | spiwrite(lo); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 589 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 590 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 591 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 592 | /** |
nikhilchaturtvedi | 0:0b32d3eaabfe | 593 | * Draw a horizontal line |
nikhilchaturtvedi | 0:0b32d3eaabfe | 594 | * Based on ST7735 source |
nikhilchaturtvedi | 0:0b32d3eaabfe | 595 | */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 596 | void gen_helper::draw_horizontal_line(int16_t x, int16_t y, int16_t w, uint16_t color) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 597 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 598 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 599 | //check for screen boundary |
nikhilchaturtvedi | 0:0b32d3eaabfe | 600 | if((x >= _width) || (y >= _height)) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 601 | return; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 602 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 603 | if((x + w - 1) >= _width) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 604 | w = _width - x; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 605 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 606 | set_screen_coor(x, y, x + w - 1, y); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 607 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 608 | uint8_t hi = color >> 8, lo = color; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 609 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 610 | while (w--) { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 611 | spiwrite(hi); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 612 | spiwrite(lo); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 613 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 614 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 615 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 616 | /** |
nikhilchaturtvedi | 0:0b32d3eaabfe | 617 | * Draw a rectangle and fill it with a color |
nikhilchaturtvedi | 0:0b32d3eaabfe | 618 | */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 619 | void gen_helper::fill_rect(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint32_t color) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 620 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 621 | int16_t width, height; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 622 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 623 | width = x1 - x0 + 1; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 624 | height = y1 - y0 + 1; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 625 | set_screen_coor(x0, y0, x1, y1); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 626 | write_spi_command(WRITE_RAM); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 627 | write_rgb(color, width * height); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 628 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 629 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 630 | /** |
nikhilchaturtvedi | 0:0b32d3eaabfe | 631 | * Write RGB colors to the screen |
nikhilchaturtvedi | 0:0b32d3eaabfe | 632 | */ |
nikhilchaturtvedi | 0:0b32d3eaabfe | 633 | void gen_helper::write_rgb(uint32_t color, uint32_t repeat) { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 634 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 635 | uint8_t red, green, blue; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 636 | int i; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 637 | red = (color >> 16); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 638 | green = (color >> 8) & 0xFF; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 639 | blue = color & 0xFF; |
nikhilchaturtvedi | 0:0b32d3eaabfe | 640 | |
nikhilchaturtvedi | 0:0b32d3eaabfe | 641 | for (i = 0; i< repeat; i++) |
nikhilchaturtvedi | 0:0b32d3eaabfe | 642 | { |
nikhilchaturtvedi | 0:0b32d3eaabfe | 643 | write_spi_data(red); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 644 | write_spi_data(green); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 645 | write_spi_data(blue); |
nikhilchaturtvedi | 0:0b32d3eaabfe | 646 | } |
nikhilchaturtvedi | 0:0b32d3eaabfe | 647 | } |