pySim-read.py: Added a common card detection function for both pySim-prog.py and pySim-read.py

This function is used to detect the card type and return Card class/Card subclasses object
if its a know card or else None. Also, an initial step towards refactoring of code.

Change-Id: I71f57c6403dc933bd9d54f90df3d3fe105b4f66f
diff --git a/pySim-prog.py b/pySim-prog.py
index a7081ff..e3045a6 100755
--- a/pySim-prog.py
+++ b/pySim-prog.py
@@ -39,7 +39,7 @@
 	import simplejson as json
 
 from pySim.commands import SimCardCommands
-from pySim.cards import _cards_classes
+from pySim.cards import _cards_classes, card_detect
 from pySim.utils import h2b, swap_nibbles, rpad, derive_milenage_opc, calculate_luhn, dec_iccid
 from pySim.ts_51_011 import EF
 from pySim.card_handler import *
@@ -609,36 +609,6 @@
 	fh.close()
 
 
-def card_detect(opts, scc):
-
-	# Detect type if needed
-	card = None
-	ctypes = dict([(kls.name, kls) for kls in _cards_classes])
-
-	if opts.type in ("auto", "auto_once"):
-		for kls in _cards_classes:
-			card = kls.autodetect(scc)
-			if card:
-				print("Autodetected card type: %s" % card.name)
-				card.reset()
-				break
-
-		if card is None:
-			print("Autodetection failed")
-			return
-
-		if opts.type == "auto_once":
-			opts.type = card.name
-
-	elif opts.type in ctypes:
-		card = ctypes[opts.type](scc)
-
-	else:
-		raise ValueError("Unknown card type: %s" % opts.type)
-
-	return card
-
-
 def process_card(opts, first, card_handler):
 
 	if opts.dry_run is False:
@@ -647,7 +617,7 @@
 
 	if opts.dry_run is False:
 		# Get card
-		card = card_detect(opts, scc)
+		card = card_detect(opts.type, scc)
 		if card is None:
 			print("No card detected!")
 			return -1