Exemplo n.º 1
0
int main(void)
{
	struct client *cl = (struct client *)malloc(sizeof(struct client));
	cl->state = initial;
	cl->inbuf = 0;
	cl->fd =  open("/dev/ttyUSB0", O_RDWR);
	if (cl->fd < 0) {
		fprintf(stderr, "Can't open the uart\n");
		exit(1);
	}

	set_speed(cl->fd, 115200);
	if (set_parity(cl->fd, 8, 1, 'N') == FALSE) {
		fprintf(stderr, "Set Parity Error\n");
		exit(0);
	}
	/* Infinite while loop -- server must be killed */
	while (1) {
		processclient(cl);
	}
	printf("-------------------\n");
	free(cl);
	close(cl->fd);
	return 1;
}
Exemplo n.º 2
0
/*
 * card_uart_setup - specail setup for card reader UART
 *  @fd : card reader fd 
 *  @return : status 
 */
int card_uart_setup(int fd) 
{
#if 1
    struct termios option;

    memset(&option, 0, sizeof(option));
    option.c_cflag = B9600|CS8|CLOCAL|CREAD;
    option.c_iflag = IGNPAR;
    option.c_oflag = 0;
    option.c_lflag = 0;
    option.c_cc[VMIN] = 0;
    option.c_cc[VTIME] = 30;

    tcflush(fd, TCIFLUSH);

    if(tcsetattr(fd, TCSANOW, &option) < 0){
        return FAIL;
    }

#else
    int ret;
    set_speed(fd, 9600);
    ret = set_parity(fd, 8, 1, 'N');
    if (ret < 0)
        return FAIL;
#endif 

    return SUCCESS; 
}
Exemplo n.º 3
0
int xmos_dev_open()
{
	int fd_xmos = open_serial(SERIAL_DEV);
	if (fd_xmos == -1) {
		printf("Cannot open device\n");
        return ROKID_XMOS_ERROR_DEVICE_OPEN_FAILED;
	}
	int ret;
	ret = set_speed(fd_xmos, 115200);
	if (ret == -1) {
		printf("Set speed failed : %d\n", ret);
		return ROKID_XMOS_ERROR_INIT_FAILED;
	}
	ret = set_parity(fd_xmos, 8, 1, 0);
	if (ret == -1) {
		printf("Set parity failed : %d\n", ret);
		return ROKID_XMOS_ERROR_INIT_FAILED;
	}

	back_led_fd = open("/dev/dm163", O_RDWR | O_NONBLOCK);
	if (back_led_fd < 0) {
		perror("open dm163 error");
	}

	return fd_xmos;
}
Exemplo n.º 4
0
static int open_device(const char *tty, GHashTable *options)
{
	struct termios ti;
	int fd;

	/* Switch TTY to raw mode */
	memset(&ti, 0, sizeof(ti));
	cfmakeraw(&ti);

	if (options) {
		GHashTableIter iter;
		const char *key;
		const char *value;

		g_hash_table_iter_init (&iter, options);
		while (g_hash_table_iter_next(&iter, (void *) &key,
							(void *) &value)) {
			gboolean ok = FALSE;

			if (g_str_equal(key, "Baud"))
				ok = set_baud(value, &ti);
			else if (g_str_equal(key, "StopBits"))
				ok = set_stop_bits(value, &ti);
			else if (g_str_equal(key, "DataBits"))
				ok = set_data_bits(value, &ti);
			else if (g_str_equal(key, "Parity"))
				ok = set_parity(value, &ti);
			else if (g_str_equal(key, "XonXoff"))
				ok = set_xonxoff(value, &ti);
			else if (g_str_equal(key, "RtsCts"))
				ok = set_rtscts(value, &ti);
			else if (g_str_equal(key, "Local"))
				ok = set_local(value, &ti);
			else if (g_str_equal(key, "Read"))
				ok = set_read(value, &ti);

			if (ok == FALSE)
				return -1;
		}
	}

	fd = open(tty, O_RDWR | O_NOCTTY | O_NONBLOCK);
	if (fd < 0)
		return -1;

	tcflush(fd, TCIOFLUSH);
	tcsetattr(fd, TCSANOW, &ti);

	return fd;
}
Exemplo n.º 5
0
int serial_open(char *port_name, int speed)
{
	int fd = -1;

	fd = open(port_name, O_RDWR|O_NOCTTY|O_NDELAY);
	if (fd < 0) {
		print_err("Failed to open %s\n", port_name);
		return -1;
	}
	set_speed(fd, speed);
	if (set_parity(fd, 8, 1,'N') < 0) {
		print_err("Set Parity Error\n");
		return -1;
	}
	return fd;
}
Exemplo n.º 6
0
static DBusMessage *proxy_set_serial_params(DBusConnection *conn,
        DBusMessage *msg, void *data)
{
    struct serial_proxy *prx = data;
    const char *ratestr, *paritystr;
    uint8_t databits, stopbits;
    tcflag_t ctrl;		/* Control mode flags */
    speed_t speed = B0;	/* In/Out speed */

    /* Don't allow change TTY settings if it is open */
    if (prx->local)
        return failed(msg, "Not allowed");

    if (!dbus_message_get_args(msg, NULL,
                               DBUS_TYPE_STRING, &ratestr,
                               DBUS_TYPE_BYTE, &databits,
                               DBUS_TYPE_BYTE, &stopbits,
                               DBUS_TYPE_STRING, &paritystr,
                               DBUS_TYPE_INVALID))
        return NULL;

    if (str2speed(ratestr, &speed)  == B0)
        return invalid_arguments(msg, "Invalid baud rate");

    ctrl = prx->proxy_ti.c_cflag;
    if (set_databits(databits, &ctrl) < 0)
        return invalid_arguments(msg, "Invalid data bits");

    if (set_stopbits(stopbits, &ctrl) < 0)
        return invalid_arguments(msg, "Invalid stop bits");

    if (set_parity(paritystr, &ctrl) < 0)
        return invalid_arguments(msg, "Invalid parity");

    prx->proxy_ti.c_cflag = ctrl;
    prx->proxy_ti.c_cflag |= (CLOCAL | CREAD);
    cfsetispeed(&prx->proxy_ti, speed);
    cfsetospeed(&prx->proxy_ti, speed);

    proxy_store(&prx->src, prx->uuid128, prx->address, NULL,
                prx->channel, 0, &prx->proxy_ti);

    return dbus_message_new_method_return(msg);
}
Exemplo n.º 7
0
int serial_open(char *port_name, int speed,int vtime,int vmin)
{
	int fd = -1;

	fd = open(port_name, O_RDWR);
	if (fd < 0) {
		print_err("Failed to open %s\n", port_name);
		return -1;
	}
	set_speed(fd, speed);
	if (set_parity(fd, 8, 1,'N') < 0) {
		print_err("Set Parity Error\n");
		return -1;
	}
    if(set_mode(fd,vmin,vtime)<0){
		print_err("Set mode Error\n");
		return -1;
	}
	return fd;
}
Exemplo n.º 8
0
int init_uart_port(char * port)
{
    if (!port) return FALSE;

    // 打开串口
    g_fd = open_serial_port(port);
    if (g_fd == -1)
    {
        perror("open serial failed!\n");
        return FALSE;
    }

    // 设置串口属性
    set_speed(g_fd, UART_DEFAULT_BAUDRATE);
    if (set_parity(g_fd, 8, 1, 'N') == FALSE)  //8位数据,非两位的停止位,不使用奇偶校验 ,不允许输入奇偶校验
    {
        perror("set parity failed!\n");
        return FALSE;
    }

    return TRUE;
}
Exemplo n.º 9
0
int main(int argc, char **argv)
{

    int tmp = 0;
    int fd, fd_gps;
    char buf[1024];
    char uart_name[] = UART_DEV;
    int i, ret;

    if (argc >= 2) {
        strncpy(uart_name, argv[1], sizeof(uart_name));
    }

    fd_gps = open(GPS_DEV, O_RDWR);
    if(fd_gps < 0) {
        printf("Failed to open %s\n", GPS_DEV);
        return -1;
    }

    /* power on gps */
    ioctl(fd_gps, 1);
    /* reset gps */
    ioctl(fd_gps, 2);
    sleep(2);

    for (i = 1; ; i++) {
        fd = open(uart_name, O_RDWR | O_NOCTTY);
        printf("Try %d times: %s to open %s\n", i, fd < 0 ? "failed" : "success", uart_name);
        if (fd >= 0)
            break;
        if (fd<0 && i>=3)
            return -1;
        sleep(1);
    }

    set_speed(fd, 4800);
    set_parity(fd, 8, 1, 'N');

    if (fork()) {
        while (1) {
            memset(buf, 0, sizeof(buf));
            if (ret = read(fd, buf, sizeof(buf))) {
                for (i = 0; i < ret; i++) {
                    if (buf[i] == '\n')
                        tmp ++;
                    else
                        tmp = 0;
                    if (tmp >= 2)
                        continue;

                    putchar(buf[i]);
                }
            }
        }
    } else {
        while (1) {
            memset(buf, 0, sizeof(buf));
            scanf("%s",buf);
            write(fd, buf, strlen(buf));
        }
    }

    close(fd);
    close(fd_gps);

    return 0;
}
Exemplo n.º 10
0
zx_status_t AmlUart::SerialImplConfig(uint32_t baud_rate, uint32_t flags) {
    // Control register is determined completely by this logic, so start with a clean slate.
    auto ctrl = Control::Get().FromValue(0);

    if ((flags & SERIAL_SET_BAUD_RATE_ONLY) == 0) {
        switch (flags & SERIAL_DATA_BITS_MASK) {
        case SERIAL_DATA_BITS_5:
            ctrl.set_xmit_len(Control::kXmitLength5);
            break;
        case SERIAL_DATA_BITS_6:
            ctrl.set_xmit_len(Control::kXmitLength6);
            break;
        case SERIAL_DATA_BITS_7:
            ctrl.set_xmit_len(Control::kXmitLength7);
            break;
        case SERIAL_DATA_BITS_8:
            ctrl.set_xmit_len(Control::kXmitLength8);
            break;
        default:
            return ZX_ERR_INVALID_ARGS;
        }

        switch (flags & SERIAL_STOP_BITS_MASK) {
        case SERIAL_STOP_BITS_1:
            ctrl.set_stop_len(Control::kStopLen1);
            break;
        case SERIAL_STOP_BITS_2:
            ctrl.set_stop_len(Control::kStopLen2);
            break;
        default:
            return ZX_ERR_INVALID_ARGS;
        }

        switch (flags & SERIAL_PARITY_MASK) {
        case SERIAL_PARITY_NONE:
            ctrl.set_parity(Control::kParityNone);
            break;
        case SERIAL_PARITY_EVEN:
            ctrl.set_parity(Control::kParityEven);
            break;
        case SERIAL_PARITY_ODD:
            ctrl.set_parity(Control::kParityOdd);
            break;
        default:
            return ZX_ERR_INVALID_ARGS;
        }

        switch (flags & SERIAL_FLOW_CTRL_MASK) {
        case SERIAL_FLOW_CTRL_NONE:
            ctrl.set_two_wire(1);
            break;
        case SERIAL_FLOW_CTRL_CTS_RTS:
            // CTS/RTS is on by default
            break;
        default:
            return ZX_ERR_INVALID_ARGS;
        }
    }

    // Configure baud rate based on crystal clock speed.
    // See meson_uart_change_speed() in drivers/amlogic/uart/uart/meson_uart.c.
    constexpr uint32_t kCrystalClockSpeed = 24000000;
    uint32_t baud_bits = (kCrystalClockSpeed / 3) / baud_rate - 1;
    if (baud_bits & (~AML_UART_REG5_NEW_BAUD_RATE_MASK)) {
        zxlogf(ERROR, "%s: baud rate %u too large\n", __func__, baud_rate);
        return ZX_ERR_OUT_OF_RANGE;
    }
    auto baud = Reg5::Get()
                    .FromValue(0)
                    .set_new_baud_rate(baud_bits)
                    .set_use_xtal_clk(1)
                    .set_use_new_baud_rate(1);

    fbl::AutoLock al(&enable_lock_);

    if ((flags & SERIAL_SET_BAUD_RATE_ONLY) == 0) {
        // Invert our RTS if we are we are not enabled and configured for flow control.
        if (!enabled_ && (ctrl.two_wire() == 0)) {
            ctrl.set_inv_rts(1);
        }
        ctrl.WriteTo(&mmio_);
    }

    baud.WriteTo(&mmio_);

    return ZX_OK;
}