Usb Device Interface, protocol, and programming homework #4 Audio Control device

Dependencies:   C12832_lcd USBDevice mbed

main.cpp

Committer:
jakowisp
Date:
2013-07-30
Revision:
0:69eb9d19fb91
Child:
1:948ffad3284f

File content as of revision 0:69eb9d19fb91:

#include "mbed.h"

#include "USBAudioControl.h"
#include "MyDisplayClass.h"

#define PAUSEKEY 16
#define NUMSECONDSTOHOLD 5

BusIn btnArray(p15,p12,p13,p16,p14);
DigitalOut toggle(LED1);

MyDisplayClass display;
USBAudioControl hid(0x1234,0x0006,0x0001);
HID_REPORT tempReport;

unsigned int features=0;
unsigned int USBstate=0;

void SetLevel(HID_REPORT *report){
    display.setLevel(report->data[0]);   
}

void SetFeatures(HID_REPORT *report){
    features=(report->data[1]&0x30)>>4;
    display.setMaxLevel((report->data[1]&0x0f)<<2);
}

void WriteConnectedBit(unsigned int connected){
    USBstate = (connected << 1) | (USBstate & 0x1);
}

void WriteSuspendBit(unsigned int suspend){
    USBstate = (suspend) | (USBstate & 0x2);
}
 
void PollInputs(HID_REPORT *tempReport) {
   tempReport->data[0]=btnArray;
}

void CheckForHeldPauseKey(HID_REPORT * tempreport, USBAudioControl * hid, DigitalOut * toggle){
 static int holdCount=0;
     
     //Provide Feedback to user holding the key by flashing an LED when the key is held
     *toggle=(holdCount>0)?(holdCount /5)%2 :0;
     //Count how long the PAUSEKEY is held
     if(tempReport.data[0]==PAUSEKEY) {
        holdCount++;     
     } else
        holdCount=0;
     //If Key is held # of seconds, The hid will diconnect/connect the USB device
     if(holdCount>=NUMSECONDSTOHOLD*10) {
        holdCount=0;
       if(hid->getConnectState())  { 
         hid->disconnect();
       } else
         hid->connect();
     }
}

int main() {
   
    hid.callbackSetOutputReport=&SetLevel;
    hid.callbackSetFeatureReport=&SetFeatures;
    hid.callbackSuspendChange=&WriteSuspendBit;
    tempReport.length=1;
    
    while(1) {
     PollInputs(&tempReport);
     WriteConnectedBit(hid.getConnectState());
     CheckForHeldPauseKey(&tempReport,&hid,&toggle);
     hid.FillInputReport(&tempReport);
     display.update(USBstate,features); 
     wait(0.1);
    }
}