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