source: rc_autosar_rh850/trunk/os-application/OperationManager.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 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2014-2015 by Center for Embedded Computing Systems
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
7 * Copyright (C) 2014-2015 by FUJI SOFT INCORPORATED, JAPAN
8 *
9 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
10 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
11 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
12 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
13 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
14 * スコード中に含まれていること.
15 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
16 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
17 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
18 * の無保証規定を掲載すること.
19 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
20 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
21 * と.
22 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
23 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
24 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
25 * 報告すること.
26 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
27 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
28 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
29 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
30 * 免責すること.
31 *
32 * 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
33 * 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
34 * はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
35 * 用する者に対して,AUTOSARパートナーになることを求めている.
36 *
37 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
38 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
39 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
40 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
41 * の責任を負わない.
42 *
43 * $Id: OperationManager.c 122 2015-07-17 01:31:28Z ertl-honda $
44 */
45
46/*
47 * 操作系関連
48 */
49
50#include "Os.h"
51#include "ModelCarControl.h"
52#include "t_syslog.h"
53#include "rcb3.h"
54
55/*
56 * 操作系用の初期化
57 */
58void
59OperationInit(void)
60{
61 tInitSBDBTUart();
62 rcb3_Init();
63}
64
65/*
66 * RCB3コマンドから制御系への指示に変換して送る
67 */
68void
69OperationControl(void)
70{
71 uint16 rcb3_bstate;
72 sint8 angle;
73 sint8 speed;
74 sint8 steern;
75 sint8 gain;
76 boolean brake = FALSE;
77 boolean headlamp = FALSE;
78 boolean foglamp = FALSE;
79 boolean winker_l = FALSE;
80 boolean winker_r = FALSE;
81 boolean hazard = FALSE;
82
83 /* ボタン状態を生成 */
84 rcb3_bstate = (g_rcb3_rmsg[RCB3_MSG_OFFSET_BUTTON_H] << 8U)
85 | (g_rcb3_rmsg[RCB3_MSG_OFFSET_BUTTON_L]);
86
87 /* 各ON/OFF切り替え情報 */
88 if ((rcb3_bstate & RCB3_MSG_BUTTON_NOUGHT) != 0U) {
89 headlamp = TRUE;
90 }
91 if ((rcb3_bstate & RCB3_MSG_BUTTON_SQUARE) != 0U) {
92 foglamp = TRUE;
93 }
94 if ((rcb3_bstate & RCB3_MSG_BUTTON_TRIANGLE) != 0U) {
95 hazard = TRUE;
96 }
97 if ((rcb3_bstate & RCB3_MSG_BUTTON_R1) != 0U) {
98 winker_r = TRUE;
99 }
100 if ((rcb3_bstate & RCB3_MSG_BUTTON_L1) != 0U) {
101 winker_l = TRUE;
102 }
103
104 /* 操舵角(-63〜64に調整) */
105 angle = (-1) * (g_rcb3_rmsg[RCB3_MSG_OFFSET_L_ANALOG_LR] - 64);
106
107 /* 車速(-63〜64に調整) */
108 speed = (-1) * (g_rcb3_rmsg[RCB3_MSG_OFFSET_R_ANALOG_UD] - 64);
109
110 /* ステアリングニュートラル調整 */
111 if ((rcb3_bstate & RCB3_MSG_BUTTON_UP) != 0U) {
112 steern = CONTCMD_STEERN_I; /* ステアリングニュートラルを初期値に */
113 }
114 else if ((rcb3_bstate & RCB3_MSG_BUTTON_RIGHT) != 0U) {
115 steern = CONTCMD_STEERN_R; /* ステアリングのニュートラルを右に調整 */
116 }
117 else if ((rcb3_bstate & RCB3_MSG_BUTTON_LEFT) != 0U) {
118 steern = CONTCMD_STEERN_L; /* ステアリングのニュートラルを左に調整 */
119 }
120 else {
121 steern = 0U; /* 要求なし */
122 }
123
124 /* 車速ゲイン調整 */
125 if ((rcb3_bstate & RCB3_MSG_BUTTON_DOWN) != 0U) {
126 gain = CONTCMD_GAIN_I; /* モータゲインを初期値にする */
127 }
128 else if ((rcb3_bstate & RCB3_MSG_BUTTON_R2) != 0U) {
129 gain = CONTCMD_GAIN_U; /* モータゲインを1段階上げる */
130 }
131 else if ((rcb3_bstate & RCB3_MSG_BUTTON_L2) != 0U) {
132 gain = CONTCMD_GAIN_D; /* モータゲインを1段階下げる */
133 }
134 else {
135 gain = 0U; /* 要求なし */
136 }
137
138 /* ブレーキ */
139 if ((rcb3_bstate & RCB3_MSG_BUTTON_CROSS) != 0U) {
140 brake = TRUE;
141 }
142
143 /* g_contcmd の更新 */
144 g_contcmd.angle = angle;
145 g_contcmd.speed = speed;
146 g_contcmd.gain = gain;
147 g_contcmd.steern = steern;
148 g_contcmd.brake = brake;
149 g_contcmd.headlamp = headlamp;
150 g_contcmd.foglamp = foglamp;
151 g_contcmd.hazard = hazard;
152 g_contcmd.winker_l = winker_l;
153 g_contcmd.winker_r = winker_r;
154
155 /* 制御系へ更新があったことを通知 */
156 UpDateContCmd = TRUE;
157
158 /* 制御系が別ECUで実行されているの場合はCANで送信 */
159 if (!IsControlerOnECU) {
160 SendContCmdCanMag();
161 }
162}
163
164/*
165 * 操作マネージャタスク
166 */
167TASK(OperationManagerTask)
168{
169 unsigned char c;
170 static boolean executed = FALSE;
171
172 /* 初回起動時のみ実行 */
173 if (executed == FALSE) {
174 syslog(LOG_INFO, "OperationManagerTask : Start!");
175 executed = TRUE;
176 }
177
178 while(tReceiveSBDBTUart(&c, 1)) {
179 if (rcb3_AddReceivedByte(c)) {
180 /* RCB3コマンドから制御系コマンドへ変換して送信 */
181 OperationControl();
182 }
183 }
184
185 TerminateTask();
186}
187
188/*
189 * rcb3_AddReceivedByteからのエラーコールバック
190 */
191void
192rcb3_ErrorCb(uint8 sum, uint8 recv_sum, uint8 *p_rcb3_rmsg)
193{
194 uint32 i;
195
196 syslog(LOG_INFO, "## RCB3 Sum Error: 0x%x != 0x%x", sum, recv_sum);
197 for (i = 0; i < RCB3_MSG_LEN; i++) {
198 syslog(LOG_INFO, "## rcb3_rmsg[%d]: 0x%x", i, p_rcb3_rmsg[i]);
199 }
200}
201
Note: See TracBrowser for help on using the repository browser.