1 #include "ibacklight.h"
2 #include <fcntl.h>
3 #include <unistd.h>
4 #include <stdio.h>
5 #include <sys/ioctl.h>
6 #include <QDebug>
7 #include <QLoggingCategory>
8
9 Q_LOGGING_CATEGORY(flapp, "app.screen")
10
Backlight(const QString & devname,const QString & screenName,int min,int max)11 Backlight::Backlight(const QString &devname, const QString &screenName, int min, int max)
12 :m_devName(devname)
13 ,m_screeName(screenName)
14 ,m_min(min)
15 ,m_max(max)
16
17 {
18 qCDebug(flapp)<<QString("Backlight devname=%1, screenName=%2, min=%3, max=%4").arg(devname).arg(screenName).arg(min).arg(max);
19 }
20
devName()21 QString Backlight::devName()
22 {
23 return m_devName;
24 }
25
screenName()26 QString Backlight::screenName()
27 {
28 return m_screeName;
29 }
30
open()31 bool Backlight::open()
32 {
33 bool bOpen = false;
34 m_fd = ::open(m_devName.toLocal8Bit().constData(), O_RDWR|O_NONBLOCK);
35 bOpen = m_fd>0;
36 if(!bOpen)
37 {
38 qCDebug(flapp)<<QString("open %1 falire").arg(m_devName);
39 }
40 return bOpen;
41 }
42
close()43 void Backlight::close()
44 {
45 qCDebug(flapp)<<QString("close :").arg(m_devName);
46 if(m_fd>0)
47 ::close(m_fd);
48 }
49
setValue(int v)50 int Backlight::setValue(int v)
51 {
52 int ret =0;
53 char buf[10];
54 lseek(m_fd, 0, SEEK_SET);
55 sprintf(buf,"%d",v);
56 ::write(m_fd,buf,sizeof(v));
57
58 return ret;
59 }
60
getValue()61 int Backlight::getValue()
62 {
63 char buf[10];
64 lseek(m_fd, 0, SEEK_SET);
65 ::read(m_fd, buf, sizeof(buf));
66
67 int ret = atoi(buf);
68
69 return ret;
70 }
71
getRange(int & min,int & max)72 void Backlight::getRange(int &min, int &max)
73 {
74 min = m_min;
75 max = m_max;
76 }
77
78 enum {
79 //#include <disp2/sunxi_display2.h>
80 DISP_GET_OUTPUT_TYPE = 0x09,
81 DISP_OUTPUT_TYPE_LCD = 1,
82 DISP_LCD_GET_BRIGHTNESS = 0x103,
83 DISP_LCD_SET_BRIGHTNESS = 0x102
84 };
getValue()85 int T507::getValue()
86 {
87 unsigned long args[3];
88 int err, i;
89 int v;
90 for(i = 0; i < 2; i++)
91 {
92 args[0] = i;
93 if(ioctl(m_fd, DISP_GET_OUTPUT_TYPE,args) == DISP_OUTPUT_TYPE_LCD)
94 {
95 args[1] = (unsigned long)&v;
96 args[2] = 0;
97 err = ioctl(m_fd, DISP_LCD_GET_BRIGHTNESS, args);
98 return v;
99 }
100 }
101
102 return -1;
103 }
104
T507(const QString & devname,const QString & screenName,int min,int max)105 T507::T507(const QString &devname, const QString &screenName, int min, int max)
106 :Backlight(devname,screenName, min, max)
107 {
108 qCDebug(flapp)<<QString("T507 devname=%1, screenName=%2, min=%3, max=%4").arg(devname).arg(screenName).arg(min).arg(max);
109 }
110
setValue(int v)111 int T507::setValue(int v)
112 {
113 unsigned long args[3];
114 int err, i;
115 for(i = 0; i < 2; i++)
116 {
117 args[0] = i;
118 if(ioctl(m_fd, DISP_GET_OUTPUT_TYPE,args) == DISP_OUTPUT_TYPE_LCD)
119 {
120 args[1] = v;
121 args[2] = 0;
122 err = ioctl(m_fd, DISP_LCD_SET_BRIGHTNESS, args);
123 return err;
124 }
125 }
126
127 return -1;
128 }
129