summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorBjørn Mork <bjorn@mork.no>2013-01-16 12:40:31 +0100
committerBjørn Mork <bjorn@mork.no>2013-01-16 12:40:31 +0100
commit7d0309068ad318d88bd973aa01f962c81e915428 (patch)
treefc63a09b74f4bb1741059cf2575a015b090d4001 /scripts
parent21182ff5c531fa1758dfa951437f69c3a6bcdc36 (diff)
decode QMI_NAS_GET_PREFERRED_NETWORKS
Signed-off-by: Bjørn Mork <bjorn@mork.no>
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/qmi.pl37
1 files changed, 37 insertions, 0 deletions
diff --git a/scripts/qmi.pl b/scripts/qmi.pl
index 5ca8580..af50e7e 100755
--- a/scripts/qmi.pl
+++ b/scripts/qmi.pl
@@ -354,6 +354,17 @@ my %msg = (
decode => \&tlv_plmn,
},
},
+ 0x0026 => {
+ name => 'GET_PREFERRED_NETWORKS',
+ 0x10 => {
+ name => '3GPP Preferred Networks',
+ decode => \&tlv_pref_nets,
+ },
+ 0x11 => {
+ name => 'Static 3GPP Preferred Networks',
+ decode => \&tlv_pref_nets,
+ },
+ },
0x0031 => {
name => 'GET_RF_BAND_INFO',
0x01 => {
@@ -506,6 +517,32 @@ sub tlv_plmn {
return sprintf "%u%02u - %s", $mcc, $mnc, substr($datastr, 5, $len);
}
+my %rat_map = (
+ 1<<15 => 'UMTS',
+ 1<<14 => 'LTE',
+ 1<<7 => 'GSM',
+ 1<<6 => 'GSM compat',
+ );
+
+sub decode_rat {
+ my $rat = shift;
+ my @rat;
+ for (my $i = 0; $i < 16; $i++) {
+ push(@rat, $rat_map{1<<$i} || 'unknown') if ($rat & 1<<$i);
+ }
+ return @rat ? join('|', @rat) : 'any';
+}
+
+sub tlv_pref_nets {
+ my $datastr = pack("C*", @{shift()});
+ my $count = unpack("v", $datastr);
+ my $ret = '';
+ for (my $i = 0; $i < $count; $i++) {
+ my ($mcc, $mnc, $rat) = unpack("vvv", substr($datastr, 2 + $i*6, 6));
+ $ret .= sprintf "\n\t%u%02u (%s)", $mcc, $mnc, &decode_rat($rat);
+ }
+ return $ret;
+}
# Note that this is different enough from the band preference bitmap to make sharing difficult...