cards: FairwavesSIM: force SIM APDUs during programming

The FairwavesSIM programming fails when the card is accessed with USIM
APDUs. To keep it working temporarly switch to SIM APDUs during
programming.

Change-Id: I8f02625d2b620ecdf4b2afc27a8750119b707152
diff --git a/pySim/cards.py b/pySim/cards.py
index c38b185..5e2e9fe 100644
--- a/pySim/cards.py
+++ b/pySim/cards.py
@@ -1123,8 +1123,25 @@
 		data, sw = self._scc.update_binary(self._EF['OP/OPC'], content)
 		return sw
 
-
 	def program(self, p):
+		# For some reason the card programming only works when the card
+		# is handled as a classic SIM, even though it is an USIM, so we
+		# reconfigure the class byte and the select control field on
+		# the fly. When the programming is done the original values are
+		# restored.
+		cla_byte_orig = self._scc.cla_byte
+		sel_ctrl_orig = self._scc.sel_ctrl
+		self._scc.cla_byte = "a0"
+		self._scc.sel_ctrl = "0000"
+
+		try:
+			self._program(p)
+		finally:
+			# restore original cla byte and sel ctrl
+			self._scc.cla_byte = cla_byte_orig
+			self._scc.sel_ctrl = sel_ctrl_orig
+
+	def _program(self, p):
 		# authenticate as ADM1
 		if not p['pin_adm']:
 			raise ValueError("Please provide a PIN-ADM as there is no default one")