source: rc_autosar_rh850/trunk/swc-application/common/swcs/CddBodyControl.c@ 122

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

ID属性の付加.

  • Property svn:keywords set to Id
File size: 5.6 KB
Line 
1/*
2 * Copyright (C) 2014-2015 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: CddBodyControl.c 122 2015-07-17 01:31:28Z ertl-honda $
41 */
42
43/*
44 * CDD SW-C CddBodyControl用の記述
45 */
46
47#include "Rte_CddBodyControl.h"
48#include "ModelCarControl.h"
49#include "t_syslog.h"
50
51/*
52 * CDD SW-C CddBodyControl用の初期化
53 */
54void
55CddBodyControlInit(void)
56{
57 tInitBody();
58}
59
60/*
61 * LampControlランナブル
62 */
63void
64LampControl(void)
65{
66 Std_ReturnType ercd;
67 IDT_Lamp headlamp;
68 IDT_Lamp foglamp;
69 IDT_Lamp brakelamp;
70 IDT_Lamp backlamp;
71
72 /* LampIn状態取得 */
73 ercd = Rte_Read_LampIn_headlamp(&headlamp);
74 ercd += Rte_Read_LampIn_foglamp(&foglamp);
75 ercd += Rte_Read_LampIn_brakelamp(&brakelamp);
76 ercd += Rte_Read_LampIn_backlamp(&backlamp);
77
78 /* 1つでも取得に失敗したら後続の処理は実行しない */
79 if (ercd != RTE_E_OK) {
80 syslog(LOG_INFO, "## Error: Rte_Read_LampIn()");
81 }
82 else {
83 HEAD_LAMP_SET(headlamp);
84 FOG_LAMP_SET(foglamp);
85 BRAKE_LAMP_SET(brakelamp);
86 BACK_LAMP_SET(backlamp);
87 }
88}
89
90/*
91 * ウィンカーの点滅周期用カウンタの初期値
92 */
93#define CNT_BLINK_INIT (WINKER_INTERVAL_MS/BODY_CYCLE_MS)
94
95/*
96 * WinkerControlランナブル
97 */
98void
99WinkerControl(void)
100{
101 Std_ReturnType ercd;
102 IDT_Winker winker;
103 static IDT_Winker pre_winker = 0U;
104 static boolean pre_winker_lr = FALSE;
105 static boolean pre_winker_l = FALSE;
106 static boolean pre_winker_r = FALSE;
107 static uint8 cnt_blink = 0U;
108
109 /* Winkerデータ取得 */
110 ercd = Rte_Read_WinkerIn_state(&winker);
111 if (ercd != RTE_E_OK) {
112 syslog(LOG_INFO, "## Error: Rte_Read_WinkerIn_state()");
113 return;
114 }
115
116 /* 指示に変化があったタイミングから点滅周期を開始する */
117 if (winker != pre_winker) {
118 cnt_blink = 0U;
119 }
120
121 if (cnt_blink == 0U) {
122 switch (winker) {
123 case WINKER_OFF: /* 消灯 */
124 WINKER_L_SET(FALSE);
125 WINKER_R_SET(FALSE);
126 break;
127 case WINKER_L_ON: /* 左のみ点灯 */
128 WINKER_L_SET(TRUE);
129 break;
130 case WINKER_R_ON: /* 右のみ点灯 */
131 WINKER_R_SET(TRUE);
132 break;
133 case WINKER_LR_ON: /* 左右点灯 */
134 WINKER_L_SET(TRUE);
135 WINKER_R_SET(TRUE);
136 break;
137 case WINKER_L_BLINK: /* 左のみ点滅 */
138 if (pre_winker_l == FALSE) {
139 WINKER_L_SET(TRUE);
140 pre_winker_l = TRUE;
141 }
142 else {
143 WINKER_L_SET(FALSE);
144 pre_winker_l = FALSE;
145 }
146 break;
147 case WINKER_R_BLINK: /* 右のみ点滅 */
148 if (pre_winker_r == FALSE) {
149 WINKER_R_SET(TRUE);
150 pre_winker_r = TRUE;
151 }
152 else {
153 WINKER_R_SET(FALSE);
154 pre_winker_r = FALSE;
155 }
156 break;
157 case WINKER_LR_BLINK: /* 左右点滅 */
158 if (pre_winker_lr == FALSE) {
159 WINKER_L_SET(TRUE);
160 WINKER_R_SET(TRUE);
161 pre_winker_lr = TRUE;
162 }
163 else {
164 WINKER_L_SET(FALSE);
165 WINKER_R_SET(FALSE);
166 pre_winker_lr = FALSE;
167 }
168 break;
169 default:
170 break;
171 }
172 cnt_blink = CNT_BLINK_INIT;
173 }
174
175 cnt_blink--;
176
177 pre_winker = winker;
178}
179
180/*
181 * BuzzerControlランナブル
182 */
183void
184BuzzerControl(void)
185{
186 Std_ReturnType ercd;
187 IDT_Buzzer buzzer;
188 static boolean buzzer_toggle = FALSE;
189 static uint16 buzzer_cycle = 0U;
190 boolean buzzer_on = FALSE;
191
192 /* Buzzerデータ取得 */
193 ercd = Rte_Read_BuzzerIn_state(&buzzer);
194
195 if (ercd != RTE_E_OK) {
196 syslog(LOG_INFO, "## Error: Rte_Read_BuzzerIn_state()");
197 return;
198 }
199
200 switch (buzzer) {
201 case BUZZER_OFF:
202 /* 消音 */
203 break;
204 case BUZZER_ON:
205 /* 常時発音 */
206 buzzer_on = TRUE;
207 break;
208 case BUZZER_INTERVAL_ON:
209 /* 一定間隔で発音 */
210 buzzer_cycle++;
211 if (buzzer_cycle < ((BUZZER_INTERVAL_MS * 1000)/BUZZER_CYCLE_NS)) {
212 buzzer_on = TRUE;
213 }
214 if (buzzer_cycle == ((BUZZER_INTERVAL_MS * 1000)/BUZZER_CYCLE_NS)*2) {
215 buzzer_cycle = 0U;
216 }
217 break;
218 default:
219 break;
220 }
221
222 if (buzzer_on == TRUE) {
223 tSetBuzzer(buzzer_toggle);
224 buzzer_toggle = (buzzer_toggle == TRUE) ? FALSE : TRUE;
225 } else {
226 tSetBuzzer(FALSE);
227 }
228}
Note: See TracBrowser for help on using the repository browser.