xref: /OK3568_Linux_fs/external/rk_pcba_test/rk_pcba_test_led.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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