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

  1. set new_string {
  2. 0 "old scheme"
  3. 1 "new scheme"
  4. }
  5.  
  6. set memsize_string {
  7. 0 256M
  8. 1 512M
  9. 2 1G
  10. }
  11.  
  12. set manufacturer_string {
  13. 0 SONY
  14. 1 EGOMAN
  15. 2 EMBEST
  16. }
  17.  
  18. set processor_string {
  19. 0 2835
  20. 1 2836
  21. }
  22.  
  23. set type_string {
  24. 0 MODELA
  25. 1 MODELB
  26. 2 MODELA+
  27. 3 MODELB+
  28. 4 "Pi2 MODELB"
  29. 5 ALPHA
  30. 6 CM
  31. }
  32.  
  33. set rev_string {
  34. 0 REV0
  35. 1 REV1
  36. 2 REV2
  37. }
  38.  
  39. proc get_string_value {string_dict index} {
  40. if {[dict exists $string_dict $index]} {
  41. return [dict get $string_dict $index]
  42. } else {
  43. return unknown
  44. }
  45. }
  46.  
  47. proc get_bit_field {input offset width} {
  48. return [expr {($input >> $offset) & ((1<<$width)-1)}]
  49. }
  50.  
  51. proc print_pi_info {input} {
  52. set new [get_bit_field $input 23 1]
  53. set memsize [get_bit_field $input 20 3]
  54. set manufacturer [get_bit_field $input 16 4]
  55. set processor [get_bit_field $input 12 4]
  56. set type [get_bit_field $input 04 8]
  57. set rev [get_bit_field $input 00 4]
  58.  
  59. puts "new: [::get_string_value $::new_string $new]"
  60. puts "memsize: [::get_string_value $::memsize_string $memsize]"
  61. puts "manufacturer: [::get_string_value $::manufacturer_string $manufacturer]"
  62. puts "processor: [::get_string_value $::processor_string $processor]"
  63. puts "type: [::get_string_value $::type_string $type]"
  64. puts "rev: [::get_string_value $::rev_string $rev]"
  65. }
  66.  
  67. set example1 0xa01040
  68. set example2 0xa0003f
  69.  
  70. print_pi_info $example1
  71. print_pi_info $example2
  72.