USB BARCODE READER

Dependencies:   USBHOST

Committer:
shivanandgowdakr
Date:
Mon Jul 02 12:11:51 2018 +0000
Revision:
5:e163f0e428ac
Parent:
3:a2c477c9da16
USB BARCODE READER

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jamike 0:0282e73ca55b 1 #include "mbed.h"
jamike 0:0282e73ca55b 2 #include "USBHostMSD.h"
jamike 2:107b7b44bd35 3 #include "USBHostMouse.h"
jamike 2:107b7b44bd35 4 #include "USBHostKeyboard.h"
jamike 2:107b7b44bd35 5 #include "FATFileSystem.h"
jamike 2:107b7b44bd35 6 #include <stdlib.h>
jamike 2:107b7b44bd35 7
jamike 2:107b7b44bd35 8
jamike 0:0282e73ca55b 9 DigitalOut led(LED1);
shivanandgowdakr 5:e163f0e428ac 10 int index=0;
shivanandgowdakr 5:e163f0e428ac 11 char Barcode[50];
jamike 2:107b7b44bd35 12 void onMouseEvent(uint8_t buttons, int8_t x, int8_t y, int8_t z) {
jamike 2:107b7b44bd35 13 printf("buttons: %d, x: %d, y: %d, z: %d\r\n", buttons, x, y, z);
jamike 2:107b7b44bd35 14 }
jamike 2:107b7b44bd35 15
jamike 2:107b7b44bd35 16 void mouse_task(void const *) {
jamike 2:107b7b44bd35 17
jamike 2:107b7b44bd35 18 USBHostMouse mouse;
jamike 2:107b7b44bd35 19 printf("mouse started\n");
jamike 2:107b7b44bd35 20 while(1) {
jamike 2:107b7b44bd35 21
jamike 2:107b7b44bd35 22 // try to connect a USB mouse
jamike 2:107b7b44bd35 23 while(!mouse.connect())
jamike 2:107b7b44bd35 24 Thread::wait(500);
jamike 2:107b7b44bd35 25
jamike 2:107b7b44bd35 26 // when connected, attach handler called on mouse event
jamike 2:107b7b44bd35 27 mouse.attachEvent(onMouseEvent);
jamike 2:107b7b44bd35 28
jamike 2:107b7b44bd35 29 // wait until the mouse is disconnected
jamike 2:107b7b44bd35 30 while(mouse.connected())
jamike 2:107b7b44bd35 31 Thread::wait(500);
jamike 2:107b7b44bd35 32 printf("mouse seen disconnected\n");
jamike 2:107b7b44bd35 33 }
jamike 2:107b7b44bd35 34 }
jamike 2:107b7b44bd35 35 void onKey(uint8_t key) {
shivanandgowdakr 5:e163f0e428ac 36
shivanandgowdakr 5:e163f0e428ac 37 // printf("%c\r", key);
shivanandgowdakr 5:e163f0e428ac 38
shivanandgowdakr 5:e163f0e428ac 39 if(index>=51)
shivanandgowdakr 5:e163f0e428ac 40 {
shivanandgowdakr 5:e163f0e428ac 41
shivanandgowdakr 5:e163f0e428ac 42
shivanandgowdakr 5:e163f0e428ac 43 printf(" Limit Exceeded \r\n ");
shivanandgowdakr 5:e163f0e428ac 44 printf(" Please Re Enter \r\n ");
shivanandgowdakr 5:e163f0e428ac 45 index=0;
shivanandgowdakr 5:e163f0e428ac 46 memset(Barcode,'\0',50);
shivanandgowdakr 5:e163f0e428ac 47 return;
shivanandgowdakr 5:e163f0e428ac 48 }
shivanandgowdakr 5:e163f0e428ac 49 if((key!=0x0A))
shivanandgowdakr 5:e163f0e428ac 50 {
shivanandgowdakr 5:e163f0e428ac 51 Barcode[index]=key;
shivanandgowdakr 5:e163f0e428ac 52 index++;
shivanandgowdakr 5:e163f0e428ac 53 //printf("%s \r\n",Barcode);
shivanandgowdakr 5:e163f0e428ac 54 }
shivanandgowdakr 5:e163f0e428ac 55
shivanandgowdakr 5:e163f0e428ac 56 else if((key==0x0A) &&(index<=50))
shivanandgowdakr 5:e163f0e428ac 57 {
shivanandgowdakr 5:e163f0e428ac 58 Barcode[index]='\0';
shivanandgowdakr 5:e163f0e428ac 59 printf("BARCODE : %s \r\n",Barcode);
shivanandgowdakr 5:e163f0e428ac 60 memset(Barcode,'\0',50);
shivanandgowdakr 5:e163f0e428ac 61 index=0;
shivanandgowdakr 5:e163f0e428ac 62 }
shivanandgowdakr 5:e163f0e428ac 63
shivanandgowdakr 5:e163f0e428ac 64 else if((key==0x0A) && (index>=51))
shivanandgowdakr 5:e163f0e428ac 65 {
shivanandgowdakr 5:e163f0e428ac 66
shivanandgowdakr 5:e163f0e428ac 67 printf(" Too Many Charecters : %s \r\n",Barcode);
shivanandgowdakr 5:e163f0e428ac 68 printf(" Invalid Barcode\r\n");
shivanandgowdakr 5:e163f0e428ac 69
shivanandgowdakr 5:e163f0e428ac 70 }
shivanandgowdakr 5:e163f0e428ac 71
jamike 2:107b7b44bd35 72 }
shivanandgowdakr 5:e163f0e428ac 73
shivanandgowdakr 5:e163f0e428ac 74
shivanandgowdakr 5:e163f0e428ac 75 void BarCodeReader_task(void const *) {
jamike 2:107b7b44bd35 76
shivanandgowdakr 5:e163f0e428ac 77 USBHostKeyboard BarCodeReader;
jamike 2:107b7b44bd35 78
jamike 2:107b7b44bd35 79 while(1) {
jamike 2:107b7b44bd35 80 // try to connect a USB keyboard
shivanandgowdakr 5:e163f0e428ac 81 while(!BarCodeReader.connect())
jamike 2:107b7b44bd35 82 Thread::wait(500);
jamike 2:107b7b44bd35 83 // when connected, attach handler called on keyboard event
shivanandgowdakr 5:e163f0e428ac 84 BarCodeReader.attach(onKey);
jamike 2:107b7b44bd35 85 // wait until the keyboard is disconnected
shivanandgowdakr 5:e163f0e428ac 86 while(BarCodeReader.connected())
jamike 2:107b7b44bd35 87 Thread::wait(500);
jamike 2:107b7b44bd35 88 }
jamike 2:107b7b44bd35 89 }
jamike 2:107b7b44bd35 90
jamike 2:107b7b44bd35 91
jamike 2:107b7b44bd35 92
jamike 0:0282e73ca55b 93 void msd_task(void const *) {
jamike 2:107b7b44bd35 94
jamike 2:107b7b44bd35 95 USBHostMSD msd;
jamike 0:0282e73ca55b 96 int i = 0;
jamike 2:107b7b44bd35 97 FATFileSystem fs("usb");
jamike 2:107b7b44bd35 98 int err;
jamike 0:0282e73ca55b 99 printf("wait for usb memory stick insertion\n");
jamike 0:0282e73ca55b 100 while(1) {
jamike 2:107b7b44bd35 101
jamike 0:0282e73ca55b 102 // try to connect a MSD device
jamike 2:107b7b44bd35 103 while(!msd.connect()) {
jamike 0:0282e73ca55b 104 Thread::wait(500);
jamike 0:0282e73ca55b 105 }
jamike 3:a2c477c9da16 106 if (fs.mount(&msd) != 0) continue;
jamike 2:107b7b44bd35 107 else
jamike 2:107b7b44bd35 108 printf("file system mounted\n");
jamike 2:107b7b44bd35 109
jamike 2:107b7b44bd35 110 if (!msd.connect()) {
jamike 3:a2c477c9da16 111 continue;
jamike 2:107b7b44bd35 112 }
jamike 0:0282e73ca55b 113
jamike 0:0282e73ca55b 114 // in a loop, append a file
jamike 0:0282e73ca55b 115 // if the device is disconnected, we try to connect it again
jamike 0:0282e73ca55b 116
jamike 0:0282e73ca55b 117 // append a file
jamike 2:107b7b44bd35 118 File file;
jamike 2:107b7b44bd35 119 err = file.open(&fs, "test1.txt", O_WRONLY | O_CREAT |O_APPEND);
jamike 0:0282e73ca55b 120
jamike 2:107b7b44bd35 121 if (err == 0) {
jamike 2:107b7b44bd35 122 char tmp[100];
jamike 2:107b7b44bd35 123 sprintf(tmp,"Hello fun USB stick World: %d!\r\n", i++);
jamike 2:107b7b44bd35 124 file.write(tmp,strlen(tmp));
jamike 2:107b7b44bd35 125 sprintf(tmp,"Goodbye World!\r\n");
jamike 2:107b7b44bd35 126 file.write(tmp,strlen(tmp));
jamike 2:107b7b44bd35 127 file.close();
jamike 0:0282e73ca55b 128 } else {
jamike 0:0282e73ca55b 129 printf("FILE == NULL\r\n");
jamike 0:0282e73ca55b 130 }
jamike 0:0282e73ca55b 131 Thread::wait(500);
jamike 0:0282e73ca55b 132 printf("again\n");
jamike 0:0282e73ca55b 133 // if device disconnected, try to connect again
jamike 2:107b7b44bd35 134 while (msd.connected()) {
jamike 0:0282e73ca55b 135 Thread::wait(500);
jamike 0:0282e73ca55b 136 }
jamike 3:a2c477c9da16 137 while (fs.unmount() < 0) {
jamike 2:107b7b44bd35 138 Thread::wait(500);
jamike 2:107b7b44bd35 139 printf("unmount\n");
jamike 2:107b7b44bd35 140 }
jamike 0:0282e73ca55b 141 }
jamike 0:0282e73ca55b 142 }
jamike 0:0282e73ca55b 143
jamike 0:0282e73ca55b 144 int main() {
shivanandgowdakr 5:e163f0e428ac 145
shivanandgowdakr 5:e163f0e428ac 146 memset(Barcode,'\0',20);
shivanandgowdakr 5:e163f0e428ac 147 Thread msdTask(msd_task, NULL, osPriorityNormal, 4096);
shivanandgowdakr 5:e163f0e428ac 148 Thread mouseTask(mouse_task, NULL, osPriorityNormal, 4096);
shivanandgowdakr 5:e163f0e428ac 149 Thread BarCodeTask(BarCodeReader_task, NULL, osPriorityNormal, 4096);
jamike 2:107b7b44bd35 150
jamike 0:0282e73ca55b 151 while(1) {
jamike 0:0282e73ca55b 152 led=!led;
jamike 0:0282e73ca55b 153 Thread::wait(500);
jamike 0:0282e73ca55b 154 }
jamike 0:0282e73ca55b 155 }