]> rtime.felk.cvut.cz Git - coffee/mt-apps.git/blobdiff - mt_rfid.h
<hr> in "local"
[coffee/mt-apps.git] / mt_rfid.h
index 60c4515ba22fb1555366ed874f0077d760d0241e..fad9390290dd02e027eacc07f371a038d7e81ffd 100644 (file)
--- a/mt_rfid.h
+++ b/mt_rfid.h
@@ -1,45 +1,33 @@
-/**
- * mt_rfid.h
- * Start your own mt-rfid pthread.
- */
-
 #ifndef MT_RFID_H
 #define MT_RFID_H
 
-// setup structure
-// it might tempt you to run multiple instances with one reader, don't.
-// running each instance with its own reader (port name) should fine.
-typedef struct {
-    unsigned reader_type;    // 0: auto, 1: 1Mbps, 2,3: slooow
-    char *port_name;         // "COM9", "/dev/ttyUSB0", "" for auto selection
-    unsigned port_interface; // 0: auto, 1: serial, 2: ftdi
-    unsigned beep;           // beep when a card is beeing read
-    unsigned run;            // polling condition
-} mt_rfid_t;
+#include <ev.h>
 
-// macros for convenience
-#define READER_TYPE    1 // uFR type (1Mbps)
-#define PORT_INTERFACE 1 // serial
-#ifndef PORT_NAME
-#define PORT_NAME "/dev/ttyUSB0"
-#endif
+// reader open parameters, see uFR manual
+#define UFR_READER_TYPE     1       // uFR type (1Mbps)
+#define UFR_PORT_INTERFACE  1       // serial; auto->ftdi->FAIL
+#define UFR_PORT_NAME       "/dev/ttyUSB0" // reader device
+#define UFR_ASYNC_BAUD_RATE 1000000 // 1Mbps, otherwise UFR_COMMUNICATION_BREAK
 
-// poll the uFR reader and print JSON formatted card info to stdout.
-// run it directly or using pthreads.
-void *mt_rfid_run(void *ptr);
+#define UFR_BEEP // define this to annoy people
 
-//example
-/*
+typedef struct ev_io_ufr {
+    ev_io w;           // fd watcher
+    char uid_data[24]; // store uid here (uid is 10 bytes max)
+    char *uid;         // current position in uid_data
+    int fd;            // PORT_NAME file descriptor
+} ev_io_ufr;
 
-pthread_t t;
-mt_rfid_t ufr = {READER_TYPE, PORT_NAME, PORT_INTERFACE, 0, 1};
+typedef struct mt_rfid_t {
+    ev_io_ufr w; // reader watcher
+    int fd;      // print JSON output here
+} mt_rfid_t;
 
-if (!pthread_create(&t, NULL, mt_rfid_run, (void *)&ufr)) {
-    getchar();
-    ufr.run = 0;
-    pthread_join(t, NULL);
-}
+// connect to the reader, add self to loop and make it write to fd
+// return 0 on success, negative number otherwise
+int mt_rfid_init(mt_rfid_t *self, struct ev_loop *loop, int fd);
 
-*/
+// disconnect from reader
+void mt_rfid_deinit(mt_rfid_t *self);
 
 #endif