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