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