utils.py add LOCI EFs decode functions

The LOCI, PSLOCI and EPSLOCI contain some info,
 including the PLMN, added helper functions to
decode it

Change-Id: Ibb513ff7d1dc6d33b354ae26cbd9c390ea3c8efc
diff --git a/pySim/ts_31_102.py b/pySim/ts_31_102.py
index 473e595..215ed4c 100644
--- a/pySim/ts_31_102.py
+++ b/pySim/ts_31_102.py
@@ -137,6 +137,12 @@
 	111: 'ePDG configuration Information for Emergency Service configured',
 }
 
+LOCI_STATUS_map = {
+	0:	'updated',
+	1:	'not updated',
+	2:	'plmn not allowed',
+	3:	'locatation area not allowed'
+}
 EF_USIM_ADF_map = {
 	'LI': '6F05',
 	'ARR': '6F06',
diff --git a/pySim/utils.py b/pySim/utils.py
index 496b918..2ca6165 100644
--- a/pySim/utils.py
+++ b/pySim/utils.py
@@ -183,6 +183,36 @@
 		s += "\t%s # %s\n" % (rec_data, rec_str)
 	return s
 
+def dec_loci(hexstr):
+	res = {'tmsi': '',  'mcc': 0, 'mnc': 0, 'lac': '', 'status': 0}
+	res['tmsi'] = hexstr[:8]
+	res['mcc'] = dec_mcc_from_plmn(hexstr[8:14])
+	res['mnc'] = dec_mnc_from_plmn(hexstr[8:14])
+	res['lac'] = hexstr[14:18]
+	res['status'] = h2i(hexstr[20:22])
+	return res
+
+def dec_psloci(hexstr):
+	res = {'p-tmsi': '', 'p-tmsi-sig': '', 'mcc': 0, 'mnc': 0, 'lac': '', 'rac': '', 'status': 0}
+	res['p-tmsi'] = hexstr[:8]
+	res['p-tmsi-sig'] = hexstr[8:14]
+	res['mcc'] = dec_mcc_from_plmn(hexstr[14:20])
+	res['mnc'] = dec_mnc_from_plmn(hexstr[14:20])
+	res['lac'] = hexstr[20:24]
+	res['rac'] = hexstr[24:26]
+	res['status'] = h2i(hexstr[26:28])
+	return res
+
+def dec_epsloci(hexstr):
+	res = {'guti': '', 'mcc': 0, 'mnc': 0, 'tac': '', 'status': 0}
+	res['guti'] = hexstr[:24]
+	res['tai'] = hexstr[24:34]
+	res['mcc'] = dec_mcc_from_plmn(hexstr[24:30])
+	res['mnc'] = dec_mnc_from_plmn(hexstr[24:30])
+	res['tac'] = hexstr[30:34]
+	res['status'] = h2i(hexstr[34:36])
+	return res
+
 def derive_milenage_opc(ki_hex, op_hex):
 	"""
 	Run the milenage algorithm to calculate OPC from Ki and OP