11require "env"
2+ require 'gpio'
23require "metaprog"
34require "picorubyvm"
45require "sandbox"
56require "crc"
67require "machine"
8+ require 'yaml'
79begin
810 require "filesystem-fat"
911 require "vfs"
1719
1820
1921class Shell
22+
23+ DeviceInstances = { }
24+
25+ def self . get_device ( type , name )
26+ key = "#{ type } _#{ name } " . upcase
27+ DeviceInstances [ key ] ||= case key
28+ when 'GPIO_TRIGGER_NMBLE'
29+ GPIO . new ( ( ENV [ key ] || 22 ) . to_i , GPIO ::IN |GPIO ::PULL_UP )
30+ when 'GPIO_LED_BLE' , 'GPIO_LED_WIFI'
31+ if ENV [ key ] . nil? || ENV [ key ] == 'cyw43_led'
32+ CYW43 ::GPIO . new ( CYW43 ::GPIO ::LED_PIN )
33+ else
34+ GPIO . new ( ENV [ key ] . to_i , GPIO ::OUT )
35+ end
36+ else
37+ raise "Unknown GPIO key: #{ key } "
38+ end
39+ end
40+
2041 def self . setup_root_volume ( device , label : "PicoRuby" )
2142 sleep 1 if device == :sd
2243 return if VFS . volume_index ( "/" )
@@ -89,6 +110,38 @@ def self.setup_system_files(root = nil, force: false)
89110 self . ensure_system_file ( path , Machine . unique_id , nil )
90111 end
91112 Dir . chdir ENV [ 'HOME' ]
113+
114+ config_file = "/etc/config.yml"
115+ # example of `config.yml`:
116+ #
117+ # device:
118+ # gpio:
119+ # trigger_nmble: 22
120+ # led_ble: cyw43_led
121+ # led_wifi: 23
122+ begin
123+ config = YAML . load_file ( config_file )
124+ # @type var config: Hash[String, untyped]
125+ device = config [ 'device' ]
126+ if device &.respond_to? ( :each )
127+ device . each do |type , values |
128+ values &.each do |key , value |
129+ ENV [ "#{ type } _#{ key } " . upcase ] = value . to_s
130+ end
131+ end
132+ end
133+ rescue => e
134+ puts "Failed to load config file: #{ config_file } "
135+ puts " #{ e . message } (#{ e . class } )"
136+ end
137+
138+ begin
139+ require "cyw43"
140+ if CYW43 . respond_to? ( :enable_sta_mode )
141+ ENV [ 'WIFI_MODULE' ] = "cwy43"
142+ end
143+ rescue
144+ end
92145 end
93146
94147 def self . bootstrap ( file )
@@ -178,6 +231,7 @@ def initialize(clean: false)
178231 '|_| |_|\___\___/|_| \_\\___,_|_.__/ \__, |' ,
179232 " #{ AUTHOR_COLOR } by hasumikin#{ LOGO_COLOR } |___/"
180233 ]
234+ SHORT_LOGO_LINES = [ "PicoRuby" , " by" , "hasumikin" ]
181235 elsif RUBY_ENGINE == "mruby"
182236 LOGO_LINES = [
183237 ' __ __ _ ____ _' ,
@@ -187,8 +241,8 @@ def initialize(clean: false)
187241 '|_| |_|_|\___|_| \___/|_| \_\\\\__,_|_.__/ \__, |' ,
188242 " #{ AUTHOR_COLOR } by hasumikin#{ LOGO_COLOR } |___/"
189243 ]
244+ SHORT_LOGO_LINES = [ "MicroRuby" , " by" , "hasumikin" ]
190245 end
191- SHORT_LOGO_LINES = [ "PicoRuby" , " by" , "hasumikin" ]
192246
193247 def show_logo
194248 return nil if ENV [ 'TERM' ] == "dumb"
0 commit comments