![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Usb Device Interface, protocol, and programming homework #4 Audio Control device
Dependencies: C12832_lcd USBDevice mbed
main.cpp@0:69eb9d19fb91, 2013-07-30 (annotated)
- Committer:
- jakowisp
- Date:
- Tue Jul 30 22:35:10 2013 +0000
- Revision:
- 0:69eb9d19fb91
- Child:
- 1:948ffad3284f
AudioControl Finctional
;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jakowisp | 0:69eb9d19fb91 | 1 | #include "mbed.h" |
jakowisp | 0:69eb9d19fb91 | 2 | |
jakowisp | 0:69eb9d19fb91 | 3 | #include "USBAudioControl.h" |
jakowisp | 0:69eb9d19fb91 | 4 | #include "MyDisplayClass.h" |
jakowisp | 0:69eb9d19fb91 | 5 | |
jakowisp | 0:69eb9d19fb91 | 6 | #define PAUSEKEY 16 |
jakowisp | 0:69eb9d19fb91 | 7 | #define NUMSECONDSTOHOLD 5 |
jakowisp | 0:69eb9d19fb91 | 8 | |
jakowisp | 0:69eb9d19fb91 | 9 | BusIn btnArray(p15,p12,p13,p16,p14); |
jakowisp | 0:69eb9d19fb91 | 10 | DigitalOut toggle(LED1); |
jakowisp | 0:69eb9d19fb91 | 11 | |
jakowisp | 0:69eb9d19fb91 | 12 | MyDisplayClass display; |
jakowisp | 0:69eb9d19fb91 | 13 | USBAudioControl hid(0x1234,0x0006,0x0001); |
jakowisp | 0:69eb9d19fb91 | 14 | HID_REPORT tempReport; |
jakowisp | 0:69eb9d19fb91 | 15 | |
jakowisp | 0:69eb9d19fb91 | 16 | unsigned int features=0; |
jakowisp | 0:69eb9d19fb91 | 17 | unsigned int USBstate=0; |
jakowisp | 0:69eb9d19fb91 | 18 | |
jakowisp | 0:69eb9d19fb91 | 19 | void SetLevel(HID_REPORT *report){ |
jakowisp | 0:69eb9d19fb91 | 20 | display.setLevel(report->data[0]); |
jakowisp | 0:69eb9d19fb91 | 21 | } |
jakowisp | 0:69eb9d19fb91 | 22 | |
jakowisp | 0:69eb9d19fb91 | 23 | void SetFeatures(HID_REPORT *report){ |
jakowisp | 0:69eb9d19fb91 | 24 | features=(report->data[1]&0x30)>>4; |
jakowisp | 0:69eb9d19fb91 | 25 | display.setMaxLevel((report->data[1]&0x0f)<<2); |
jakowisp | 0:69eb9d19fb91 | 26 | } |
jakowisp | 0:69eb9d19fb91 | 27 | |
jakowisp | 0:69eb9d19fb91 | 28 | void WriteConnectedBit(unsigned int connected){ |
jakowisp | 0:69eb9d19fb91 | 29 | USBstate = (connected << 1) | (USBstate & 0x1); |
jakowisp | 0:69eb9d19fb91 | 30 | } |
jakowisp | 0:69eb9d19fb91 | 31 | |
jakowisp | 0:69eb9d19fb91 | 32 | void WriteSuspendBit(unsigned int suspend){ |
jakowisp | 0:69eb9d19fb91 | 33 | USBstate = (suspend) | (USBstate & 0x2); |
jakowisp | 0:69eb9d19fb91 | 34 | } |
jakowisp | 0:69eb9d19fb91 | 35 | |
jakowisp | 0:69eb9d19fb91 | 36 | void PollInputs(HID_REPORT *tempReport) { |
jakowisp | 0:69eb9d19fb91 | 37 | tempReport->data[0]=btnArray; |
jakowisp | 0:69eb9d19fb91 | 38 | } |
jakowisp | 0:69eb9d19fb91 | 39 | |
jakowisp | 0:69eb9d19fb91 | 40 | void CheckForHeldPauseKey(HID_REPORT * tempreport, USBAudioControl * hid, DigitalOut * toggle){ |
jakowisp | 0:69eb9d19fb91 | 41 | static int holdCount=0; |
jakowisp | 0:69eb9d19fb91 | 42 | |
jakowisp | 0:69eb9d19fb91 | 43 | //Provide Feedback to user holding the key by flashing an LED when the key is held |
jakowisp | 0:69eb9d19fb91 | 44 | *toggle=(holdCount>0)?(holdCount /5)%2 :0; |
jakowisp | 0:69eb9d19fb91 | 45 | //Count how long the PAUSEKEY is held |
jakowisp | 0:69eb9d19fb91 | 46 | if(tempReport.data[0]==PAUSEKEY) { |
jakowisp | 0:69eb9d19fb91 | 47 | holdCount++; |
jakowisp | 0:69eb9d19fb91 | 48 | } else |
jakowisp | 0:69eb9d19fb91 | 49 | holdCount=0; |
jakowisp | 0:69eb9d19fb91 | 50 | //If Key is held # of seconds, The hid will diconnect/connect the USB device |
jakowisp | 0:69eb9d19fb91 | 51 | if(holdCount>=NUMSECONDSTOHOLD*10) { |
jakowisp | 0:69eb9d19fb91 | 52 | holdCount=0; |
jakowisp | 0:69eb9d19fb91 | 53 | if(hid->getConnectState()) { |
jakowisp | 0:69eb9d19fb91 | 54 | hid->disconnect(); |
jakowisp | 0:69eb9d19fb91 | 55 | } else |
jakowisp | 0:69eb9d19fb91 | 56 | hid->connect(); |
jakowisp | 0:69eb9d19fb91 | 57 | } |
jakowisp | 0:69eb9d19fb91 | 58 | } |
jakowisp | 0:69eb9d19fb91 | 59 | |
jakowisp | 0:69eb9d19fb91 | 60 | int main() { |
jakowisp | 0:69eb9d19fb91 | 61 | |
jakowisp | 0:69eb9d19fb91 | 62 | hid.callbackSetOutputReport=&SetLevel; |
jakowisp | 0:69eb9d19fb91 | 63 | hid.callbackSetFeatureReport=&SetFeatures; |
jakowisp | 0:69eb9d19fb91 | 64 | hid.callbackSuspendChange=&WriteSuspendBit; |
jakowisp | 0:69eb9d19fb91 | 65 | tempReport.length=1; |
jakowisp | 0:69eb9d19fb91 | 66 | |
jakowisp | 0:69eb9d19fb91 | 67 | while(1) { |
jakowisp | 0:69eb9d19fb91 | 68 | PollInputs(&tempReport); |
jakowisp | 0:69eb9d19fb91 | 69 | WriteConnectedBit(hid.getConnectState()); |
jakowisp | 0:69eb9d19fb91 | 70 | CheckForHeldPauseKey(&tempReport,&hid,&toggle); |
jakowisp | 0:69eb9d19fb91 | 71 | hid.FillInputReport(&tempReport); |
jakowisp | 0:69eb9d19fb91 | 72 | display.update(USBstate,features); |
jakowisp | 0:69eb9d19fb91 | 73 | wait(0.1); |
jakowisp | 0:69eb9d19fb91 | 74 | } |
jakowisp | 0:69eb9d19fb91 | 75 | } |
jakowisp | 0:69eb9d19fb91 | 76 | |
jakowisp | 0:69eb9d19fb91 | 77 |