Changeset 39988 for titan/titan/rc.h


Ignore:
Timestamp:
02/11/17 15:02:10 (6 years ago)
Author:
gost
Message:

[titan] activate front buttons for some devices

File:
1 edited

Legend:

Unmodified
Added
Removed
  • titan/titan/rc.h

    r39803 r39988  
    107107
    108108        status.fdrc = -1;
     109        status.fdrc1 = -1;
    109110
    110111        rcdev = getconfig("rcdev", NULL);
     
    130131                return 1;
    131132        }
     133       
     134        rcdev = getconfig("rcfrontdev", NULL);
     135        if(rcdev != NULL)
     136        {
     137                i = 0;
     138                while(status.fdrc1 < 0 && i < 3)
     139                {
     140                        status.fdrc1 = open(rcdev, O_RDWR);
     141                        if(status.fdrc1 < 0) sleep(1);
     142                        i++;
     143                }
     144                if(status.fdrc1 > -1)
     145                        closeonexec(status.fdrc1);
     146        }
    132147
    133148        return 0;
     
    138153        if(status.fdrc != -1)
    139154                close(status.fdrc);
     155        if(status.fdrc1 != -1)
     156                close(status.fdrc1);
    140157}
    141158
     
    253270{
    254271        fd_set rfds;
     272        fd_set rfds1;
    255273        struct timeval tv;
    256274        struct input_event rcdata;
    257         int treffer = 0, rest = 0;
     275        int treffer = 0, rest = 0, j = 0, front = 0;
    258276        int ret = 0, len = 0, fromthread = 0, longpress = 0, longpresscount = 0;
    259277        struct rc *node;
    260278        struct timeval aktrctime;
    261 
     279       
    262280        if(pthread_self() != status.mainthread)
    263281                fromthread = 1;
     
    274292                FD_ZERO(&rfds);
    275293                FD_SET(status.fdrc, &rfds);
     294                front = 0;
    276295
    277296                if(fromthread == 0) status.sec = 0;
     
    279298                {
    280299                        if(fromthread == 0) m_unlock(&status.waitrcmutex, 24);
    281                         ret = TEMP_FAILURE_RETRY(select(status.fdrc + 1, &rfds, NULL, NULL, &tv));
     300                       
     301                        if(status.fdrc1 > -1 && timeout > 1)
     302                        {
     303                                for(j = 0; j < timeout / 2; j++)
     304                                {
     305                                        tv.tv_sec = 2;
     306                                        tv.tv_usec = 0;
     307                                        FD_ZERO(&rfds);
     308                                        FD_SET(status.fdrc, &rfds);
     309                                        ret = TEMP_FAILURE_RETRY(select(status.fdrc + 1, &rfds, NULL, NULL, &tv));
     310                                        if(ret == 0)
     311                                        {
     312                                                tv.tv_sec = 0;
     313                                                tv.tv_usec = 1000;
     314                                                FD_ZERO(&rfds1);
     315                                                FD_SET(status.fdrc1, &rfds1);
     316                                                ret = TEMP_FAILURE_RETRY(select(status.fdrc1 + 1, &rfds1, NULL, NULL, &tv));
     317                                                front = 1;
     318                                        }
     319                                        if(ret != 0)
     320                                                break;
     321                                }
     322                        }
     323                        else
     324                        {
     325                                tv.tv_sec = timeout;
     326                                tv.tv_usec = rest * 1000;
     327                                FD_ZERO(&rfds);
     328                                FD_SET(status.fdrc, &rfds);
     329                                ret = TEMP_FAILURE_RETRY(select(status.fdrc + 1, &rfds, NULL, NULL, &tv));
     330                                if(ret == 0 && status.fdrc1 > -1)
     331                                {
     332                                        tv.tv_sec = 0;
     333                                        tv.tv_usec = 1000;
     334                                        FD_ZERO(&rfds1);
     335                                        FD_SET(status.fdrc1, &rfds1);
     336                                        ret = TEMP_FAILURE_RETRY(select(status.fdrc1 + 1, &rfds1, NULL, NULL, &tv));
     337                                        front = 1;
     338                                }
     339                        }
     340                               
    282341                        if(fromthread == 0) m_lock(&status.waitrcmutex, 24);
    283342
     
    295354                if((fromthread == 0 && ret > 0 && status.rckey == 0) || (fromthread == 1 && ret > 0))
    296355                {
    297                         if(FD_ISSET(status.fdrc, &rfds))
     356                        if(front == 0 && FD_ISSET(status.fdrc, &rfds))
    298357                                len = TEMP_FAILURE_RETRY(read(status.fdrc, &rcdata, sizeof(struct input_event)));
     358                        else if(front == 1 && FD_ISSET(status.fdrc1, &rfds1))
     359                                len = TEMP_FAILURE_RETRY(read(status.fdrc1, &rcdata, sizeof(struct input_event)));
    299360
    300361                        if(rcdata.type != EV_KEY)
Note: See TracChangeset for help on using the changeset viewer.