Changeset 374 for asp3_tinet_ecnl_arm/trunk/ntshell/src
- Timestamp:
- Apr 5, 2019, 9:26:53 PM (5 years ago)
- Location:
- asp3_tinet_ecnl_arm/trunk/ntshell/src
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_tinet_ecnl_arm/trunk/ntshell/src/fdtable.c
r364 r374 68 68 #include "kernel_cfg.h" 69 69 #include <string.h> 70 71 #define IO_TYPE_FREE 0 72 #define IO_TYPE_SIO 1 73 #define IO_TYPE_FILE 2 74 #define IO_TYPE_DIR 3 75 #define IO_TYPE_TCP 4 76 #define IO_TYPE_UDP 5 77 78 static struct _IO_FILE fd_table[8 * sizeof(FLGPTN)] = { 79 { 0, IO_TYPE_SIO, 0, stdio_close, stdin_read, stdio_write, sio_seek, sio_ioctl }, 80 { 1, IO_TYPE_SIO, 0, stdio_close, stdio_read, stdout_write, sio_seek, sio_ioctl }, 81 { 2, IO_TYPE_SIO, 0, stdio_close, stdio_read, stderr_write, sio_seek, sio_ioctl }, 70 #include "util/ntstdio.h" 71 #include "hal/serial_api.h" 72 73 #ifdef _DEBUG 74 static const char THIS_FILE[] = __FILE__; 75 #endif 76 77 static int stdio_close(struct SHELL_FILE *fp); 78 static size_t stdio_read(struct SHELL_FILE *fp, unsigned char *data, size_t len); 79 static size_t stdio_write(struct SHELL_FILE *fp, const unsigned char *data, size_t len); 80 static size_t stdin_read(struct SHELL_FILE *fp, unsigned char *data, size_t len); 81 static size_t stdout_write(struct SHELL_FILE *fp, const unsigned char *data, size_t len); 82 static size_t stderr_write(struct SHELL_FILE *fp, const unsigned char *data, size_t len); 83 static void stdio_delete(struct SHELL_FILE *fp); 84 85 static int sio_close(struct SHELL_FILE *fp); 86 static size_t sio_read(struct SHELL_FILE *fp, unsigned char *data, size_t len); 87 static size_t sio_write(struct SHELL_FILE *fp, const unsigned char *data, size_t len); 88 static off_t sio_seek(struct SHELL_FILE *fp, off_t ofs, int org); 89 static int sio_ioctl(struct SHELL_FILE *fp, int req, void *arg); 90 static bool_t sio_readable(struct SHELL_FILE *fp); 91 static void sio_delete(struct SHELL_FILE *fp); 92 93 IO_TYPE IO_TYPE_STDIN = { stdio_close, stdin_read, stdio_write, sio_seek, sio_ioctl, sio_readable, stdio_delete }; 94 IO_TYPE IO_TYPE_STDOUT = { stdio_close, stdio_read, stdout_write, sio_seek, sio_ioctl, sio_readable, stdio_delete }; 95 IO_TYPE IO_TYPE_STDERR = { stdio_close, stdio_read, stderr_write, sio_seek, sio_ioctl, sio_readable, stdio_delete }; 96 IO_TYPE IO_TYPE_SIO = { sio_close, sio_read, sio_write, sio_seek, sio_ioctl, sio_readable, sio_delete }; 97 ntstdio_t ntstdio; 98 99 static struct SHELL_FILE fd_table[8 * sizeof(FLGPTN)] = { 100 { 0, &IO_TYPE_STDIN, 0, .exinf = &ntstdio }, 101 { 1, &IO_TYPE_STDOUT, 0, .exinf = &ntstdio }, 102 { 2, &IO_TYPE_STDERR, 0,.exinf = &ntstdio }, 82 103 }; 83 104 #define fd_table_count (sizeof(fd_table) / sizeof(fd_table[0])) 84 105 85 static int new_fd(int type, int id) 86 { 106 extern ntstdio_t ntstdio; 107 extern serial_t stdio_uart; 108 109 unsigned char ntstdio_xi(struct ntstdio_t *handle) 110 { 111 return serial_getc((serial_t *)handle->exinf); 112 } 113 114 void ntstdio_xo(struct ntstdio_t *handle, unsigned char c) 115 { 116 serial_putc((serial_t *)handle->exinf, c); 117 } 118 119 void sys_init(intptr_t exinf) 120 { 121 ntstdio_init(&ntstdio, NTSTDIO_OPTION_LINE_ECHO | NTSTDIO_OPTION_CANON | NTSTDIO_OPTION_LF_CRLF | NTSTDIO_OPTION_LF_CR, ntstdio_xi, ntstdio_xo); 122 ntstdio.exinf = (void *)&stdio_uart; 123 } 124 125 int stdio_close(struct SHELL_FILE *fp) 126 { 127 return -EPERM; 128 } 129 130 size_t stdio_read(struct SHELL_FILE *fp, unsigned char *data, size_t len) 131 { 132 return -EPERM; 133 } 134 135 size_t stdio_write(struct SHELL_FILE *fp, const unsigned char *data, size_t len) 136 { 137 return -EPERM; 138 } 139 140 size_t stdin_read(struct SHELL_FILE *fp, unsigned char *data, size_t len) 141 { 142 int i = 0; 143 while (i < len) { 144 int c = ntstdio_getc((struct ntstdio_t *)fp->exinf); 145 data[i++] = c; 146 if ((c == EOF) || (c == '\n')) 147 break; 148 } 149 return i; 150 } 151 152 size_t stdout_write(struct SHELL_FILE *fp, const unsigned char *data, size_t len) 153 { 154 for (int i = 0; i < len; i++) { 155 ntstdio_putc((struct ntstdio_t *)fp->exinf, data[i]); 156 } 157 return len; 158 } 159 160 size_t stderr_write(struct SHELL_FILE *fp, const unsigned char *data, size_t len) 161 { 162 for (int i = 0; i < len; i++) { 163 ntstdio_putc((struct ntstdio_t *)fp->exinf, data[i]); 164 } 165 return len; 166 } 167 168 void stdio_delete(struct SHELL_FILE *fp) 169 { 170 } 171 172 int sio_close(struct SHELL_FILE *fp) 173 { 174 return -EPERM; 175 } 176 177 size_t sio_read(struct SHELL_FILE *fp, unsigned char *data, size_t len) 178 { 179 return -EPERM; 180 } 181 182 size_t sio_write(struct SHELL_FILE *fp, const unsigned char *data, size_t len) 183 { 184 return -EPERM; 185 } 186 187 off_t sio_seek(struct SHELL_FILE *fp, off_t ofs, int org) 188 { 189 return -EPERM; 190 } 191 192 int sio_ioctl(struct SHELL_FILE *fp, int request, void *arg) 193 { 194 switch (request) { 195 case TIOCGWINSZ: 196 return 0; 197 case TCGETS: 198 return sio_tcgetattr(fp->fd, (struct termios *)arg); 199 case TCSETS + TCSANOW: 200 case TCSETS + TCSADRAIN: 201 case TCSETS + TCSAFLUSH: 202 return sio_tcsetattr(fp->fd, request - TCSETS, (const struct termios *)arg); 203 } 204 205 return -EINVAL; 206 } 207 208 bool_t sio_readable(struct SHELL_FILE *fp) 209 { 210 return fp->readevt_w != fp->readevt_r; 211 } 212 213 void sio_delete(struct SHELL_FILE *fp) 214 { 215 free((serial_t *)((struct ntstdio_t *)fp->exinf)->exinf); 216 ((struct ntstdio_t *)fp->exinf)->exinf = NULL; 217 free((struct ntstdio_t *)fp->exinf); 218 fp->exinf = NULL; 219 } 220 221 struct SHELL_FILE *new_fp(IO_TYPE *type, int id, int writable) 222 { 223 struct SHELL_FILE *fp = NULL; 224 ER ret; 225 226 ret = wai_sem(SEM_FILEDESC); 227 if (ret < 0) { 228 syslog(LOG_ERROR, "wai_sem => %d", ret); 229 } 230 87 231 for (int fd = 3; fd < fd_table_count; fd++) { 88 struct _IO_FILE *fp = &fd_table[fd];89 if (fp->type != IO_TYPE_FREE)232 fp = &fd_table[fd]; 233 if (fp->type != NULL) 90 234 continue; 91 235 92 memset(fp, 0, sizeof(struct _IO_FILE));236 memset(fp, 0, sizeof(struct SHELL_FILE)); 93 237 fp->fd = fd; 94 238 fp->type = type; 95 239 fp->handle = id; 96 return fd; 97 } 98 99 return -ENOMEM; 100 } 101 102 static struct _IO_FILE *id_to_fd(int type, int id) 103 { 240 fp->writable = writable; 241 break; 242 } 243 244 ret = sig_sem(SEM_FILEDESC); 245 if (ret < 0) { 246 syslog(LOG_ERROR, "sig_sem => %d", ret); 247 } 248 249 return fp; 250 } 251 252 struct SHELL_FILE *id_to_fd(IO_TYPE *type, int id) 253 { 254 struct SHELL_FILE *fp = NULL; 255 ER ret; 256 257 ret = wai_sem(SEM_FILEDESC); 258 if (ret < 0) { 259 syslog(LOG_ERROR, "wai_sem => %d", ret); 260 } 261 104 262 for (int fd = 3; fd < fd_table_count; fd++) { 105 struct _IO_FILE *fp = &fd_table[fd];263 fp = &fd_table[fd]; 106 264 if ((fp->type == type) && (fp->handle == id)) 107 return fp; 108 } 109 110 return NULL; 111 } 112 113 static int delete_fd(int type, int id) 114 { 115 struct _IO_FILE *fp = id_to_fd(type, id); 265 break; 266 } 267 268 ret = sig_sem(SEM_FILEDESC); 269 if (ret < 0) { 270 syslog(LOG_ERROR, "sig_sem => %d", ret); 271 } 272 273 return fp; 274 } 275 276 int delete_fd_by_id(IO_TYPE *type, int id) 277 { 278 struct SHELL_FILE *fp = id_to_fd(type, id); 116 279 if (fp == NULL) 117 280 return -EBADF; … … 120 283 } 121 284 122 int delete_fp(struct _IO_FILE *fp) 123 { 124 free(fp->pfile); 125 fp->pfile = NULL; 126 free(fp->pdir); 127 fp->pdir = NULL; 128 free(fp->psock); 129 fp->psock = NULL; 130 memset(fp, 0, sizeof(struct _IO_FILE)); 285 int delete_fp(struct SHELL_FILE *fp) 286 { 287 ER ret; 288 289 fp->type->delete(fp); 290 291 ret = wai_sem(SEM_FILEDESC); 292 if (ret < 0) { 293 syslog(LOG_ERROR, "wai_sem => %d", ret); 294 } 295 296 memset(fp, 0, sizeof(struct SHELL_FILE)); 297 298 ret = sig_sem(SEM_FILEDESC); 299 if (ret < 0) { 300 syslog(LOG_ERROR, "sig_sem => %d", ret); 301 } 131 302 132 303 return 0; 133 304 } 134 305 135 struct _IO_FILE *fd_to_fp(int fd)306 struct SHELL_FILE *fd_to_fp(int fd) 136 307 { 137 308 if ((fd < 0) || (fd >= fd_table_count)) … … 140 311 } 141 312 142 struct _IO_FILE *new_sio_fd(int sioid) 143 { 144 int fd = new_fd(IO_TYPE_SIO, sioid); 145 if ((fd < 0) || (fd >= fd_table_count)) 146 return NULL; 147 148 struct _IO_FILE *fp = &fd_table[fd]; 149 fp->close = sio_close; 150 fp->read = sio_read; 151 fp->write = sio_write; 152 fp->seek = sio_seek; 153 fp->ioctl = sio_ioctl; 154 fp->writable = 1; 155 156 return fp; 157 } 158 159 int delete_sio_fd(int sioid) 160 { 161 return delete_fd(IO_TYPE_SIO, sioid); 162 } 163 164 struct _IO_FILE *sioid_to_fd(int sioid) 165 { 166 return id_to_fd(IO_TYPE_SIO, sioid); 167 } 168 169 struct _IO_FILE *new_file_fd(int fileid) 170 { 171 int fd = new_fd(IO_TYPE_FILE, fileid); 172 if ((fd < 0) || (fd >= fd_table_count)) 173 return NULL; 174 175 struct _IO_FILE *fp = &fd_table[fd]; 176 fp->close = file_close; 177 fp->read = file_read; 178 fp->write = file_write; 179 fp->seek = file_seek; 180 fp->ioctl = file_ioctl; 181 fp->writable = 1; 182 fp->pfile = malloc(sizeof(FIL)); 183 memset(fp->pfile, 0, sizeof(FIL)); 184 185 return fp; 186 } 187 188 int delete_file_fd(int fileid) 189 { 190 return delete_fd(IO_TYPE_FILE, fileid); 191 } 192 193 struct _IO_FILE *fileid_to_fd(int fileid) 194 { 195 return id_to_fd(IO_TYPE_FILE, fileid); 196 } 197 198 struct _IO_FILE *new_dir_fd(int fileid) 199 { 200 int fd = new_fd(IO_TYPE_DIR, fileid); 201 if ((fd < 0) || (fd >= fd_table_count)) 202 return NULL; 203 204 struct _IO_FILE *fp = &fd_table[fd]; 205 fp->close = dir_close; 206 fp->read = dir_read; 207 fp->write = dir_write; 208 fp->seek = dir_seek; 209 fp->ioctl = dir_ioctl; 210 fp->writable = 0; 211 fp->pdir = malloc(sizeof(struct _IO_DIR)); 212 memset(fp->pdir, 0, sizeof(struct _IO_DIR)); 213 214 return fp; 215 } 216 217 int delete_dir_fd(int dirid) 218 { 219 return delete_fd(IO_TYPE_DIR, dirid); 220 } 221 222 struct _IO_FILE *dirid_to_fd(int dirid) 223 { 224 return id_to_fd(IO_TYPE_DIR, dirid); 225 } 226 227 #ifndef NTSHELL_NO_SOCKET 228 struct _IO_FILE *new_tcp_fd(int tcpid) 229 { 230 int fd = new_fd(IO_TYPE_TCP, tcpid); 231 if ((fd < 0) || (fd >= fd_table_count)) 232 return NULL; 233 234 struct _IO_FILE *fp = &fd_table[fd]; 235 fp->close = tcp_fd_close; 236 fp->read = tcp_fd_read; 237 fp->write = tcp_fd_write; 238 fp->seek = tcp_fd_seek; 239 fp->ioctl = tcp_fd_ioctl; 240 fp->writable = 0; 241 fp->psock = malloc(sizeof(socket_t)); 242 memset(fp->psock, 0, sizeof(socket_t)); 243 244 return fp; 245 } 246 247 int delete_tcp_fd(int tcpid) 248 { 249 return delete_fd(IO_TYPE_TCP, tcpid); 250 } 251 252 struct _IO_FILE *tcpid_to_fd(int tcpid) 253 { 254 return id_to_fd(IO_TYPE_TCP, tcpid); 255 } 256 257 struct _IO_FILE *new_udp_fd(int udpid) 258 { 259 int fd = new_fd(IO_TYPE_UDP, udpid); 260 if ((fd < 0) || (fd >= fd_table_count)) 261 return NULL; 262 263 struct _IO_FILE *fp = &fd_table[fd]; 264 fp->close = udp_fd_close; 265 fp->read = udp_fd_read; 266 fp->write = udp_fd_write; 267 fp->seek = udp_fd_seek; 268 fp->ioctl = udp_fd_ioctl; 269 fp->writable = 1; 270 fp->psock = malloc(sizeof(socket_t)); 271 memset(fp->psock, 0, sizeof(socket_t)); 272 273 return fp; 274 } 275 276 int delete_udp_fd(int udpid) 277 { 278 return delete_fd(IO_TYPE_UDP, udpid); 279 } 280 281 struct _IO_FILE *udpid_to_fd(int udpid) 282 { 283 return id_to_fd(IO_TYPE_UDP, udpid); 284 } 285 286 #endif 287 288 void memor(void *dst, void *src, size_t len) 313 void memand(void *dst, void *src, size_t len) 289 314 { 290 315 uint8_t *d = (uint8_t *)dst; … … 293 318 294 319 while (s < e) { 295 *d++ |= *s++;320 *d++ &= *s++; 296 321 } 297 322 } … … 336 361 337 362 ret = shell_get_evts(&evts, tmout); 338 if (rfds != NULL)339 memset(rfds, 0, sizeof(fd_set));340 if (wfds != NULL)341 memset(wfds, 0, sizeof(fd_set));342 if (efds != NULL)343 memset(efds, 0, sizeof(fd_set));344 363 if (ret == E_OK) { 345 364 if (rfds != NULL) 346 mem or(rfds, &evts.readfds, sizeof(fd_set));365 memand(rfds, &evts.readfds, sizeof(fd_set)); 347 366 if (wfds != NULL) 348 mem or(wfds, &evts.writefds, sizeof(fd_set));367 memand(wfds, &evts.writefds, sizeof(fd_set)); 349 368 if (efds != NULL) 350 mem or(efds, &evts.errorfds, sizeof(fd_set));369 memand(efds, &evts.errorfds, sizeof(fd_set)); 351 370 return evts.count; 352 371 } 353 372 if (ret == E_TMOUT) { 373 if (rfds != NULL) 374 memset(rfds, 0, sizeof(fd_set)); 375 if (wfds != NULL) 376 memset(wfds, 0, sizeof(fd_set)); 377 if (efds != NULL) 378 memset(efds, 0, sizeof(fd_set)); 354 379 return 0; 355 380 } … … 419 444 { 420 445 int fd = STDIN_FILENO; 421 struct _IO_FILE *fp = &fd_table[fd]; 422 T_SERIAL_RPOR rpor; 446 struct SHELL_FILE *fp = &fd_table[fd]; 423 447 FLGPTN flgptn = 0; 424 448 425 ER ret = serial_ref_por(SIO_PORTID, &rpor); 426 if (ret != E_OK) 427 return; 428 429 if (rpor.reacnt != 0) { 449 if (serial_readable((serial_t *)((struct ntstdio_t *)fp->exinf)->exinf)) { 430 450 if (fp->readevt_w == fp->readevt_r) fp->readevt_w++; 431 451 432 452 FD_SET(fd, (fd_set *)&flgptn); 433 453 } 434 if ( rpor.wricnt != 0) {454 if (serial_writable((serial_t *)((struct ntstdio_t *)fp->exinf)->exinf)) { 435 455 if (fp->writeevt_w == fp->writeevt_r) fp->writeevt_w++; 436 456 … … 447 467 { 448 468 int fd = STDIN_FILENO; 449 struct _IO_FILE *fp = &fd_table[fd]; 450 T_SERIAL_RPOR rpor; 469 struct SHELL_FILE *fp = &fd_table[fd]; 451 470 *flgptn = 0; 452 471 453 ER ret = serial_ref_por(SIO_PORTID, &rpor); 454 if (ret != E_OK) 455 return; 456 457 if (rpor.reacnt != 0) { 472 if (serial_readable((serial_t *)((struct ntstdio_t *)fp->exinf)->exinf)) { 458 473 if (fp->readevt_w == fp->readevt_r) fp->readevt_w++; 459 474 460 475 FD_SET(fd, (fd_set *)flgptn); 461 476 } 462 if ( rpor.wricnt != 0) {477 if (serial_writable((serial_t *)((struct ntstdio_t *)fp->exinf)->exinf)) { 463 478 if (fp->writeevt_w == fp->writeevt_r) fp->writeevt_w++; 464 479 … … 466 481 } 467 482 } 468 469 #ifndef NTSHELL_NO_SOCKET470 471 ER socket_tcp_callback(ID cepid, FN fncd, void *p_parblk)472 {473 struct _IO_FILE *fp = tcpid_to_fd(cepid);474 FLGPTN flgptn = 0;475 ER ret;476 int len;477 478 if (fp == NULL)479 return E_PAR;480 481 int fd = fp->fd;482 FD_SET(fd, (fd_set *)&flgptn);483 484 switch (fncd) {485 case TFN_TCP_RCV_BUF:486 len = *(int *)p_parblk;487 if (len <= 0)488 return E_OK;489 490 ret = wai_sem(SEM_FILEDESC);491 if (ret < 0) {492 syslog(LOG_ERROR, "wai_sem => %d", ret);493 }494 fp->psock->len += len;495 ret = sig_sem(SEM_FILEDESC);496 if (ret < 0) {497 syslog(LOG_ERROR, "sig_sem => %d", ret);498 }499 500 if (fp->readevt_w == fp->readevt_r) fp->readevt_w++;501 502 set_flg(FLG_SELECT_WAIT, flgptn);503 return E_OK;504 505 case TFN_TCP_RCV_DAT:506 len = *(int *)p_parblk;507 if (len <= 0)508 return E_OK;509 510 ret = wai_sem(SEM_FILEDESC);511 if (ret < 0) {512 syslog(LOG_ERROR, "wai_sem => %d", ret);513 }514 fp->psock->len += len;515 ret = sig_sem(SEM_FILEDESC);516 if (ret < 0) {517 syslog(LOG_ERROR, "sig_sem => %d", ret);518 }519 520 if (fp->readevt_w == fp->readevt_r) fp->readevt_w++;521 522 set_flg(FLG_SELECT_WAIT, flgptn);523 return E_OK;524 525 case TFN_TCP_SND_DAT:526 if (fp->writeevt_w == fp->writeevt_r) fp->writeevt_w++;527 528 set_flg(FLG_SELECT_WAIT, flgptn);529 return E_OK;530 531 case TFN_TCP_CAN_CEP:532 if (fp->errorevt_w == fp->errorevt_r) fp->errorevt_w++;533 534 set_flg(FLG_SELECT_WAIT, flgptn);535 return E_OK;536 537 case TFN_TCP_DEL_REP:538 delete_tcp_rep(cepid);539 return E_OK;540 541 case TFN_TCP_DEL_CEP:542 delete_tcp_fd(cepid);543 return E_OK;544 545 default:546 return E_OK;547 }548 }549 550 ER socket_udp_callback(ID cepid, FN fncd, void *p_parblk)551 {552 struct _IO_FILE *fp = udpid_to_fd(cepid);553 FLGPTN flgptn = 0;554 int len;555 556 if (fp == NULL)557 return E_PAR;558 559 int fd = fp->fd;560 FD_SET(fd, (fd_set *)&flgptn);561 562 switch (fncd) {563 case TEV_UDP_RCV_DAT:564 {565 T_UDP_RCV_DAT_PARA *udppara = (T_UDP_RCV_DAT_PARA *)p_parblk;566 len = udppara->len;567 if (len <= 0)568 return E_OK;569 570 ER ret = wai_sem(SEM_FILEDESC);571 if (ret < 0) {572 syslog(LOG_ERROR, "wai_sem => %d", ret);573 }574 fp->psock->len = len;575 if (fp->psock->input != NULL) {576 ret = rel_net_buf(fp->psock->input);577 if (ret < 0) {578 syslog(LOG_ERROR, "rel_net_buf => %d", ret);579 }580 }581 fp->psock->input = udppara->input;582 fp->psock->buf = GET_UDP_SDU(udppara->input, udppara->off);583 memset(&fp->psock->raddr4, 0, sizeof(fp->psock->raddr4));584 fp->psock->raddr4.sin_family = AF_INET;585 fp->psock->raddr4.sin_port = htons(udppara->rep4.portno);586 fp->psock->raddr4.sin_addr.s_addr = htonl(udppara->rep4.ipaddr);587 udppara->input->flags |= NB_FLG_NOREL_IFOUT;588 ret = sig_sem(SEM_FILEDESC);589 if (ret < 0) {590 syslog(LOG_ERROR, "sig_sem => %d", ret);591 }592 593 if (fp->readevt_w == fp->readevt_r) fp->readevt_w++;594 595 set_flg(FLG_SELECT_WAIT, flgptn);596 return E_OK;597 }598 case TFN_UDP_CRE_CEP:599 return E_OK;600 601 case TFN_UDP_RCV_DAT:602 len = *(int *)p_parblk;603 if (len <= 0)604 return E_OK;605 606 if (fp->readevt_w == fp->readevt_r) fp->readevt_w++;607 608 set_flg(FLG_SELECT_WAIT, flgptn);609 return E_OK;610 611 case TFN_UDP_SND_DAT:612 if (fp->writeevt_w == fp->writeevt_r) fp->writeevt_w++;613 614 set_flg(FLG_SELECT_WAIT, flgptn);615 return E_OK;616 617 case TFN_UDP_CAN_CEP:618 if (fp->errorevt_w == fp->errorevt_r) fp->errorevt_w++;619 620 set_flg(FLG_SELECT_WAIT, flgptn);621 return E_OK;622 623 case TFN_UDP_DEL_CEP:624 delete_udp_fd(cepid);625 return E_OK;626 627 default:628 return E_OK;629 }630 }631 632 #endif633 483 634 484 ER shell_get_evts(struct fd_events *evts, TMO tmout) … … 642 492 ER ret; 643 493 FLGPTN waitptn, flgptn, readfds = 0, writefds = 0; 644 struct _IO_FILE *fp = NULL;494 struct SHELL_FILE *fp = NULL; 645 495 646 496 stdio_update_evts(); … … 656 506 #ifndef NTSHELL_NO_SOCKET 657 507 if (FD_ISSET(fd, &evts->readfds)) { 658 if ((fp->type == IO_TYPE_TCP) && (fp->psock->cepid != 0)) { 659 if (fp->psock->len == 0) { 660 ret = tcp_rcv_buf(fp->psock->cepid, &fp->psock->input, TMO_NBLK); 661 if ((ret != E_WBLK) && (ret != E_OBJ) && (ret < 0)) { 662 syslog(LOG_ERROR, "tcp_rcv_buf => %d", ret); 663 //return ret; 664 } 665 if (ret > 0) { 666 ret = wai_sem(SEM_FILEDESC); 667 if (ret < 0) { 668 syslog(LOG_ERROR, "wai_sem => %d", ret); 669 } 670 fp->psock->len += ret; 671 ret = sig_sem(SEM_FILEDESC); 672 if (ret < 0) { 673 syslog(LOG_ERROR, "sig_sem => %d", ret); 674 } 675 } 676 } 677 else ret = 1; 678 if (ret > 0) { 679 FD_SET(fd, (fd_set *)&readfds); 680 count++; 681 if (fp->readevt_w == fp->readevt_r) fp->readevt_r--; 682 } 683 } 684 else if ((fp->type == IO_TYPE_UDP) && (fp->psock->cepid != 0)) { 685 if (fp->psock->input != NULL) { 686 FD_SET(fd, (fd_set *)&readfds); 687 count++; 688 if (fp->readevt_w == fp->readevt_r) fp->readevt_r--; 689 } 508 if (fp->type->readable(fp)) { 509 FD_SET(fd, (fd_set *)&readfds); 510 count++; 511 if (fp->readevt_w == fp->readevt_r) fp->readevt_r--; 690 512 } 691 513 else { … … 786 608 void clean_fd() 787 609 { 788 struct _IO_FILE *fp = NULL;610 struct SHELL_FILE *fp = NULL; 789 611 for (int fd = 3; fd < fd_table_count; fd++) { 790 612 fp = &fd_table[fd]; … … 792 614 continue; 793 615 794 fp-> close(fp);616 fp->type->close(fp); 795 617 796 618 delete_fp(fp); … … 800 622 int shell_ioctl(int fd, int request, void *arg) 801 623 { 802 struct _IO_FILE *fp = fd_to_fp(fd);624 struct SHELL_FILE *fp = fd_to_fp(fd); 803 625 if (fp == NULL) 804 626 return -EBADF; 805 627 806 return fp-> ioctl(fp, request, arg);628 return fp->type->ioctl(fp, request, arg); 807 629 } 808 630 -
asp3_tinet_ecnl_arm/trunk/ntshell/src/io_stub.c
r352 r374 1 1 /* 2 2 * TOPPERS ECHONET Lite Communication Middleware 3 * 3 * 4 4 * Copyright (C) 2017 Cores Co., Ltd. Japan 5 * 5 * 6 6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 7 7 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 … … 26 26 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 27 27 * 免責すること. 28 * 28 * 29 29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 30 30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 … … 32 32 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 33 33 * の責任を負わない. 34 * 34 * 35 35 * @(#) $Id$ 36 36 */ … … 43 43 #include <sil.h> 44 44 #include <string.h> 45 #include "syssvc/serial.h" 45 46 #include "syssvc/syslog.h" 46 47 #include "socket_stub.h" … … 49 50 #include "core/ntlibc.h" 50 51 #include "kernel_cfg.h" 52 #include "target_syssvc.h" 51 53 52 54 int fresult2errno(FRESULT res) … … 77 79 } 78 80 79 int shell_open(const char * path, int flags, void *arg) 80 { 81 FRESULT res; 82 struct _IO_FILE *fp; 81 static int file_close(struct SHELL_FILE *fp); 82 static size_t file_read(struct SHELL_FILE *fp, unsigned char *data, size_t len); 83 static size_t file_write(struct SHELL_FILE *fp, const unsigned char *data, size_t len); 84 static off_t file_seek(struct SHELL_FILE *fp, off_t ofs, int org); 85 static int file_ioctl(struct SHELL_FILE *fp, int req, void *arg); 86 static bool_t file_readable(struct SHELL_FILE *fp); 87 static void file_delete(struct SHELL_FILE *fp); 88 89 static int dir_close(struct SHELL_FILE *fp); 90 static size_t dir_read(struct SHELL_FILE *fp, unsigned char *data, size_t len); 91 static size_t dir_write(struct SHELL_FILE *fp, const unsigned char *data, size_t len); 92 static off_t dir_seek(struct SHELL_FILE *fp, off_t ofs, int org); 93 static int dir_ioctl(struct SHELL_FILE *fp, int req, void *arg); 94 static bool_t dir_readable(struct SHELL_FILE *fp); 95 static void dir_delete(struct SHELL_FILE *fp); 96 97 IO_TYPE IO_TYPE_FILE = { file_close, file_read, file_write, file_seek, file_ioctl, file_readable, file_delete }; 98 IO_TYPE IO_TYPE_DIR = { dir_close, dir_read, dir_write, dir_seek, dir_ioctl, dir_readable, dir_delete }; 99 100 int shell_open(const char *path, int flags, void *arg) 101 { 102 FRESULT res; 103 struct SHELL_FILE *fp; 83 104 84 105 if (flags & O_DIRECTORY) { 85 fp = new_ dir_fd(0);106 fp = new_fp(&IO_TYPE_DIR, 0, 0); 86 107 if (fp == NULL) 87 108 return -ENOMEM; 88 109 89 DIR *dir = &fp->pdir->dir; 110 fp->exinf = malloc(sizeof(struct SHELL_DIR)); 111 memset(fp->exinf, 0, sizeof(struct SHELL_DIR)); 112 113 FATFS_DIR *dir = &((struct SHELL_DIR *)fp->exinf)->dir; 90 114 FRESULT res; 91 115 if ((res = f_opendir(dir, path)) != FR_OK) { … … 95 119 } 96 120 97 fp = new_f ile_fd(0);121 fp = new_fp(&IO_TYPE_FILE, 0, 1); 98 122 if (fp == NULL) 99 123 return -ENOMEM; 124 125 fp->exinf = malloc(sizeof(FIL)); 126 memset(fp->exinf, 0, sizeof(FIL)); 100 127 101 128 BYTE fmd = 0; … … 133 160 } 134 161 135 if ((res = f_open( fp->pfile, path, fmd)) == FR_OK) {162 if ((res = f_open((FIL *)fp->exinf, path, fmd)) == FR_OK) { 136 163 fp->handle = fp->fd; 137 164 return fp->fd; … … 141 168 } 142 169 143 int file_close(struct _IO_FILE *fp)144 { 145 FRESULT res; 146 147 if ((res = f_close( fp->pfile)) == FR_OK) {170 int file_close(struct SHELL_FILE *fp) 171 { 172 FRESULT res; 173 174 if ((res = f_close((FIL *)fp->exinf)) == FR_OK) { 148 175 return 0; 149 176 } … … 152 179 } 153 180 154 size_t file_read(struct _IO_FILE *fp, unsigned char *data, size_t len)181 size_t file_read(struct SHELL_FILE *fp, unsigned char *data, size_t len) 155 182 { 156 183 unsigned int ret = 0; 157 184 FRESULT res; 158 185 159 if ((res = f_read( fp->pfile, data, len, &ret)) != FR_OK)186 if ((res = f_read((FIL *)fp->exinf, data, len, &ret)) != FR_OK) 160 187 return -EIO; 161 188 … … 163 190 } 164 191 165 size_t file_write(struct _IO_FILE *fp, const unsigned char *data, size_t len)192 size_t file_write(struct SHELL_FILE *fp, const unsigned char *data, size_t len) 166 193 { 167 194 unsigned int ret = 0; 168 195 FRESULT res; 169 196 170 if ((res = f_write( fp->pfile, data, len, &ret)) != FR_OK)197 if ((res = f_write((FIL *)fp->exinf, data, len, &ret)) != FR_OK) 171 198 return -EIO; 172 199 … … 174 201 } 175 202 176 off_t file_seek(struct _IO_FILE *fp, off_t ptr, int dir)203 off_t file_seek(struct SHELL_FILE *fp, off_t ptr, int dir) 177 204 { 178 205 switch (dir) { … … 191 218 192 219 FRESULT res; 193 if ((res = f_seek( fp->pfile, ptr, dir)) != FR_OK)220 if ((res = f_seek((FIL *)fp->exinf, ptr, dir)) != FR_OK) 194 221 return -EIO; 195 222 196 return fp->pfile->fptr;197 } 198 199 int file_ioctl(struct _IO_FILE *fp, int req, void *arg)223 return ((FIL *)fp->exinf)->fptr; 224 } 225 226 int file_ioctl(struct SHELL_FILE *fp, int req, void *arg) 200 227 { 201 228 DRESULT res; 202 229 203 if ((res = disk_ioctl( fp->pfile->fs->drv, req, arg) != RES_OK))230 if ((res = disk_ioctl(((FIL *)fp->exinf)->fs->drv, req, arg) != RES_OK)) 204 231 return -EINVAL; 205 232 … … 207 234 } 208 235 236 bool_t file_readable(struct SHELL_FILE *fp) 237 { 238 return fp->readevt_w != fp->readevt_r; 239 } 240 241 void file_delete(struct SHELL_FILE *fp) 242 { 243 free((FIL *)fp->exinf); 244 fp->exinf = NULL; 245 } 246 209 247 int shell_close(int fd) 210 248 { 211 struct _IO_FILE *fp = fd_to_fp(fd);212 if (fp == NULL) 213 return -EBADF; 214 215 int ret = fp-> close(fp);249 struct SHELL_FILE *fp = fd_to_fp(fd); 250 if (fp == NULL) 251 return -EBADF; 252 253 int ret = fp->type->close(fp); 216 254 217 255 delete_fp(fp); … … 222 260 ssize_t shell_read(int fd, void *data, size_t len) 223 261 { 224 struct _IO_FILE *fp = fd_to_fp(fd);225 if (fp == NULL) 226 return -EBADF; 227 228 return fp-> read(fp, (unsigned char *)data, len);262 struct SHELL_FILE *fp = fd_to_fp(fd); 263 if (fp == NULL) 264 return -EBADF; 265 266 return fp->type->read(fp, (unsigned char *)data, len); 229 267 } 230 268 … … 232 270 { 233 271 int result = 0; 234 struct _IO_FILE *fp = fd_to_fp(fd);272 struct SHELL_FILE *fp = fd_to_fp(fd); 235 273 if (fp == NULL) 236 274 return -EBADF; … … 238 276 const struct iovec *end = &iov[iovcnt]; 239 277 for (; iov < end; iov++) { 240 result += fp-> read(fp, (unsigned char *)iov->iov_base, iov->iov_len);278 result += fp->type->read(fp, (unsigned char *)iov->iov_base, iov->iov_len); 241 279 } 242 280 … … 246 284 ssize_t shell_write(int fd, const void *data, size_t len) 247 285 { 248 struct _IO_FILE *fp = fd_to_fp(fd);249 if (fp == NULL) 250 return -EBADF; 251 252 return fp-> write(fp, (unsigned char *)data, len);286 struct SHELL_FILE *fp = fd_to_fp(fd); 287 if (fp == NULL) 288 return -EBADF; 289 290 return fp->type->write(fp, (unsigned char *)data, len); 253 291 } 254 292 … … 256 294 { 257 295 int result = 0; 258 struct _IO_FILE *fp = fd_to_fp(fd);296 struct SHELL_FILE *fp = fd_to_fp(fd); 259 297 if (fp == NULL) 260 298 return -EBADF; … … 262 300 const struct iovec *end = &iov[iovcnt]; 263 301 for (; iov < end; iov++) { 264 result += fp-> write(fp, (unsigned char *)iov->iov_base, iov->iov_len);302 result += fp->type->write(fp, (unsigned char *)iov->iov_base, iov->iov_len); 265 303 } 266 304 … … 270 308 int shell_llseek(int fd, off_t ptr, off_t *result, int dir) 271 309 { 272 struct _IO_FILE *fp = fd_to_fp(fd);273 if (fp == NULL) 274 return -EBADF; 275 276 off_t ret = fp-> seek(fp, ptr, dir);310 struct SHELL_FILE *fp = fd_to_fp(fd); 311 if (fp == NULL) 312 return -EBADF; 313 314 off_t ret = fp->type->seek(fp, ptr, dir); 277 315 if (ret < 0) 278 316 return ret; … … 284 322 int shell_fstat(int fd, struct stat * st) 285 323 { 286 struct _IO_FILE *fp = fd_to_fp(fd);324 struct SHELL_FILE *fp = fd_to_fp(fd); 287 325 if (fp == NULL) 288 326 return -EBADF; … … 296 334 int shell_fsync(int fd) 297 335 { 298 struct _IO_FILE *fp = fd_to_fp(fd);336 struct SHELL_FILE *fp = fd_to_fp(fd); 299 337 if (fp == NULL) 300 338 return -EBADF; … … 304 342 int shell_ftruncate(int fd, off_t length) 305 343 { 306 struct _IO_FILE *fp = fd_to_fp(fd);307 if (fp == NULL) 308 return -EBADF; 309 310 FRESULT res; 311 if ((res = f_truncate( fp->pfile)) != FR_OK)344 struct SHELL_FILE *fp = fd_to_fp(fd); 345 if (fp == NULL) 346 return -EBADF; 347 348 FRESULT res; 349 if ((res = f_truncate((FIL *)fp->exinf)) != FR_OK) 312 350 return fresult2errno(res); 313 351 … … 320 358 } 321 359 360 extern IO_TYPE IO_TYPE_SIO; 361 322 362 int sio_tcgetattr(int fd, struct termios *termios) 323 363 { 324 extern ntstdio_t ntstdio; 325 326 if (fd == STDIN_FILENO) { 327 memset(termios, 0, sizeof(*termios)); 328 329 if (ntstdio.option & NTSTDIO_OPTION_LINE_ECHO) { 330 termios->c_lflag |= ECHO; 364 struct SHELL_FILE *fp = fd_to_fp(fd); 365 if ((fp == NULL) || (fp->type != &IO_TYPE_SIO)) 366 return -EBADF; 367 368 ntstdio_t *ntstdio = (ntstdio_t *)fp->exinf; 369 370 memset(termios, 0, sizeof(*termios)); 371 372 if (ntstdio->option & NTSTDIO_OPTION_LINE_ECHO) { 373 termios->c_lflag |= ECHO; 374 } 375 else { 376 termios->c_lflag &= ~ECHO; 377 } 378 if (ntstdio->option & NTSTDIO_OPTION_CANON) { 379 termios->c_lflag |= ICANON; 380 } 381 else { 382 termios->c_lflag &= ~ICANON; 383 } 384 if (ntstdio->option & NTSTDIO_OPTION_LF_CR) { 385 termios->c_iflag |= INLCR; 386 } 387 else { 388 termios->c_iflag &= ~INLCR; 389 } 390 if (ntstdio->option & NTSTDIO_OPTION_LF_CRLF) { 391 termios->c_oflag |= ONLCR; 392 } 393 else { 394 termios->c_oflag &= ~ONLCR; 395 } 396 397 return 0; 398 } 399 400 int sio_tcsetattr(int fd, int optional_actions, const struct termios *termios) 401 { 402 struct SHELL_FILE *fp = fd_to_fp(fd); 403 if ((fp == NULL) || (fp->type != &IO_TYPE_SIO)) 404 return -EBADF; 405 406 ntstdio_t *ntstdio = (ntstdio_t *)fp->exinf; 407 408 if (optional_actions == TCSANOW) { 409 if (termios->c_lflag & ECHO) { 410 ntstdio->option |= NTSTDIO_OPTION_LINE_ECHO; 331 411 } 332 412 else { 333 termios->c_lflag &= ~ECHO;334 } 335 if ( ntstdio.option & NTSTDIO_OPTION_CANON) {336 termios->c_lflag |= ICANON;413 ntstdio->option &= ~NTSTDIO_OPTION_LINE_ECHO; 414 } 415 if (termios->c_lflag & ICANON) { 416 ntstdio->option |= NTSTDIO_OPTION_CANON; 337 417 } 338 418 else { 339 termios->c_lflag &= ~ICANON;340 } 341 if ( ntstdio.option & NTSTDIO_OPTION_LF_CR) {342 termios->c_iflag |= INLCR;419 ntstdio->option &= ~NTSTDIO_OPTION_CANON; 420 } 421 if (termios->c_iflag & INLCR) { 422 ntstdio->option |= NTSTDIO_OPTION_LF_CR; 343 423 } 344 424 else { 345 termios->c_iflag &= ~INLCR;346 } 347 if ( ntstdio.option & NTSTDIO_OPTION_LF_CRLF) {348 termios->c_oflag |= ONLCR;425 ntstdio->option &= ~NTSTDIO_OPTION_LF_CR; 426 } 427 if (termios->c_oflag & ONLCR) { 428 ntstdio->option |= NTSTDIO_OPTION_LF_CRLF; 349 429 } 350 430 else { 351 termios->c_oflag &= ~ONLCR;431 ntstdio->option &= ~NTSTDIO_OPTION_LF_CRLF; 352 432 } 353 433 return 0; 354 434 } 355 shell_abort(); 356 return 0; 357 } 358 359 int sio_tcsetattr(int fd, int optional_actions, const struct termios *termios) 360 { 361 extern ntstdio_t ntstdio; 362 363 if ((fd == STDIN_FILENO) && (optional_actions == TCSANOW)) { 364 if (termios->c_lflag & ECHO) { 365 ntstdio.option |= NTSTDIO_OPTION_LINE_ECHO; 366 } 367 else { 368 ntstdio.option &= ~NTSTDIO_OPTION_LINE_ECHO; 369 } 370 if (termios->c_lflag & ICANON) { 371 ntstdio.option |= NTSTDIO_OPTION_CANON; 372 } 373 else { 374 ntstdio.option &= ~NTSTDIO_OPTION_CANON; 375 } 376 if (termios->c_iflag & INLCR) { 377 ntstdio.option |= NTSTDIO_OPTION_LF_CR; 378 } 379 else{ 380 ntstdio.option &= ~NTSTDIO_OPTION_LF_CR; 381 } 382 if (termios->c_oflag & ONLCR) { 383 ntstdio.option |= NTSTDIO_OPTION_LF_CRLF; 384 } 385 else { 386 ntstdio.option &= ~NTSTDIO_OPTION_LF_CRLF; 387 } 388 return 0; 389 } 435 390 436 shell_abort(); 391 437 return 0; … … 396 442 FILINFO fi; 397 443 FRESULT ret; 398 #if _USE_LFN399 static char lfn[ _MAX_LFN + 1]; /* Buffer to store the LFN */444 #if FF_USE_LFN 445 static char lfn[FF_MAX_LFN + 1]; /* Buffer to store the LFN */ 400 446 fi.lfname = lfn; 401 447 fi.lfsize = sizeof lfn; 402 448 #endif 403 449 if (strcmp(path, ".") == 0) { 404 char cwd[ _MAX_LFN];450 char cwd[FF_MAX_LFN]; 405 451 if ((ret = f_getcwd(cwd, sizeof(cwd))) != FR_OK) { 406 452 return fresult2errno(ret); … … 426 472 st->st_mtim.tv_nsec = 0; 427 473 st->st_mtim.tv_sec = fi.fdate + fi.ftime; 428 st->st_mode 474 st->st_mode = (S_IRUSR | S_IRGRP | S_IROTH); 429 475 st->st_mode |= (fi.fattrib & AM_RDO) ? 0 : (S_IWUSR | S_IWGRP | S_IWOTH); 430 476 st->st_mode |= (fi.fattrib & (AM_DIR | AM_VOL)) ? S_IFDIR : S_IFREG; … … 485 531 BYTE mask = AM_RDO | AM_SYS; // AM_ARC, AM_HID 486 532 487 if (mode & S_IREAD) {488 if ((mode & S_IWRITE) == 0) {533 if (mode & S_IREAD) { 534 if ((mode & S_IWRITE) == 0) { 489 535 attr |= AM_RDO; 490 536 } … … 494 540 } 495 541 496 if ((res = f_chmod(path, attr, mask)) != FR_OK) {542 if ((res = f_chmod(path, attr, mask)) != FR_OK) { 497 543 return fresult2errno(res); 498 544 } … … 507 553 BYTE mask = AM_RDO | AM_SYS; // AM_ARC, AM_HID 508 554 509 if (mode & S_IREAD) {510 if ((mode & S_IWRITE) == 0) {555 if (mode & S_IREAD) { 556 if ((mode & S_IWRITE) == 0) { 511 557 attr |= AM_RDO; 512 558 } … … 516 562 } 517 563 518 if ((res = f_chmod(path, attr, mask)) != FR_OK) {564 if ((res = f_chmod(path, attr, mask)) != FR_OK) { 519 565 return fresult2errno(res); 520 566 } … … 526 572 { 527 573 FRESULT ret; 528 if ((ret = f_getcwd(buf, size)) != FR_OK) {574 if ((ret = f_getcwd(buf, size)) != FR_OK) { 529 575 return NULL; 530 576 } … … 549 595 } 550 596 551 int dir_close(struct _IO_FILE *fp)552 { 553 FRESULT res; 554 if ((res = f_closedir(& fp->pdir->dir)) != FR_OK) {597 int dir_close(struct SHELL_FILE *fp) 598 { 599 FRESULT res; 600 if ((res = f_closedir(&((struct SHELL_DIR *)fp->exinf)->dir)) != FR_OK) { 555 601 return fresult2errno(res); 556 602 } … … 564 610 return -EINVAL; 565 611 566 struct _IO_FILE *fp = fd_to_fp(fd);612 struct SHELL_FILE *fp = fd_to_fp(fd); 567 613 if (fp == NULL) 568 614 return -EBADF; 569 615 570 616 FILINFO fno; 571 #if _USE_LFN572 static char lfn[ _MAX_LFN + 1]; /* Buffer to store the LFN */617 #if FF_USE_LFN 618 static char lfn[FF_MAX_LFN + 1]; /* Buffer to store the LFN */ 573 619 fno.lfname = lfn; 574 620 fno.lfsize = sizeof lfn; 575 621 #endif 576 622 FRESULT res; 577 if ((res = f_readdir(& fp->pdir->dir, &fno)) != FR_OK || fno.fname[0] == '\0') {623 if ((res = f_readdir(&((struct SHELL_DIR *)fp->exinf)->dir, &fno)) != FR_OK || fno.fname[0] == '\0') { 578 624 return fresult2errno(res); 579 625 } 580 626 581 627 memset(de, 0, sizeof(*de)); 582 #if _USE_LFN628 #if FF_USE_LFN 583 629 ntlibc_strlcpy(de->d_name, *fno.lfname ? fno.lfname : fno.fname, sizeof(de->d_name)); 584 630 #else … … 589 635 } 590 636 591 size_t dir_read(struct _IO_FILE *fp, unsigned char *data, size_t len)637 size_t dir_read(struct SHELL_FILE *fp, unsigned char *data, size_t len) 592 638 { 593 639 return -EPERM; 594 640 } 595 641 596 size_t dir_write(struct _IO_FILE *fp, const unsigned char *data, size_t len)642 size_t dir_write(struct SHELL_FILE *fp, const unsigned char *data, size_t len) 597 643 { 598 644 return -EPERM; 599 645 } 600 646 601 off_t dir_seek(struct _IO_FILE *fp, off_t ptr, int dir)647 off_t dir_seek(struct SHELL_FILE *fp, off_t ptr, int dir) 602 648 { 603 649 FRESULT res; … … 607 653 608 654 if (ptr == 0) { 609 if ((res = f_rewinddir(& fp->pdir->dir)) != FR_OK) {655 if ((res = f_rewinddir(&((struct SHELL_DIR *)fp->exinf)->dir)) != FR_OK) { 610 656 return fresult2errno(res); 611 657 } … … 613 659 else { 614 660 FILINFO fno; 615 #if _USE_LFN616 static char lfn[ _MAX_LFN + 1]; /* Buffer to store the LFN */661 #if FF_USE_LFN 662 static char lfn[FF_MAX_LFN + 1]; /* Buffer to store the LFN */ 617 663 fno.lfname = lfn; 618 664 fno.lfsize = sizeof lfn; 619 665 #endif 620 if ((res = f_rewinddir(& fp->pdir->dir)) != FR_OK) {666 if ((res = f_rewinddir(&((struct SHELL_DIR *)fp->exinf)->dir)) != FR_OK) { 621 667 return fresult2errno(res); 622 668 } 623 669 624 670 for (int i = 0; i < ptr; i++) { 625 if ((res = f_readdir(& fp->pdir->dir, &fno)) != FR_OK || fno.fname[0] == '\0') {671 if ((res = f_readdir(&((struct SHELL_DIR *)fp->exinf)->dir, &fno)) != FR_OK || fno.fname[0] == '\0') { 626 672 return fresult2errno(res); 627 673 } … … 632 678 } 633 679 634 int dir_ioctl(struct _IO_FILE *fp, int req, void *arg)680 int dir_ioctl(struct SHELL_FILE *fp, int req, void *arg) 635 681 { 636 682 return -EINVAL; 683 } 684 685 bool_t dir_readable(struct SHELL_FILE *fp) 686 { 687 return fp->readevt_w != fp->readevt_r; 688 } 689 690 void dir_delete(struct SHELL_FILE *fp) 691 { 692 free((struct SHELL_DIR *)fp->exinf); 693 fp->exinf = NULL; 637 694 } 638 695 … … 687 744 { 688 745 //if ((addr >= (void *)&__HeapBase) && (addr + len < (void *)&__HeapLimit)) { 689 return 0; 690 //} 691 //return -1; 692 } 693 694 #include "tlsf.h" 695 696 static tlsf_t sys_tlsf; 697 static pool_t sys_pool; 698 699 void sys_init(void) 700 { 701 sys_tlsf = tlsf_create(&__HeapBase); 702 if (sys_tlsf == NULL) 703 return; 704 705 sys_pool = tlsf_add_pool(sys_tlsf, ((uint8_t *)&__HeapBase) + tlsf_size(), ((intptr_t)&__HeapLimit - (intptr_t)&__HeapBase) - tlsf_size()); 706 } 707 708 void sys_fini(void) 709 { 710 tlsf_destroy(sys_tlsf); 711 } 712 713 void *malloc(size_t size) 714 { 715 void *result; 716 wai_sem(SEM_MALLOC); 717 result = tlsf_malloc(sys_tlsf, size); 718 sig_sem(SEM_MALLOC); 719 if (result == NULL) 720 tlsf_check_pool(sys_pool); 721 return result; 722 } 723 724 void *calloc(size_t size, size_t count) 725 { 726 void *result; 727 wai_sem(SEM_MALLOC); 728 result = tlsf_malloc(sys_tlsf, count * size); 729 sig_sem(SEM_MALLOC); 730 if (result != NULL) 731 memset(result, 0, count * size); 732 else 733 tlsf_check_pool(sys_pool); 734 return result; 735 } 736 737 void *realloc(void *ptr, size_t size) 738 { 739 void *result; 740 wai_sem(SEM_MALLOC); 741 result = tlsf_realloc(sys_tlsf, ptr, size); 742 sig_sem(SEM_MALLOC); 743 if (result == NULL) 744 tlsf_check_pool(sys_pool); 745 return result; 746 } 747 748 void free(void *ptr) 749 { 750 wai_sem(SEM_MALLOC); 751 tlsf_free(sys_tlsf, ptr); 752 sig_sem(SEM_MALLOC); 753 } 754 746 return 0; 747 //} 748 //return -1; 749 } -
asp3_tinet_ecnl_arm/trunk/ntshell/src/net_misc.c
r359 r374 60 60 #include "kernel_cfg.h" 61 61 #include "tinet_cfg.h" 62 #include "util/ntstdio.h" 63 64 extern ntstdio_t ntstdio; 62 #include <stdio.h> 65 63 66 64 T_DHCP4_CLI_CONTEXT *dhcp4_cli_initialize(ID tskid, ID cepid); … … 97 95 98 96 get_tid(&nc->tskid); 99 ntstdio_printf(&ntstdio,"[NET MISC:%d,%d] started.", nc->tskid, (ID)exinf);97 printf("[NET MISC:%d,%d] started.", nc->tskid, (ID)exinf); 100 98 101 99 /* 初期化 */ … … 105 103 ret = get_tim(&time); 106 104 if (ret != E_OK) { 107 ntstdio_printf(&ntstdio,"[NET MISC,%d] get_tim error: %7lu,%s",105 printf("[NET MISC,%d] get_tim error: %7lu,%s", 108 106 nc->cepid, time / SYSTIM_HZ, itron_strerror(ret)); 109 107 return; … … 119 117 error = tslp_tsk(timer); 120 118 if ((error != E_OK) && (error != E_TMOUT)) { 121 ntstdio_printf(&ntstdio,"[NET MISC,%d] tslp_tsk error: %s %d",119 printf("[NET MISC,%d] tslp_tsk error: %s %d", 122 120 nc->cepid, itron_strerror(error), timer); 123 121 break; … … 126 124 ret = get_tim(&time); 127 125 if (ret != E_OK) { 128 ntstdio_printf(&ntstdio,"[NET MISC,%d] get_tim error: %s",126 printf("[NET MISC,%d] get_tim error: %s", 129 127 nc->cepid, itron_strerror(ret)); 130 128 break; -
asp3_tinet_ecnl_arm/trunk/ntshell/src/netcmd.c
r364 r374 59 59 #include <netapp/resolver.h> 60 60 #include "core/ntlibc.h" 61 #include "util/ntstdio.h"61 #include <stdio.h> 62 62 #include "ntp_cli.h" 63 63 #include "kernel_cfg.h" 64 65 extern ntstdio_t ntstdio;66 64 67 65 #if defined(SUPPORT_INET6) … … 280 278 281 279 if ((line = lookup_ipaddr(&addr, line, apip)) == NULL) { 282 ntstdio_printf(&ntstdio,"[PING] unknown host.\n");280 printf("[PING] unknown host.\n"); 283 281 return 0; 284 282 } … … 299 297 #if defined(SUPPORT_INET4) 300 298 if (apip == API_PROTO_IPV6) { 301 ntstdio_printf(&ntstdio,"[PING6] size: %d, tmo: %d, host: %s\n", size, tmo, ipv62str(NULL, &addr));299 printf("[PING6] size: %d, tmo: %d, host: %s\n", size, tmo, ipv62str(NULL, &addr)); 302 300 ping6(&addr, (uint_t)tmo, (uint_t)size); 303 301 } 304 302 else { 305 303 addr4 = ntohl(addr.s6_addr32[3]); 306 ntstdio_printf(&ntstdio,"[PING4] size: %d, tmo: %d, host: %s\n", size, tmo, ip2str(NULL, &addr4));304 printf("[PING4] size: %d, tmo: %d, host: %s\n", size, tmo, ip2str(NULL, &addr4)); 307 305 ping4(&addr4, (uint_t)tmo, (uint_t)size); 308 306 } 309 307 #else /* of #if defined(SUPPORT_INET4) */ 310 ntstdio_printf(&ntstdio,"[PING6] size: %d, tmo: %d, host: %s\n", size, tmo, ipv62str(NULL, &addr));308 printf("[PING6] size: %d, tmo: %d, host: %s\n", size, tmo, ipv62str(NULL, &addr)); 311 309 ping6(&addr, (uint_t)tmo, (uint_t)size); 312 310 #endif /* of #if defined(SUPPORT_INET4) */ 313 311 #else /* of #if defined(SUPPORT_INET6) */ 314 ntstdio_printf(&ntstdio,"[PING4] size: %d, tmo: %d, host: %s\n", size, tmo, ip2str(NULL, &addr));312 printf("[PING4] size: %d, tmo: %d, host: %s\n", size, tmo, ip2str(NULL, &addr)); 315 313 ping4(&addr, (uint_t)tmo, (uint_t)size); 316 314 #endif /* of #if defined(SUPPORT_INET6) */ … … 331 329 pos = str_ipv4addr(temp, sizeof(temp), &svaddr, 0); 332 330 temp[pos] = '\0'; 333 ntstdio_printf(&ntstdio,"DHCPv4 server: %s,\n", temp);334 ntstdio_printf(&ntstdio," Renew: %u:%02u:%02u,\n",331 printf("DHCPv4 server: %s,\n", temp); 332 printf(" Renew: %u:%02u:%02u,\n", 335 333 renew / 3600, (renew / 60) % 60, renew % 60); 336 ntstdio_printf(&ntstdio," Rebind: %u:%02u:%02u, Expire: %u:%02u:%02u.\n",334 printf(" Rebind: %u:%02u:%02u, Expire: %u:%02u:%02u.\n", 337 335 rebind / 3600, (rebind / 60) % 60, rebind % 60, 338 336 expire / 3600, (expire / 60) % 60, expire % 60); 339 337 } 340 338 else if (ret == E_OBJ) 341 ntstdio_printf(&ntstdio,"DHCPv4 server: not available.\n");339 printf("DHCPv4 server: not available.\n"); 342 340 } 343 341 … … 351 349 if (ntlibc_strcmp(argv[1], "rel") == 0) { 352 350 ret = dhcp4c_rel_info(); 353 ntstdio_printf(&ntstdio,"dhcp4c_rel_info %d\n", ret);351 printf("dhcp4c_rel_info %d\n", ret); 354 352 } 355 353 else if (ntlibc_strcmp(argv[1], "renew") == 0) { 356 354 ret = dhcp4c_renew_info(); 357 ntstdio_printf(&ntstdio,"dhcp4c_renew_info %d\n", ret);355 printf("dhcp4c_renew_info %d\n", ret); 358 356 } 359 357 else { … … 383 381 else { 384 382 for (c = 1; c <= *ptr; c++) 385 ntstdio_printf(&ntstdio,"%c", *(ptr + c));383 printf("%c", *(ptr + c)); 386 384 ptr += *ptr + 1; 387 385 if (*ptr) 388 ntstdio_printf(&ntstdio,".");386 printf("."); 389 387 } 390 388 } … … 406 404 return error; 407 405 408 ntstdio_printf(&ntstdio," mname: ");406 printf(" mname: "); 409 407 rn_offset = s_show_dns_domain_name(msg, offset); 410 ntstdio_putc(&ntstdio,'\n');411 ntstdio_printf(&ntstdio," rname: ");408 putchar('\n'); 409 printf(" rname: "); 412 410 s_show_dns_domain_name(msg, rn_offset); 413 ntstdio_putc(&ntstdio,'\n');414 415 ntstdio_printf(&ntstdio," serial: %d\n", soa.serial);416 ntstdio_printf(&ntstdio," refresh: %d\n", soa.refresh);417 ntstdio_printf(&ntstdio," retry: %d\n", soa.retry);418 ntstdio_printf(&ntstdio," expirel: %d\n", soa.expire);419 ntstdio_printf(&ntstdio," minimum: %d\n", soa.minimum);411 putchar('\n'); 412 413 printf(" serial: %d\n", soa.serial); 414 printf(" refresh: %d\n", soa.refresh); 415 printf(" retry: %d\n", soa.retry); 416 printf(" expirel: %d\n", soa.expire); 417 printf(" minimum: %d\n", soa.minimum); 420 418 421 419 return E_OK; … … 433 431 int scount; 434 432 435 ntstdio_printf(&ntstdio,"question section: %d\n", rslv->dns_hdr.qdcount);433 printf("question section: %d\n", rslv->dns_hdr.qdcount); 436 434 offset = rslv->qd_offset; 437 435 for (scount = 1; scount <= rslv->dns_hdr.qdcount; scount++) { … … 439 437 return error; 440 438 441 ntstdio_printf(&ntstdio,"%2d: ", scount);439 printf("%2d: ", scount); 442 440 s_show_dns_domain_name(msg, offset); 443 ntstdio_printf(&ntstdio,"\n type: %-4s, class: %2s\n", dns_strtype(qd.type), dns_strclass(qd.class));441 printf("\n type: %-4s, class: %2s\n", dns_strtype(qd.type), dns_strclass(qd.class)); 444 442 offset = error; 445 443 } … … 463 461 int pos; 464 462 465 ntstdio_printf(&ntstdio,"%10s section: %d\n", title, scount);463 printf("%10s section: %d\n", title, scount); 466 464 for (count = 1; count <= scount; count++) { 467 465 if ((error = dns_analyze_rr(&rr, offset, msg, length)) < 0) 468 466 return error; 469 467 470 ntstdio_printf(&ntstdio,"%2d: ", count);468 printf("%2d: ", count); 471 469 s_show_dns_domain_name(msg, offset); 472 ntstdio_printf(&ntstdio,"\n type: %-4s, class: %2s, TTL: %2d, len: %3d, offset: 0x%02x\n",470 printf("\n type: %-4s, class: %2s, TTL: %2d, len: %3d, offset: 0x%02x\n", 473 471 dns_strtype(rr.type), dns_strclass(rr.class), rr.ttl, rr.rdlength, rr.rdata_offset); 474 472 … … 479 477 pos = str_ipv4addr(temp, sizeof(temp), &in4_addr, 0); 480 478 temp[pos] = '\0'; 481 ntstdio_printf(&ntstdio," IPv4 addr: %s\n", temp);479 printf(" IPv4 addr: %s\n", temp); 482 480 break; 483 481 case DNS_TYPE_NS: 484 ntstdio_printf(&ntstdio," host: ");482 printf(" host: "); 485 483 s_show_dns_domain_name(msg, rr.rdata_offset); 486 ntstdio_putc(&ntstdio,'\n');484 putchar('\n'); 487 485 break; 488 486 case DNS_TYPE_CNAME: 489 ntstdio_printf(&ntstdio," host: ");487 printf(" host: "); 490 488 s_show_dns_domain_name(msg, rr.rdata_offset); 491 ntstdio_putc(&ntstdio,'\n');489 putchar('\n'); 492 490 break; 493 491 case DNS_TYPE_SOA: … … 495 493 break; 496 494 case DNS_TYPE_PTR: 497 ntstdio_printf(&ntstdio," PTR: ");495 printf(" PTR: "); 498 496 s_show_dns_domain_name(msg, rr.rdata_offset); 499 ntstdio_putc(&ntstdio,'\n');497 putchar('\n'); 500 498 break; 501 499 case DNS_TYPE_AAAA: … … 503 501 pos = str_ipv6addr(temp, sizeof(temp), &in6_addr, 0); 504 502 temp[pos] = '\0'; 505 ntstdio_printf(&ntstdio," IPv6 addr: %s\n", temp);503 printf(" IPv6 addr: %s\n", temp); 506 504 break; 507 505 default: 508 ntstdio_printf(&ntstdio," data: ");506 printf(" data: "); 509 507 col = 32; 510 508 for (dcount = 0; dcount < rr.rdlength; dcount++) { 511 ntstdio_printf(&ntstdio,"%02x", *(msg + rr.rdata_offset + dcount));509 printf("%02x", *(msg + rr.rdata_offset + dcount)); 512 510 if (--col == 0) { 513 ntstdio_printf(&ntstdio,"\n ");511 printf("\n "); 514 512 col = 32; 515 513 } 516 514 } 517 ntstdio_putc(&ntstdio,'\n');515 putchar('\n'); 518 516 break; 519 517 } … … 539 537 #if defined(SUPPORT_INET6) 540 538 541 ntstdio_printf(&ntstdio,"domain name: %s\n", dns_in6_get_dname());539 printf("domain name: %s\n", dns_in6_get_dname()); 542 540 543 541 #else /* of #if defined(SUPPORT_INET6) */ 544 542 545 ntstdio_printf(&ntstdio,"domain name: %s\n", dns_in4_get_dname());543 printf("domain name: %s\n", dns_in4_get_dname()); 546 544 547 545 #endif /* of #if defined(SUPPORT_INET6) */ … … 549 547 #if defined(SUPPORT_INET6) 550 548 dns_in6_get_addr(&in6_addr); 551 ntstdio_printf(&ntstdio,"IPv6 DNS server: ");549 printf("IPv6 DNS server: "); 552 550 if (IN6_IS_ADDR_UNSPECIFIED(&in6_addr)) 553 ntstdio_printf(&ntstdio,"not available.\n");551 printf("not available.\n"); 554 552 else { 555 553 pos = str_ipv6addr(temp, sizeof(temp), &in6_addr, 0); 556 554 temp[pos] = '\0'; 557 ntstdio_printf(&ntstdio,"%s.\n", temp);555 printf("%s.\n", temp); 558 556 } 559 557 #endif /* of #if defined(SUPPORT_INET6) */ … … 561 559 #if defined(SUPPORT_INET4) 562 560 dns_in4_get_addr(&in4_addr); 563 ntstdio_printf(&ntstdio,"IPv4 DNS server: ");561 printf("IPv4 DNS server: "); 564 562 if (in4_addr == IPV4_ADDRANY) 565 ntstdio_printf(&ntstdio,"not available.\n");563 printf("not available.\n"); 566 564 else { 567 565 pos = str_ipv4addr(temp, sizeof(temp), &in4_addr, 0); 568 566 temp[pos] = '\0'; 569 ntstdio_printf(&ntstdio,"%s.\n", temp);567 printf("%s.\n", temp); 570 568 } 571 569 #endif /* of #if defined(SUPPORT_INET4) */ … … 604 602 line = skip_blanks(resolv_options(&flags, line, DEFAULT_API_PROTO)); 605 603 if ((flags & (DNS_LUP_FLAGS_PROTO_IPV6 | DNS_LUP_FLAGS_PROTO_IPV4)) == 0) { 606 ntstdio_printf(&ntstdio,"DNS server not available.\n");604 printf("DNS server not available.\n"); 607 605 return 0; 608 606 } … … 620 618 621 619 if ((error = tget_mpf(MPF_RSLV_SRBUF, (void*)&msg, TMO_FEVR)) != E_OK) { 622 ntstdio_printf(&ntstdio,"get buffer error: %s.\n", itron_strerror(error));620 printf("get buffer error: %s.\n", itron_strerror(error)); 623 621 return 0; 624 622 } 625 623 626 624 if ((length = dns_lookup_host(flags | DNS_LUP_FLAGS_MSG, line, msg, DNS_UDP_MSG_LENGTH, &rslv)) < 0) { 627 // ntstdio_printf(&ntstdio,"error: %s.\n", itron_strerror(length));625 //printf("error: %s.\n", itron_strerror(length)); 628 626 goto err_ret; 629 627 } 630 628 631 629 dly_tsk(1 * 1000); 632 ntstdio_printf(&ntstdio,"DNS header: flags: ");630 printf("DNS header: flags: "); 633 631 if (rslv.dns_hdr.code & (DNS_QR_RESPONSE | DNS_AUTHORITATIVE | 634 632 DNS_TRUN_CATION | DNS_RECURSION_DESIRED | DNS_RECURSION_AVAILABLE)) { 635 ntstdio_printf(&ntstdio,(rslv.dns_hdr.code & DNS_QR_RESPONSE) ? "QR," : "");636 ntstdio_printf(&ntstdio,(rslv.dns_hdr.code & DNS_AUTHORITATIVE) ? "AA," : "");637 ntstdio_printf(&ntstdio,(rslv.dns_hdr.code & DNS_TRUN_CATION) ? "TC," : "");638 ntstdio_printf(&ntstdio,(rslv.dns_hdr.code & DNS_RECURSION_DESIRED) ? "RD," : "");639 ntstdio_printf(&ntstdio,(rslv.dns_hdr.code & DNS_RECURSION_AVAILABLE) ? "RA," : "");640 ntstdio_printf(&ntstdio," ");641 } 642 ntstdio_printf(&ntstdio,"opcode: ");643 ntstdio_printf(&ntstdio,(rslv.dns_hdr.code & DNS_OPCODE_REVERSE) ? "RV" : "FW");644 ntstdio_printf(&ntstdio,(rslv.dns_hdr.code & DNS_OPCODE_STATUS) ? ",ST" : "");645 ntstdio_printf(&ntstdio,", rcode: %s.\n",633 printf((rslv.dns_hdr.code & DNS_QR_RESPONSE) ? "QR," : ""); 634 printf((rslv.dns_hdr.code & DNS_AUTHORITATIVE) ? "AA," : ""); 635 printf((rslv.dns_hdr.code & DNS_TRUN_CATION) ? "TC," : ""); 636 printf((rslv.dns_hdr.code & DNS_RECURSION_DESIRED) ? "RD," : ""); 637 printf((rslv.dns_hdr.code & DNS_RECURSION_AVAILABLE) ? "RA," : ""); 638 printf(" "); 639 } 640 printf("opcode: "); 641 printf((rslv.dns_hdr.code & DNS_OPCODE_REVERSE) ? "RV" : "FW"); 642 printf((rslv.dns_hdr.code & DNS_OPCODE_STATUS) ? ",ST" : ""); 643 printf(", rcode: %s.\n", 646 644 (rslv.dns_hdr.code & DNS_RCODE_MASK) > DNS_RCODE_REFUSED 647 645 ? "6" : rcode_str[rslv.dns_hdr.code & DNS_RCODE_MASK]); 648 646 649 647 if ((offset = show_dns_qdsection(msg, length, &rslv)) < 0) { 650 ntstdio_printf(&ntstdio,"msg error: %s.\n", itron_strerror(offset));648 printf("msg error: %s.\n", itron_strerror(offset)); 651 649 } 652 650 if ((offset = show_dns_section(msg, length, rslv.dns_hdr.ancount, rslv.an_offset, "answer")) < 0) { 653 ntstdio_printf(&ntstdio,"msg error: %s.\n", itron_strerror(offset));651 printf("msg error: %s.\n", itron_strerror(offset)); 654 652 } 655 653 if ((offset = show_dns_section(msg, length, rslv.dns_hdr.nscount, rslv.ns_offset, "authority")) < 0) { 656 ntstdio_printf(&ntstdio,"msg error: %s.\n", itron_strerror(offset));654 printf("msg error: %s.\n", itron_strerror(offset)); 657 655 } 658 656 if ((offset = show_dns_section(msg, length, rslv.dns_hdr.arcount, rslv.ar_offset, "additional")) < 0) { 659 ntstdio_printf(&ntstdio,"msg error: %s.\n", itron_strerror(offset));657 printf("msg error: %s.\n", itron_strerror(offset)); 660 658 } 661 659 662 660 err_ret: 663 661 if ((error = rel_mpf(MPF_RSLV_SRBUF, msg)) != E_OK) 664 ntstdio_printf(&ntstdio,"release buffer error: %s.\n", itron_strerror(error));662 printf("release buffer error: %s.\n", itron_strerror(error)); 665 663 return 0; 666 664 } -
asp3_tinet_ecnl_arm/trunk/ntshell/src/ntp_cli.c
r364 r374 50 50 #include <t_syslog.h> 51 51 #include "kernel_cfg.h" 52 #include "util/ntstdio.h" 53 54 extern ntstdio_t ntstdio; 52 #include <stdio.h> 55 53 56 54 #endif /* of #if defined(TARGET_KERNEL_ASP) */ … … 279 277 } 280 278 281 ntstdio_printf(&ntstdio,"[NTP CLI,%d] recv time: %s .%09u\n",279 printf("[NTP CLI,%d] recv time: %s .%09u\n", 282 280 nc->cepid, nc->buf, tp.tv_nsec); 283 281 } … … 311 309 line = lookup_ipaddr(&nc->ipaddr6, NTP_SRV_URL, API_PROTO_IPV4); 312 310 if (line == NULL || !in6_is_addr_ipv4mapped(&nc->ipaddr6)) { 313 ntstdio_printf(&ntstdio,"[NTP CLI,%d] sleep %d.%03u[s], unknown host.",311 printf("[NTP CLI,%d] sleep %d.%03u[s], unknown host.", 314 312 nc->cepid, SLP_ITV / SYSTIM_HZ, SLP_ITV % SYSTIM_HZ); 315 313 nc->timer = SLP_ITV; … … 319 317 #else /* of #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) */ 320 318 if ((line = lookup_ipaddr(&nc->snd_rmt.ipaddr, NTP_SRV_URL, DEFAULT_API_PROTO)) == NULL) { 321 ntstdio_printf(&ntstdio,"[NTP CLI,%d] sleep %d.%03u[s], unknown host.",319 printf("[NTP CLI,%d] sleep %d.%03u[s], unknown host.", 322 320 nc->cepid, SLP_ITV / SYSTIM_HZ, SLP_ITV % SYSTIM_HZ); 323 321 nc->timer = SLP_ITV; … … 423 421 424 422 if ((error = udp_snd_dat(nc->cepid, &nc->snd_rmt, ntp, len, TMO_NBLK)) != E_WBLK) { 425 ntstdio_printf(&ntstdio,"[NTP CLI,%d] udp_snd_dat error: %s",423 printf("[NTP CLI,%d] udp_snd_dat error: %s", 426 424 nc->cepid, itron_strerror(error)); 427 425 return error; … … 441 439 ret = get_tim(&time); 442 440 if (ret != E_OK) { 443 ntstdio_printf(&ntstdio,"[NTP CLI,%d] get_tim error: %s",441 printf("[NTP CLI,%d] get_tim error: %s", 444 442 nc->cepid, itron_strerror(ret)); 445 443 tp->tv_sec = 0; … … 461 459 ret = set_tim(time); 462 460 if (ret != E_OK) { 463 ntstdio_printf(&ntstdio,"[NTP CLI,%d] set_tim error: %s",461 printf("[NTP CLI,%d] set_tim error: %s", 464 462 nc->cepid, itron_strerror(ret)); 465 463 } … … 479 477 if (len < 0 && len != E_RLWAI) { 480 478 /* E_RLWAI 以外で、0 以下の場合は、エラーを意味している。*/ 481 ntstdio_printf(&ntstdio,"[NTP CLI,%d] callback error: %s, fncd: %s", nc->cepid,479 printf("[NTP CLI,%d] callback error: %s, fncd: %s", nc->cepid, 482 480 itron_strerror(len), in_strtfn(fncd)); 483 481 } … … 486 484 if ((len = udp_rcv_dat(nc->cepid, &nc->rcv_rmt, &nc->ntp_msg, len, TMO_POL)) < 0) 487 485 { 488 ntstdio_printf(&ntstdio,"[NTP CLI,%d] udp_rcv_dat error: %s", nc->cepid,486 printf("[NTP CLI,%d] udp_rcv_dat error: %s", nc->cepid, 489 487 itron_strerror(len)); 490 488 } … … 518 516 519 517 get_tid(&nc->tskid); 520 ntstdio_printf(&ntstdio,"[NTP CLI:%d,%d] started.", nc->tskid, (ID)exinf);518 printf("[NTP CLI:%d,%d] started.", nc->tskid, (ID)exinf); 521 519 522 520 /* 初期化 */ … … 525 523 ret = get_tim(&time); 526 524 if (ret != E_OK) { 527 ntstdio_printf(&ntstdio,"[NTP CLI,%d] get_tim error: %7lu,%s",525 printf("[NTP CLI,%d] get_tim error: %7lu,%s", 528 526 nc->cepid, time / SYSTIM_HZ, itron_strerror(ret)); 529 527 return; … … 539 537 error = tslp_tsk(timer); 540 538 if ((error != E_OK) && (error != E_TMOUT)) { 541 ntstdio_printf(&ntstdio,"[NTP CLI,%d] tslp_tsk error: %s %d",539 printf("[NTP CLI,%d] tslp_tsk error: %s %d", 542 540 nc->cepid, itron_strerror(error), timer); 543 541 break; … … 546 544 ret = get_tim(&time); 547 545 if (ret != E_OK) { 548 ntstdio_printf(&ntstdio,"[NTP CLI,%d] get_tim error: %s",546 printf("[NTP CLI,%d] get_tim error: %s", 549 547 nc->cepid, itron_strerror(ret)); 550 548 break; -
asp3_tinet_ecnl_arm/trunk/ntshell/src/ntshell_main.c
r364 r374 59 59 #include "ntshell_main.h" 60 60 #include "socket_stub.h" 61 #include "usb_hbth.h"62 63 extern int bt_bnep_mode;64 61 65 62 char command[NTOPT_TEXT_MAXLEN]; 66 ntstdio_t ntstdio;67 63 68 64 extern uint8_t mac_addr[6]; … … 87 83 volatile int ntshell_state; 88 84 jmp_buf process_exit; 89 void sys_init(void); 90 NTSHELL_SERIAL_READ ntshell_serial_read = 0; 91 NTSHELL_SERIAL_WRITE ntshell_serial_write = 0; 92 void *ntshell_serial_extobj; 93 94 unsigned char ntstdio_xi(struct ntstdio_t *handle) 95 { 96 unsigned char buf[1]; 97 ntshell_serial_read((char *)buf, 1, ntshell_serial_extobj); 98 return buf[0]; 99 } 100 101 void ntstdio_xo(struct ntstdio_t *handle, unsigned char c) 102 { 103 char buf[1]; 104 buf[0] = c; 105 ntshell_serial_write(buf, 1, ntshell_serial_extobj); 106 } 107 108 void ntshell_task_init(NTSHELL_SERIAL_READ func_read, 109 NTSHELL_SERIAL_WRITE func_write, void *extobj) 110 { 111 ntshell_serial_read = func_read; 112 ntshell_serial_write = func_write; 113 ntshell_serial_extobj = extobj; 114 115 sys_init(); 116 117 ntstdio_init(&ntstdio, NTSTDIO_OPTION_LINE_ECHO | NTSTDIO_OPTION_CANON | NTSTDIO_OPTION_LF_CRLF | NTSTDIO_OPTION_LF_CR, ntstdio_xi, ntstdio_xo); 85 86 void ntshell_task_init(ID portid) 87 { 88 serial_ctl_por(portid, IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV); 118 89 } 119 90 … … 177 148 const cmd_table_t *p = cmd_table_info.table; 178 149 for (int i = 0; i < cmd_table_info.count; i++) { 179 ntstdio_puts(&ntstdio, p->cmd); 180 ntstdio_puts(&ntstdio, "\t:"); 181 ntstdio_puts(&ntstdio, p->desc); 182 ntstdio_puts(&ntstdio, "\n"); 150 fwrite(p->cmd, strlen(p->cmd), 1, stdout); 151 fwrite("\t:", strlen("\t:"), 1, stdout); 152 puts(p->desc); 183 153 p++; 184 154 } … … 206 176 int execute_command(int wait) 207 177 { 178 T_RTSK rtsk; 208 179 ER ret; 209 180 … … 228 199 do { 229 200 tslp_tsk(100000); 201 202 ret = ref_tsk(NTSHELL_TASK, &rtsk); 203 if ((ret != E_OK) || (rtsk.tskstat == TTS_DMT)) 204 ntshell_state = 3; 230 205 } while(ntshell_state == 1); 231 206 … … 237 212 ntlibc_strlcpy(command, text, sizeof(command)); 238 213 return execute_command(1); 239 }240 241 int stdio_close(struct _IO_FILE *fp)242 {243 return -EPERM;244 }245 246 size_t stdio_read(struct _IO_FILE *fp, unsigned char *data, size_t len)247 {248 return -EPERM;249 }250 251 size_t stdio_write(struct _IO_FILE *fp, const unsigned char *data, size_t len)252 {253 return -EPERM;254 }255 256 size_t stdin_read(struct _IO_FILE *fp, unsigned char *data, size_t len)257 {258 int i = 0;259 while (i < len) {260 int c = ntstdio_getc(&ntstdio);261 data[i++] = c;262 if ((c == EOF) || (c == '\n'))263 break;264 }265 return i;266 }267 268 size_t stdout_write(struct _IO_FILE *fp, const unsigned char *data, size_t len)269 {270 for (int i = 0; i < len; i++) {271 ntstdio_putc(&ntstdio, data[i]);272 }273 return len;274 }275 276 size_t stderr_write(struct _IO_FILE *fp, const unsigned char *data, size_t len)277 {278 for (int i = 0; i < len; i++) {279 ntstdio_putc(&ntstdio, data[i]);280 }281 return len;282 }283 284 int sio_close(struct _IO_FILE *fp)285 {286 return -EPERM;287 }288 289 size_t sio_read(struct _IO_FILE *fp, unsigned char *data, size_t len)290 {291 return -EPERM;292 }293 294 size_t sio_write(struct _IO_FILE *fp, const unsigned char *data, size_t len)295 {296 return -EPERM;297 }298 299 off_t sio_seek(struct _IO_FILE *fp, off_t ofs, int org)300 {301 return -EPERM;302 }303 304 int sio_ioctl(struct _IO_FILE *fp, int request, void *arg)305 {306 switch (request) {307 case TIOCGWINSZ:308 return 0;309 case TCGETS:310 return sio_tcgetattr(fp->fd, (struct termios *)arg);311 case TCSETS + TCSANOW:312 case TCSETS + TCSADRAIN:313 case TCSETS + TCSAFLUSH:314 return sio_tcsetattr(fp->fd, request - TCSETS, (const struct termios *)arg);315 }316 317 return -EINVAL;318 214 } 319 215 … … 456 352 } 457 353 354 int shell_kill(int pid, int sig) 355 { 356 DebugBreak(); 357 return -1; 358 } 359 360 int shell_gettimeofday(struct timeval *tv, void *tzvp) 361 { 362 SYSTIM time; 363 if (!tv) return 0; 364 get_tim(&time); 365 tv->tv_sec = time / 1000000; 366 tv->tv_usec = time - (tv->tv_sec * 1000000); 367 return 0; 368 } 369 -
asp3_tinet_ecnl_arm/trunk/ntshell/src/ntshell_main.cfg
r364 r374 41 41 #include "ntshell_main.h" 42 42 43 CRE_TSK(NTSHELL_TASK, { TA_NULL, 0, ntshell_task, NTSHELL_PRIORITY, NTSHELL_STACK_SIZE, NULL }); 43 ATT_INI({ TA_NULL, 0, sys_init }); 44 45 CRE_TSK(NTSHELL_TASK, { TA_FPU, 0, ntshell_task, NTSHELL_PRIORITY, NTSHELL_STACK_SIZE, NULL }); 44 46 CRE_FLG(FLG_SELECT_WAIT, { TA_WMUL, 0x00 }); 45 47 CRE_SEM(SEM_FILEDESC, { TA_TPRI, 1, 1 }); 46 CRE_SEM(SEM_MALLOC, { TA_TPRI, 1, 1 }); -
asp3_tinet_ecnl_arm/trunk/ntshell/src/ntshell_main.h
r367 r374 76 76 extern PRI main_task_priority; 77 77 78 /* ntshellの初期化 */ 79 void sys_init(intptr_t exinf); 80 78 81 /* ntshellタスク初期化 */ 79 void ntshell_task_init(NTSHELL_SERIAL_READ func_read, 80 NTSHELL_SERIAL_WRITE func_write, void *extobj); 82 void ntshell_task_init(ID portid); 81 83 82 84 /* ntshellタスク */ -
asp3_tinet_ecnl_arm/trunk/ntshell/src/shellif.h
r364 r374 134 134 135 135 // dirent.h 136 typedef struct __dirstream DIR;136 typedef struct __dirstream FATFS_DIR; 137 137 138 138 int shell_getdents(int, struct dirent *, size_t); … … 303 303 #endif 304 304 305 struct tm *gmtime_r(const time_t *t, struct tm *tm);306 305 void *malloc(size_t size); 307 306 void *calloc(size_t size, size_t count); -
asp3_tinet_ecnl_arm/trunk/ntshell/src/socket_stub.c
r364 r374 57 57 #include <netinet/udp_var.h> 58 58 #include <net/net_buf.h> 59 //#include <netinet/tcp_var.h> 59 #include <netinet/udp.h> 60 #include <netinet/udp_var.h> 61 #include <netinet/tcp.h> 62 #include <netinet/tcp_var.h> 60 63 #include <netapp/resolver.h> 61 64 extern const ID tmax_tcp_cepid; … … 64 67 #include "kernel_cfg.h" 65 68 69 #ifdef _DEBUG 70 static const char THIS_FILE[] = __FILE__; 71 #endif 72 66 73 #define SOCKET_TIMEOUT 2000000 74 75 static int tcp_fd_close(struct SHELL_FILE *fp); 76 static size_t tcp_fd_read(struct SHELL_FILE *fp, unsigned char *data, size_t len); 77 static size_t tcp_fd_write(struct SHELL_FILE *fp, const unsigned char *data, size_t len); 78 static off_t tcp_fd_seek(struct SHELL_FILE *fp, off_t ofs, int org); 79 static int tcp_fd_ioctl(struct SHELL_FILE *fp, int req, void *arg); 80 static bool_t tcp_fd_readable(struct SHELL_FILE *fp); 81 static void tcp_fd_delete(struct SHELL_FILE *fp); 82 83 static int udp_fd_close(struct SHELL_FILE *fp); 84 static size_t udp_fd_read(struct SHELL_FILE *fp, unsigned char *data, size_t len); 85 static size_t udp_fd_write(struct SHELL_FILE *fp, const unsigned char *data, size_t len); 86 static off_t udp_fd_seek(struct SHELL_FILE *fp, off_t ofs, int org); 87 static int udp_fd_ioctl(struct SHELL_FILE *fp, int req, void *arg); 88 static bool_t udp_fd_readable(struct SHELL_FILE *fp); 89 static void udp_fd_delete(struct SHELL_FILE *fp); 90 91 IO_TYPE IO_TYPE_TCP = { tcp_fd_close, tcp_fd_read, tcp_fd_write, tcp_fd_seek, tcp_fd_ioctl, tcp_fd_readable, tcp_fd_delete }; 92 IO_TYPE IO_TYPE_UDP = { udp_fd_close, udp_fd_read, udp_fd_write, udp_fd_seek, udp_fd_ioctl, udp_fd_readable, udp_fd_delete }; 67 93 68 94 typedef struct id_table_t { … … 116 142 } 117 143 118 int delete_tcp_rep(int repid) 119 { 120 return delete_tcp_fd(tmax_tcp_cepid + repid); 121 } 122 123 typedef struct _IO_FILE SOCKET; 144 typedef struct SHELL_FILE SOCKET; 124 145 125 146 int shell_socket(int family, int type, int protocol) … … 141 162 switch (type) { 142 163 case SOCK_STREAM: 143 fp = new_tcp_fd(0); 164 fp = new_fp(&IO_TYPE_TCP, 0, 0); 165 if (fp == NULL) 166 return -ENOMEM; 167 168 fp->exinf = malloc(sizeof(socket_t)); 169 memset(fp->exinf, 0, sizeof(socket_t)); 144 170 break; 145 171 case SOCK_DGRAM: 146 fp = new_udp_fd(0); 172 fp = new_fp(&IO_TYPE_UDP, 0, 1); 173 if (fp == NULL) 174 return -ENOMEM; 175 176 fp->exinf = malloc(sizeof(socket_t)); 177 memset(fp->exinf, 0, sizeof(socket_t)); 147 178 break; 148 179 default: … … 150 181 } 151 182 152 if (fp == NULL) { 153 return -ENOMEM; 154 } 155 156 fp->psock->family = family; 157 fp->psock->type = type; 158 fp->psock->protocol = protocol; 159 fp->psock->flags = flags; 183 socket_t *socket = (socket_t *)fp->exinf; 184 socket->family = family; 185 socket->type = type; 186 socket->protocol = protocol; 187 socket->flags = flags; 160 188 161 189 return fp->fd; … … 167 195 if (fp == NULL) 168 196 return -EBADF; 169 if (fp->psock->family != addr->sa_family) 197 socket_t *socket = (socket_t *)fp->exinf; 198 if (socket->family != addr->sa_family) 170 199 return -EINVAL; 171 200 … … 177 206 } 178 207 struct sockaddr_in *addr_in = (struct sockaddr_in *)addr; 179 memcpy(& fp->psock->laddr4, addr, len);180 switch ( fp->psock->type) {208 memcpy(&socket->laddr4, addr, len); 209 switch (socket->type) { 181 210 case SOCK_STREAM: { 182 211 ID cepid = new_id(tcp_cepid_table, tcp_cepid_table_count); … … 184 213 return -ENOMEM; 185 214 186 fp->psock->buf_size = 512 + 512;187 fp->psock->buf = malloc(fp->psock->buf_size);215 socket->buf_size = 512 + 512; 216 socket->buf = malloc(socket->buf_size); 188 217 #ifdef _DEBUG 189 memset( fp->psock->buf, 0, fp->psock->buf_size);218 memset(socket->buf, 0, socket->buf_size); 190 219 #endif 191 T_TCP_CCEP ccep = { 0, fp->psock->buf, 512, &fp->psock->buf[512], 512, (FP)socket_tcp_callback };220 T_TCP_CCEP ccep = { 0, socket->buf, 512, &socket->buf[512], 512, (FP)socket_tcp_callback }; 192 221 ret = tcp_cre_cep(cepid, &ccep); 193 222 if (ret != E_OK) { … … 196 225 } 197 226 fp->handle = cepid; 198 fp->psock->cepid = cepid;227 socket->cepid = cepid; 199 228 break; 200 229 } … … 211 240 } 212 241 fp->handle = cepid; 213 fp->psock->cepid = cepid;242 socket->cepid = cepid; 214 243 break; 215 244 } … … 223 252 return -EINVAL; 224 253 } 225 memcpy(& fp->psock->laddr4, addr, len);254 memcpy(&socket->laddr4, addr, len); 226 255 break; 227 256 } … … 236 265 if (fp == NULL) 237 266 return -EBADF; 238 if (fp->psock->type != SOCK_STREAM) 267 socket_t *socket = (socket_t *)fp->exinf; 268 if (socket->type != SOCK_STREAM) 239 269 return -EINVAL; 240 270 241 fp->psock->backlog = backlog;271 socket->backlog = backlog; 242 272 243 273 ER ret; 244 switch ( fp->psock->family) {274 switch (socket->family) { 245 275 case AF_INET: { 246 276 ID repid = new_id(tcp_repid_table, tcp_repid_table_count); … … 248 278 return -ENOMEM; 249 279 250 struct sockaddr_in *laddr = & fp->psock->laddr4;280 struct sockaddr_in *laddr = &socket->laddr4; 251 281 T_TCP_CREP crep = { 0, {ntohl(laddr->sin_addr.s_addr), ntohs(laddr->sin_port)} }; 252 282 ret = tcp_cre_rep(repid, &crep); … … 255 285 return -ENOMEM; 256 286 } 257 fp->psock->repid = repid;287 socket->repid = repid; 258 288 break; 259 289 } … … 271 301 if (fp == NULL) 272 302 return -EBADF; 273 if (fp->psock->type != SOCK_STREAM) 303 socket_t *socket = (socket_t *)fp->exinf; 304 if (socket->type != SOCK_STREAM) 274 305 return -EINVAL; 275 306 276 307 ER ret; 277 switch ( fp->psock->family) {308 switch (socket->family) { 278 309 case AF_INET: { 279 310 if (len < 8) { 280 311 return -EINVAL; 281 312 } 282 if ( fp->psock->cepid == 0) {313 if (socket->cepid == 0) { 283 314 ID cepid = new_id(tcp_cepid_table, tcp_cepid_table_count); 284 315 if (cepid < 0) 285 316 return -ENOMEM; 286 317 287 fp->psock->buf_size = 512 + 512;288 fp->psock->buf = malloc(fp->psock->buf_size);318 socket->buf_size = 512 + 512; 319 socket->buf = malloc(socket->buf_size); 289 320 #ifdef _DEBUG 290 memset( fp->psock->buf, 0, fp->psock->buf_size);321 memset(socket->buf, 0, socket->buf_size); 291 322 #endif 292 T_TCP_CCEP ccep = { 0, fp->psock->buf, 512, &fp->psock->buf[512], 512, (FP)socket_tcp_callback };323 T_TCP_CCEP ccep = { 0, socket->buf, 512, &socket->buf[512], 512, (FP)socket_tcp_callback }; 293 324 ret = tcp_cre_cep(cepid, &ccep); 294 325 if (ret != E_OK) { … … 297 328 } 298 329 fp->handle = cepid; 299 fp->psock->cepid = cepid;300 } 301 struct sockaddr_in *laddr = & fp->psock->laddr4;302 struct sockaddr_in *raddr = & fp->psock->raddr4;330 socket->cepid = cepid; 331 } 332 struct sockaddr_in *laddr = &socket->laddr4; 333 struct sockaddr_in *raddr = &socket->raddr4; 303 334 memset(raddr, 0, sizeof(*raddr)); 304 335 memcpy(raddr, addr, len); 305 336 T_IPV4EP lep = { ntohl(laddr->sin_addr.s_addr), ntohs(laddr->sin_port) }; 306 337 T_IPV4EP rep = { ntohl(raddr->sin_addr.s_addr), ntohs(raddr->sin_port) }; 307 ret = tcp_con_cep( fp->psock->cepid, &lep, &rep, SOCKET_TIMEOUT);338 ret = tcp_con_cep(socket->cepid, &lep, &rep, SOCKET_TIMEOUT); 308 339 if (ret < 0) { 309 340 return -EHOSTUNREACH; … … 324 355 if (lfp == NULL) 325 356 return -EBADF; 326 if ( lfp->psock->type != SOCK_STREAM)357 if (((socket_t *)lfp->exinf)->type != SOCK_STREAM) 327 358 return -EINVAL; 328 359 329 SOCKET *fp = new_ tcp_fd(0);330 if (fp == NULL) {360 SOCKET *fp = new_fp(&IO_TYPE_TCP, 0, 0); 361 if (fp == NULL) 331 362 return -ENOMEM; 332 } 333 334 memcpy(fp->psock, lfp->psock, offsetof(socket_t, buf_size)); 363 364 fp->exinf = malloc(sizeof(socket_t)); 365 memset(fp->exinf, 0, sizeof(socket_t)); 366 367 memcpy(fp->exinf, lfp->exinf, offsetof(socket_t, buf_size)); 335 368 336 369 ER ret; 337 switch (fp->psock->family) { 370 socket_t *socket = (socket_t *)fp->exinf; 371 switch (socket->family) { 338 372 case AF_INET: { 339 373 ID cepid; 340 if ( fp->psock->cepid == 0) {374 if (socket->cepid == 0) { 341 375 cepid = new_id(tcp_cepid_table, tcp_cepid_table_count); 342 376 if (cepid < 0) 343 377 return -ENOMEM; 344 378 345 fp->psock->buf_size = 512 + 512;346 fp->psock->buf = malloc(fp->psock->buf_size);379 socket->buf_size = 512 + 512; 380 socket->buf = malloc(socket->buf_size); 347 381 #ifdef _DEBUG 348 memset( fp->psock->buf, 0, fp->psock->buf_size);382 memset(socket->buf, 0, socket->buf_size); 349 383 #endif 350 T_TCP_CCEP ccep = { 0, fp->psock->buf, 512, &fp->psock->buf[512], 512, (FP)socket_tcp_callback };384 T_TCP_CCEP ccep = { 0, socket->buf, 512, &socket->buf[512], 512, (FP)socket_tcp_callback }; 351 385 ret = tcp_cre_cep(cepid, &ccep); 352 386 if (ret != E_OK) { … … 355 389 } 356 390 fp->handle = cepid; 357 fp->psock->cepid = cepid;391 socket->cepid = cepid; 358 392 } 359 393 else { 360 cepid = lfp->psock->cepid;394 cepid = ((socket_t *)lfp->exinf)->cepid; 361 395 fp->handle = cepid; 362 lfp->handle = tmax_tcp_cepid + lfp->psock->repid;363 lfp->psock->cepid = 0;364 lfp->psock->buf_size = 0;365 lfp->psock->buf = 0;396 lfp->handle = tmax_tcp_cepid + ((socket_t *)lfp->exinf)->repid; 397 ((socket_t *)lfp->exinf)->cepid = 0; 398 ((socket_t *)lfp->exinf)->buf_size = 0; 399 ((socket_t *)lfp->exinf)->buf = 0; 366 400 } 367 401 T_IPV4EP rep = { 0, 0 }; 368 ret = tcp_acp_cep( fp->psock->cepid, fp->psock->repid, &rep, TMO_FEVR);402 ret = tcp_acp_cep(socket->cepid, socket->repid, &rep, TMO_FEVR); 369 403 if (ret < 0) { 370 404 return -ENOMEM; 371 405 } 372 struct sockaddr_in *raddr = & fp->psock->raddr4;406 struct sockaddr_in *raddr = &socket->raddr4; 373 407 memset(raddr, 0, sizeof(*raddr)); 374 408 raddr->sin_family = AF_INET; … … 387 421 return -EINVAL; 388 422 } 389 struct sockaddr_in *raddr = & fp->psock->raddr4;423 struct sockaddr_in *raddr = &socket->raddr4; 390 424 if (sz > sizeof(*raddr)) 391 425 sz = sizeof(*raddr); … … 405 439 406 440 int ret = 0; 407 switch (fp->psock->family) { 441 socket_t *socket = (socket_t *)fp->exinf; 442 switch (socket->family) { 408 443 case AF_INET: { 409 switch ( fp->psock->type) {444 switch (socket->type) { 410 445 case SOCK_STREAM: { 411 446 if ((addr != NULL) || (alen != 0)) { … … 414 449 415 450 if (flags & MSG_OOB) { 416 ret = tcp_snd_oob( fp->psock->cepid, (void *)buf, len, SOCKET_TIMEOUT);451 ret = tcp_snd_oob(socket->cepid, (void *)buf, len, SOCKET_TIMEOUT); 417 452 if (ret < 0) { 418 453 return -ECOMM; … … 421 456 else { 422 457 for (;;) { 423 ret = tcp_snd_dat( fp->psock->cepid, (void *)buf, len, SOCKET_TIMEOUT);458 ret = tcp_snd_dat(socket->cepid, (void *)buf, len, SOCKET_TIMEOUT); 424 459 if (ret < 0) { 425 460 if (ret == E_TMOUT) … … 440 475 return -EINVAL; 441 476 } 442 struct sockaddr_in *raddr = & fp->psock->raddr4;477 struct sockaddr_in *raddr = &socket->raddr4; 443 478 memset(raddr, 0, sizeof(*raddr)); 444 479 memcpy(raddr, addr, sz); 445 480 T_IPV4EP rep = { ntohl(raddr->sin_addr.s_addr), ntohs(raddr->sin_port) }; 446 ret = udp_snd_dat( fp->psock->cepid, &rep, (void *)buf, len,447 ( fp->psock->flags & O_NONBLOCK) ? TMO_POL : SOCKET_TIMEOUT);481 ret = udp_snd_dat(socket->cepid, &rep, (void *)buf, len, 482 (socket->flags & O_NONBLOCK) ? TMO_POL : SOCKET_TIMEOUT); 448 483 if (ret < 0) { 449 484 return (ret == E_TMOUT) ? -ETIME : -ECOMM; … … 476 511 477 512 int ret = 0; 478 switch (fp->psock->family) { 513 socket_t *socket = (socket_t *)fp->exinf; 514 switch (socket->family) { 479 515 case AF_INET: { 480 switch ( fp->psock->type) {516 switch (socket->type) { 481 517 case SOCK_STREAM: { 482 518 if (flags & MSG_OOB) { 483 ret = tcp_rcv_oob( fp->psock->cepid, buf, len);519 ret = tcp_rcv_oob(socket->cepid, buf, len); 484 520 if (ret < 0) { 485 521 syslog(LOG_ERROR, "tcp_rcv_oob => %d", ret); … … 489 525 else { 490 526 int rsz, tmp; 491 if ( fp->psock->input == NULL) {527 if (socket->input == NULL) { 492 528 ret = wai_sem(SEM_FILEDESC); 493 529 if (ret < 0) { 494 530 syslog(LOG_ERROR, "wai_sem => %d", ret); 495 531 } 496 fp->psock->len = 0;532 socket->len = 0; 497 533 ret = sig_sem(SEM_FILEDESC); 498 534 if (ret < 0) { 499 535 syslog(LOG_ERROR, "sig_sem => %d", ret); 500 536 } 501 ret = tcp_rcv_buf( fp->psock->cepid, &fp->psock->input, TMO_FEVR);537 ret = tcp_rcv_buf(socket->cepid, &socket->input, TMO_FEVR); 502 538 if (ret < 0) { 503 539 syslog(LOG_ERROR, "tcp_rcv_buf => %d", ret); … … 507 543 } 508 544 else 509 rsz = fp->psock->len;545 rsz = socket->len; 510 546 tmp = rsz; 511 547 if (rsz > len) 512 548 rsz = len; 513 549 if (rsz >= 0) { 514 memcpy(buf, fp->psock->input, rsz);550 memcpy(buf, socket->input, rsz); 515 551 ret = wai_sem(SEM_FILEDESC); 516 552 if (ret < 0) { 517 553 syslog(LOG_ERROR, "wai_sem => %d", ret); 518 554 } 519 fp->psock->len = tmp - rsz;555 socket->len = tmp - rsz; 520 556 ret = sig_sem(SEM_FILEDESC); 521 557 if (ret < 0) { … … 523 559 } 524 560 if (tmp - rsz == 0) { 525 fp->psock->input = NULL;561 socket->input = NULL; 526 562 } 527 563 else 528 fp->psock->input = (void *)&((uint8_t *)fp->psock->input)[rsz];529 ret = tcp_rel_buf( fp->psock->cepid, rsz);564 socket->input = (void *)&((uint8_t *)socket->input)[rsz]; 565 ret = tcp_rel_buf(socket->cepid, rsz); 530 566 if ((ret != E_OBJ) && (ret < 0)) { 531 567 syslog(LOG_ERROR, "tcp_rel_buf => %d", ret); … … 538 574 } 539 575 case SOCK_DGRAM: { 540 struct sockaddr_in *raddr = & fp->psock->raddr4;576 struct sockaddr_in *raddr = &socket->raddr4; 541 577 int rsz; 542 578 ret = wai_sem(SEM_FILEDESC); … … 544 580 syslog(LOG_ERROR, "wai_sem => %d", ret); 545 581 } 546 T_NET_BUF *input = fp->psock->input;582 T_NET_BUF *input = socket->input; 547 583 if (input == NULL) { 548 584 ret = sig_sem(SEM_FILEDESC); … … 552 588 553 589 T_IPV4EP rep = { 0, 0 }; 554 ret = udp_rcv_dat( fp->psock->cepid, &rep, buf, len,555 ( fp->psock->flags & O_NONBLOCK) ? TMO_POL : SOCKET_TIMEOUT);590 ret = udp_rcv_dat(socket->cepid, &rep, buf, len, 591 (socket->flags & O_NONBLOCK) ? TMO_POL : SOCKET_TIMEOUT); 556 592 if (ret < 0) { 557 syslog(LOG_ERROR, "udp_rcv_buf => %d", ret); 593 if ((socket->flags & O_NONBLOCK) == 0) 594 syslog(LOG_ERROR, "udp_rcv_buf => %d", ret); 558 595 return (ret == E_TMOUT) ? -ETIME : -ECOMM; 559 596 } … … 565 602 } 566 603 int sz = *alen; 567 memset(raddr, 0, sizeof( fp->psock->raddr4));604 memset(raddr, 0, sizeof(socket->raddr4)); 568 605 raddr->sin_family = AF_INET; 569 606 raddr->sin_port = htons(rep.portno); 570 607 raddr->sin_addr.s_addr = htonl(rep.ipaddr); 571 if (sz > sizeof( fp->psock->raddr4))572 sz = sizeof( fp->psock->raddr4);608 if (sz > sizeof(socket->raddr4)) 609 sz = sizeof(socket->raddr4); 573 610 memcpy(addr, raddr, sz); 574 611 *alen = sz; … … 580 617 } 581 618 else { 582 rsz = fp->psock->len;583 void *pbuf = fp->psock->buf;584 fp->psock->input = NULL;585 fp->psock->len = 0;586 fp->psock->buf = NULL;619 rsz = socket->len; 620 void *pbuf = socket->buf; 621 socket->input = NULL; 622 socket->len = 0; 623 socket->buf = NULL; 587 624 if ((addr != NULL) && (alen != NULL)) { 588 625 int sz = *alen; 589 if (sz > sizeof( fp->psock->raddr4))590 sz = sizeof( fp->psock->raddr4);626 if (sz > sizeof(socket->raddr4)) 627 sz = sizeof(socket->raddr4); 591 628 memcpy(addr, raddr, sz); 592 629 *alen = sz; … … 632 669 633 670 ER ret; 634 switch (fp->psock->family) { 671 socket_t *socket = (socket_t *)fp->exinf; 672 switch (socket->family) { 635 673 case AF_INET: { 636 switch ( fp->psock->type) {674 switch (socket->type) { 637 675 case SOCK_STREAM: { 638 ret = tcp_sht_cep( fp->psock->cepid);676 ret = tcp_sht_cep(socket->cepid); 639 677 if (ret < 0) { 640 678 return -ECOMM; … … 661 699 662 700 ER ret; 663 switch (fp->psock->family) { 701 socket_t *socket = (socket_t *)fp->exinf; 702 switch (socket->family) { 664 703 case AF_INET: { 665 switch ( fp->psock->type) {704 switch (socket->type) { 666 705 case SOCK_STREAM: { 667 706 switch (level) { … … 669 708 switch (optname) { 670 709 case SO_REUSEADDR: 671 if ( fp->psock->flags & SO_REUSEADDR) {710 if (socket->flags & SO_REUSEADDR) { 672 711 *(bool *)optval = true; 673 712 } … … 677 716 break; 678 717 case SO_KEEPALIVE: 679 if ( fp->psock->flags & SO_KEEPALIVE) {718 if (socket->flags & SO_KEEPALIVE) { 680 719 *(bool *)optval = true; 681 720 } … … 692 731 break; 693 732 case IPPROTO_TCP: 694 ret = tcp_get_opt( fp->psock->cepid, optname, (void *)optval, *optlen);733 ret = tcp_get_opt(socket->cepid, optname, (void *)optval, *optlen); 695 734 if (ret < 0) { 696 735 return -EINVAL; … … 706 745 switch (level) { 707 746 case IPPROTO_UDP: 708 ret = udp_get_opt( fp->psock->cepid, optname, (void *)optval, *optlen);747 ret = udp_get_opt(socket->cepid, optname, (void *)optval, *optlen); 709 748 if (ret < 0) { 710 749 return -EINVAL; … … 736 775 737 776 ER ret; 738 switch (fp->psock->family) { 777 socket_t *socket = (socket_t *)fp->exinf; 778 switch (socket->family) { 739 779 case AF_INET: { 740 switch ( fp->psock->type) {780 switch (socket->type) { 741 781 case SOCK_STREAM: { 742 782 switch (level){ … … 745 785 case SO_REUSEADDR: 746 786 if (*(bool *)optval) { 747 fp->psock->flags |= SO_REUSEADDR;787 socket->flags |= SO_REUSEADDR; 748 788 } 749 789 else { 750 fp->psock->flags &= ~SO_REUSEADDR;790 socket->flags &= ~SO_REUSEADDR; 751 791 } 752 792 break; 753 793 case SO_KEEPALIVE: 754 794 if (*(bool *)optval) { 755 fp->psock->flags |= SO_KEEPALIVE;795 socket->flags |= SO_KEEPALIVE; 756 796 } 757 797 else { 758 fp->psock->flags &= ~SO_KEEPALIVE;798 socket->flags &= ~SO_KEEPALIVE; 759 799 } 760 800 break; … … 764 804 break; 765 805 case IPPROTO_TCP: 766 ret = tcp_set_opt( fp->psock->cepid, optname, (void *)optval, optlen);806 ret = tcp_set_opt(socket->cepid, optname, (void *)optval, optlen); 767 807 if (ret < 0) { 768 808 return -EINVAL; … … 777 817 switch (level){ 778 818 case IPPROTO_UDP: 779 ret = udp_set_opt( fp->psock->cepid, optname, (void *)optval, optlen);819 ret = udp_set_opt(socket->cepid, optname, (void *)optval, optlen); 780 820 if (ret < 0) { 781 821 return -EINVAL; … … 809 849 810 850 socklen_t size = *len; 811 switch (fp->psock->family) { 851 socket_t *socket = (socket_t *)fp->exinf; 852 switch (socket->family) { 812 853 case AF_INET: { 813 struct sockaddr_in *raddr = & fp->psock->raddr4;854 struct sockaddr_in *raddr = &socket->raddr4; 814 855 *len = sizeof(struct sockaddr_in); 815 856 if (size > sizeof(struct sockaddr_in)) … … 837 878 838 879 socklen_t size = *len; 839 switch (fp->psock->family) { 880 socket_t *socket = (socket_t *)fp->exinf; 881 switch (socket->family) { 840 882 case AF_INET: { 841 883 const T_IN4_ADDR *laddr4 = in4_get_ifaddr(0); … … 843 885 laddr.sin_family = AF_INET; 844 886 laddr.sin_addr.s_addr = htonl(*laddr4); 845 laddr.sin_port = fp->psock->laddr4.sin_port;887 laddr.sin_port = socket->laddr4.sin_port; 846 888 memset(&laddr.sin_zero, 0, sizeof(laddr.sin_zero)); 847 889 *len = sizeof(struct sockaddr_in); … … 859 901 } 860 902 861 int tcp_fd_close(struct _IO_FILE *fp)903 int tcp_fd_close(struct SHELL_FILE *fp) 862 904 { 863 905 ER ret, ret2; 864 906 865 switch (fp->psock->family) { 907 socket_t *socket = (socket_t *)fp->exinf; 908 switch (socket->family) { 866 909 case AF_INET: { 867 if ( fp->psock->cepid != 0) {868 ID cepid = fp->psock->cepid;910 if (socket->cepid != 0) { 911 ID cepid = socket->cepid; 869 912 ret = tcp_sht_cep(cepid); 870 913 if (ret < 0) { 871 914 //return -1; 872 915 } 873 ret = tcp_cls_cep(cepid, ( fp->psock->repid != 0) ? 0 : SOCKET_TIMEOUT);916 ret = tcp_cls_cep(cepid, (socket->repid != 0) ? 0 : SOCKET_TIMEOUT); 874 917 ret2 = tcp_del_cep(cepid); 875 free(fp->psock->buf); 876 fp->psock->buf = NULL; 877 delete_tcp_fd(cepid); 918 //delete_fd_by_id(&IO_TYPE_TCP, cepid); 878 919 delete_id(tcp_cepid_table, tcp_cepid_table_count, cepid); 879 920 if ((ret < 0) || (ret2 < 0)) { … … 881 922 } 882 923 } 883 else if ( fp->psock->repid != 0) {884 ID repid = fp->psock->repid;924 else if (socket->repid != 0) { 925 ID repid = socket->repid; 885 926 ret = tcp_del_rep(repid); 886 free(fp->psock->buf); 887 fp->psock->buf = NULL; 888 delete_tcp_fd(tmax_tcp_cepid + repid); 927 //delete_fd_by_id(&IO_TYPE_TCP, tmax_tcp_cepid + repid); 889 928 delete_id(tcp_repid_table, tcp_repid_table_count, repid); 890 929 if (ret < 0) { … … 893 932 } 894 933 else { 895 free(fp->psock->buf);896 fp->psock->buf = NULL;897 934 return -EINVAL; 898 935 } … … 907 944 } 908 945 909 size_t tcp_fd_read(struct _IO_FILE *fp, unsigned char *dst, size_t dstsz)946 size_t tcp_fd_read(struct SHELL_FILE *fp, unsigned char *dst, size_t dstsz) 910 947 { 911 948 return shell_recvfrom(fp->fd, dst, dstsz, 0, NULL, NULL); 912 949 } 913 950 914 size_t tcp_fd_write(struct _IO_FILE *fp, const unsigned char *src, size_t srcsz)951 size_t tcp_fd_write(struct SHELL_FILE *fp, const unsigned char *src, size_t srcsz) 915 952 { 916 953 return shell_sendto(fp->fd, src, srcsz, 0, NULL, 0); 917 954 } 918 955 919 off_t tcp_fd_seek(struct _IO_FILE *fp, off_t ofs, int org)956 off_t tcp_fd_seek(struct SHELL_FILE *fp, off_t ofs, int org) 920 957 { 921 958 return -EPERM; 922 959 } 923 960 924 int tcp_fd_ioctl(struct _IO_FILE *fp, int req, void *arg)961 int tcp_fd_ioctl(struct SHELL_FILE *fp, int req, void *arg) 925 962 { 926 963 return -EINVAL; 927 964 } 928 965 929 int udp_fd_close(struct _IO_FILE *fp) 966 bool_t tcp_fd_readable(struct SHELL_FILE *fp) 967 { 968 ER ret; 969 970 socket_t *socket = (socket_t *)fp->exinf; 971 if (socket->cepid != 0) { 972 if (socket->len == 0) { 973 ret = tcp_rcv_buf(socket->cepid, &socket->input, TMO_NBLK); 974 if ((ret != E_WBLK) && (ret != E_OBJ) && (ret < 0)) { 975 syslog(LOG_ERROR, "tcp_rcv_buf => %d", ret); 976 //return ret; 977 } 978 if (ret > 0) { 979 ret = wai_sem(SEM_FILEDESC); 980 if (ret < 0) { 981 syslog(LOG_ERROR, "wai_sem => %d", ret); 982 } 983 socket->len += ret; 984 ret = sig_sem(SEM_FILEDESC); 985 if (ret < 0) { 986 syslog(LOG_ERROR, "sig_sem => %d", ret); 987 } 988 } 989 } 990 else ret = 1; 991 if (ret > 0) { 992 return true; 993 } 994 } 995 996 return false; 997 } 998 999 void tcp_fd_delete(struct SHELL_FILE *fp) 1000 { 1001 socket_t *socket = (socket_t *)fp->exinf; 1002 free(socket->buf); 1003 socket->buf = NULL; 1004 free(fp->exinf); 1005 fp->exinf = NULL; 1006 } 1007 1008 ER socket_tcp_callback(ID cepid, FN fncd, void *p_parblk) 1009 { 1010 struct SHELL_FILE *fp = id_to_fd(&IO_TYPE_TCP, cepid); 1011 FLGPTN flgptn = 0; 1012 ER ret; 1013 int len; 1014 1015 if (fp == NULL) 1016 return E_PAR; 1017 1018 int fd = fp->fd; 1019 FD_SET(fd, (fd_set *)&flgptn); 1020 1021 switch (fncd) { 1022 case TFN_TCP_RCV_BUF: 1023 len = *(int *)p_parblk; 1024 if ((len <= 0) || (fp->exinf == NULL)) 1025 return E_OK; 1026 1027 ret = wai_sem(SEM_FILEDESC); 1028 if (ret < 0) { 1029 syslog(LOG_ERROR, "wai_sem => %d", ret); 1030 } 1031 socket_t *socket = (socket_t *)fp->exinf; 1032 socket->len += len; 1033 ret = sig_sem(SEM_FILEDESC); 1034 if (ret < 0) { 1035 syslog(LOG_ERROR, "sig_sem => %d", ret); 1036 } 1037 1038 if (fp->readevt_w == fp->readevt_r) fp->readevt_w++; 1039 1040 set_flg(FLG_SELECT_WAIT, flgptn); 1041 return E_OK; 1042 1043 case TFN_TCP_RCV_DAT: 1044 len = *(int *)p_parblk; 1045 if ((len <= 0) || (fp->exinf == NULL)) 1046 return E_OK; 1047 1048 ret = wai_sem(SEM_FILEDESC); 1049 if (ret < 0) { 1050 syslog(LOG_ERROR, "wai_sem => %d", ret); 1051 } 1052 socket->len += len; 1053 ret = sig_sem(SEM_FILEDESC); 1054 if (ret < 0) { 1055 syslog(LOG_ERROR, "sig_sem => %d", ret); 1056 } 1057 1058 if (fp->readevt_w == fp->readevt_r) fp->readevt_w++; 1059 1060 set_flg(FLG_SELECT_WAIT, flgptn); 1061 return E_OK; 1062 1063 case TFN_TCP_SND_DAT: 1064 if (fp->writeevt_w == fp->writeevt_r) fp->writeevt_w++; 1065 1066 set_flg(FLG_SELECT_WAIT, flgptn); 1067 return E_OK; 1068 1069 case TFN_TCP_CAN_CEP: 1070 if (fp->errorevt_w == fp->errorevt_r) fp->errorevt_w++; 1071 1072 set_flg(FLG_SELECT_WAIT, flgptn); 1073 return E_OK; 1074 1075 case TFN_TCP_DEL_REP: 1076 delete_fd_by_id(&IO_TYPE_TCP, tmax_tcp_cepid + cepid); 1077 return E_OK; 1078 1079 case TFN_TCP_DEL_CEP: 1080 delete_fd_by_id(&IO_TYPE_TCP, cepid); 1081 return E_OK; 1082 1083 default: 1084 return E_OK; 1085 } 1086 } 1087 1088 int udp_fd_close(struct SHELL_FILE *fp) 930 1089 { 931 1090 ER ret; 932 1091 ID cepid; 933 1092 934 switch (fp->psock->family) { 1093 socket_t *socket = (socket_t *)fp->exinf; 1094 switch (socket->family) { 935 1095 case AF_INET: { 936 cepid = fp->psock->cepid;1096 cepid = socket->cepid; 937 1097 ret = udp_del_cep(cepid); 938 //free(fp->psock->buf); 939 //fp->psock->buf = NULL; 940 delete_udp_fd(cepid); 1098 //delete_fd_by_id(&IO_TYPE_UDP, cepid); 941 1099 delete_id(udp_cepid_table, udp_cepid_table_count, cepid); 942 1100 if (ret < 0) { … … 953 1111 } 954 1112 955 size_t udp_fd_read(struct _IO_FILE *fp, unsigned char *dst, size_t dstsz)1113 size_t udp_fd_read(struct SHELL_FILE *fp, unsigned char *dst, size_t dstsz) 956 1114 { 957 1115 return shell_recvfrom(fp->fd, dst, dstsz, 0, NULL, NULL); 958 1116 } 959 1117 960 size_t udp_fd_write(struct _IO_FILE *fp, const unsigned char *src, size_t srcsz)1118 size_t udp_fd_write(struct SHELL_FILE *fp, const unsigned char *src, size_t srcsz) 961 1119 { 962 1120 return shell_sendto(fp->fd, src, srcsz, 0, NULL, 0); 963 1121 } 964 1122 965 off_t udp_fd_seek(struct _IO_FILE *fp, off_t ofs, int org)1123 off_t udp_fd_seek(struct SHELL_FILE *fp, off_t ofs, int org) 966 1124 { 967 1125 return -EPERM; 968 1126 } 969 1127 970 int udp_fd_ioctl(struct _IO_FILE *fp, int req, void *arg)1128 int udp_fd_ioctl(struct SHELL_FILE *fp, int req, void *arg) 971 1129 { 972 1130 return -EINVAL; 1131 } 1132 1133 bool_t udp_fd_readable(struct SHELL_FILE *fp) 1134 { 1135 socket_t *socket = (socket_t *)fp->exinf; 1136 if (socket->cepid != 0) { 1137 if (socket->input != NULL) { 1138 return true; 1139 } 1140 } 1141 1142 return false; 1143 } 1144 1145 void udp_fd_delete(struct SHELL_FILE *fp) 1146 { 1147 //socket_t *socket = (socket_t *)fp->exinf; 1148 //free(socket->buf); 1149 //socket->buf = NULL; 1150 free(fp->exinf); 1151 fp->exinf = NULL; 1152 } 1153 1154 ER socket_udp_callback(ID cepid, FN fncd, void *p_parblk) 1155 { 1156 struct SHELL_FILE *fp = id_to_fd(&IO_TYPE_UDP, cepid); 1157 FLGPTN flgptn = 0; 1158 int len; 1159 1160 if (fp == NULL) 1161 return E_PAR; 1162 1163 int fd = fp->fd; 1164 FD_SET(fd, (fd_set *)&flgptn); 1165 1166 switch (fncd) { 1167 case TEV_UDP_RCV_DAT: 1168 { 1169 T_UDP_RCV_DAT_PARA *udppara = (T_UDP_RCV_DAT_PARA *)p_parblk; 1170 len = udppara->len; 1171 if ((len <= 0) || (fp->exinf == NULL)) 1172 return E_OK; 1173 1174 ER ret = wai_sem(SEM_FILEDESC); 1175 if (ret < 0) { 1176 syslog(LOG_ERROR, "wai_sem => %d", ret); 1177 } 1178 socket_t *socket = (socket_t *)fp->exinf; 1179 socket->len = len; 1180 if (socket->input != NULL) { 1181 ret = rel_net_buf(socket->input); 1182 if (ret < 0) { 1183 syslog(LOG_ERROR, "rel_net_buf => %d", ret); 1184 } 1185 } 1186 socket->input = udppara->input; 1187 socket->buf = GET_UDP_SDU(udppara->input, udppara->off); 1188 memset(&socket->raddr4, 0, sizeof(socket->raddr4)); 1189 socket->raddr4.sin_family = AF_INET; 1190 socket->raddr4.sin_port = htons(udppara->rep4.portno); 1191 socket->raddr4.sin_addr.s_addr = htonl(udppara->rep4.ipaddr); 1192 udppara->input->flags |= NB_FLG_NOREL_IFOUT; 1193 ret = sig_sem(SEM_FILEDESC); 1194 if (ret < 0) { 1195 syslog(LOG_ERROR, "sig_sem => %d", ret); 1196 } 1197 1198 if (fp->readevt_w == fp->readevt_r) fp->readevt_w++; 1199 1200 set_flg(FLG_SELECT_WAIT, flgptn); 1201 return E_OK; 1202 } 1203 case TFN_UDP_CRE_CEP: 1204 return E_OK; 1205 1206 case TFN_UDP_RCV_DAT: 1207 len = *(int *)p_parblk; 1208 if ((len <= 0) || (fp->exinf == NULL)) 1209 return E_OK; 1210 1211 if (fp->readevt_w == fp->readevt_r) fp->readevt_w++; 1212 1213 set_flg(FLG_SELECT_WAIT, flgptn); 1214 return E_OK; 1215 1216 case TFN_UDP_SND_DAT: 1217 if (fp->writeevt_w == fp->writeevt_r) fp->writeevt_w++; 1218 1219 set_flg(FLG_SELECT_WAIT, flgptn); 1220 return E_OK; 1221 1222 case TFN_UDP_CAN_CEP: 1223 if (fp->errorevt_w == fp->errorevt_r) fp->errorevt_w++; 1224 1225 set_flg(FLG_SELECT_WAIT, flgptn); 1226 return E_OK; 1227 1228 case TFN_UDP_DEL_CEP: 1229 delete_fd_by_id(&IO_TYPE_UDP, cepid); 1230 return E_OK; 1231 1232 default: 1233 return E_OK; 1234 } 973 1235 } 974 1236 -
asp3_tinet_ecnl_arm/trunk/ntshell/src/socket_stub.h
r364 r374 103 103 } socket_t; 104 104 105 struct _IO_DIR {106 DIR dir;105 struct SHELL_DIR { 106 FATFS_DIR dir; 107 107 struct dirent dirent; 108 108 }; 109 109 110 struct _IO_FILE { 110 typedef const struct io_type_s IO_TYPE; 111 112 struct SHELL_FILE { 111 113 int fd; 112 inttype;114 IO_TYPE *type; 113 115 int handle; 114 int (*close)(struct _IO_FILE *);115 size_t (*read)(struct _IO_FILE *, unsigned char *, size_t);116 size_t (*write)(struct _IO_FILE *, const unsigned char *, size_t);117 off_t (*seek)(struct _IO_FILE *, off_t, int);118 int (*ioctl)(struct _IO_FILE *, int, void *);119 116 int readevt_r; 120 117 int readevt_w; … … 124 121 int errorevt_r; 125 122 int errorevt_w; 126 union { 127 FIL *pfile; 128 struct _IO_DIR *pdir; 129 socket_t *psock; 130 }; 123 void *exinf; 124 }; 125 126 struct io_type_s { 127 int (*close)(struct SHELL_FILE *); 128 size_t (*read)(struct SHELL_FILE *, unsigned char *, size_t); 129 size_t (*write)(struct SHELL_FILE *, const unsigned char *, size_t); 130 off_t (*seek)(struct SHELL_FILE *, off_t, int); 131 int (*ioctl)(struct SHELL_FILE *, int, void *); 132 bool_t (*readable)(struct SHELL_FILE *); 133 void (*delete)(struct SHELL_FILE *); 131 134 }; 132 135 … … 141 144 #endif 142 145 143 extern int stdio_close(struct _IO_FILE *fp); 144 extern size_t stdio_read(struct _IO_FILE *fp, unsigned char *data, size_t len); 145 extern size_t stdio_write(struct _IO_FILE *fp, const unsigned char *data, size_t len); 146 extern size_t stdin_read(struct _IO_FILE *fp, unsigned char *data, size_t len); 147 extern size_t stdout_write(struct _IO_FILE *fp, const unsigned char *data, size_t len); 148 extern size_t stderr_write(struct _IO_FILE *fp, const unsigned char *data, size_t len); 146 struct SHELL_FILE *new_fp(IO_TYPE *type, int id, int writable); 147 int delete_fd_by_id(IO_TYPE *type, int id); 148 struct SHELL_FILE *fd_to_fp(int fd); 149 struct SHELL_FILE *id_to_fd(IO_TYPE *type, int id); 149 150 150 extern int sio_close(struct _IO_FILE *fp); 151 extern size_t sio_read(struct _IO_FILE *fp, unsigned char *data, size_t len); 152 extern size_t sio_write(struct _IO_FILE *fp, const unsigned char *data, size_t len); 153 extern off_t sio_seek(struct _IO_FILE *fp, off_t ofs, int org); 154 extern int sio_ioctl(struct _IO_FILE *fp, int req, void *arg); 155 156 extern int file_close(struct _IO_FILE *fp); 157 extern size_t file_read(struct _IO_FILE *fp, unsigned char *data, size_t len); 158 extern size_t file_write(struct _IO_FILE *fp, const unsigned char *data, size_t len); 159 extern off_t file_seek(struct _IO_FILE *fp, off_t ofs, int org); 160 extern int file_ioctl(struct _IO_FILE *fp, int req, void *arg); 161 162 extern int dir_close(struct _IO_FILE *fp); 163 extern size_t dir_read(struct _IO_FILE *fp, unsigned char *data, size_t len); 164 extern size_t dir_write(struct _IO_FILE *fp, const unsigned char *data, size_t len); 165 extern off_t dir_seek(struct _IO_FILE *fp, off_t ofs, int org); 166 extern int dir_ioctl(struct _IO_FILE *fp, int req, void *arg); 167 168 extern int tcp_fd_close(struct _IO_FILE *fp); 169 extern size_t tcp_fd_read(struct _IO_FILE *fp, unsigned char *data, size_t len); 170 extern size_t tcp_fd_write(struct _IO_FILE *fp, const unsigned char *data, size_t len); 171 extern off_t tcp_fd_seek(struct _IO_FILE *fp, off_t ofs, int org); 172 extern int tcp_fd_ioctl(struct _IO_FILE *fp, int req, void *arg); 173 174 extern int udp_fd_close(struct _IO_FILE *fp); 175 extern size_t udp_fd_read(struct _IO_FILE *fp, unsigned char *data, size_t len); 176 extern size_t udp_fd_write(struct _IO_FILE *fp, const unsigned char *data, size_t len); 177 extern off_t udp_fd_seek(struct _IO_FILE *fp, off_t ofs, int org); 178 extern int udp_fd_ioctl(struct _IO_FILE *fp, int req, void *arg); 179 180 struct _IO_FILE *fd_to_fp(int fd); 181 182 struct _IO_FILE *new_sio_fd(int sioid); 183 int delete_sio_fd(int sioid); 184 struct _IO_FILE *sioid_to_fd(int sioid); 185 186 struct _IO_FILE *new_file_fd(int fileid); 187 int delete_file_fd(int fileid); 188 struct _IO_FILE *fileid_to_fd(int fileid); 189 190 struct _IO_FILE *new_dir_fd(int dirid); 191 int delete_dir_fd(int dirid); 192 struct _IO_FILE *dirid_to_fd(int dirid); 193 194 struct _IO_FILE *new_tcp_fd(int tcpid); 195 int delete_tcp_fd(int tcpid); 196 struct _IO_FILE *tcpid_to_fd(int tcpid); 197 198 struct _IO_FILE *new_udp_fd(int udpid); 199 int delete_udp_fd(int udpid); 200 struct _IO_FILE *udpid_to_fd(int udpid); 201 202 int delete_fp(struct _IO_FILE *fp); 203 int delete_tcp_rep(int repid); 151 int delete_fp(struct SHELL_FILE *fp); 204 152 void clean_fd(); 205 153 -
asp3_tinet_ecnl_arm/trunk/ntshell/src/syscall.c
r364 r374 48 48 49 49 /* ==== Cleaning and invalidation of the L1 data cache ==== */ 50 __v7_all_cache(2);50 L1C_CleanInvalidateDCacheAll(); 51 51 __DSB(); 52 52 53 53 /* ==== Cleaning and invalidation of the L2 cache ==== */ 54 if ( PL310->AUX_CNT & (1 << 16)) {54 if (L2C_310->AUX_CNT & (1 << 16)) { 55 55 assoc = 16; 56 56 } … … 58 58 assoc = 8; 59 59 } 60 PL310->INV_WAY = (1 << assoc) - 1;61 while ( PL310->INV_WAY & ((1 << assoc) - 1)); // poll invalidate62 PL310->CACHE_SYNC = 0x0;60 L2C_310->INV_WAY = (1 << assoc) - 1; 61 while (L2C_310->INV_WAY & ((1 << assoc) - 1)); // poll invalidate 62 L2C_310->CACHE_SYNC = 0x0; 63 63 64 64 /* ==== Invalidate all TLB entries ==== */ 65 __ca9u_inv_tlb_all();65 MMU_InvalidateTLB(); 66 66 67 67 /* ==== Invalidate the L1 instruction cache ==== */ 68 __v7_inv_icache_all();68 L1C_InvalidateICacheAll(); 69 69 __DSB(); 70 70 __ISB(); … … 184 184 } 185 185 186 long SYS_fdatasync() { 186 long SYS_fdatasync(long a) { 187 //int fdatasync(int fd) 187 188 return no_implement("fdatasync\n"); 188 189 } … … 200 201 } 201 202 202 long SYS_futex( ) {203 int futex(int *uaddr, int op, int val, const struct timespec *timeout, int *uaddr2, int val3);203 long SYS_futex(long a, long b, long c, long d, long e, long f) { 204 //int futex(int *uaddr, int op, int val, const struct timespec *timeout, int *uaddr2, int val3); 204 205 return no_implement("futex\n"); 205 206 } 206 207 207 long SYS_futimesat() { 208 long SYS_futimesat(long a, long b, long c) { 209 //int futimesat(int dirfd, const char *pathname, const struct timeval times[2]) 208 210 return no_implement("futimesat\n"); 209 211 } … … 281 283 } 282 284 283 long SYS_munmap() { 285 long SYS_munmap(long a, long b) { 286 //int munmap(void *start, size_t len) 284 287 return no_implement("munmap\n"); 285 288 } … … 293 296 } 294 297 295 long SYS_pread64() { 298 long SYS_pread64(long a, long b, long c, long d) { 299 //#define pread64 pread 300 //ssize_t pread(int fd, void *buf, size_t size, off_t ofs) 296 301 return no_implement("pread64\n"); 297 302 } 298 303 299 long SYS_pwrite64() { 304 long SYS_pwrite64(long a, long b, long c, long d) { 305 //#define pwrite64 pwrite 306 //ssize_t pwrite(int fd, const void *buf, size_t size, off_t ofs) 300 307 return no_implement("pwrite64\n"); 301 308 } … … 337 344 } 338 345 339 long SYS_rt_sigqueueinfo() { 346 long SYS_rt_sigqueueinfo(long a, long b, long c) { 347 //int rt_sigqueueinfo(pid_t tgid, int sig, siginfo_t *uinfo) 340 348 return no_implement("rt_sigqueueinfo\n"); 341 349 } … … 361 369 } 362 370 363 long SYS_sched_setscheduler() { 371 long SYS_sched_setscheduler(long a, long b, long c) { 372 //int sched_setscheduler(pid_t pid, int sched, const struct sched_param *param) 364 373 return no_implement("sched_setscheduler\n"); 365 374 } 366 375 367 long SYS_set_robust_list() { 376 long SYS_set_robust_list(long a, long b) { 377 //long set_robust_list(struct robust_list_head *head, size_t len) 368 378 return no_implement("set_robust_list\n"); 369 379 } … … 401 411 } 402 412 403 long SYS_utimensat() { 413 long SYS_utimensat(long a, long b, long c, long d) { 414 //int utimensat(int fd, const char *path, const struct timespec times[2], int flags) 404 415 return no_implement("utimensat\n"); 405 416 } 406 417 407 long SYS_utimes() { 418 long SYS_utimes(long a, long b) { 419 //int utimes(const char *path, const struct timeval times[2]) 408 420 return no_implement("utimes\n"); 409 421 } … … 417 429 } 418 430 419 long SYS_dup( )420 { 431 long SYS_dup(long a) { 432 //int dup(int fd) 421 433 return no_implement("dup\n"); 422 434 } 423 435 424 long SYS_dup2( )425 { 436 long SYS_dup2(long a, long b) { 437 //int dup2(int old, int new) 426 438 return no_implement("dup2\n"); 427 439 } 428 440 429 long SYS_pipe( )430 { 441 long SYS_pipe(long a) { 442 //int pipe(int fd[2]) 431 443 return no_implement("pipe\n"); 432 444 } 433 445 434 long SYS_readlink( )435 { 446 long SYS_readlink(long a, long b, long c) { 447 //ssize_t readlink(const char *restrict path, char *restrict buf, size_t bufsize) 436 448 return no_implement("readlink\n"); 437 449 } 438 450 439 long SYS_symlink( )440 { 451 long SYS_symlink(long a, long b) { 452 //int symlink(const char *existing, const char *new) 441 453 return no_implement("symlink\n"); 442 454 } 443 455 444 long SYS_umask( )445 { 456 long SYS_umask(long a) { 457 //mode_t umask(mode_t mode) 446 458 return no_implement("umask\n"); 447 459 } 448 460 449 long SYS_execve( )450 { 461 long SYS_execve(long a, long b, long c) { 462 //int execve(const char *path, char *const argv[], char *const envp[]) 451 463 return no_implement("execve\n"); 452 464 } 453 465 454 long SYS_fork() 455 { 466 long SYS_fork() { 467 //pid_t fork(void) 456 468 return no_implement("fork\n"); 457 469 } 458 470 459 long SYS_wait4( )460 { 471 long SYS_wait4(long a, long b, long c, long d) { 472 //pid_t wait4(pid_t pid, int *status, int options, struct rusage *usage) 461 473 return no_implement("wait4\n"); 462 474 } 463 475 464 long SYS_socketpair( )465 { 476 long SYS_socketpair(long a, long b, long c, long d) { 477 //int socketpair(int domain, int type, int protocol, int fd[2]) 466 478 return no_implement("socketpair\n"); 467 479 } 468 480 469 long SYS_flock( )470 { 481 long SYS_flock(long a, long b) { 482 //int flock(int fd, int op) 471 483 return no_implement("flock\n"); 484 } 485 486 long SYS_fchdir() 487 { 488 return no_implement("fchdir\n"); 489 } 490 491 long SYS_getegid32() 492 { 493 return no_implement("getegid32\n"); 494 } 495 496 long SYS_geteuid32() 497 { 498 return no_implement("geteuid32\n"); 499 } 500 501 long SYS_getgid32() 502 { 503 return no_implement("getgid32\n"); 504 } 505 506 long SYS_pipe2() 507 { 508 return no_implement("pipe2\n"); 509 } 510 511 long SYS_setgid32() 512 { 513 return no_implement("setgid32\n"); 514 } 515 516 long SYS_setpgid() 517 { 518 return no_implement("setpgid\n"); 519 } 520 521 long SYS_setsid() 522 { 523 return no_implement("setsid\n"); 524 } 525 526 long SYS_setuid32() 527 { 528 return no_implement("setuid32\n"); 529 } 530 531 long SYS_tgkill() 532 { 533 return no_implement("tgkill\n"); 534 } 535 536 long SYS_nanosleep(long a, long b) { 537 //int nanosleep(const struct timespec *req, struct timespec *rem) 538 return no_implement("nanosleep\n"); 539 } 540 541 long SYS_prlimit64(long a, long b, long c, long d) { 542 //#define prlimit64 prlimit 543 //int prlimit(pid_t pid, int resource, const struct rlimit *new_limit, struct rlimit *old_limit) 544 return no_implement("prlimit64\n"); 545 } 546 547 long SYS_sched_getaffinity(long a, long b, long c) { 548 //int sched_getaffinity(pid_t tid, size_t size, cpu_set_t *set) 549 return no_implement("sched_getaffinity\n"); 550 } 551 552 long SYS_sysinfo(long a) { 553 //int sysinfo(struct sysinfo *info) 554 return no_implement("sysinfo\n"); 555 } 556 557 long SYS_ugetrlimit(long a, long b) { 558 //#define SYS_getrlimit SYS_ugetrlimit 559 //int getrlimit(int resource, struct rlimit *rlim) 560 return no_implement("ugetrlimit\n"); 472 561 } 473 562
Note:
See TracChangeset
for help on using the changeset viewer.