Shivanand Gowda
/
barcode_reader
USB BARCODE READER
main.cpp@5:e163f0e428ac, 2018-07-02 (annotated)
- 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?
User | Revision | Line number | New 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 | } |