add example to use the motoserial cape with osmocom
This commit is contained in:
parent
785ad8b622
commit
a7f9f6e968
84
software/motoserial.rb
Executable file
84
software/motoserial.rb
Executable file
@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env ruby
|
||||
# encoding: utf-8
|
||||
# ruby: 1.9.1
|
||||
|
||||
# phones to control
|
||||
phones = []
|
||||
phones << {:port => "/dev/ttyO1", :gpio => 117, :l2 => "/tmp/l2_phone1"}
|
||||
|
||||
|
||||
# to flash the phones
|
||||
OSOMOCON = "/root/osmocom/osmocom-bb/src/host/osmocon/osmocon"
|
||||
FIRMWARE = "/root/osmocom/osmocom-bb/src/target/firmware/board/compal_e88/layer1.compalram.bin"
|
||||
|
||||
# to power the phones
|
||||
GPIO = "/sys/class/gpio/"
|
||||
|
||||
# verify the motoserial cape has been loaded
|
||||
SLOTS = "/sys/devices/bone_capemgr.9/slots"
|
||||
unless IO.read(SLOTS).include? "cape-motoserial" then
|
||||
puts "loading motoserial cape"
|
||||
File.open(SLOTS,"w") do |file|
|
||||
file.puts "cape-motoserial"
|
||||
end
|
||||
end
|
||||
raise "could not load motoserial cape" unless IO.read(SLOTS).include? "cape-motoserial"
|
||||
|
||||
def phone_power(phone,power)
|
||||
File.open(GPIO+"/gpio#{phone[:gpio]}/value","w") do |file|
|
||||
file.puts (power ? "1" : "0")
|
||||
end
|
||||
end
|
||||
|
||||
def reset(phone)
|
||||
puts "restarting phone on #{phone[:port]}"
|
||||
phone_power(phone,false)
|
||||
sleep 3
|
||||
phone_power(phone,true)
|
||||
end
|
||||
|
||||
threads = []
|
||||
Thread.abort_on_exception = true
|
||||
phones.each do |phone|
|
||||
threads << Thread.new do
|
||||
puts "configuring phone on #{phone[:port]}"
|
||||
File.open(GPIO+"/export","w") do |file|
|
||||
file.puts phone[:gpio].to_s
|
||||
end unless File.exist? GPIO+"/gpio#{phone[:gpio]}"
|
||||
File.open(GPIO+"/gpio#{phone[:gpio]}/direction","w") do |file|
|
||||
file.puts "out"
|
||||
end
|
||||
phone_power(phone,false)
|
||||
|
||||
puts "flashing phone on #{phone[:port]}"
|
||||
phone[:osmocon] = IO.popen("#{OSOMOCON} -p #{phone[:port]} -s #{phone[:l2]} -m c123xor #{FIRMWARE} 2>&1")
|
||||
in_buffer = ""
|
||||
reset(phone)
|
||||
while true do
|
||||
activity = IO.select([phone[:osmocon]],[],[],30)
|
||||
if activity and activity[0][0] then
|
||||
in_buffer += activity[0][0].readpartial(1024)
|
||||
lines = in_buffer.split "\n"
|
||||
if in_buffer.end_with? "\n" then
|
||||
in_buffer = ""
|
||||
else
|
||||
in_buffer = lines.pop
|
||||
end
|
||||
lines.each do |line|
|
||||
puts line
|
||||
case line
|
||||
when "Received FTMTOOL from phone, ramloader has aborted"
|
||||
puts "flashing phone on #{phone[:port]} failed"
|
||||
reset(phone)
|
||||
end
|
||||
end
|
||||
else # phone is not reacting
|
||||
puts "no activity on phone #{phone[:port]}"
|
||||
reset(phone)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
threads.each {|thr| thr.join}
|
||||
|
||||
puts "bye bye"
|
Loading…
Reference in New Issue
Block a user