source: EcnlProtoTool/trunk/ntshell/src/mbedcall.c@ 331

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

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc
File size: 9.2 KB
Line 
1/*
2 * TOPPERS ECHONET Lite Communication Middleware
3 *
4 * Copyright (C) 2017 Cores Co., Ltd. Japan
5 *
6 * 上記著作権者
7は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
8 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
9 * 変・再é…
10å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
11 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
12 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
13 * スコード中に含まれていること.
14 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
15 * 用できる形で再é…
16å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
17å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
18 * 者
19マニュアルなど)に,上記の著作権表示,この利用条件および下記
20 * の無保証規定を掲載すること.
21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 * 用できない形で再é…
23å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
24 * と.
25 * (a) 再é…
26å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
27マニュアルなど)に,上記の著
28 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
29 * (b) 再é…
30å¸ƒã®å½¢æ…
31‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
32 * 報告すること.
33 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
34 * 害からも,上記著作権者
35およびTOPPERSプロジェクトをå…
36è²¬ã™ã‚‹ã“と.
37 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
38 * 由に基づく請求からも,上記著作権者
39およびTOPPERSプロジェクトを
40 * å…
41è²¬ã™ã‚‹ã“と.
42 *
43 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
44お
45 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
46 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
47 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
48 * の責任を負わない.
49 *
50 * @(#) $Id$
51 */
52#include "shellif.h"
53#include <stdarg.h>
54#include "analogin_api.h"
55#include "gpio_api.h"
56#include "i2c_api.h"
57#include "pwmout_api.h"
58//#include "rtc_api.h"
59#include "serial_api.h"
60#include "us_ticker_api.h"
61#include "wait_api.h"
62#include "../../mbed_api/src/mbedcall.h"
63
64static inline long __exp_analogin_init(struct regs_t *r)
65{
66 analogin_init((analogin_t *)r->a, (PinName)r->b);
67 return 0;
68}
69
70static inline long __exp_analogin_read_u16(struct regs_t *r)
71{
72 return (long)analogin_read_u16((analogin_t *)r->a);
73}
74
75static inline long __exp_gpio_init(struct regs_t *r)
76{
77 gpio_init((gpio_t *)r->a, (PinName)r->b);
78 return 0;
79}
80
81static inline long __exp_gpio_mode(struct regs_t *r)
82{
83 gpio_mode((gpio_t *)r->a, (PinMode)r->b);
84 return 0;
85}
86
87static inline long __exp_gpio_dir(struct regs_t *r)
88{
89 gpio_dir((gpio_t *)r->a, (PinDirection)r->b);
90 return 0;
91}
92
93static inline long __exp_gpio_write(struct regs_t *r)
94{
95 gpio_write((gpio_t *)r->a, (int)r->b);
96 return 0;
97}
98
99static inline long __exp_gpio_read(struct regs_t *r)
100{
101 return (long)gpio_read((gpio_t *)r->a);
102}
103
104static inline long __exp_i2c_start(struct regs_t *r)
105{
106 return (long)i2c_start((i2c_t *)r->a);
107}
108
109static inline long __exp_i2c_stop(struct regs_t *r)
110{
111 return (long)i2c_stop((i2c_t *)r->a);
112}
113
114static inline long __exp_i2c_init(struct regs_t *r)
115{
116 i2c_init((i2c_t *)r->a, (PinName)r->b, (PinName)r->c);
117 return 0;
118}
119
120static inline long __exp_i2c_read(struct regs_t *r)
121{
122 return (long)i2c_read((i2c_t *)r->a, (int)r->b, (char *)r->c, (int)r->d, (int)r->e);
123}
124
125static inline long __exp_i2c_write(struct regs_t *r)
126{
127 return (long)i2c_write((i2c_t *)r->a, (int)r->b, (const char *)r->c, (int)r->d, (int)r->e);
128}
129
130static inline long __exp_i2c_byte_read(struct regs_t *r)
131{
132 return (long)i2c_byte_read((i2c_t *)r->a, (int)r->b);
133}
134
135static inline long __exp_i2c_byte_write(struct regs_t *r)
136{
137 return (long)i2c_byte_write((i2c_t *)r->a, (int)r->b);
138}
139
140static inline long __exp_pin_function(struct regs_t *r)
141{
142 return (long)pin_function((PinName)r->a, (int)r->b);
143}
144
145static inline long __exp_pin_mode(struct regs_t *r)
146{
147 return (long)pin_mode((PinName)r->a, (PinMode)r->b);
148}
149
150static inline long __exp_pwmout_free(struct regs_t *r)
151{
152 pwmout_free((pwmout_t *)r->a);
153 return 0;
154}
155
156static inline long __exp_pwmout_init(struct regs_t *r)
157{
158 pwmout_init((pwmout_t *)r->a, (PinName)r->b);
159 return 0;
160}
161
162static inline long __exp_pwmout_pulsewidth_us(struct regs_t *r)
163{
164 pwmout_pulsewidth_us((pwmout_t *)r->a, (int)r->b);
165 return 0;
166}
167
168static inline long __exp_rtc_init(struct regs_t *r)
169{
170 rtc_init();
171 return 0;
172}
173
174static inline long __exp_rtc_free(struct regs_t *r)
175{
176 rtc_free();
177 return 0;
178}
179
180static inline long __exp_rtc_isenabled(struct regs_t *r)
181{
182 return (long)rtc_isenabled();
183}
184
185static inline long __exp_rtc_read(struct regs_t *r)
186{
187 return (long)rtc_read();
188}
189
190static inline long __exp_rtc_write(struct regs_t *r)
191{
192 rtc_write((time_t)r->a);
193 return 0;
194}
195
196static inline long __exp_serial_baud(struct regs_t *r)
197{
198 serial_baud((serial_t *)r->a, (int)r->b);
199 return 0;
200}
201
202static inline long __exp_serial_init(struct regs_t *r)
203{
204 serial_init((serial_t *)r->a, (PinName)r->b, (PinName)r->c);
205 return 0;
206}
207
208static inline long __exp_serial_readable(struct regs_t *r)
209{
210 return (long)serial_readable((serial_t *)r->a);
211}
212
213static inline long __exp_serial_getc(struct regs_t *r)
214{
215 return (long)serial_getc((serial_t *)r->a);
216}
217
218static inline long __exp_serial_putc(struct regs_t *r)
219{
220 serial_putc((serial_t *)r->a, (int)r->b);
221 return 0;
222}
223
224static inline long __exp_us_ticker_init(struct regs_t *r)
225{
226 us_ticker_init();
227 return 0;
228}
229
230static inline long __exp_us_ticker_read(struct regs_t *r)
231{
232 return (long)us_ticker_read();
233}
234
235static inline long __exp_us_ticker_set_interrupt(struct regs_t *r)
236{
237 us_ticker_set_interrupt((timestamp_t)r->a);
238 return 0;
239}
240
241static inline long __exp_us_ticker_disable_interrupt(struct regs_t *r)
242{
243 us_ticker_disable_interrupt();
244 return 0;
245}
246
247static inline long __exp_us_ticker_clear_interrupt(struct regs_t *r)
248{
249 us_ticker_clear_interrupt();
250 return 0;
251}
252
253static inline long __exp_SD_begin(struct regs_t *r)
254{
255 return (long)SD_begin();
256}
257
258static long __mbedcall(struct regs_t *r)
259{
260 long ret = -ENOSYS;
261
262 shellif_into();
263
264 switch (r->n) {
265 case MBED_analogin_init:
266 ret = __exp_analogin_init(r);
267 break;
268 case MBED_analogin_read_u16:
269 ret = __exp_analogin_read_u16(r);
270 break;
271 case MBED_gpio_init:
272 ret = __exp_gpio_init(r);
273 break;
274 case MBED_gpio_mode:
275 ret = __exp_gpio_mode(r);
276 break;
277 case MBED_gpio_dir:
278 ret = __exp_gpio_dir(r);
279 break;
280 case MBED_gpio_write:
281 ret = __exp_gpio_write(r);
282 break;
283 case MBED_gpio_read:
284 ret = __exp_gpio_read(r);
285 break;
286 case MBED_i2c_start:
287 ret = __exp_i2c_start(r);
288 break;
289 case MBED_i2c_stop:
290 ret = __exp_i2c_stop(r);
291 break;
292 case MBED_i2c_init:
293 ret = __exp_i2c_init(r);
294 break;
295 case MBED_i2c_read:
296 ret = __exp_i2c_read(r);
297 break;
298 case MBED_i2c_write:
299 ret = __exp_i2c_write(r);
300 break;
301 case MBED_i2c_byte_read:
302 ret = __exp_i2c_byte_read(r);
303 break;
304 case MBED_i2c_byte_write:
305 ret = __exp_i2c_byte_write(r);
306 break;
307 case MBED_pin_function:
308 ret = __exp_pin_function(r);
309 break;
310 case MBED_pin_mode:
311 ret = __exp_pin_mode(r);
312 break;
313 case MBED_pwmout_free:
314 ret = __exp_pwmout_free(r);
315 break;
316 case MBED_pwmout_init:
317 ret = __exp_pwmout_init(r);
318 break;
319 case MBED_pwmout_pulsewidth_us:
320 ret = __exp_pwmout_pulsewidth_us(r);
321 break;
322 case MBED_rtc_init:
323 ret = __exp_rtc_init(r);
324 break;
325 case MBED_rtc_free:
326 ret = __exp_rtc_free(r);
327 break;
328 case MBED_rtc_isenabled:
329 ret = __exp_rtc_isenabled(r);
330 break;
331 case MBED_rtc_read:
332 ret = __exp_rtc_read(r);
333 break;
334 case MBED_rtc_write:
335 ret = __exp_rtc_write(r);
336 break;
337 case MBED_serial_baud:
338 ret = __exp_serial_baud(r);
339 break;
340 case MBED_serial_init:
341 ret = __exp_serial_init(r);
342 break;
343 case MBED_serial_readable:
344 ret = __exp_serial_readable(r);
345 break;
346 case MBED_serial_getc:
347 ret = __exp_serial_getc(r);
348 break;
349 case MBED_serial_putc:
350 ret = __exp_serial_putc(r);
351 break;
352 case MBED_us_ticker_init:
353 ret = __exp_us_ticker_init(r);
354 break;
355 case MBED_us_ticker_read:
356 ret = __exp_us_ticker_read(r);
357 break;
358 case MBED_us_ticker_set_interrupt:
359 ret = __exp_us_ticker_set_interrupt(r);
360 break;
361 case MBED_us_ticker_disable_interrupt:
362 ret = __exp_us_ticker_disable_interrupt(r);
363 break;
364 case MBED_us_ticker_clear_interrupt:
365 ret = __exp_us_ticker_clear_interrupt(r);
366 break;
367 case MBED_SD_begin:
368 ret = __exp_SD_begin(r);
369 break;
370 case MBED___enable_irq:
371 ret = 0;
372 break;
373 case MBED___disable_irq:
374 ret = 0;
375 break;
376 default:
377 asm("bkpt #0");
378 break;
379 }
380
381 shellif_outof();
382
383 return ret;
384}
385
386void __attribute__((naked)) __mbedcall_cp_asm()
387{
388 register long sp asm("sp");
389 asm("push {r0, r1, r2, r3, r4, r5, r7, r12, lr}");
390 __mbedcall((struct regs_t *)sp);
391 asm("add sp, sp, #4");
392 asm("pop {r1, r2, r3, r4, r5, r7, r12, pc}");
393}
394
Note: See TracBrowser for help on using the repository browser.