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; }
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); }