source: asp3_tinet_ecnl_arm/trunk/ntshell/src/mbedcall.c@ 400

Last change on this file since 400 was 400, checked in by coas-nagasima, 5 years ago

ファイルヘッダーの更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 9.2 KB
Line 
1/*
2 * TOPPERS PROJECT Home Network Working Group Software
3 *
4 * Copyright (C) 2017-2019 Cores Co., Ltd. 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 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
31 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
32 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
33 * の責任を負わない.
34 *
35 * @(#) $Id$
36 */
37#include "shellif.h"
38#include <stdarg.h>
39#include "analogin_api.h"
40#include "gpio_api.h"
41#include "i2c_api.h"
42#include "pwmout_api.h"
43//#include "rtc_api.h"
44#include "serial_api.h"
45#include "us_ticker_api.h"
46#include "mbed_wait_api.h"
47#include "../../mbed_api/src/mbedcall.h"
48
49static inline long __exp_analogin_init(struct regs_t *r)
50{
51 analogin_init((analogin_t *)r->a, (PinName)r->b);
52 return 0;
53}
54
55static inline long __exp_analogin_read_u16(struct regs_t *r)
56{
57 return (long)analogin_read_u16((analogin_t *)r->a);
58}
59
60static inline long __exp_gpio_init(struct regs_t *r)
61{
62 gpio_init((gpio_t *)r->a, (PinName)r->b);
63 return 0;
64}
65
66static inline long __exp_gpio_mode(struct regs_t *r)
67{
68 gpio_mode((gpio_t *)r->a, (PinMode)r->b);
69 return 0;
70}
71
72static inline long __exp_gpio_dir(struct regs_t *r)
73{
74 gpio_dir((gpio_t *)r->a, (PinDirection)r->b);
75 return 0;
76}
77
78static inline long __exp_gpio_write(struct regs_t *r)
79{
80 gpio_write((gpio_t *)r->a, (int)r->b);
81 return 0;
82}
83
84static inline long __exp_gpio_read(struct regs_t *r)
85{
86 return (long)gpio_read((gpio_t *)r->a);
87}
88
89static inline long __exp_i2c_start(struct regs_t *r)
90{
91 return (long)i2c_start((i2c_t *)r->a);
92}
93
94static inline long __exp_i2c_stop(struct regs_t *r)
95{
96 return (long)i2c_stop((i2c_t *)r->a);
97}
98
99static inline long __exp_i2c_init(struct regs_t *r)
100{
101 i2c_init((i2c_t *)r->a, (PinName)r->b, (PinName)r->c);
102 return 0;
103}
104
105static inline long __exp_i2c_read(struct regs_t *r)
106{
107 return (long)i2c_read((i2c_t *)r->a, (int)r->b, (char *)r->c, (int)r->d, (int)r->e);
108}
109
110static inline long __exp_i2c_write(struct regs_t *r)
111{
112 return (long)i2c_write((i2c_t *)r->a, (int)r->b, (const char *)r->c, (int)r->d, (int)r->e);
113}
114
115static inline long __exp_i2c_byte_read(struct regs_t *r)
116{
117 return (long)i2c_byte_read((i2c_t *)r->a, (int)r->b);
118}
119
120static inline long __exp_i2c_byte_write(struct regs_t *r)
121{
122 return (long)i2c_byte_write((i2c_t *)r->a, (int)r->b);
123}
124
125static inline long __exp_pin_function(struct regs_t *r)
126{
127 return (long)pin_function((PinName)r->a, (int)r->b);
128}
129
130static inline long __exp_pin_mode(struct regs_t *r)
131{
132 return (long)pin_mode((PinName)r->a, (PinMode)r->b);
133}
134
135static inline long __exp_pwmout_free(struct regs_t *r)
136{
137 pwmout_free((pwmout_t *)r->a);
138 return 0;
139}
140
141static inline long __exp_pwmout_init(struct regs_t *r)
142{
143 pwmout_init((pwmout_t *)r->a, (PinName)r->b);
144 return 0;
145}
146
147static inline long __exp_pwmout_pulsewidth_us(struct regs_t *r)
148{
149 pwmout_pulsewidth_us((pwmout_t *)r->a, (int)r->b);
150 return 0;
151}
152
153static inline long __exp_rtc_init(struct regs_t *r)
154{
155 rtc_init();
156 return 0;
157}
158
159static inline long __exp_rtc_free(struct regs_t *r)
160{
161 rtc_free();
162 return 0;
163}
164
165static inline long __exp_rtc_isenabled(struct regs_t *r)
166{
167 return (long)rtc_isenabled();
168}
169
170static inline long __exp_rtc_read(struct regs_t *r)
171{
172 return (long)rtc_read();
173}
174
175static inline long __exp_rtc_write(struct regs_t *r)
176{
177 rtc_write((time_t)r->a);
178 return 0;
179}
180
181static inline long __exp_serial_baud(struct regs_t *r)
182{
183 serial_baud((serial_t *)r->a, (int)r->b);
184 return 0;
185}
186
187static inline long __exp_serial_init(struct regs_t *r)
188{
189 serial_init((serial_t *)r->a, (PinName)r->b, (PinName)r->c);
190 return 0;
191}
192
193static inline long __exp_serial_readable(struct regs_t *r)
194{
195 return (long)serial_readable((serial_t *)r->a);
196}
197
198static inline long __exp_serial_getc(struct regs_t *r)
199{
200 return (long)serial_getc((serial_t *)r->a);
201}
202
203static inline long __exp_serial_putc(struct regs_t *r)
204{
205 serial_putc((serial_t *)r->a, (int)r->b);
206 return 0;
207}
208
209static inline long __exp_us_ticker_init(struct regs_t *r)
210{
211 us_ticker_init();
212 return 0;
213}
214
215static inline long __exp_us_ticker_read(struct regs_t *r)
216{
217 return (long)us_ticker_read();
218}
219
220static inline long __exp_us_ticker_set_interrupt(struct regs_t *r)
221{
222 us_ticker_set_interrupt((timestamp_t)r->a);
223 return 0;
224}
225
226static inline long __exp_us_ticker_disable_interrupt(struct regs_t *r)
227{
228 us_ticker_disable_interrupt();
229 return 0;
230}
231
232static inline long __exp_us_ticker_clear_interrupt(struct regs_t *r)
233{
234 us_ticker_clear_interrupt();
235 return 0;
236}
237
238static inline long __exp_SD_begin(struct regs_t *r)
239{
240 return (long)SD_begin();
241}
242
243static long __mbedcall(struct regs_t *r)
244{
245 long ret = -ENOSYS;
246
247 shellif_into();
248
249 switch (r->n) {
250 case MBED_analogin_init:
251 ret = __exp_analogin_init(r);
252 break;
253 case MBED_analogin_read_u16:
254 ret = __exp_analogin_read_u16(r);
255 break;
256 case MBED_gpio_init:
257 ret = __exp_gpio_init(r);
258 break;
259 case MBED_gpio_mode:
260 ret = __exp_gpio_mode(r);
261 break;
262 case MBED_gpio_dir:
263 ret = __exp_gpio_dir(r);
264 break;
265 case MBED_gpio_write:
266 ret = __exp_gpio_write(r);
267 break;
268 case MBED_gpio_read:
269 ret = __exp_gpio_read(r);
270 break;
271 case MBED_i2c_start:
272 ret = __exp_i2c_start(r);
273 break;
274 case MBED_i2c_stop:
275 ret = __exp_i2c_stop(r);
276 break;
277 case MBED_i2c_init:
278 ret = __exp_i2c_init(r);
279 break;
280 case MBED_i2c_read:
281 ret = __exp_i2c_read(r);
282 break;
283 case MBED_i2c_write:
284 ret = __exp_i2c_write(r);
285 break;
286 case MBED_i2c_byte_read:
287 ret = __exp_i2c_byte_read(r);
288 break;
289 case MBED_i2c_byte_write:
290 ret = __exp_i2c_byte_write(r);
291 break;
292 case MBED_pin_function:
293 ret = __exp_pin_function(r);
294 break;
295 case MBED_pin_mode:
296 ret = __exp_pin_mode(r);
297 break;
298 case MBED_pwmout_free:
299 ret = __exp_pwmout_free(r);
300 break;
301 case MBED_pwmout_init:
302 ret = __exp_pwmout_init(r);
303 break;
304 case MBED_pwmout_pulsewidth_us:
305 ret = __exp_pwmout_pulsewidth_us(r);
306 break;
307 case MBED_rtc_init:
308 ret = __exp_rtc_init(r);
309 break;
310 case MBED_rtc_free:
311 ret = __exp_rtc_free(r);
312 break;
313 case MBED_rtc_isenabled:
314 ret = __exp_rtc_isenabled(r);
315 break;
316 case MBED_rtc_read:
317 ret = __exp_rtc_read(r);
318 break;
319 case MBED_rtc_write:
320 ret = __exp_rtc_write(r);
321 break;
322 case MBED_serial_baud:
323 ret = __exp_serial_baud(r);
324 break;
325 case MBED_serial_init:
326 ret = __exp_serial_init(r);
327 break;
328 case MBED_serial_readable:
329 ret = __exp_serial_readable(r);
330 break;
331 case MBED_serial_getc:
332 ret = __exp_serial_getc(r);
333 break;
334 case MBED_serial_putc:
335 ret = __exp_serial_putc(r);
336 break;
337 case MBED_us_ticker_init:
338 ret = __exp_us_ticker_init(r);
339 break;
340 case MBED_us_ticker_read:
341 ret = __exp_us_ticker_read(r);
342 break;
343 case MBED_us_ticker_set_interrupt:
344 ret = __exp_us_ticker_set_interrupt(r);
345 break;
346 case MBED_us_ticker_disable_interrupt:
347 ret = __exp_us_ticker_disable_interrupt(r);
348 break;
349 case MBED_us_ticker_clear_interrupt:
350 ret = __exp_us_ticker_clear_interrupt(r);
351 break;
352 case MBED_SD_begin:
353 ret = __exp_SD_begin(r);
354 break;
355 case MBED___enable_irq:
356 ret = 0;
357 break;
358 case MBED___disable_irq:
359 ret = 0;
360 break;
361 default:
362 asm("bkpt #0");
363 break;
364 }
365
366 shellif_outof();
367
368 return ret;
369}
370
371void __attribute__((naked)) __mbedcall_cp_asm()
372{
373 register long sp asm("sp");
374 asm("push {r0, r1, r2, r3, r4, r5, r7, r12, lr}");
375 __mbedcall((struct regs_t *)sp);
376 asm("add sp, sp, #4");
377 asm("pop {r1, r2, r3, r4, r5, r7, r12, pc}");
378}
379
Note: See TracBrowser for help on using the repository browser.