1
0

lcd_test.c 2.2 KB

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