source: EcnlProtoTool/trunk/mbed_api/src/mbed_api.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: 8.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 "mbedcall.h"
53#include "mbed_api.h"
54
55#define __asm_mbedcall(...) do { \
56 __asm__ __volatile__ ( "push { lr }" ); \
57 __asm__ __volatile__ ( "svc 1" \
58 : "=r"(r0) : __VA_ARGS__ : "memory"); \
59 __asm__ __volatile__ ( "pop { lr }" ); \
60 return r0; \
61 } while (0)
62
63static inline long __mbedcall0(long n)
64{
65 register long r7 __asm__("r7") = n;
66 register long r0 __asm__("r0");
67 __asm_mbedcall("r"(r7));
68}
69
70static inline long __mbedcall1(long n, long a)
71{
72 register long r7 __asm__("r7") = n;
73 register long r0 __asm__("r0") = a;
74 __asm_mbedcall("r"(r7), "0"(r0));
75}
76
77static inline long __mbedcall2(long n, long a, long b)
78{
79 register long r7 __asm__("r7") = n;
80 register long r0 __asm__("r0") = a;
81 register long r1 __asm__("r1") = b;
82 __asm_mbedcall("r"(r7), "0"(r0), "r"(r1));
83}
84
85static inline long __mbedcall3(long n, long a, long b, long c)
86{
87 register long r7 __asm__("r7") = n;
88 register long r0 __asm__("r0") = a;
89 register long r1 __asm__("r1") = b;
90 register long r2 __asm__("r2") = c;
91 __asm_mbedcall("r"(r7), "0"(r0), "r"(r1), "r"(r2));
92}
93
94static inline long __mbedcall4(long n, long a, long b, long c, long d)
95{
96 register long r7 __asm__("r7") = n;
97 register long r0 __asm__("r0") = a;
98 register long r1 __asm__("r1") = b;
99 register long r2 __asm__("r2") = c;
100 register long r3 __asm__("r3") = d;
101 __asm_mbedcall("r"(r7), "0"(r0), "r"(r1), "r"(r2), "r"(r3));
102}
103
104static inline long __mbedcall5(long n, long a, long b, long c, long d, long e)
105{
106 register long r7 __asm__("r7") = n;
107 register long r0 __asm__("r0") = a;
108 register long r1 __asm__("r1") = b;
109 register long r2 __asm__("r2") = c;
110 register long r3 __asm__("r3") = d;
111 register long r4 __asm__("r4") = e;
112 __asm_mbedcall("r"(r7), "0"(r0), "r"(r1), "r"(r2), "r"(r3), "r"(r4));
113}
114
115static inline long __mbedcall6(long n, long a, long b, long c, long d, long e, long f)
116{
117 register long r7 __asm__("r7") = n;
118 register long r0 __asm__("r0") = a;
119 register long r1 __asm__("r1") = b;
120 register long r2 __asm__("r2") = c;
121 register long r3 __asm__("r3") = d;
122 register long r4 __asm__("r4") = e;
123 register long r5 __asm__("r5") = f;
124 __asm_mbedcall("r"(r7), "0"(r0), "r"(r1), "r"(r2), "r"(r3), "r"(r4), "r"(r5));
125}
126
127void analogin_init(analogin_t *obj, PinName pin)
128{
129 __mbedcall2(MBED_analogin_init, (long)obj, (long)pin);
130}
131
132uint16_t analogin_read_u16(analogin_t *obj)
133{
134 return __mbedcall1(MBED_analogin_read_u16, (long)obj);
135}
136
137void gpio_init(gpio_t *obj, PinName pin)
138{
139 __mbedcall2(MBED_gpio_init, (long)obj, (long)pin);
140}
141
142void gpio_mode(gpio_t *obj, PinMode mode)
143{
144 __mbedcall2(MBED_gpio_mode, (long)obj, (long)mode);
145}
146
147void gpio_dir(gpio_t *obj, PinDirection direction)
148{
149 __mbedcall2(MBED_gpio_dir, (long)obj, (long)direction);
150}
151
152void gpio_write(gpio_t *obj, int value)
153{
154 __mbedcall2(MBED_gpio_write, (long)obj, (long)value);
155}
156
157int gpio_read(gpio_t *obj)
158{
159 return __mbedcall1(MBED_gpio_read, (long)obj);
160}
161
162int i2c_start(i2c_t *obj)
163{
164 return __mbedcall1(MBED_i2c_start, (long)obj);
165}
166
167int i2c_stop(i2c_t *obj)
168{
169 return __mbedcall1(MBED_i2c_stop, (long)obj);
170}
171
172void i2c_init(i2c_t *obj, PinName sda, PinName scl)
173{
174 __mbedcall3(MBED_i2c_init, (long)obj, (long)sda, (long)scl);
175}
176
177int i2c_read(i2c_t *obj, int address, char *data, int length, int stop)
178{
179 return __mbedcall5(MBED_i2c_read, (long)obj, (long)address, (long)data, (long)length, (long)stop);
180}
181
182int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop)
183{
184 return __mbedcall5(MBED_i2c_write, (long)obj, (long)address, (long)data, (long)length, (long)stop);
185}
186
187int i2c_byte_read(i2c_t *obj, int last)
188{
189 return __mbedcall2(MBED_i2c_byte_read, (long)obj, (long)last);
190}
191
192int i2c_byte_write(i2c_t *obj, int data)
193{
194 return __mbedcall2(MBED_i2c_byte_write, (long)obj, (long)data);
195}
196
197void pin_function(PinName pin, int function)
198{
199 __mbedcall2(MBED_pin_function, (long)pin, (long)function);
200}
201
202void pin_mode(PinName pin, PinMode mode)
203{
204 __mbedcall2(MBED_pin_mode, (long)pin, (long)mode);
205}
206
207void pwmout_free(pwmout_t* obj)
208{
209 __mbedcall1(MBED_pwmout_free, (long)obj);
210}
211
212void pwmout_init(pwmout_t* obj, PinName pin)
213{
214 __mbedcall2(MBED_pwmout_init, (long)obj, (long)pin);
215}
216
217void pwmout_pulsewidth_us(pwmout_t* obj, int us)
218{
219 __mbedcall2(MBED_pwmout_pulsewidth_us, (long)obj, (long)us);
220}
221
222void rtc_init(void)
223{
224 __mbedcall0(MBED_rtc_init);
225}
226
227void rtc_free(void)
228{
229 __mbedcall0(MBED_rtc_free);
230}
231
232int rtc_isenabled(void)
233{
234 return __mbedcall0(MBED_rtc_isenabled);
235}
236
237time_t rtc_read(void)
238{
239 return __mbedcall0(MBED_rtc_read);
240}
241
242void rtc_write(time_t t)
243{
244 __mbedcall1(MBED_rtc_write, (long)t);
245}
246
247void serial_baud(serial_t *obj, int baudrate)
248{
249 __mbedcall2(MBED_serial_baud, (long)obj, (long)baudrate);
250}
251
252void serial_init(serial_t *obj, PinName tx, PinName rx)
253{
254 __mbedcall3(MBED_serial_init, (long)obj, (long)tx, (long)rx);
255}
256
257int serial_readable(serial_t *obj)
258{
259 return __mbedcall1(MBED_serial_readable, (long)obj);
260}
261
262int serial_getc(serial_t *obj)
263{
264 return __mbedcall1(MBED_serial_getc, (long)obj);
265}
266
267void serial_putc(serial_t *obj, int c)
268{
269 __mbedcall2(MBED_serial_putc, (long)obj, (long)c);
270}
271
272void us_ticker_init(void)
273{
274 __mbedcall0(MBED_us_ticker_init);
275}
276
277uint32_t us_ticker_read(void)
278{
279 return __mbedcall0(MBED_us_ticker_read);
280}
281
282void us_ticker_set_interrupt(timestamp_t timestamp)
283{
284 __mbedcall1(MBED_us_ticker_set_interrupt, (long)timestamp);
285}
286
287void us_ticker_disable_interrupt(void)
288{
289 __mbedcall0(MBED_us_ticker_disable_interrupt);
290}
291
292void us_ticker_clear_interrupt(void)
293{
294 __mbedcall0(MBED_us_ticker_clear_interrupt);
295}
296
297int SD_begin()
298{
299 return __mbedcall0(MBED_SD_begin);
300}
301
302void __disable_irq()
303{
304 __mbedcall0(MBED___disable_irq);
305}
306
307void __enable_irq()
308{
309 __mbedcall0(MBED___enable_irq);
310}
311
312#include "assert.c"
313#include "board.c"
314#include "error.c"
315#include "gpio.c"
316#include "lp_ticker_api.c"
317#include "mbed_interface.c"
318#include "pinmap_common.c"
319//#include "rtc_time.c"
320#include "semihost_api.c"
321#include "ticker_api.c"
322#include "us_ticker_api.c"
323#include "wait_api.c"
Note: See TracBrowser for help on using the repository browser.