mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	Some missed places where cThread::Running() should be used
This commit is contained in:
		
							
								
								
									
										84
									
								
								lirc.c
									
									
									
									
									
								
							
							
						
						
									
										84
									
								
								lirc.c
									
									
									
									
									
								
							| @@ -6,7 +6,7 @@ | ||||
|  * | ||||
|  * LIRC support added by Carsten Koch <Carsten.Koch@icem.de>  2000-06-16. | ||||
|  * | ||||
|  * $Id: lirc.c 1.11 2005/07/31 10:18:09 kls Exp $ | ||||
|  * $Id: lirc.c 1.12 2005/08/15 12:28:10 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #include "lirc.h" | ||||
| @@ -61,48 +61,48 @@ void cLircRemote::Action(void) | ||||
|   bool repeat = false; | ||||
|   int timeout = -1; | ||||
|  | ||||
|   for (; f >= 0;) { | ||||
|   while (Running() && f >= 0) { | ||||
|  | ||||
|       bool ready = cFile::FileReady(f, timeout); | ||||
|       int ret = ready ? safe_read(f, buf, sizeof(buf)) : -1; | ||||
|         bool ready = cFile::FileReady(f, timeout); | ||||
|         int ret = ready ? safe_read(f, buf, sizeof(buf)) : -1; | ||||
|  | ||||
|       if (ready && ret <= 0 ) { | ||||
|          esyslog("ERROR: lircd connection lost"); | ||||
|          close(f); | ||||
|          f = -1; | ||||
|          break; | ||||
|          } | ||||
|         if (ready && ret <= 0 ) { | ||||
|            esyslog("ERROR: lircd connection lost"); | ||||
|            close(f); | ||||
|            f = -1; | ||||
|            break; | ||||
|            } | ||||
|  | ||||
|       if (ready && ret > 21) { | ||||
|          int count; | ||||
|          char KeyName[LIRC_KEY_BUF]; | ||||
|          sscanf(buf, "%*x %x %29s", &count, KeyName); // '29' in '%29s' is LIRC_KEY_BUF-1! | ||||
|          if (count == 0) { | ||||
|             if (strcmp(KeyName, LastKeyName) == 0 && FirstTime.Elapsed() < KEYPRESSDELAY) | ||||
|                continue; // skip keys coming in too fast | ||||
|             if (repeat) | ||||
|                Put(LastKeyName, false, true); | ||||
|             strcpy(LastKeyName, KeyName); | ||||
|             repeat = false; | ||||
|             FirstTime.Set(); | ||||
|             timeout = -1; | ||||
|             } | ||||
|          else { | ||||
|             if (FirstTime.Elapsed() < REPEATDELAY) | ||||
|                continue; // repeat function kicks in after a short delay | ||||
|             repeat = true; | ||||
|             timeout = REPEATDELAY; | ||||
|             } | ||||
|          LastTime.Set(); | ||||
|          Put(KeyName, repeat); | ||||
|          } | ||||
|       else if (repeat) { // the last one was a repeat, so let's generate a release | ||||
|          if (LastTime.Elapsed() >= REPEATDELAY) { | ||||
|             Put(LastKeyName, false, true); | ||||
|             repeat = false; | ||||
|             *LastKeyName = 0; | ||||
|             timeout = -1; | ||||
|             } | ||||
|          } | ||||
|       } | ||||
|         if (ready && ret > 21) { | ||||
|            int count; | ||||
|            char KeyName[LIRC_KEY_BUF]; | ||||
|            sscanf(buf, "%*x %x %29s", &count, KeyName); // '29' in '%29s' is LIRC_KEY_BUF-1! | ||||
|            if (count == 0) { | ||||
|               if (strcmp(KeyName, LastKeyName) == 0 && FirstTime.Elapsed() < KEYPRESSDELAY) | ||||
|                  continue; // skip keys coming in too fast | ||||
|               if (repeat) | ||||
|                  Put(LastKeyName, false, true); | ||||
|               strcpy(LastKeyName, KeyName); | ||||
|               repeat = false; | ||||
|               FirstTime.Set(); | ||||
|               timeout = -1; | ||||
|               } | ||||
|            else { | ||||
|               if (FirstTime.Elapsed() < REPEATDELAY) | ||||
|                  continue; // repeat function kicks in after a short delay | ||||
|               repeat = true; | ||||
|               timeout = REPEATDELAY; | ||||
|               } | ||||
|            LastTime.Set(); | ||||
|            Put(KeyName, repeat); | ||||
|            } | ||||
|         else if (repeat) { // the last one was a repeat, so let's generate a release | ||||
|            if (LastTime.Elapsed() >= REPEATDELAY) { | ||||
|               Put(LastKeyName, false, true); | ||||
|               repeat = false; | ||||
|               *LastKeyName = 0; | ||||
|               timeout = -1; | ||||
|               } | ||||
|            } | ||||
|         } | ||||
| } | ||||
|   | ||||
							
								
								
									
										105
									
								
								rcu.c
									
									
									
									
									
								
							
							
						
						
									
										105
									
								
								rcu.c
									
									
									
									
									
								
							| @@ -4,7 +4,7 @@ | ||||
|  * See the main source file 'vdr.c' for copyright information and | ||||
|  * how to reach the author. | ||||
|  * | ||||
|  * $Id: rcu.c 1.9 2005/07/31 10:17:45 kls Exp $ | ||||
|  * $Id: rcu.c 1.10 2005/08/15 12:30:21 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #include "rcu.h" | ||||
| @@ -98,60 +98,59 @@ void cRcuRemote::Action(void) | ||||
|   uint64 LastCommand = 0; | ||||
|   bool repeat = false; | ||||
|  | ||||
|   //XXX | ||||
|   for (; f >= 0;) { | ||||
|   while (Running() && f >= 0) { | ||||
|  | ||||
|       LOCK_THREAD; | ||||
|         LOCK_THREAD; | ||||
|  | ||||
|       if (ReceiveByte(REPEATLIMIT) == 'X') { | ||||
|          for (int i = 0; i < 6; i++) { | ||||
|              int b = ReceiveByte(); | ||||
|              if (b >= 0) { | ||||
|                 buffer.raw[i] = b; | ||||
|                 if (i == 5) { | ||||
|                    unsigned short Address = ntohs(buffer.data.address); // the PIC sends bytes in "network order" | ||||
|                    uint64         Command = ntohl(buffer.data.command); | ||||
|                    if (code == 'B' && Address == 0x0000 && Command == 0x00004000) | ||||
|                       // Well, well, if it isn't the "d-box"... | ||||
|                       // This remote control sends the above command before and after | ||||
|                       // each keypress - let's just drop this: | ||||
|                       break; | ||||
|                    Command |= uint64(Address) << 32; | ||||
|                    if (Command != LastCommand) { | ||||
|                       LastCommand = Command; | ||||
|                       repeat = false; | ||||
|                       FirstTime.Set(); | ||||
|                       } | ||||
|                    else { | ||||
|                       if (FirstTime.Elapsed() < REPEATDELAY) | ||||
|                          break; // repeat function kicks in after a short delay | ||||
|                       repeat = true; | ||||
|                       } | ||||
|                    Put(Command, repeat); | ||||
|                    receivedCommand = true; | ||||
|                    } | ||||
|                 } | ||||
|              else | ||||
|                 break; | ||||
|              } | ||||
|          } | ||||
|       else if (repeat) { // the last one was a repeat, so let's generate a release | ||||
|          Put(LastCommand, false, true); | ||||
|          repeat = false; | ||||
|          LastCommand = 0; | ||||
|          } | ||||
|       else { | ||||
|          LastCommand = 0; | ||||
|          if (numberToSend >= 0) { | ||||
|             Number(numberToSend); | ||||
|             numberToSend = -1; | ||||
|             } | ||||
|          } | ||||
|       if (code && time(NULL) - LastCodeRefresh > 60) { | ||||
|          SendCommand(code); // in case the PIC listens to the wrong code | ||||
|          LastCodeRefresh = time(NULL); | ||||
|          } | ||||
|       } | ||||
|         if (ReceiveByte(REPEATLIMIT) == 'X') { | ||||
|            for (int i = 0; i < 6; i++) { | ||||
|                int b = ReceiveByte(); | ||||
|                if (b >= 0) { | ||||
|                   buffer.raw[i] = b; | ||||
|                   if (i == 5) { | ||||
|                      unsigned short Address = ntohs(buffer.data.address); // the PIC sends bytes in "network order" | ||||
|                      uint64         Command = ntohl(buffer.data.command); | ||||
|                      if (code == 'B' && Address == 0x0000 && Command == 0x00004000) | ||||
|                         // Well, well, if it isn't the "d-box"... | ||||
|                         // This remote control sends the above command before and after | ||||
|                         // each keypress - let's just drop this: | ||||
|                         break; | ||||
|                      Command |= uint64(Address) << 32; | ||||
|                      if (Command != LastCommand) { | ||||
|                         LastCommand = Command; | ||||
|                         repeat = false; | ||||
|                         FirstTime.Set(); | ||||
|                         } | ||||
|                      else { | ||||
|                         if (FirstTime.Elapsed() < REPEATDELAY) | ||||
|                            break; // repeat function kicks in after a short delay | ||||
|                         repeat = true; | ||||
|                         } | ||||
|                      Put(Command, repeat); | ||||
|                      receivedCommand = true; | ||||
|                      } | ||||
|                   } | ||||
|                else | ||||
|                   break; | ||||
|                } | ||||
|            } | ||||
|         else if (repeat) { // the last one was a repeat, so let's generate a release | ||||
|            Put(LastCommand, false, true); | ||||
|            repeat = false; | ||||
|            LastCommand = 0; | ||||
|            } | ||||
|         else { | ||||
|            LastCommand = 0; | ||||
|            if (numberToSend >= 0) { | ||||
|               Number(numberToSend); | ||||
|               numberToSend = -1; | ||||
|               } | ||||
|            } | ||||
|         if (code && time(NULL) - LastCodeRefresh > 60) { | ||||
|            SendCommand(code); // in case the PIC listens to the wrong code | ||||
|            LastCodeRefresh = time(NULL); | ||||
|            } | ||||
|         } | ||||
| } | ||||
|  | ||||
| int cRcuRemote::ReceiveByte(int TimeoutMs) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user