static void *serial_thread_handler(void *arg) { Connector *thiz = (Connector *)arg; EventListener listener = thiz->open_listener; PrivInfo *priv = (PrivInfo *)thiz->priv; if ((priv->fd = open(priv->serial_port, O_RDWR | O_NOCTTY)) == -1) { if (listener.cb_func != NULL) { listener.cb_func(strerror(errno), listener.ctx); } perror("open serial fail"); } serial_set_raw_mode(priv->fd); serial_set_speed(priv->fd, priv->baud_rate); serial_set_parity(priv->fd, DATA_BITS, PARITY_TYPE, STOP_BITS); priv->status = 1; if (listener.cb_func != NULL) { listener.cb_func(NULL, listener.ctx); } pthread_exit(NULL); }
int serial_posix_setup(const char *device, int baud, serial **serialobj) { /* open serial */ *serialobj = serial_create(); if (*serialobj == NULL) { printf("Unable to instantiate object: serial\n"); goto fail; } if (serial_open(*serialobj, device) < 0) { printf("Unable to open serial devicer\n"); goto fail; } if (serial_set_speed(*serialobj, baud) < 0) { printf("Unable to set serial speedr\n"); goto fail; } if (serial_set_timeout(*serialobj, 10000) < 0) { printf("Unable to set timeoutr\n"); goto fail; } if (serial_set_cts_flow(*serialobj, 1) < 0) { printf("Unable to set flow controlr\n"); goto fail; } printf("%s is opened\n", device); return (0); fail: serial_close(*serialobj); serial_destroy(*serialobj); return (1); }