diff options
author | Bjørn Mork <bjorn@mork.no> | 2013-01-16 12:40:31 +0100 |
---|---|---|
committer | Bjørn Mork <bjorn@mork.no> | 2013-01-16 12:40:31 +0100 |
commit | 7d0309068ad318d88bd973aa01f962c81e915428 (patch) | |
tree | fc63a09b74f4bb1741059cf2575a015b090d4001 /scripts | |
parent | 21182ff5c531fa1758dfa951437f69c3a6bcdc36 (diff) |
decode QMI_NAS_GET_PREFERRED_NETWORKS
Signed-off-by: Bjørn Mork <bjorn@mork.no>
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/qmi.pl | 37 |
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... |