Exemplo n.º 1
0
static int32_t Azbox_do_reset(struct s_reader *reader, struct s_ATR *atr,
	int32_t (*rdr_activate_card)(struct s_reader *, struct s_ATR *, uint16_t deprecated),
	int32_t (*rdr_get_cardsystem)(struct s_reader *, struct s_ATR *))
{
	int32_t ret = 0;
	int32_t i;
	if (reader->azbox_mode != -1) {
		Azbox_SetMode(reader, reader->azbox_mode);
		if (!rdr_activate_card(reader, atr, 0))
			return -1;
		ret = rdr_get_cardsystem(reader, atr);
	} else {
		for (i = 0; i < AZBOX_MODES; i++) {
			Azbox_SetMode(reader, i);
			if (!rdr_activate_card(reader, atr, 0))
				return -1;
			ret = rdr_get_cardsystem(reader, atr);
			if (ret)
				break;
		}
	}
	return ret;
}
Exemplo n.º 2
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);
}