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