source: rc_autosar_rh850/trunk/swc-application/common/swcs/CddDisplayState.c@ 112

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

最初のリリースファイルの追加

File size: 6.2 KB
Line 
1/*
2 * Copyright (C) 2013-2014 by Embedded and Real-Time Systems Laboratory
3 * Graduate School of Information Science, Nagoya Univ., JAPAN
4 * Copyright (C) 2014-2015 by FUJI SOFT INCORPORATED, JAPAN
5 *
6 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
7 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
8 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
9 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
10 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
11 * スコード中に含まれていること.
12 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
13 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
14 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
15 * の無保証規定を掲載すること.
16 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
17 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
18 * と.
19 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
20 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
21 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
22 * 報告すること.
23 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
24 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
25 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
26 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
27 * 免責すること.
28 *
29 * 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
30 * 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
31 * はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
32 * 用する者に対して,AUTOSARパートナーになることを求めている.
33 *
34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
38 * の責任を負わない.
39 *
40 * $Id: CddDisplayState.c 454 2014-12-10 02:40:33Z shigihara $
41 */
42#include "Rte_CddDisplayState.h"
43#include "ModelCarControl.h"
44#include "t_syslog.h"
45
46/* 取得した表示情報 */
47static IDT_Angle cur_angle = 0;
48static IDT_Speed cur_speed = 0;
49static IDT_PWM cur_pwm_angle = 0;
50static IDT_PWM cur_pwm_speed = 0;
51
52/* 差分有無情報 */
53static boolean changed_angle = FALSE;
54static boolean changed_speed = FALSE;
55static boolean changed_pwm_angle = FALSE;
56static boolean changed_pwm_speed = FALSE;
57
58/* 取得した表示状態 */
59static IDT_Switch display_angle = FALSE;
60static IDT_Switch display_speed = FALSE;
61static IDT_PWM display_pwm_angle = FALSE;
62static IDT_PWM display_pwm_speed = FALSE;
63
64/* 全情報更新処理 */
65void
66update_info(void)
67{
68 Std_ReturnType ercd;
69 IDT_Angle angle;
70 IDT_Speed speed;
71 IDT_PWM pwm_angle;
72 IDT_PWM pwm_speed;
73
74 /* 表示情報更新 */
75 ercd = Rte_Read_VehicleInfoIn_angle(&angle);
76 ercd += Rte_Read_VehicleInfoIn_speed(&speed);
77 ercd += Rte_Read_VehicleInfoIn_pwm_angle(&pwm_angle);
78 ercd += Rte_Read_VehicleInfoIn_pwm_speed(&pwm_speed);
79
80 if (ercd != RTE_E_OK) {
81 syslog(LOG_INFO, "## Error: Rte_Read_VehicleInfoIn()");
82 return;
83 }
84
85 /* 前回取得値との差分を確認しながら情報を更新する */
86 if (cur_angle != angle) {
87 cur_angle = angle;
88 changed_angle = TRUE;
89 }
90 if (cur_speed != speed) {
91 cur_speed = speed;
92 changed_speed = TRUE;
93 }
94 if (cur_pwm_angle != pwm_angle) {
95 cur_pwm_angle = pwm_angle;
96 changed_pwm_angle = TRUE;
97 }
98 if (cur_pwm_speed != pwm_speed) {
99 cur_pwm_speed = pwm_speed;
100 changed_pwm_speed = TRUE;
101 }
102}
103
104/* 情報表示処理 */
105void
106display_info(IDT_Switch forced)
107{
108 uint8 str[64];
109 Std_ReturnType ercd;
110
111 /* 表示状態更新 */
112 ercd = Rte_Read_DisplayModeIn_angle(&display_angle);
113 ercd += Rte_Read_DisplayModeIn_speed(&display_speed);
114 ercd += Rte_Read_DisplayModeIn_pwm_angle(&display_pwm_angle);
115 ercd += Rte_Read_DisplayModeIn_pwm_speed(&display_pwm_speed);
116 if (ercd != RTE_E_OK) {
117 syslog(LOG_INFO, "## Error: Rte_Read_DisplayModeIn()");
118 return;
119 }
120
121 /* デリミタ */
122 tSendSBDBTUart("===============================\r\n");
123
124 /* 操舵角 */
125 if ((display_angle == TRUE) &&
126 ((forced == TRUE) || (changed_angle == TRUE))) {
127 sprintf(str, "SteeringAngle: %d\r\n", cur_angle);
128 tSendSBDBTUart(str);
129 }
130
131 /* 駆動速度 */
132 if ((display_speed == TRUE) &&
133 ((forced == TRUE) || (changed_speed == TRUE))) {
134 sprintf(str, "DrivingSpeed: %d\r\n", cur_speed);
135 tSendSBDBTUart(str);
136 }
137
138 /* 操舵角PWM */
139 if ((display_pwm_angle == TRUE) &&
140 ((forced == TRUE) || (changed_pwm_angle == TRUE))) {
141 sprintf(str, "ServoPwmAngle: %d\r\n", cur_pwm_angle);
142 tSendSBDBTUart(str);
143 }
144
145 /* 駆動速度PWM */
146 if ((display_pwm_speed == TRUE) &&
147 ((forced == TRUE) || (changed_pwm_speed == TRUE))) {
148 sprintf(str, "EscPwmSpeed: %d\r\n", cur_pwm_speed);
149 tSendSBDBTUart(str);
150 }
151}
152
153void
154DisplayState(void)
155{
156 Std_ReturnType ercd;
157 IDT_Cycle cycle = 0U;
158 IDT_Switch differ;
159 static uint8 cnt = 0U;
160 static uint8 max = 0U;
161 static IDT_Cycle pre_cycle = 0U;
162 static boolean one_shot = FALSE;
163
164 /* 表示周期読み込み */
165 ercd = Rte_Read_DisplayModeIn_cycle(&cycle);
166 if (ercd != RTE_E_OK) {
167 syslog(LOG_INFO, "## Error: Rte_Read_DisplayModeIn_cycle()");
168 }
169
170 /* 表示しない */
171 if (cycle == 0U) {
172 /* ワンショット済みフラグOFF */
173 one_shot = FALSE;
174 }
175 /* ワンショット */
176 else if (cycle == 1U) {
177 /* 情報を更新して強制的に1回だけ表示 */
178 if (one_shot == FALSE) {
179 update_info();
180 display_info(TRUE);
181 /* 他の表示周期に切り替わるまで表示しない */
182 one_shot = TRUE;
183 }
184 }
185 else if (((cycle % 100U) == 0U) && (cycle <= 10000U)) {
186 /* 前回から表示周期が変わっている場合カウンタ,最大値をリセット */
187 if (cycle != pre_cycle) {
188 cnt = 0U;
189 max = cycle / 100U;
190 }
191
192 /* 周期に合わせて状態表示 */
193 cnt++;
194 if (max < cnt) {
195 ercd = Rte_Read_DisplayModeIn_differ(&differ);
196 if (ercd != RTE_E_OK) {
197 syslog(LOG_INFO, "## Error: Rte_Read_DisplayModeIn_cycle()");
198 }
199 else {
200 update_info();
201 if (differ == TRUE) {
202 display_info(FALSE);
203 }
204 else {
205 display_info(TRUE);
206 }
207 }
208 cnt = 0U;
209 }
210
211 /* 前回値更新 */
212 pre_cycle = cycle;
213
214 /* ワンショット済みフラグOFF */
215 one_shot = FALSE;
216 }
217 else {
218 syslog(LOG_INFO, "## Error: Invalid cycle value: %d", cycle);
219 }
220}
Note: See TracBrowser for help on using the repository browser.