mirror of
				https://github.com/rofafor/vdr-plugin-satip.git
				synced 2023-10-10 11:37:42 +00:00 
			
		
		
		
	Added a timeout for releasing idling devices.
This commit is contained in:
		
							
								
								
									
										4
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								HISTORY
									
									
									
									
									
								
							@@ -137,3 +137,7 @@ VDR Plugin 'satip' Revision History
 | 
			
		||||
  interface.
 | 
			
		||||
- Added new ATTA and DETA SVDRP commands.
 | 
			
		||||
- Set the default device count to two.
 | 
			
		||||
 | 
			
		||||
2015-xx-xx: Version 2.2.3
 | 
			
		||||
 | 
			
		||||
- Added a timeout for releasing idling devices.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								device.c
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								device.c
									
									
									
									
									
								
							@@ -460,6 +460,11 @@ int cSatipDevice::GetCISlot(void)
 | 
			
		||||
  return slot;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool cSatipDevice::IsIdle(void)
 | 
			
		||||
{
 | 
			
		||||
  return !Receiving();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uchar *cSatipDevice::GetData(int *availableP)
 | 
			
		||||
{
 | 
			
		||||
  debug16("%s [device %u]", __PRETTY_FUNCTION__, deviceIndexM);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								device.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								device.h
									
									
									
									
									
								
							@@ -110,6 +110,7 @@ public:
 | 
			
		||||
  virtual int GetId(void);
 | 
			
		||||
  virtual int GetPmtPid(void);
 | 
			
		||||
  virtual int GetCISlot(void);
 | 
			
		||||
  virtual bool IsIdle(void);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // __SATIP_DEVICE_H
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,7 @@ public:
 | 
			
		||||
  virtual int GetId(void) = 0;
 | 
			
		||||
  virtual int GetPmtPid(void) = 0;
 | 
			
		||||
  virtual int GetCISlot(void) = 0;
 | 
			
		||||
  virtual bool IsIdle(void) = 0;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
  cSatipDeviceIf(const cSatipDeviceIf&);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								satip.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								satip.c
									
									
									
									
									
								
							@@ -27,7 +27,7 @@
 | 
			
		||||
#define GITVERSION ""
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
       const char VERSION[]     = "2.2.2" GITVERSION;
 | 
			
		||||
       const char VERSION[]     = "2.2.3" GITVERSION;
 | 
			
		||||
static const char DESCRIPTION[] = trNOOP("SAT>IP Devices");
 | 
			
		||||
 | 
			
		||||
class cPluginSatip : public cPlugin {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								tuner.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								tuner.c
									
									
									
									
									
								
							@@ -29,6 +29,7 @@ cSatipTuner::cSatipTuner(cSatipDeviceIf &deviceP, unsigned int packetLenP)
 | 
			
		||||
  nextServerM(NULL, deviceP.GetId(), 0),
 | 
			
		||||
  mutexM(),
 | 
			
		||||
  reConnectM(),
 | 
			
		||||
  idleReleaseM(),
 | 
			
		||||
  keepAliveM(),
 | 
			
		||||
  statusUpdateM(),
 | 
			
		||||
  pidUpdateCacheM(),
 | 
			
		||||
@@ -92,6 +93,7 @@ void cSatipTuner::Action(void)
 | 
			
		||||
{
 | 
			
		||||
  debug1("%s Entering [device %d]", __PRETTY_FUNCTION__, deviceIdM);
 | 
			
		||||
  reConnectM.Set(eConnectTimeoutMs);
 | 
			
		||||
  idleReleaseM.Set(eIdleTimeoutMs);
 | 
			
		||||
  // Do the thread loop
 | 
			
		||||
  while (Running()) {
 | 
			
		||||
        UpdateCurrentState();
 | 
			
		||||
@@ -116,6 +118,7 @@ void cSatipTuner::Action(void)
 | 
			
		||||
          case tsTuned:
 | 
			
		||||
               debug4("%s: tsTuned [device %d]", __PRETTY_FUNCTION__, deviceIdM);
 | 
			
		||||
               reConnectM.Set(eConnectTimeoutMs);
 | 
			
		||||
               idleReleaseM.Set(eIdleTimeoutMs);
 | 
			
		||||
               // Read reception statistics via DESCRIBE and RTCP
 | 
			
		||||
               if (hasLockM || ReadReceptionStatus()) {
 | 
			
		||||
                  // Quirk for devices without valid reception data
 | 
			
		||||
@@ -145,6 +148,14 @@ void cSatipTuner::Action(void)
 | 
			
		||||
                  RequestState(tsSet, smInternal);
 | 
			
		||||
                  break;
 | 
			
		||||
                  }
 | 
			
		||||
               if (idleReleaseM.TimedOut()) {
 | 
			
		||||
                  idleReleaseM.Set(eIdleTimeoutMs);
 | 
			
		||||
                  if (deviceM->IsIdle()) {
 | 
			
		||||
                     info("Idle timeout - releasing [device %d]", deviceIdM);
 | 
			
		||||
                     RequestState(tsRelease, smInternal);
 | 
			
		||||
                     }
 | 
			
		||||
                  break;
 | 
			
		||||
                  }
 | 
			
		||||
               break;
 | 
			
		||||
          default:
 | 
			
		||||
               error("Unknown tuner status %d [device %d]", currentStateM, deviceIdM);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								tuner.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								tuner.h
									
									
									
									
									
								
							@@ -83,6 +83,7 @@ private:
 | 
			
		||||
    eStatusUpdateTimeoutMs  = 1000,  // in milliseconds
 | 
			
		||||
    ePidUpdateIntervalMs    = 250,   // in milliseconds
 | 
			
		||||
    eConnectTimeoutMs       = 5000,  // in milliseconds
 | 
			
		||||
    eIdleTimeoutMs          = 30000, // in milliseconds
 | 
			
		||||
    eMinKeepAliveIntervalMs = 30000  // in milliseconds
 | 
			
		||||
  };
 | 
			
		||||
  enum eTunerState { tsIdle, tsRelease, tsSet, tsTuned, tsLocked };
 | 
			
		||||
@@ -100,6 +101,7 @@ private:
 | 
			
		||||
  cSatipTunerServer nextServerM;
 | 
			
		||||
  cMutex mutexM;
 | 
			
		||||
  cTimeMs reConnectM;
 | 
			
		||||
  cTimeMs idleReleaseM;
 | 
			
		||||
  cTimeMs keepAliveM;
 | 
			
		||||
  cTimeMs statusUpdateM;
 | 
			
		||||
  cTimeMs pidUpdateCacheM;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user