1 /*
2 * Copyright (C) 2015-2018 Alibaba Group Holding Limited
3 */
4
5 #include <stdio.h>
6 #include <aos/kernel.h>
7 #include "aos/hal/gpio.h"
8 #include "ulog/ulog.h"
9 #include "k_api.h"
10 #include <vfsdev/uart_dev.h>
11
12 #define TASK_RECVDATA_NAME "revdata"
13 #define TASK_RECVDATA_STACKSIZE 4096
14 #define TASK_RECVDATA_PRI 50
15
16 static int fd = 0;
17
18 /* task entry */
task_recvdata_entry(void * arg)19 static void task_recvdata_entry(void *arg)
20 {
21 int i = 0;
22 int ret = 0;
23 char rfid_data_buf[50] = {0};
24 int rev_length = 0;
25 char params[30];
26 char rfid_deviceid[12];
27
28 while (1) {
29 ret = read(fd, rfid_data_buf, sizeof(rfid_data_buf));
30 if (ret > 0) {
31 printf("read length:%d\r\n", ret);
32 for (i = 0; i < ret; i++) {
33 printf("%02x ", rfid_data_buf[i]);
34 }
35 printf("\r\n");
36 if ((rfid_data_buf[0] == 0x20) && (rfid_data_buf[1] == 0x0) && (rfid_data_buf[2] == 0x0) && (rfid_data_buf[3] == 0x8)) {
37 snprintf(rfid_deviceid, sizeof(rfid_deviceid), "%02x%02x%02x%02x", rfid_data_buf[8], rfid_data_buf[9], rfid_data_buf[10], rfid_data_buf[11]);
38 memset(rfid_data_buf, 0, sizeof(rfid_data_buf));
39 printf("rfid_deviceid:%s\n", rfid_deviceid);
40 snprintf(params, sizeof(params), "{\"card_id\": \"%s\"}", rfid_deviceid);
41 printf("params:%s\n", params);
42 send_property_post(params);
43 }
44 }
45 usleep(50000);
46 }
47 }
48
rfid_uart_init(void)49 int rfid_uart_init(void)
50 {
51 int port_id = 2;
52 int ret = 0;
53 char dev_name[16] = {0};
54 aos_task_t task_recvdata;
55
56 snprintf(dev_name, sizeof(dev_name), "/dev/ttyUART%d", port_id);
57 printf("opening device:%s\r\n", dev_name);
58 fd = open(dev_name, 0);
59 if (fd < 0) {
60 printf("open uart error\r\n");
61 return fd;
62 }
63 ret = ioctl(fd, IOC_UART_SET_CFLAG, B9600 | CS8);
64 if (ret != 0) {
65 close(fd);
66 printf("ioctl uart error\r\n");
67 return ret;
68 }
69
70 /* Create the task to receive data */
71 ret = aos_task_new_ext(&task_recvdata, TASK_RECVDATA_NAME, task_recvdata_entry, NULL,
72 TASK_RECVDATA_STACKSIZE, TASK_RECVDATA_PRI);
73 if (ret != 0) {
74 close(fd);
75 printf("create uart data recv task error\r\n");
76 return ret;
77 }
78 return ret;
79 }
80