1 /*
2 * Copyright (C) 2015-2020 manufacturername
3 */
4
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <stdbool.h>
8 #include <aos/kernel.h>
9 #if AOS_COMP_CLI
10 #include "aos/cli.h"
11 #endif
12 #include <ulog/ulog.h>
13
14 #include "udisplay.h"
15 #include "udisplay_cli.h"
16
17
set_brightness(char * pbuffer,int outlen,int argc,char ** argv)18 static void set_brightness(char *pbuffer, int outlen, int argc, char **argv)
19 {
20 int32_t brightness;
21
22 brightness = atoi(argv[1]);
23
24 LOGD("udisplay", "set brightness to %d\n", brightness);
25 udisplay_set_brightness(brightness);
26 }
27
get_brightness(char * pbuffer,int outlen,int argc,char ** argv)28 static void get_brightness(char *pbuffer, int outlen, int argc, char **argv)
29 {
30 int32_t brightness;
31
32 brightness = udisplay_get_brightness();
33
34 LOGD("udisplay", "brightness is %d\n", brightness);
35 }
36
enable_backlight(char * pbuffer,int outlen,int argc,char ** argv)37 static void enable_backlight(char *pbuffer, int outlen, int argc, char **argv)
38 {
39 int ret;
40
41 ret = udisplay_enable_backlight();
42
43 if (ret < 0)
44 LOGD("udisplay", "enable backlight fail\n");
45 else
46 LOGD("udisplay", "enable backlight ok\n");
47 }
48
disable_backlight(char * pbuffer,int outlen,int argc,char ** argv)49 static void disable_backlight(char *pbuffer, int outlen, int argc, char **argv)
50 {
51 int ret;
52
53 ret = udisplay_disable_backlight();
54
55 if (ret < 0)
56 LOGD("udisplay", "disable backlight fail\n");
57 else
58 LOGD("udisplay", "disable backlight ok\n");
59 }
60
dump_rotate_str(uint32_t id)61 static char *dump_rotate_str(uint32_t id)
62 {
63 const char *str = NULL;
64
65 switch (id) {
66 case FB_ROTATE_UR:
67 str = "FB_ROTATE_UR";
68 break;
69 case FB_ROTATE_UD:
70 str = "FB_ROTATE_UD";
71 break;
72 case FB_ROTATE_CW:
73 str = "FB_ROTATE_CW";
74 break;
75 case FB_ROTATE_CCW:
76 str = "FB_ROTATE_CCW";
77 break;
78 }
79 return str;
80 }
81
udisplay_comp_example(int argc,char ** argv)82 static void udisplay_comp_example(int argc, char **argv)
83 {
84 int32_t ret;
85 uint32_t value = 0;
86 uint32_t rgb_fmt;
87 bool performance = false;
88 long long start, end;
89
90 if (argc < 2)
91 return;
92
93 start = aos_now_ms();
94 if (strncmp(argv[1], "pattern", 7) == 0) {
95 rgb_fmt = strtoul(argv[2], NULL, 0);
96 value = strtoul(argv[3], NULL, 0);
97 if (rgb_fmt == 32)
98 udisplay_pattern_rgb32(value, true);
99 else if (rgb_fmt == 16)
100 udisplay_pattern_rgb16(value, false);
101 } else if (strncmp(argv[1], "info", 7) == 0) {
102 udisplay_context_t *ctx = udisplay_get_context();
103 LOGD("udisplay", \
104 "[fb info] xres: %d, yres: %d, bits_per_pixel: %d, rotate: %s", \
105 ctx->var.xres, ctx->var.yres, \
106 ctx->var.bits_per_pixel, \
107 dump_rotate_str(ctx->var.rotate));
108
109 } else if (strncmp(argv[1], "stress_ud", 9) == 0) {
110 // normal
111 int i = 0;
112 rgb_fmt = strtoul(argv[2], NULL, 0);
113 value = strtoul(argv[3], NULL, 0);
114 LOGD("udisplay", "stress test count=%d\n", value);
115 if (rgb_fmt == 32) {
116 for (i = 0; i < value; i++)
117 udisplay_pattern_rgb32((i * 16) % 0xff, false);
118
119 } else if (rgb_fmt == 16) {
120 for (i = 0; i < value; i++) {
121 udisplay_pattern_rgb16(0x0000ffff, false);
122 aos_msleep(10);
123 udisplay_pattern_rgb16((i * 16) % 0xff, false);
124 aos_msleep(10);
125 udisplay_pattern_rgb16(0xffff0000, false);
126 }
127 }
128 performance = true;
129 LOGD("udisplay", "stress test finish count=%d\n", i);
130 } else if (strncmp(argv[1], "stress_cw", 9) == 0) {
131 // rotate
132 int i = 0;
133 rgb_fmt = strtoul(argv[2], NULL, 0);
134 value = strtoul(argv[3], NULL, 0);
135 LOGD("udisplay", "stress test count=%d\n", value);
136 if (rgb_fmt == 32) {
137 for (i = 0; i < value; i++)
138 udisplay_pattern_rgb32((i * 16) % 0xff, true);
139
140 } else if (rgb_fmt == 16) {
141 for (i = 0; i < value; i++)
142 udisplay_pattern_rgb16((i * 16) % 0xff, true);
143
144 }
145 performance = true;
146 LOGD("udisplay", \
147 "stress test with rotate finish count=%d\n", i);
148 }
149 if (performance) {
150 end = aos_now_ms();
151 LOGD("udisplay", \
152 "[%s]time gap: %lld ms for %d counts, fps: %2.0f\r\n", \
153 __func__, end - start, value, \
154 value * 1.f / (end - start) * 1000.f);
155 }
156 }
157
udisplay_comp_init_example(int argc,char ** argv)158 static void udisplay_comp_init_example(int argc, char **argv)
159 {
160 // init udisplay
161 udisplay_init();
162 }
163
164 #if AOS_COMP_CLI
165 /* reg args: fun, cmd, description*/
166 // display pattern 32/16 0x0000ffff 1/0(rotate); display stress_ud/stress_cw <count>; display info
167 ALIOS_CLI_CMD_REGISTER(udisplay_comp_init_example, udisplay_init, udisplay component base example)
168 ALIOS_CLI_CMD_REGISTER(udisplay_comp_example, udisplay, udisplay component base example)
169 #endif
170