xref: /OK3568_Linux_fs/app/forlinx/flapp/src/plugins/screen/ibacklight.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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