Renesas GR-Peach LCD Interface

Dependencies:   EthernetInterface HTTPD PubNub SDFileSystem mbed-rtos mbed picojson

Renesas GR-Peach LCD Interface

Committer:
nikhilchaturtvedi
Date:
Fri Oct 23 20:16:05 2015 +0000
Revision:
0:0b32d3eaabfe
Renesas LCD Interface

Who changed what in which revision?

UserRevisionLine numberNew 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 }