1 #include <rtthread.h>
2 #include <rtdevice.h>
3 #include <stdint.h>
4 #include <stdlib.h>
5 #include "drv_lcd.h"
6 
drawarea(rt_device_t dev,struct rt_device_graphic_info * info,int x,int y,int w,int h,uint16_t c)7 static void drawarea(rt_device_t dev, struct rt_device_graphic_info *info,
8                      int x, int y, int w, int h, uint16_t c)
9 {
10     struct rt_device_rect_info rect;
11     uint16_t *fb;
12     int i, j;
13 
14     fb = (uint16_t *)info->framebuffer;
15     fb += (info->width * y);
16     fb += x;
17 
18     for (j = 0; j < h; j++)
19     {
20         for (i = 0; i < w; i++)
21         {
22             fb[i] = c;
23         }
24         fb += info->width;
25     }
26 
27     rect.x = x;
28     rect.y = y;
29     rect.width = w;
30     rect.height = h;
31 
32     rt_device_control(dev, RTGRAPHIC_CTRL_RECT_UPDATE, &rect);
33 }
34 
showcolor(int argc,char ** argv)35 static int showcolor(int argc, char **argv)
36 {
37     unsigned char r = 0, g = 0, b = 0;
38     char *devname = "lcd";
39     rt_device_t dev;
40     struct rt_device_graphic_info info;
41     int result;
42     int x = 0, y = 0;
43     int i;
44     uint16_t c;
45 
46     for (i = 1; i < argc; i++)
47     {
48         switch (i)
49         {
50         case 1:
51             r = atoi(argv[i]);
52             break;
53         case 2:
54             g = atoi(argv[i]);
55             break;
56         case 3:
57             b = atoi(argv[i]);
58             break;
59         }
60     }
61 
62     dev = rt_device_find(devname);
63     if (!dev)
64     {
65         rt_kprintf("lcd: %s not found\n", devname);
66         return -1;
67     }
68 
69     if (rt_device_open(dev, 0) != 0)
70     {
71         rt_kprintf("lcd open fail\n");
72         return -1;
73     }
74 
75     result = rt_device_control(dev, RTGRAPHIC_CTRL_GET_INFO, &info);
76     if (result != RT_EOK)
77     {
78         rt_kprintf("get device information failed\n");
79         return result;
80     }
81 
82     c = (uint16_t)(((r >> 3) << 11) | ((g >> 2) << 6) | ((b >> 3)));
83     drawarea(dev, &info, x, y, 24, 24, c);
84 
85     lcd_set_color(BLACK, BLUE);
86     lcd_show_string(0, 40, 16, "hello world");
87     lcd_show_string(0, 60, 24, "hello world");
88     lcd_show_string(0, 90, 32, "hello world");
89     lcd_draw_line(0, 200, 319, 200);
90     lcd_draw_circle(270, 120, 30);
91 
92     lcd_set_color(BLACK, RED);
93     lcd_show_string(0, 130, 32, "after set color");
94     lcd_draw_line(0, 0, 319, 239);
95     lcd_draw_rectangle(50, 10, 170, 145);
96     lcd_draw_circle(160, 120, 50);
97 
98     rt_device_close(dev);
99     return 0;
100 }
101 MSH_CMD_EXPORT(showcolor, showcolor R G B-- R / G / B : 0 ~255);
102