Posted to tcl by crshults at Thu May 28 21:21:51 GMT 2015view pretty

set new_string {
    0 "old scheme"
    1 "new scheme"
}

set memsize_string {
    0 256M
    1 512M
    2 1G
}

set manufacturer_string {
    0 SONY
    1 EGOMAN
    2 EMBEST
}

set processor_string {
    0 2835
    1 2836
}

set type_string {
    0 MODELA
    1 MODELB
    2 MODELA+
    3 MODELB+
    4 "Pi2 MODELB"
    5 ALPHA
    6 CM
}

set rev_string {
    0 REV0
    1 REV1
    2 REV2
}

proc get_string_value {string_dict index} {
    if {[dict exists $string_dict $index]} {
        return [dict get $string_dict $index]
    } else {
        return unknown
    }
}

proc get_bit_field {input offset width} {
    return [expr {($input >> $offset) & ((1<<$width)-1)}]
}

proc print_pi_info {input} {
    set new          [get_bit_field $input 23 1]
    set memsize      [get_bit_field $input 20 3]
    set manufacturer [get_bit_field $input 16 4]
    set processor    [get_bit_field $input 12 4]
    set type         [get_bit_field $input 04 8]
    set rev          [get_bit_field $input 00 4]

    puts "new:          [::get_string_value $::new_string          $new]"
    puts "memsize:      [::get_string_value $::memsize_string      $memsize]"
    puts "manufacturer: [::get_string_value $::manufacturer_string $manufacturer]"
    puts "processor:    [::get_string_value $::processor_string    $processor]"
    puts "type:         [::get_string_value $::type_string         $type]"
    puts "rev:          [::get_string_value $::rev_string          $rev]"
}

set example1 0xa01040
set example2 0xa0003f

print_pi_info $example1
print_pi_info $example2