mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Enhanced detection of pending user I/O from CAMs
This commit is contained in:
parent
5573a03fdc
commit
6bdfa4638d
2
HISTORY
2
HISTORY
@ -2048,3 +2048,5 @@ Video Disk Recorder Revision History
|
||||
firmware, version 2613 or higher; the -icam firmware is still limited to live
|
||||
encrypted channels only. Finally we have time shift for encrypted channels on
|
||||
single card systems!
|
||||
- Enhanced detection of pending user I/O from CAMs to avoid sluggish reaction
|
||||
to remote control keypresses.
|
||||
|
11
ci.c
11
ci.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: ci.c 1.13 2003/04/19 10:59:53 kls Exp $
|
||||
* $Id: ci.c 1.14 2003/04/20 09:52:45 kls Exp $
|
||||
*/
|
||||
|
||||
/* XXX TODO
|
||||
@ -625,6 +625,7 @@ public:
|
||||
const cCiTransportConnection *Tc(void) { return tc; }
|
||||
int SessionId(void) { return sessionId; }
|
||||
int ResourceId(void) { return resourceId; }
|
||||
virtual bool HasUserIO(void) { return false; }
|
||||
virtual bool Process(int Length = 0, const uint8_t *Data = NULL);
|
||||
};
|
||||
|
||||
@ -1009,6 +1010,7 @@ public:
|
||||
cCiMMI(int SessionId, cCiTransportConnection *Tc);
|
||||
virtual ~cCiMMI();
|
||||
virtual bool Process(int Length = 0, const uint8_t *Data = NULL);
|
||||
virtual bool HasUserIO(void) { return menu || enquiry; }
|
||||
cCiMenu *Menu(void);
|
||||
cCiEnquiry *Enquiry(void);
|
||||
bool SendMenuAnswer(uint8_t Selection);
|
||||
@ -1287,6 +1289,7 @@ cCiHandler::cCiHandler(int Fd, int NumSlots)
|
||||
{
|
||||
numSlots = NumSlots;
|
||||
newCaSupport = false;
|
||||
hasUserIO = false;
|
||||
for (int i = 0; i < MAX_CI_SESSION; i++)
|
||||
sessions[i] = NULL;
|
||||
tpl = new cCiTransportLayer(Fd, numSlots);
|
||||
@ -1480,10 +1483,12 @@ bool cCiHandler::Process(void)
|
||||
tpl->NewConnection(Slot);
|
||||
}
|
||||
}
|
||||
bool UserIO = false;
|
||||
for (int i = 0; i < MAX_CI_SESSION; i++) {
|
||||
if (sessions[i])
|
||||
sessions[i]->Process();
|
||||
if (sessions[i] && sessions[i]->Process())
|
||||
UserIO |= sessions[i]->HasUserIO();
|
||||
}
|
||||
hasUserIO = UserIO;
|
||||
if (newCaSupport)
|
||||
newCaSupport = result = false; // triggers new SetCaPmt at caller!
|
||||
return result;
|
||||
|
4
ci.h
4
ci.h
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: ci.h 1.6 2003/04/19 10:25:24 kls Exp $
|
||||
* $Id: ci.h 1.7 2003/04/20 09:21:23 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __CI_H
|
||||
@ -81,6 +81,7 @@ private:
|
||||
cMutex mutex;
|
||||
int numSlots;
|
||||
bool newCaSupport;
|
||||
bool hasUserIO;
|
||||
cCiSession *sessions[MAX_CI_SESSION];
|
||||
cCiTransportLayer *tpl;
|
||||
cCiTransportConnection *tc;
|
||||
@ -98,6 +99,7 @@ public:
|
||||
static cCiHandler *CreateCiHandler(const char *FileName);
|
||||
int NumSlots(void) { return numSlots; }
|
||||
bool Process(void);
|
||||
bool HasUserIO(void) { return hasUserIO; }
|
||||
bool EnterMenu(int Slot);
|
||||
cCiMenu *GetMenu(void);
|
||||
cCiEnquiry *GetEnquiry(void);
|
||||
|
4
menu.c
4
menu.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: menu.c 1.235 2003/04/12 09:40:48 kls Exp $
|
||||
* $Id: menu.c 1.236 2003/04/20 09:21:36 kls Exp $
|
||||
*/
|
||||
|
||||
#include "menu.h"
|
||||
@ -1636,7 +1636,7 @@ cOsdObject *CamControl(void)
|
||||
cDevice *Device = cDevice::GetDevice(d);
|
||||
if (Device) {
|
||||
cCiHandler *CiHandler = Device->CiHandler();
|
||||
if (CiHandler) {
|
||||
if (CiHandler && CiHandler->HasUserIO()) {
|
||||
cCiMenu *CiMenu = CiHandler->GetMenu();
|
||||
if (CiMenu)
|
||||
return new cMenuCam(CiMenu);
|
||||
|
Loading…
Reference in New Issue
Block a user