Changeset 94


Ignore:
Timestamp:
May 30, 2009, 5:35:30 PM (11 years ago)
Author:
smurzch2
Message:

Wait for local cards on oscam startup before oening network ports

Thanks to okmikel for the patch.
This is controlled with the global config:
WaitForCards? = 1

Location:
trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/Distribution/doc/oscam-conf.txt

    r74 r94  
    6262                empfehlung: diesen Parameter nicht verwenden.
    6363UnlockParental = unlock parental mode
    64 
     64WaitForCards   = 1: wait for local cards on oscam startup before oening network ports,
     65                 0: no wait
    6566
    6667[monitor]
  • trunk/globals.h

    r93 r94  
    161161
    162162#define CS_ANTICASC
     163
     164// moved from reader-common.h
     165#define CARD_INSERTED  1
     166#define CARD_NEED_INIT 2
     167#define CARD_FAILURE   4
    163168
    164169enum {E1_GLOBAL=0, E1_USER, E1_READER, E1_SERVER, E1_LSERVER};
     
    368373  int       rewritemm;
    369374  int       online;
     375  int       card_status;
    370376  struct    s_module ph;
    371377  uchar     ncd_key[16];
     
    505511  int       max_log_size;
    506512  int       show_ecm_dw;
     513  int       waitforcards;
    507514  uchar      gbox_pwd[8];
    508515  uchar     ignorefile[512];
  • trunk/oscam-config.c

    r93 r94  
    329329  if( !strcmp(token, "showecmdw") )
    330330    cfg->show_ecm_dw = atoi(value);
     331
     332  if( !strcmp(token, "waitforcards") )
     333    cfg->waitforcards = atoi(value);
    331334}
    332335
  • trunk/oscam.c

    r93 r94  
    20502050  init_service(98); // resolver
    20512051  init_cardreader();
     2052 
     2053  if (cfg->waitforcards)
     2054  {
     2055      int card_init_done;
     2056
     2057      cs_log("Waiting for local card init ....");
     2058
     2059      sleep(3);  // short sleep for card detect to work proberly
     2060
     2061      for(;;)
     2062      {
     2063          card_init_done = 1;
     2064
     2065          for (i = 0; i < CS_MAXREADER; i++)
     2066          {
     2067              if (!reader[i].online && reader[i].card_status)
     2068              {
     2069                  if (!(reader[i].card_status & CARD_FAILURE))
     2070                  {
     2071                      card_init_done = 0;
     2072                      break;
     2073                  }
     2074              }
     2075          }
     2076
     2077          if (card_init_done)
     2078              break;
     2079
     2080          cs_sleepms(300);              // wait a little bit
     2081
     2082          alarm(cfg->cmaxidle + cfg->ctimeout / 1000 + 1);
     2083      }
     2084
     2085      cs_log("Init for all local cards done !");
     2086  }
     2087 
     2088
    20522089#ifdef CS_ANTICASC
    20532090  if( !cfg->ac_enabled )
  • trunk/reader-common.c

    r71 r94  
    1010ushort cta_lr, atr_size=0;
    1111static int cs_ptyp_orig; //reinit=1,
    12 static int card_status=0;
    1312
    1413#define SC_IRDETO 1
     
    247246  if (reader_card_inserted())
    248247  {
    249     if (!(card_status & CARD_INSERTED))
     248    if (!(reader[ridx].card_status & CARD_INSERTED))
    250249    {
    251250      cs_log("card detected");
    252       card_status=CARD_INSERTED | (reader_reset() ? 0 : CARD_FAILURE);
    253       if (card_status & CARD_FAILURE)
     251      reader[ridx].card_status  = CARD_NEED_INIT;
     252      reader[ridx].card_status = CARD_INSERTED | (reader_reset() ? 0 : CARD_FAILURE);
     253      if (reader[ridx].card_status & CARD_FAILURE)
     254      {
    254255        cs_log("card initializing error");
     256      }
    255257      else
    256258      {
    257259        client[cs_idx].au=ridx;
    258         reader[ridx].online=1;
    259260        reader_card_info();
    260261      }
     
    270271  else
    271272  {
    272     if (card_status&CARD_INSERTED)
     273    if (reader[ridx].card_status & CARD_INSERTED)
    273274    {
    274275      reader_nullcard();
     
    280281      cs_log("card ejected");
    281282    }
    282     card_status=0;
     283    reader[ridx].card_status=0;
    283284    reader[ridx].online=0;
    284285  }
    285   return(card_status==CARD_INSERTED);
     286  return reader[ridx].card_status==CARD_INSERTED;
    286287}
    287288
  • trunk/reader-common.h

    r8 r94  
    66#define SCT_LEN(sct) (3+((sct[1]&0x0f)<<8)+sct[2])
    77#define MAX_LEN      256
    8 
    9 #define CARD_INSERTED   1
    10 #define CARD_NEED_INIT  2
    11 #define CARD_FAILURE    4
  • trunk/reader-conax.c

    r37 r94  
    296296    }
    297297  }
     298
     299  reader[ridx].online = 1;
     300
    298301  return(1);
    299302}
  • trunk/reader-cryptoworks.c

    r70 r94  
    626626   
    627627  }
     628
     629  reader[ridx].online = 1;
     630
    628631  return(1);
    629632}
  • trunk/reader-irdeto.c

    r70 r94  
    414414    }
    415415  }
     416
     417  reader[ridx].online = 1;
     418
    416419  return(1);
    417420}
  • trunk/reader-seca.c

    r70 r94  
    294294        return(0);
    295295    }
     296
     297  reader[ridx].online = 1;
     298
     299  return 1;
    296300}
    297301#endif
     
    347351  if (valid==1) //if not expired
    348352    cs_log("SA:%02X%02X%02X%02X.",cta_res[18],cta_res[19],cta_res[20],cta_res[21]);
     353
     354  reader[ridx].online = 1;
     355
    349356  return(1);
    350357}
  • trunk/reader-viaccess.c

    r92 r94  
    630630  }
    631631
     632  reader[ridx].online = 1;
     633
    632634  return 0;
    633635}
  • trunk/reader-videoguard2.c

    r87 r94  
    797797  /* info is displayed in init, or when processing info */
    798798  read_tiers ();
     799
     800  reader[ridx].online = 1;
     801
    799802  return(1);
    800803}
Note: See TracChangeset for help on using the changeset viewer.