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