Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I extract the MCC and MNC from a PLMN?

Tags:

gsm

at-command

I am running the AT command AT+KCELL to get cell information and it returns, amongst other things, a PLMN (Public Land and Mobile Network) - the description of this from the documentation is:

PLMN identifiers (3 bytes), made of MCC (Mobile Country Code), and MNC (Mobile Network Code).

OK, that matches what Wikipedia says - in there is the MCC and MNC. Now what I don't understand is how do I extract the aforementioned MCC and MNC values?

Here is an example. I get back:

32f210

and I am told (though I am sceptical) that that should result in:

MNC: 1
MCC: 232

but I can't for the life of me work out how to get that result from the PLMN so how do I parse this?

like image 635
kmp Avatar asked Apr 27 '12 05:04

kmp


1 Answers

Here is a java answer with bitwise operations:

public static String mcc(byte[] plmnId) {
  if (plmnId == null || plmnId.length != 3)
    throw new IllegalArgumentException(String.format("Wrong plmnid %s", Arrays.toString(plmnId)));

  int a1 = plmnId[0] & 0x0F;
  int a2 = (plmnId[0] & 0xF0) >> 4;
  int a3 = plmnId[1] & 0x0F;

  return "" + a1 + a2 + a3;
}

public static String mnc(byte[] plmnId) {
  if (plmnId == null || plmnId.length != 3)
    throw new IllegalArgumentException(String.format("Wrong plmnid %s", Arrays.toString(plmnId)));

  int a1 = plmnId[2] & 0x0F;
  int a2 = (plmnId[2] & 0xF0) >> 4;
  int a3 = (plmnId[1] & 0xF0) >> 4;

  if (a3 == 15)
    return "" + a1 + a2;
  else
    return "" + a1 + a2 + a3;
}
like image 106
George Avatar answered Sep 19 '22 14:09

George