source: rc_os_nios2/atk2-sc1_1.3.2/target/nios2_dev_gcc/com_port.rb@ 128

Last change on this file since 128 was 128, checked in by ertl-honda, 9 years ago

追加.

File size: 5.0 KB
Line 
1#!ruby
2#
3# TOPPERS ATK2
4# Toyohashi Open Platform for Embedded Real-Time Systems
5# Automotive Kernel Version 2
6#
7# Copyright (C) 2011-2015 by Center for Embedded Computing Systems
8# Graduate School of Information Science, Nagoya Univ., JAPAN
9# Copyright (C) 2011-2015 by FUJI SOFT INCORPORATED, JAPAN
10# Copyright (C) 2011-2013 by Spansion LLC, USA
11# Copyright (C) 2011-2015 by NEC Communication Systems, Ltd., JAPAN
12# Copyright (C) 2011-2015 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
13# Copyright (C) 2011-2014 by Renesas Electronics Corporation, JAPAN
14# Copyright (C) 2011-2015 by Sunny Giken Inc., JAPAN
15# Copyright (C) 2011-2015 by TOSHIBA CORPORATION, JAPAN
16# Copyright (C) 2011-2015 by Witz Corporation
17# Copyright (C) 2014-2015 by AISIN COMCRUISE Co., Ltd., JAPAN
18# Copyright (C) 2014-2015 by eSOL Co.,Ltd., JAPAN
19# Copyright (C) 2014-2015 by SCSK Corporation, JAPAN
20#
21# 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
22# ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
23# 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
24# (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
25# 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
26# スコード中に含まれていること.
27# (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
28# 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
29# 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
30# の無保証規定を掲載すること.
31# (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
32# 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
33# と.
34# (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
35# 作権表示,この利用条件および下記の無保証規定を掲載すること.
36# (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
37# 報告すること.
38# (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
39# 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
40# また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
41# 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
42# 免責すること.
43#
44# 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
45# 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
46# はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
47# 用する者に対して,AUTOSARパートナーになることを求めている.
48#
49# 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
50# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
51# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
52# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
53# の責任を負わない.
54#
55# $Id: com_port.rb 1801 2015-03-27 06:34:43Z t_ishikawa $
56#
57
58# 要インストール:$ gem install serialport
59require "rubygems"
60require "serialport"
61
62Thread.abort_on_exception = true
63
64# 引数1: CORE0からのオフセット
65nOffset = 0
66if (ARGV.size() >= 1)
67 nOffset = ARGV[0].to_i()
68end
69
70# 引数2: 終了フラグ
71bTerminate = false
72if (ARGV.size() >= 2)
73 bTerminate = ARGV[1]
74end
75
76
77# ctrl+cによる強制終了設定
78Signal.trap(:SIGINT){
79 system("kill -9 #$$")
80}
81
82
83# ポート判定
84PORT_PREFIX = "/dev/ttyS"
85aPorts = []
86thSearchPort = Thread.new {
87 IO.popen("ls -1 #{PORT_PREFIX}*") do |io|
88 while io.gets()
89 aPorts.push($_.gsub!(PORT_PREFIX, "").gsub!("\n", "").to_i())
90 end
91 end
92}
93thSearchPort.join()
94
95# COMポートが存在しない場合は終了
96if (aPorts.empty?())
97 puts("COM port is not found.")
98 exit(1)
99end
100
101nPreNum = -1
102nTargetPort = -1
103aPorts.sort.reverse.each{|nNumber|
104 if (nPreNum == -1)
105 nPreNum = nNumber
106 # ポートが1つのみだった場合への対応
107 nTargetPort = nNumber
108 else
109 # 大きい方から数えて連番でなくなった数値を対象ポートとする
110 if (!((nPreNum - nNumber) == 1))
111 nTargetPort = nPreNum
112 break
113 else
114 nPreNum = nNumber
115 # 全て連番となっていた場合への対応
116 nTargetPort = nNumber
117 end
118 end
119}
120
121
122# CORE0からのオフセット補正
123nTargetPort += nOffset
124
125
126# USBを挿した直後への対応
127sChk = ""
128thUSB = Thread.new {
129 while true
130 IO.popen("stty -F #{PORT_PREFIX}#{nTargetPort}") do |io|
131 while io.gets()
132 sChk = $_
133 end
134 end
135 if (!sChk.include?("Invalid argument"))
136 break
137 end
138 end
139}
140thUSB.join()
141
142
143cCom = nil
144nBaudrate = 921600
145thMain = Thread.new {
146 puts("\nUsing COM port: #{(nTargetPort+1).to_s()} [#{nBaudrate.to_s()}]")
147
148 cCom = SerialPort.open("/dev/ttyS#{nTargetPort}", nBaudrate, 8, 1, SerialPort::NONE)
149
150 while true
151 sLine = cCom.gets()
152 print(sLine)
153 if (sLine == "Kernel Exit...\n")
154 # CORE0もしくは終了フラグがfalseでない場合のみ終了する
155 if ((nOffset == 0) || (bTerminate != false))
156 break
157 end
158 end
159 end
160
161 cCom.close()
162}
163
164
165# COMポート接続中もctrl+cで強制終了するためのダミースレッド
166thDummy = Thread.new {
167 while true
168 sleep(1)
169 end
170}
171
172# 3時間でタイムアウト
173# (シリアル受信が停止した場合への対処)
174result = thMain.join(10800)
175if (result.nil?())
176 puts("[com_port.rb] timeout!!")
177 cCom.close()
178end
179
Note: See TracBrowser for help on using the repository browser.