Example #1
0
int32_t cardreader_do_checkhealth(struct s_reader * reader)
{
	struct s_client *cl = reader->client;
	if (reader_card_inserted(reader)) {
		if (reader->card_status == NO_CARD || reader->card_status == UNKNOWN) {
			rdr_log(reader, "card detected");
			led_status_card_detected();
			reader->card_status = CARD_NEED_INIT;
			add_job(cl, ACTION_READER_RESET, NULL, 0);
		}
	} else {
		rdr_debug_mask(reader, D_READER, "%s: !reader_card_inserted", __func__);
		if (reader->card_status == CARD_INSERTED || reader->card_status == CARD_NEED_INIT) {
			rdr_log(reader, "card ejected");
			reader_nullcard(reader);
			NULLFREE(reader->csystem_data);
			if (cl) {
				cl->lastemm = 0;
				cl->lastecm = 0;
			}
			led_status_card_ejected();
		}
		reader->card_status = NO_CARD;
	}
	rdr_debug_mask(reader, D_READER, "%s: reader->card_status = %d, ret = %d", __func__,
		reader->card_status, reader->card_status == CARD_INSERTED);
	return reader->card_status == CARD_INSERTED;
}
Example #2
0
int32_t reader_checkhealth(struct s_reader * reader)
{
	struct s_client *cl = reader->client;
	if (reader_card_inserted(reader)) {
		if (reader->card_status == NO_CARD || reader->card_status == UNKNOWN) {
			rdr_log(reader, "card detected");
			led_status_card_detected();
			reader->card_status = CARD_NEED_INIT;
			//reader_reset(reader);
			add_job(cl, ACTION_READER_RESET, NULL, 0);
		}
	} else {
		if (reader->card_status == CARD_INSERTED || reader->card_status == CARD_NEED_INIT) {
			rdr_log(reader, "card ejected");
			reader_nullcard(reader);
			if (cl) {
				cl->lastemm = 0;
				cl->lastecm = 0;
			}
			led_status_card_ejected();
		}
		reader->card_status = NO_CARD;
	}
	return reader->card_status == CARD_INSERTED;
}
Example #3
0
void cardreader_do_reset(struct s_reader *reader)
{
	reader_nullcard(reader);
	ATR atr;
	int32_t ret = 0;
	int16_t i = 0;
	int16_t j = 0;
	if (reader->typ == R_SMART && reader->smartdev_found >= 4) j = 1; else j = 1; // back to a single start

	for (i= 0; i < j; i++) {

		ret = ICC_Async_Reset(reader, &atr, reader_activate_card, reader_get_cardsystem);

		if(ret == -1)
			{ return; }

		if(ret == 0)
		{
			uint16_t y;
			uint16_t deprecated;
			if (reader->typ == R_SMART && reader->smartdev_found >= 4) y = 2; else y= 2;
//			rdr_log(reader, "the restart atempts in deprecated is %u", y);
			for(deprecated = reader->deprecated; deprecated < y; deprecated++)
			{
				if(!reader_activate_card(reader, &atr, deprecated)) { break; }
				ret = reader_get_cardsystem(reader, &atr);
				if(ret)
					{ break; }
				if(!deprecated)
					{ rdr_log(reader, "Normal mode failed, reverting to Deprecated Mode"); }
			}
		}
			if (ret){
				rdr_log(reader,"THIS WAS A SUCCESSFUL START ATTEMPT No  %u out of max alloted of %u", (i+1), j);
				break;
			}
			else {
				rdr_log(reader, "THIS WAS A FAILED START ATTEMPT No %u out of max alloted of %u", (i+1), j);
			}
	}
	if(!ret)
	{
		reader->card_status = CARD_FAILURE;
		rdr_log(reader, "card initializing error");
		ICC_Async_DisplayMsg(reader, "AER");
		led_status_card_activation_error();
	}
	else
	{
		cardreader_get_card_info(reader);
		reader->card_status = CARD_INSERTED;
		do_emm_from_file(reader);
		ICC_Async_DisplayMsg(reader, "AOK");
	}

	return;
}
Example #4
0
void cardreader_do_reset(struct s_reader *reader)
{
  reader_nullcard(reader);
  ATR atr;
	int32_t ret = 0;

	ret = ICC_Async_Reset(reader, &atr, reader_activate_card, reader_get_cardsystem);

	if (ret == -1)
		return;

	if (ret == 0) {
		uint16_t deprecated;
		for (deprecated = reader->deprecated; deprecated < 2; deprecated++) {
			if (!reader_activate_card(reader, &atr, deprecated)) break;
			ret = reader_get_cardsystem(reader, &atr);
			if (ret)
				break;
			if (!deprecated)
				rdr_log(reader, "Normal mode failed, reverting to Deprecated Mode");
		}
	}

 if (!ret)
      {
        reader->card_status = CARD_FAILURE;
        rdr_log(reader, "card initializing error");
		ICC_Async_DisplayMsg(reader, "AER");
		led_status_card_activation_error();
      }
      else
      {
        cardreader_get_card_info(reader);
        reader->card_status = CARD_INSERTED;
        do_emm_from_file(reader);
		ICC_Async_DisplayMsg(reader, "AOK");
		ICC_Set_Transmit_Timeout(reader);
      }

	return;
}
Example #5
0
int32_t reader_reset(struct s_reader * reader)
{
  reader_nullcard(reader);
  ATR atr;
  uint16_t ret = 0;
#ifdef WITH_AZBOX
  int32_t i;
  if (reader->typ == R_INTERNAL) {
    if (reader->azbox_mode != -1) {
      Azbox_SetMode(reader, reader->azbox_mode);
      if (!reader_activate_card(reader, &atr, 0)) return(0);
      ret = reader_get_cardsystem(reader, &atr);
    } else {
      for (i = 0; i < AZBOX_MODES; i++) {
        Azbox_SetMode(reader, i);
        if (!reader_activate_card(reader, &atr, 0)) return(0);
        ret = reader_get_cardsystem(reader, &atr);
        if (ret)
          break;
      }
    }
  } else {
#endif
  uint16_t deprecated;
	for (deprecated = reader->deprecated; deprecated < 2; deprecated++) {
		if (!reader_activate_card(reader, &atr, deprecated)) break;
		ret = reader_get_cardsystem(reader, &atr);
		if (ret)
			break;
		if (!deprecated)
			rdr_log(reader, "Normal mode failed, reverting to Deprecated Mode");
	}
#ifdef WITH_AZBOX
  }
#endif

 if (!ret)
      {
        reader->card_status = CARD_FAILURE;
        rdr_log(reader, "card initializing error");
        if (reader->typ == R_SC8in1 && reader->sc8in1_config->mcr_type) {
        	char text[] = {'S', (char)reader->slot+0x30, 'A', 'E', 'R'};
        	MCR_DisplayText(reader, text, 5, 400, 0);
        }
		led_status_card_activation_error();
      }
      else
      {
        reader_card_info(reader);
        reader->card_status = CARD_INSERTED;
        do_emm_from_file(reader);
        if (reader->typ == R_SC8in1 && reader->sc8in1_config->mcr_type) {
			char text[] = {'S', (char)reader->slot+0x30, 'A', 'O', 'K'};
			MCR_DisplayText(reader, text, 5, 400, 0);
		}

#ifdef WITH_COOLAPI
	if (reader->typ == R_INTERNAL) {
		rdr_debug_mask(reader, D_DEVICE, "init done - modifying timeout for coolstream internal device %s", reader->device);
		call(Cool_Set_Transmit_Timeout(reader, 1));
	}
#endif
      }

	return(ret);
}