add example to use the motoserial cape with osmocom

This commit is contained in:
King Kévin 2014-04-21 15:18:09 -07:00
parent 785ad8b622
commit a7f9f6e968
1 changed files with 84 additions and 0 deletions

84
software/motoserial.rb Executable file
View 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"