git.cweiske.de
/
enigma2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix high systemload with plugged CI on e2 start
[enigma2.git]
/
lib
/
dvb_ci
/
dvbci.cpp
diff --git
a/lib/dvb_ci/dvbci.cpp
b/lib/dvb_ci/dvbci.cpp
index 1be4232eef8a59db8c62e27048cecff59e3d4d66..c24ddd2569367cfcaa037ffad59733722905f251 100644
(file)
--- a/
lib/dvb_ci/dvbci.cpp
+++ b/
lib/dvb_ci/dvbci.cpp
@@
-66,6
+66,16
@@
eDVBCISlot *eDVBCIInterfaces::getSlot(int slotid)
return 0;
}
return 0;
}
+int eDVBCIInterfaces::getSlotState(int slotid)
+{
+ eDVBCISlot *slot;
+
+ if( (slot = getSlot(slotid)) == 0 )
+ return eDVBCISlot::stateInvalid;
+
+ return slot->getState();
+}
+
int eDVBCIInterfaces::reset(int slotid)
{
eDVBCISlot *slot;
int eDVBCIInterfaces::reset(int slotid)
{
eDVBCISlot *slot;
@@
-359,7
+369,7
@@
void eDVBCIInterfaces::removePMTHandler(eDVBServicePMTHandler *pmthandler)
if (slot && !sameServiceExist)
{
if (slot && !sameServiceExist)
{
- if (slot->getNumOfServices() > 1)
// fixme make it dependend of "ci can handle more than one service"
+ if (slot->getNumOfServices() > 1)
{
eDebug("[eDVBCIInterfaces] remove last pmt handler for service %s send empty capmt",
service_to_remove.toString().c_str());
{
eDebug("[eDVBCIInterfaces] remove last pmt handler for service %s send empty capmt",
service_to_remove.toString().c_str());
@@
-423,8
+433,6
@@
int eDVBCISlot::send(const unsigned char *data, size_t len)
void eDVBCISlot::data(int what)
{
void eDVBCISlot::data(int what)
{
- if (state == stateInvalid)
- return;
if(what == eSocketNotifier::Priority) {
if(state != stateRemoved) {
state = stateRemoved;
if(what == eSocketNotifier::Priority) {
if(state != stateRemoved) {
state = stateRemoved;
@@
-437,17
+445,18
@@
void eDVBCISlot::data(int what)
eDVBCIInterfaces::getInstance()->ciRemoved(this);
eDVBCISession::deleteSessions(this);
notifier->setRequested(eSocketNotifier::Read);
eDVBCIInterfaces::getInstance()->ciRemoved(this);
eDVBCISession::deleteSessions(this);
notifier->setRequested(eSocketNotifier::Read);
- //HACK
- eDVBCI_UI::getInstance()->setState(0,0);
+ eDVBCI_UI::getInstance()->setState(getSlotID(),0);
}
return;
}
}
return;
}
+ if (state == stateInvalid)
+ reset();
+
if(state != stateInserted) {
eDebug("ci inserted");
state = stateInserted;
if(state != stateInserted) {
eDebug("ci inserted");
state = stateInserted;
-// HACK
- eDVBCI_UI::getInstance()->setState(0,1);
+ eDVBCI_UI::getInstance()->setState(getSlotID(),1);
notifier->setRequested(eSocketNotifier::Read|eSocketNotifier::Priority);
/* enable PRI to detect removal or errors */
}
notifier->setRequested(eSocketNotifier::Read|eSocketNotifier::Priority);
/* enable PRI to detect removal or errors */
}