source: EcnlProtoTool/trunk/prototool/src/shellif.c@ 279

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

ファイルを追加、更新。

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-csrc
File size: 15.7 KB
Line 
1#include <setjmp.h>
2#include <sys/socket.h>
3#include <sys/time.h>
4#include <sys/select.h>
5#include <poll.h>
6#include <stdarg.h>
7#include "shellif.h"
8#include "analogin_api.h"
9#include "gpio_api.h"
10#include "i2c_api.h"
11#include "pwmout_api.h"
12#include "rtc_api.h"
13#include "serial_api.h"
14#include "us_ticker_api.h"
15#include "wait_api.h"
16#include "arduino.h"
17#include "usrcmd.h"
18#include <sys/mman.h>
19#include <signal.h>
20
21typedef struct __dirstream DIR;
22
23typedef void (*analogin_init_t)(analogin_t *obj, PinName pin);
24typedef uint16_t (*analogin_read_u16_t)(analogin_t *obj);
25typedef void (*gpio_init_t)(gpio_t *obj, PinName pin);
26typedef void (*gpio_dir_t)(gpio_t *obj, PinDirection direction);
27typedef int (*i2c_start_t)(i2c_t *obj);
28typedef int (*i2c_stop_t)(i2c_t *obj);
29typedef void (*i2c_init_t)(i2c_t *obj, PinName sda, PinName scl);
30typedef int (*i2c_read_t)(i2c_t *obj, int address, char *data, int length, int stop);
31typedef int (*i2c_write_t)(i2c_t *obj, int address, const char *data, int length, int stop);
32typedef int (*i2c_byte_read_t)(i2c_t *obj, int last);
33typedef int (*i2c_byte_write_t)(i2c_t *obj, int data);
34typedef void (*pwmout_free_t)(pwmout_t* obj);
35typedef void (*pwmout_init_t)(pwmout_t* obj, PinName pin);
36typedef void (*pwmout_pulsewidth_us_t)(pwmout_t* obj, int us);
37typedef void (*rtc_init_t)(void);
38typedef void (*rtc_free_t)(void);
39typedef int (*rtc_isenabled_t)(void);
40typedef time_t (*rtc_read_t)(void);
41typedef void (*rtc_write_t)(time_t t);
42typedef void (*serial_baud_t)(serial_t *obj, int baudrate);
43typedef void (*serial_init_t)(serial_t *obj, PinName tx, PinName rx);
44typedef int (*serial_readable_t)(serial_t *obj);
45typedef int (*serial_getc_t)(serial_t *obj);
46typedef void (*serial_putc_t)(serial_t *obj, int c);
47typedef uint32_t (*us_ticker_read_t)(void);
48typedef void (*wait_ms_t)(int ms);
49typedef bool (*SD_begin_t)();
50typedef int (*usrcmd_cd_t)(int argc, char **argv);
51typedef int (*usrcmd_ls_t)(int argc, char **argv);
52typedef int (*usrcmd_cp_t)(int argc, char **argv);
53typedef int (*usrcmd_rm_t)(int argc, char **argv);
54typedef int (*usrcmd_mv_t)(int argc, char **argv);
55typedef int (*usrcmd_mkdir_t)(int argc, char **argv);
56typedef int (*usrcmd_hexdump_t)(int argc, char **argv);
57typedef int (*usrcmd_info_t)(int argc, char **argv);
58typedef int (*usrcmd_exit_t)(int argc, char **argv);
59typedef void(*shell_abort_t)();
60typedef void(*shell_exit_t)(int exitcd);
61typedef int (*shell_kill_t)(int pid, int sig);
62typedef int (*shell_gettimeofday_t)(struct timeval * tp, void * tzvp);
63typedef void (*vsyslog_t)(int priority, const char *format, va_list ap);
64typedef int (*shell_open_t)(const char * path, int flags);
65typedef int (*shell_close_t)(int fd);
66typedef int (*shell_read_t)(int fd, char *data, int len);
67typedef int (*shell_write_t)(int fd, char *data, int len);
68typedef int (*shell_lseek_t)(int fd, int ptr, int dir);
69typedef int (*shell_fstat_t)(int fd, struct stat * st);
70typedef int (*shell_stat_t)(const char *fname, struct stat *st);
71typedef int (*shell_link_t)(void);
72typedef int (*shell_unlink_t)(const char *path);
73typedef int (*shell_isatty_t)(int fd);
74typedef int (*fsync_t)(int fd);
75typedef int (*ftruncate_t)(int fd, off_t length);
76typedef int (*ioctl_t)(int fd, int request, va_list ap);
77typedef int (*tcgetattr_t)(int fd, struct termios *termios_p);
78typedef int (*tcsetattr_t)(int fd, int optional_actions, const struct termios *termios_p);
79typedef int (*shell_rename_t)(const char *oldpath, const char *newpath);
80typedef int (*rmdir_t)(const char *path);
81typedef int (*mkdir_t)(const char *path, mode_t mode);
82typedef int (*chmod_t)(const char *path, mode_t mode);
83typedef char *(*getcwd_t)(char *buf, size_t size);
84typedef int (*chdir_t)(const char *path);
85typedef int (*chroot_t)(const char *path);
86typedef int (*closedir_t)(DIR *dir);
87typedef DIR *(*opendir_t)(const char *path);
88typedef struct dirent *(*readdir_t)(DIR *dir);
89typedef void (*rewinddir_t)(DIR *dir);
90typedef void (*seekdir_t)(DIR *dir, long pos);
91typedef long (*telldir_t)(DIR *dir);
92typedef int (*shell_getpid_t)();
93typedef int (*socket_t)(int family, int type, int protocol);
94typedef int (*bind_t)(int fd, const struct sockaddr *addr, socklen_t len);
95typedef int (*listen_t)(int fd, int backlog);
96typedef int (*connect_t)(int fd, const struct sockaddr *addr, socklen_t len);
97typedef int (*accept_t)(int fd, struct sockaddr *addr, socklen_t *len);
98typedef ssize_t (*send_t)(int fd, const void *buf, size_t len, int flags);
99typedef ssize_t (*sendto_t)(int fd, const void *buf, size_t len, int flags, const struct sockaddr *addr, socklen_t alen);
100typedef ssize_t (*recv_t)(int fd, void *buf, size_t len, int flags);
101typedef ssize_t (*recvfrom_t)(int fd, void *buf, size_t len, int flags, struct sockaddr *addr, socklen_t *alen);
102typedef int (*shutdown_t)(int fd, int how);
103typedef int (*getsockopt_t)(int fd, int level, int optname, void *optval, socklen_t *optlen);
104typedef int (*setsockopt_t)(int fd, int level, int optname, const void *optval, socklen_t optlen);
105typedef int (*select_t)(int n, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv);
106typedef int (*poll_t)(struct pollfd *fds, nfds_t nfds, int timeout);
107typedef int (*gethostname_t)(char *name, size_t len);
108typedef int (*getnameinfo_t)(const struct sockaddr *sa, socklen_t sl, char *node, socklen_t nodelen, char *serv, socklen_t servlen, int flags);
109typedef int (*getpeername_t)(int fd, struct sockaddr *addr, socklen_t *len);
110typedef int (*getsockname_t)(int fd, struct sockaddr *addr, socklen_t *len);
111typedef int (*socketpair_t)(int family, int type, int protocol, int fd[2]);
112
113void analogin_init(analogin_t *obj, PinName pin)
114{
115 __imp_analogin_init(obj, pin);
116}
117
118uint16_t analogin_read_u16(analogin_t *obj)
119{
120 return __imp_analogin_read_u16(obj);
121}
122
123void gpio_init(gpio_t *obj, PinName pin)
124{
125 __imp_gpio_init(obj, pin);
126}
127
128void gpio_dir(gpio_t *obj, PinDirection direction)
129{
130 __imp_gpio_dir(obj, direction);
131}
132
133int i2c_start(i2c_t *obj)
134{
135 return __imp_i2c_start(obj);
136}
137
138int i2c_stop(i2c_t *obj)
139{
140 return __imp_i2c_stop(obj);
141}
142
143void i2c_init(i2c_t *obj, PinName sda, PinName scl)
144{
145 __imp_i2c_init(obj, sda, scl);
146}
147
148int i2c_read(i2c_t *obj, int address, char *data, int length, int stop)
149{
150 return __imp_i2c_read(obj, address, data, length, stop);
151}
152
153int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop)
154{
155 return __imp_i2c_write(obj, address, data, length, stop);
156}
157
158int i2c_byte_read(i2c_t *obj, int last)
159{
160 return __imp_i2c_byte_read(obj, last);
161}
162
163int i2c_byte_write(i2c_t *obj, int data)
164{
165 return __imp_i2c_byte_write(obj, data);
166}
167
168void pwmout_free(pwmout_t* obj)
169{
170 __imp_pwmout_free(obj);
171}
172
173void pwmout_init(pwmout_t* obj, PinName pin)
174{
175 __imp_pwmout_init(obj, pin);
176}
177
178void pwmout_pulsewidth_us(pwmout_t* obj, int us)
179{
180 __imp_pwmout_pulsewidth_us(obj, us);
181}
182
183void rtc_init(void)
184{
185 __imp_rtc_init();
186}
187
188void rtc_free(void)
189{
190 __imp_rtc_free();
191}
192
193int rtc_isenabled(void)
194{
195 return __imp_rtc_isenabled();
196}
197
198time_t rtc_read(void)
199{
200 return __imp_rtc_read();
201}
202
203void rtc_write(time_t t)
204{
205 __imp_rtc_write(t);
206}
207
208void serial_baud(serial_t *obj, int baudrate)
209{
210 __imp_serial_baud(obj, baudrate);
211}
212
213void serial_init(serial_t *obj, PinName tx, PinName rx)
214{
215 __imp_serial_init(obj, tx, rx);
216}
217
218int serial_readable(serial_t *obj)
219{
220 return __imp_serial_readable(obj);
221}
222
223int serial_getc(serial_t *obj)
224{
225 return __imp_serial_getc(obj);
226}
227
228void serial_putc(serial_t *obj, int c)
229{
230 __imp_serial_putc(obj, c);
231}
232
233uint32_t us_ticker_read(void)
234{
235 return __imp_us_ticker_read();
236}
237
238void wait_ms(int ms)
239{
240 __imp_wait_ms(ms);
241}
242
243bool SD_begin()
244{
245 return __imp_SD_begin();
246}
247
248int usrcmd_cd(int argc, char **argv)
249{
250 return __imp_usrcmd_cd(argc, argv);
251}
252
253int usrcmd_ls(int argc, char **argv)
254{
255 return __imp_usrcmd_ls(argc, argv);
256}
257
258int usrcmd_cp(int argc, char **argv)
259{
260 return __imp_usrcmd_cp(argc, argv);
261}
262
263int usrcmd_rm(int argc, char **argv)
264{
265 return __imp_usrcmd_rm(argc, argv);
266}
267
268int usrcmd_mv(int argc, char **argv)
269{
270 return __imp_usrcmd_mv(argc, argv);
271}
272
273int usrcmd_mkdir(int argc, char **argv)
274{
275 return __imp_usrcmd_mkdir(argc, argv);
276}
277
278int usrcmd_hexdump(int argc, char **argv)
279{
280 return __imp_usrcmd_hexdump(argc, argv);
281}
282
283int usrcmd_info(int argc, char **argv)
284{
285 return __imp_usrcmd_info(argc, argv);
286}
287
288int usrcmd_exit(int argc, char **argv)
289{
290 return __imp_usrcmd_exit(argc, argv);
291}
292
293void abort()
294{
295 __imp_shell_abort();
296}
297
298void _exit(int exitcd)
299{
300 __imp_shell_exit(exitcd);
301}
302
303int _kill(int pid, int sig)
304{
305 return __imp_shell_kill(pid, sig);
306}
307
308int _gettimeofday(struct timeval * tp, void * tzvp)
309{
310 return __imp_shell_gettimeofday(tp, tzvp);
311}
312
313void vsyslog(int priority, const char *format, va_list ap)
314{
315 __imp_vsyslog(priority, format, ap);
316}
317
318void syslog(int priority, const char *format, ...)
319{
320 va_list ap;
321 va_start(ap, format);
322 vsyslog(priority, format, ap);
323 va_end(ap);
324}
325
326int _open(const char * path, int flags)
327{
328 return __imp_shell_open(path, flags);
329}
330
331int _close(int fd)
332{
333 return __imp_shell_close(fd);
334}
335
336int _read(int fd, char *data, int len)
337{
338 return __imp_shell_read(fd, data, len);
339}
340
341int _write(int fd, char *data, int len)
342{
343 return __imp_shell_write(fd, data, len);
344}
345
346int _lseek(int fd, int ptr, int dir)
347{
348 return __imp_shell_lseek(fd, ptr, dir);
349}
350
351int _fstat(int fd, struct stat * st)
352{
353 return __imp_shell_fstat(fd, st);
354}
355
356int _stat(const char *fname, struct stat *st)
357{
358 return __imp_shell_stat(fname, st);
359}
360
361int _link(void)
362{
363 return __imp_shell_link();
364}
365
366int _unlink(const char *path)
367{
368 return __imp_shell_unlink(path);
369}
370
371int _isatty(int fd)
372{
373 return __imp_shell_isatty(fd);
374}
375
376int fsync(int fd)
377{
378 return __imp_fsync(fd);
379}
380
381int ftruncate(int fd, off_t length)
382{
383 return __imp_ftruncate(fd, length);
384}
385
386int ioctl(int fd, int request, ...)
387{
388 int result;
389 va_list ap;
390 va_start(ap, request);
391 result = __imp_ioctl(fd, request, ap);
392 va_end(ap);
393 return result;
394}
395
396int tcgetattr(int fd, struct termios *termios_p)
397{
398 return __imp_tcgetattr(fd, termios_p);
399}
400
401int tcsetattr(int fd, int optional_actions, const struct termios *termios_p)
402{
403 return __imp_tcsetattr(fd, optional_actions, termios_p);
404}
405
406int _rename(const char *oldpath, const char *newpath)
407{
408 return __imp_shell_rename(oldpath, newpath);
409}
410
411int rmdir(const char *path)
412{
413 return __imp_rmdir(path);
414}
415
416int mkdir(const char *path, mode_t mode)
417{
418 return __imp_mkdir(path, mode);
419}
420
421int chmod(const char *path, mode_t mode)
422{
423 return __imp_chmod(path, mode);
424}
425
426char *getcwd(char *buf, size_t size)
427{
428 return __imp_getcwd(buf, size);
429}
430
431int chdir(const char *path)
432{
433 return __imp_chdir(path);
434}
435
436int chroot(const char *path)
437{
438 return __imp_chroot(path);
439}
440
441int closedir(DIR *dir)
442{
443 return __imp_closedir(dir);
444}
445
446DIR *opendir(const char *path)
447{
448 return __imp_opendir(path);
449}
450
451struct dirent *readdir(DIR *dir)
452{
453 return __imp_readdir(dir);
454}
455
456void rewinddir(DIR *dir)
457{
458 __imp_rewinddir(dir);
459}
460
461void seekdir(DIR *dir, long pos)
462{
463 __imp_seekdir(dir, pos);
464}
465
466long telldir(DIR *dir)
467{
468 return __imp_telldir(dir);
469}
470
471int _getpid()
472{
473 return __imp_shell_getpid();
474}
475
476int socket(int family, int type, int protocol)
477{
478 return __imp_socket(family, type, protocol);
479}
480
481int bind(int fd, const struct sockaddr *addr, socklen_t len)
482{
483 return __imp_bind(fd, addr, len);
484}
485
486int listen(int fd, int backlog)
487{
488 return __imp_listen(fd, backlog);
489}
490
491int connect(int fd, const struct sockaddr *addr, socklen_t len)
492{
493 return __imp_connect(fd, addr, len);
494}
495
496int accept(int fd, struct sockaddr *addr, socklen_t *len)
497{
498 return __imp_accept(fd, addr, len);
499}
500
501ssize_t send(int fd, const void *buf, size_t len, int flags)
502{
503 return __imp_send(fd, buf, len, flags);
504}
505
506ssize_t sendto(int fd, const void *buf, size_t len, int flags, const struct sockaddr *addr, socklen_t alen)
507{
508 return __imp_sendto(fd, buf, len, flags, addr, alen);
509}
510
511ssize_t recv(int fd, void *buf, size_t len, int flags)
512{
513 return __imp_recv(fd, buf, len, flags);
514}
515
516ssize_t recvfrom(int fd, void *buf, size_t len, int flags, struct sockaddr *addr, socklen_t *alen)
517{
518 return __imp_recvfrom(fd, buf, len, flags, addr, alen);
519}
520
521int shutdown(int fd, int how)
522{
523 return __imp_shutdown(fd, how);
524}
525
526int getsockopt(int fd, int level, int optname, void *optval, socklen_t *optlen)
527{
528 return __imp_getsockopt(fd, level, optname, optval, optlen);
529}
530
531int setsockopt(int fd, int level, int optname, const void *optval, socklen_t optlen)
532{
533 return __imp_setsockopt(fd, level, optname, optval, optlen);
534}
535
536int select(int n, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv)
537{
538 return __imp_select(n, rfds, wfds, efds, tv);
539}
540
541int poll(struct pollfd *fds, nfds_t nfds, int timeout)
542{
543 return __imp_poll(fds, nfds, timeout);
544}
545
546unsigned if_nametoindex(const char *name)
547{
548 return 1;
549}
550
551int gethostname(char *name, size_t len)
552{
553 return __imp_gethostname(name, len);
554}
555
556int getnameinfo(const struct sockaddr *sa, socklen_t sl,
557 char *node, socklen_t nodelen,
558 char *serv, socklen_t servlen,
559 int flags)
560{
561 return __imp_getnameinfo(sa, sl, node, nodelen, serv, servlen, flags);
562}
563
564int getpeername(int fd, struct sockaddr *addr, socklen_t *len)
565{
566 return __imp_getpeername(fd, addr, len);
567}
568
569int getsockname(int fd, struct sockaddr *addr, socklen_t *len)
570{
571 return __imp_getsockname(fd, addr, len);
572}
573
574int socketpair(int family, int type, int protocol, int fd[2])
575{
576 return __imp_socketpair(family, type, protocol, fd);
577}
578
579char *basename(char *s)
580{
581 size_t i, j;
582 if (!s || !*s) return ".";
583 i = strlen(s) - 1;
584 for (j = 0; j <= i; j++) if (s[j] == ':') { s = &s[j + 1]; i -= j; break; }
585 for (; i&&s[i] == '/'; i--) s[i] = 0;
586 for (; i&&s[i - 1] != '/'; i--);
587 return s + i;
588}
589
590char *dirname(char *_s)
591{
592 char *s = _s;
593 size_t i, j;
594 if (!s || !*s) return ".";
595 i = strlen(s) - 1;
596 for (j = 0; j <= i; j++) if (s[j] == ':') { s = &s[j + 1]; i -= j; break; }
597 for (; s[i] == '/'; i--) if (!i) return (s == _s) ? "/" : _s;
598 for (; s[i] != '/'; i--) if (!i) return (s == _s) ? "." : _s;
599 for (; s[i] == '/'; i--) if (!i) if (s == _s) return "/"; else break;
600 s[i + 1] = 0;
601 return _s;
602}
603
604char *realpath(const char *filename, char *resolved)
605{
606 char *path = getcwd(resolved, 256);
607
608 if (path != NULL)
609 strcat(path, filename);
610
611 return path;
612}
613
614uint32_t htonl(uint32_t n)
615{
616 return (n >> 24) | ((n >> 8) & 0xFF00) | ((n << 8) & 0xFF0000) | (n << 24);
617}
618
619uint32_t ntohl(uint32_t n)
620{
621 return (n >> 24) | ((n >> 8) & 0xFF00) | ((n << 8) & 0xFF0000) | (n << 24);
622}
623
624uint16_t htons(uint16_t n)
625{
626 return ((n >> 8) & 0xFF) | ((n << 8) & 0xFF00);
627}
628
629uint16_t ntohs(uint16_t n)
630{
631 return ((n >> 8) & 0xFF) | ((n << 8) & 0xFF00);
632}
633
634int mprotect(void *addr, size_t len, int prot)
635{
636 return 0;
637}
638
639int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact)
640{
641 return 0;
642}
643
644unsigned int Utf8_to_Utf16(const char *src, int *code_size)
645{
646 int i;
647 unsigned int uc = 0;
648 unsigned char len = 0;
649
650 len = 0;
651 if ((src[0] & 0x80) == 0) { uc = src[0] & 0x7F; len = 0; }
652 else if ((src[0] & 0xE0) == 0xC0) { uc = src[0] & 0x1F; len = 1; }
653 else if ((src[0] & 0xF0) == 0xE0) { uc = src[0] & 0x0F; len = 2; }
654 else if ((src[0] & 0xF8) == 0xF0) { uc = src[0] & 0x07; len = 3; }
655 else if ((src[0] & 0xFC) == 0xF8) { uc = src[0] & 0x03; len = 4; }
656 else if ((src[0] & 0xFE) == 0xFC) { uc = src[0] & 0x01; len = 5; }
657
658 i = 1;
659 while ((i <= len) && ((src[i] & 0xC0) == 0x80)) {
660 uc = (uc << 6) | (src[i] & 0x3F);
661 i++;
662 }
663
664 //Á”Žš”Ý’è
665 *code_size = i;
666
667 //Œ»óA2ƒoƒCƒgŒÀ’è
668 return uc;
669}
670
671int bs_char_count(char *str, int pos)
672{
673 int num = 1, local_pos = pos;
674 char *c;
675
676 while (1) {
677 c = str + local_pos;
678
679 if ((*c & 0x80) != 0x80)
680 return num;
681
682 if (((*c & 0xE0) == 0xC0) && (num == 2)) {
683 return num;
684 }
685 else if (((*c & 0xF0) == 0xE0) && (num == 3)) {
686 return num;
687 }
688 else if (((*c & 0xF8) == 0xF0) && (num == 4)) {
689 return num;
690 }
691 else if (((*c & 0xFC) == 0xF8) && (num == 5)) {
692 return num;
693 }
694 else if (((*c & 0xFE) == 0xFC) && (num == 6)) {
695 return num;
696 }
697 else {
698 if (local_pos > 0) {
699 local_pos--;
700 num++;
701 }
702 else
703 return 0;
704 }
705 }
706
707 return 0;
708}
Note: See TracBrowser for help on using the repository browser.