Procházet zdrojové kódy

add:通过卡的IMSI推测运营商

alienwalker před 2 roky
rodič
revize
8d397fd047

+ 25 - 0
components/mobile/luat_mobile.h

@@ -777,4 +777,29 @@ enum
 
 uint32_t luat_mobile_sim_write_counter(void);
 
+enum
+{
+	LUAT_MOBILE_ISP_UNKNOW,
+	LUAT_MOBILE_ISP_CMCC,	/*中国移动*/
+	LUAT_MOBILE_ISP_CTCC,	/*中国电信*/
+	LUAT_MOBILE_ISP_CUCC,	/*中国联通*/
+	LUAT_MOBILE_ISP_CRCC,	/*中国广电*/
+};
+
+/**
+ * @brief 通过PLMN判断运营商,目前只支持国内三大运营商及广电
+ * @param mcc MCC码,3位10进制数字,目前只有中国460是支持的
+ * @param mnc MNC码,2位10进制数字
+ * @return < 0 发生错误,其他见LUAT_MOBILE_ISP_XXX
+ */
+int luat_mobile_get_isp_from_plmn(uint16_t mcc, uint8_t mnc);
+
+/**
+ * @brief 通过IMSI提取PLMN
+ * @param imsi IMSI号码
+ * @param mcc MCC码,3位10进制数字
+ * @param mnc MNC码,2位10进制数字
+ * @return =0成功,其他错误
+ */
+int luat_mobile_get_plmn_from_imsi(char *imsi, uint16_t *mcc, uint8_t *mnc);
 #endif

+ 48 - 0
components/mobile/luat_mobile_common.c

@@ -0,0 +1,48 @@
+#include "luat_base.h"
+#include "luat_mobile.h"
+
+
+int luat_mobile_get_isp_from_plmn(uint16_t mcc, uint8_t mnc)
+{
+	uint8_t cmcc[] = {0, 2, 4, 7, 8, 13};
+	uint8_t cucc[] = {1, 6, 9, 10};
+	uint8_t ctcc[] = {3, 5, 11, 12};
+	if (mcc != 460) return -1;
+	uint8_t i;
+	for(i = 0; i < sizeof(cmcc); i++)
+	{
+		if (mnc == cmcc[i])
+		{
+			return LUAT_MOBILE_ISP_CMCC;
+		}
+	}
+	for(i = 0; i < sizeof(ctcc); i++)
+	{
+		if (mnc == ctcc[i])
+		{
+			return LUAT_MOBILE_ISP_CTCC;
+		}
+	}
+	for(i = 0; i < sizeof(cucc); i++)
+	{
+		if (mnc == cucc[i])
+		{
+			return LUAT_MOBILE_ISP_CUCC;
+		}
+	}
+	if (mnc == 15) return LUAT_MOBILE_ISP_CRCC;
+	return LUAT_MOBILE_ISP_UNKNOW;
+}
+
+int luat_mobile_get_plmn_from_imsi(char *imsi, uint16_t *mcc, uint8_t *mnc)
+{
+	if (!imsi) return -1;
+	uint16_t temp = imsi[0] - '0';
+	temp = (temp  * 10) + imsi[1] - '0';
+	temp = (temp  * 10) + imsi[2] - '0';
+	*mcc = temp;
+	temp = imsi[3] - '0';
+	temp = (temp  * 10) + imsi[4] - '0';
+	*mnc = temp;
+	return 0;
+}