document MSP RC OVERRIDE
[inav.wiki.git] / assets / find_sensors.rb
blob775ac22cab7d0e8b9a225c0b46e3f8f1f45a43ad
1 #!/usr/bin/ruby
2 require 'find'
4 # Parse release targets for sensors etc.
5 # (c) Jonathan Hudson
6 # Public domain or equivalent, e.g. [Zero Clause BSD](https://tldrlegal.com/license/bsd-0-clause-license)
9 SENSORS=[:imu, :baro, :mag, :rangefinder]
11 def check_rel fn
12   rel = true
13   File.open(fn) do |fh|
14     fh.each do |l|
15       l.chomp!
16       if  l.match(/SKIP_RELEASES/)
17         rel = false
18         break
19       end
20     end
21   end
22   return rel
23 end
25 def find_sensors fn
26   s={}
27   File.open fn do |fh|
28     fh.each do |l|
29       next unless l.match(/^\s*#define /)
30       SENSORS.each do |ss|
31         sn = ss.to_s.upcase
32         if m = l.match(/USE_#{sn}_(\S+)/)
33           next if m[1].match(/DATA_READY/)
34           s[ss] ||= []
35           s[ss] << m[1]
36         end
37         if m = l.match(/USE_FAKE_#{sn}/)
38           s[ss] ||= []
39           s[ss] << "FAKE"
40         end
41       end
42     end
43   end
44   s
45 end
48 abort "find_sensors.rb dir version" unless ARGV.size == 2
49 Dir.chdir(ARGV[0])
50 puts DATA.read % [ Time.now.strftime("%F"), ARGV[1]]
51 puts
53 puts "| Target |  IMU | Baro | Mag  | Rangefinder |"
54 puts "| ------ | ---- | ---- | ---- | ----------- |"
56 Find.find('.').select { |f| f =~ /target\.h$/ }.each do |fn|
57   next unless fn.match(/src\/main\/target/)
58   target=File.dirname(fn).gsub('./','')
59   STDERR.puts "#{target} #{fn}\n"
60   cfn = "#{target}/CMakeLists.txt"
61   next unless File.exist?(cfn)
62   next unless check_rel(cfn)
63   devs = find_sensors(fn)
64   cols = [target]
65   SENSORS.each do |ss|
66     d = (devs[ss]||[])
67     ds=d.sort.uniq
68     if d.size != ds.size
69       multiple = true
70 #      STDERR.puts "DS #{target} #{d} #{ds}"
71     end
72     cols << ds.join(' ')
73   end
74   textras=[]
75   multiple  = false
76   File.open(cfn) do |f|
77     f.each_with_index do |l,n|
78       if n > 0
79         multiple = true
80         if m=l.match(/target_\S{2,3}32\w+\((\w+)/)
81           textras << m[1]
82         end
83       end
84     end
85   end
86   c0 = cols[0].split('/')[-1]
87   cols[0] = c0
88   if multiple
89     cols[0] = "#{cols[0]} \\*"
90     if textras and !textras.empty?
91       tstr = textras.join(' ')
92       cols[0] = "#{cols[0]} (#{tstr})"
93     end
94   end
95   str = cols.join(" | ")
96   puts "| #{str} |"
97 end
98 puts
100 __END__
101 # Sensor Support
103 The following table was machine generated by [find_sensors.rb](assets/find_sensors.rb) script on %s against INAV %s, E&OE
105 Targets suffixed by \* indicates that there are (probably) multiple hardware variations covered by one or more firmware images (or just a strange target.h). Additional, related targets are listed in parentheses. The user may check the hardware documentation (or `target.h` / `CMakeLists.txt`) to determine the actual supported sensors.