1 #ifndef __RK_PCBA_TEST_LED_H_
2 #define __RK_PCBA_TEST_LED_H_
3
4 #include <stdio.h>
5 #include <stdlib.h>
6
7 //error相关头文件
8 #include <string.h>
9 #include <errno.h>
10
11 //access所需头文件
12 #include <unistd.h>
13
14 //open()相关头文件
15 #include <sys/types.h>
16 #include <sys/stat.h>
17 #include <fcntl.h>
18 #define LED_BRIGHTNESS_FILE "/sys/class/leds/led%d/brightness"
19
20 #define LED_NUM 36
21
22 //* 定义LED开关
23 #define LED_ON "128"
24 #define LED_OFF "0"
25 #define AUDIO_PATH "/data/cfg/rk_pcba_test"
26 //#define PCBA_TEST_PATH "/data/cfg/rk_pcba_test"
27
28 int write_int(char const* path,char const* value);
29 int light_up_led_red(void);
30 int light_up_led_green(void);
31 int light_up_led_blue(void);
32
33
34 /*亮红灯1s,然后熄灭*/
light_up_led_red(void)35 int light_up_led_red(void)
36 {
37 char buf[128];
38 int led_num;
39
40 for(led_num=2;led_num<=LED_NUM;)
41 {
42 sprintf(buf,LED_BRIGHTNESS_FILE,led_num);
43 write_int(buf,LED_ON);
44 led_num = led_num+3;
45 }
46
47 sleep(1); //暂停1秒
48
49 for(led_num=2;led_num<=LED_NUM;)
50 {
51 sprintf(buf,LED_BRIGHTNESS_FILE,led_num);
52 write_int(buf,LED_OFF);
53 led_num = led_num+3;
54 }
55 return 0;
56 }
57
58 /*亮绿灯1s,然后熄灭*/
light_up_led_green(void)59 int light_up_led_green(void)
60 {
61 char buf[128];
62 int led_num;
63
64 for(led_num=1;led_num<=LED_NUM;)
65 {
66 sprintf(buf,LED_BRIGHTNESS_FILE,led_num);
67 write_int(buf,LED_ON);
68 led_num = led_num+3;
69 }
70
71 sleep(1); //暂停1秒
72
73 for(led_num=1;led_num<=LED_NUM;)
74 {
75 sprintf(buf,LED_BRIGHTNESS_FILE,led_num);
76 write_int(buf,LED_OFF);
77 led_num = led_num+3;
78 }
79 return 0;
80 }
81 /*亮绿灯1s,然后熄灭*/
light_up_led_blue(void)82 int light_up_led_blue(void)
83 {
84 char buf[128];
85 int led_num;
86
87 for(led_num=3;led_num<=LED_NUM;)
88 {
89 sprintf(buf,LED_BRIGHTNESS_FILE,led_num);
90 write_int(buf,LED_ON);
91 led_num = led_num+3;
92 }
93
94 sleep(1); //暂停1秒
95
96 for(led_num=3;led_num<=LED_NUM;)
97 {
98 sprintf(buf,LED_BRIGHTNESS_FILE,led_num);
99 write_int(buf,LED_OFF);
100 led_num = led_num+3;
101 }
102 return 0;
103 }
104
105 //打开LED亮度文件路径,并写入亮度值0-255
write_int(char const * path,char const * value)106 int write_int(char const* path,char const* value)
107 {
108 int fd;
109 char read_buffer[64],write_buffer[64]; //读缓存数据
110 ssize_t length_r,length_w; //读写数据长度
111
112 static int already_warned = 0;
113
114 //1、打开文件亮度调节文件结点
115 fd = open(path, O_RDWR|O_NOCTTY|O_NDELAY);
116 if (fd >= 0)
117 {
118 char buffer[128];
119 int bytes;
120 length_r = read(fd, buffer, 64);
121 printf("The current value of %s is : %d\n",path,atoi(buffer)); //打印读取的字节数与内容
122 if (!memcmp(buffer,value,length_r)) //don't need to set value, because the value is same with the target
123 {
124 close(fd);
125 return 0;
126 }
127 bytes = strlen(value)+1; //+1是多一个字符串结束符 '\0'
128 length_w = write(fd, value, bytes);
129 printf("%d bytes is wrote to node %s, the current value is %s\n",length_w,path,value);
130
131 close(fd);
132 return length_w == -1 ? -1 : 0;
133 }
134 else
135 {
136 fprintf(stderr,"can't open led driver file,%s\n",path);
137 if (already_warned == 0)
138 {
139 fprintf(stderr,"write_int failed to open led driver %s\n", path);
140 already_warned = 1;
141 }
142 return -1;
143 }
144 }
145
146 #endif // RK_PCBA_TEST_LED_H_INCLUDED
147