Changeset 39988 for titan/titan/rc.h
- Timestamp:
- 02/11/17 15:02:10 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
titan/titan/rc.h
r39803 r39988 107 107 108 108 status.fdrc = -1; 109 status.fdrc1 = -1; 109 110 110 111 rcdev = getconfig("rcdev", NULL); … … 130 131 return 1; 131 132 } 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 } 132 147 133 148 return 0; … … 138 153 if(status.fdrc != -1) 139 154 close(status.fdrc); 155 if(status.fdrc1 != -1) 156 close(status.fdrc1); 140 157 } 141 158 … … 253 270 { 254 271 fd_set rfds; 272 fd_set rfds1; 255 273 struct timeval tv; 256 274 struct input_event rcdata; 257 int treffer = 0, rest = 0 ;275 int treffer = 0, rest = 0, j = 0, front = 0; 258 276 int ret = 0, len = 0, fromthread = 0, longpress = 0, longpresscount = 0; 259 277 struct rc *node; 260 278 struct timeval aktrctime; 261 279 262 280 if(pthread_self() != status.mainthread) 263 281 fromthread = 1; … … 274 292 FD_ZERO(&rfds); 275 293 FD_SET(status.fdrc, &rfds); 294 front = 0; 276 295 277 296 if(fromthread == 0) status.sec = 0; … … 279 298 { 280 299 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 282 341 if(fromthread == 0) m_lock(&status.waitrcmutex, 24); 283 342 … … 295 354 if((fromthread == 0 && ret > 0 && status.rckey == 0) || (fromthread == 1 && ret > 0)) 296 355 { 297 if( FD_ISSET(status.fdrc, &rfds))356 if(front == 0 && FD_ISSET(status.fdrc, &rfds)) 298 357 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))); 299 360 300 361 if(rcdata.type != EV_KEY)
Note: See TracChangeset
for help on using the changeset viewer.