]> rtime.felk.cvut.cz Git - eurobot/public.git/commitdiff
barcode: Next testing version, nothing more.
authorMiroslav Strob <strobmir@fel.cvut.cz>
Mon, 11 Apr 2011 19:24:43 +0000 (21:24 +0200)
committerMiroslav Strob <strobmir@fel.cvut.cz>
Mon, 11 Apr 2011 19:24:43 +0000 (21:24 +0200)
src/barcode/barcode.c

index 5d391c7a1c173eeb43bd2327280080bb0dac0a86..6362504a750876eff5269d6cef4f05f37f5ed38d 100644 (file)
 #include <termios.h>
 #include "barcode.h"
 
+
 static struct sercom_data sercom;
 static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
 
+typedef enum {
+    AIM_OFF,
+    AIM_ON,
+    BEEP,
+    CMD_ACK,
+    CMD_NAK,
+    LED_OFF,
+    LED_ON,
+    PARAM_DEFAULTS,
+    PARAM_REQUEST,
+    PARAM_SEND,
+    REQUEST_REVISION,
+    SCAN_DISABLE,
+    SCAN_ENABLE,
+    SLEEP,
+    START_DECODE,
+    STOP_DECODE,
+    WAKEUP,
+    CUSTOM_DEFAULTS
+} commandes;
+
+
+unsigned char getOpcode(commandes command)
+{
+    switch (command)
+    {
+    case AIM_OFF:
+        return 0xC4;
+        break;
+    case AIM_ON:
+        return 0xC5;
+        break;
+    case BEEP:
+        return 0xE6;
+        break;
+    case CMD_ACK:
+        return 0xD0;
+        break;
+    case CMD_NAK:
+        return 0xD1;
+        break;
+    case LED_OFF:
+        return 0xE8;
+        break;
+    case LED_ON:
+        return 0xE7;
+        break;
+    case PARAM_DEFAULTS:
+        return 0xC8;
+        break;
+    case PARAM_REQUEST:
+        return 0xC7;
+        break;
+    case PARAM_SEND:
+        return 0xC6;
+        break;
+    case REQUEST_REVISION:
+        return 0xA3;
+        break;
+    case SCAN_DISABLE:
+        return 0xEA;
+        break;
+    case SCAN_ENABLE:
+        return 0xE9;
+        break;
+    case SLEEP:
+        return 0xEB;
+        break;
+    case START_DECODE:
+        return 0xE4;
+        break;
+    case STOP_DECODE:
+        return 0xE5;
+        break;
+    case WAKEUP:
+        return 0x00;
+        break;
+    case CUSTOM_DEFAULTS:
+        return 0x12;
+        break;
+    }
+}
+
+int send_command(commandes command, unsigned char *data, int dataLength)
+{
+    unsigned char length;
+    int i; //pomocne cyklitko
+
+    if (data==NULL) {
+        length=7;
+    }
+    else {
+        length=dataLength+6;
+        printf("\ndelka paketu je %d\n", length);
+    }
+
+    unsigned char message[length];
+
+    //delka zpravy
+    message[0]=length-2;
+    //Opcode
+    message[1]=getOpcode(command);
+    //odesilatel
+    message[2]=0x04;
+    //status
+    message[3]=0x00;  //to se musi najit, co jaky bit dela
+
+    if (data!=NULL) {
+        //nahraju zpravu
+        for (i=0; i<dataLength; i++)
+            message[4+i]=data[i];
+    }
+    else {
+        //necham prazdna data
+        message[4]=0x00;
+    }
+
+    //spocte checksum
+    count_checksum(message, length);
+
+
+
+    printf("\ncelkovy paket je:\n");
+    for (i=0; i<length; i++)
+        printf("0x%0.2X ", message[i]);
+    printf("\n");
+
+    barcode_write(message, length);
+
+
+    return 0;
+}
+
+void count_checksum(unsigned char *message, int length)
+{
+    //to jako nevim jak spocitat
+    message[length-1]=0xAA;
+    message[length-2]=0xBB;
+}
+
+
 int barcode_sercom_init(char * tty, void(*sighandler)(int))
 {
-       int ret;
-       strcpy((char *)&sercom.devname, tty);
-       sercom.baudrate = 9600;
-       sercom.parity = SERCOM_PARNONE;
-       sercom.databits = 8;
-       sercom.stopbits = 1;
-       sercom.mode = 0;
-       sercom.sighandler = NULL;
-       ret = sercom_open(&sercom);
-       if (ret < 0) {
-               return -1;
-        }
-       else {
+    int ret;
+    strcpy((char *)&sercom.devname, tty);
+    sercom.baudrate = 9600;
+    sercom.parity = SERCOM_PARNONE;
+    sercom.databits = 8;
+    sercom.stopbits = 1;
+    sercom.mode = 0;
+    sercom.sighandler = NULL;
+    ret = sercom_open(&sercom);
+    if (ret < 0) {
+        return -1;
+    }
+    else {
 #define EBTEST
 #ifdef EBTEST
-                /* this part is used for testing purposess with ebboard,
-                remove this when conected to real scanner */
-                /* toogle DTR and RTS signal to drive the ebboard from reset */
-                int status;
+        /* this part is used for testing purposess with ebboard,
+        remove this when conected to real scanner */
+        /* toogle DTR and RTS signal to drive the ebboard from reset */
+        int status;
 
-                ioctl(sercom.fd, TIOCMGET, &status); /* get the serial port status */
+        ioctl(sercom.fd, TIOCMGET, &status); /* get the serial port status */
 
-                status &= ~TIOCM_DTR;
-                status &= ~TIOCM_RTS;
+        status &= ~TIOCM_DTR;
+        status &= ~TIOCM_RTS;
 
-                ioctl(sercom.fd, TIOCMSET, &status); /* set the serial port status */
+        ioctl(sercom.fd, TIOCMSET, &status); /* set the serial port status */
 #endif
-                printf("Open serial connection to barcode scanner!");
-               return 0;
-        }
+        printf("Open serial connection to barcode scanner!");
+        return 0;
+    }
 }
 
 
 int barcode_read(unsigned char *buff, int size)
 {
-        int ret;
-        pthread_mutex_lock(&mutex);
-        ret = read(sercom.fd, buff, size);
-        pthread_mutex_unlock(&mutex);
-
-        if (ret != size) {
-                printf("READ FAILED!\n");
-                return -1;
-        }
-        return ret;
+    int ret;
+    pthread_mutex_lock(&mutex);
+    ret = read(sercom.fd, buff, size);
+    pthread_mutex_unlock(&mutex);
+
+    if (ret != size) {
+        printf("READ FAILED!\n");
+        return -1;
+    }
+    return ret;
+}
+
+int barcode_write(unsigned char *buff, int size)
+{
+    int ret;
+    int i,j;
+    pthread_mutex_lock(&mutex);
+    printf("sending command (%2d bytes): ", size);
+
+
+    ret = write(sercom.fd, buff, size);
+    pthread_mutex_unlock(&mutex);
+    if (ret != size) {
+        printf("uoled: WRITE FAILED!\n");
+        return -1;
+    }
+
+    return 0;
 }
 
 int main(void)
 {
-        char rcmd[4];
+    char rcmd[4];
 
-        barcode_sercom_init("/dev/ttyUSB0", NULL);
+    barcode_sercom_init("/dev/ttyUSB0", NULL);
 
-        while (1) {
-                barcode_read(rcmd, 4);
-                putchar(rcmd[0]);
-                putchar(rcmd[1]);
-                putchar(rcmd[2]);
-                putchar('\n');
 
-                //printf("%s", rcmd);
-        }
+    send_command(AIM_OFF, NULL, 0);
 
-        return 0;
+
+    //cekam na odpoved, coz je delka prijimane zpravy
+    barcode_read(rcmd,1);
+
+    printf("\ndelka nadchazejici zpravy 0x%0.2X\n", rcmd[0]);
+
+
+
+    return 0;
+
+    while (1) {
+        barcode_read(rcmd, 4);
+        putchar(rcmd[0]);
+        putchar(rcmd[1]);
+        putchar(rcmd[2]);
+        putchar('\n');
+
+        //printf("%s", rcmd);
+    }
+
+    return 0;
 }