int serial_open(serial_ctx *sctx) { if (!sctx || strlen(sctx->dev) <= 0) { // check param validality return -1; } sctx->fd = open(sctx->dev, O_RDWR | O_NOCTTY); if (-1 == sctx->fd) { // fail to open serial port return -2; } if (!isatty(sctx->fd)) { // not a tty close(sctx->fd); return -3; } // set serial io model serial_set_io_model(sctx); // set serial options serial_set_opt(sctx); if (IO_ASYNC == sctx->io_model) { if (serial_rthread_create(sctx) != 0) { return -4; } } return 0; }
int serial_open(struct media_if *med_inf) { struct serial_private *para=(struct serial_private *)med_inf->para; if (med_inf->type==MEDIA_SERIAL||med_inf->type==MEDIA_ZIGBEE) { med_inf->fd=open(para->name,O_RDWR|O_NOCTTY|O_NDELAY); PLOG("serial:%s\n",para->name ); if(med_inf->fd<=0) { perror("open serial"); med_inf->status=CLOSE; return -1; } if(serial_set_opt(med_inf)==-1) { med_inf->status=CLOSE; return -1; } med_inf->status=LIVE; dev_addevent(med_inf); } return 0; }