#include "MediaController.h"
static uint8_t PrevMediaControlHIDReportBuffer[sizeof(USB_MediaReport_Data_t)];
USB_ClassInfo_HID_Device_t MediaControl_HID_Interface =
{
.Config =
{
.InterfaceNumber = INTERFACE_ID_HID,
.ReportINEndpoint =
{
.Address = MEDIACONTROL_HID_EPADDR,
.Size = MEDIACONTROL_HID_EPSIZE,
.Banks = 1,
},
.PrevReportINBuffer = PrevMediaControlHIDReportBuffer,
.PrevReportINBufferSize = sizeof(PrevMediaControlHIDReportBuffer),
},
};
int main(void)
{
SetupHardware();
LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
GlobalInterruptEnable();
for (;;)
{
HID_Device_USBTask(&MediaControl_HID_Interface);
USB_USBTask();
}
}
void SetupHardware()
{
#if (ARCH == ARCH_AVR8)
MCUSR &= ~(1 << WDRF);
wdt_disable();
clock_prescale_set(clock_div_1);
#endif
Joystick_Init();
LEDs_Init();
Buttons_Init();
USB_Init();
}
void EVENT_USB_Device_Connect(void)
{
LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
}
void EVENT_USB_Device_Disconnect(void)
{
LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
}
void EVENT_USB_Device_ConfigurationChanged(void)
{
bool ConfigSuccess = true;
ConfigSuccess &= HID_Device_ConfigureEndpoints(&MediaControl_HID_Interface);
USB_Device_EnableSOFEvents();
LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
}
void EVENT_USB_Device_ControlRequest(void)
{
HID_Device_ProcessControlRequest(&MediaControl_HID_Interface);
}
void EVENT_USB_Device_StartOfFrame(void)
{
HID_Device_MillisecondElapsed(&MediaControl_HID_Interface);
}
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
uint8_t* const ReportID,
const uint8_t ReportType,
void* ReportData,
uint16_t* const ReportSize)
{
USB_MediaReport_Data_t* MediaReport = (USB_MediaReport_Data_t*)ReportData;
uint8_t JoyStatus_LCL = Joystick_GetStatus();
uint8_t ButtonStatus_LCL = Buttons_GetStatus();
MediaReport->Mute = ((ButtonStatus_LCL & BUTTONS_BUTTON1) ? true : false);
MediaReport->PlayPause = ((JoyStatus_LCL & JOY_PRESS) ? true : false);
MediaReport->VolumeUp = ((JoyStatus_LCL & JOY_UP) ? true : false);
MediaReport->VolumeDown = ((JoyStatus_LCL & JOY_DOWN) ? true : false);
MediaReport->PreviousTrack = ((JoyStatus_LCL & JOY_LEFT) ? true : false);
MediaReport->NextTrack = ((JoyStatus_LCL & JOY_RIGHT) ? true : false);
*ReportSize = sizeof(USB_MediaReport_Data_t);
return false;
}
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
const uint8_t ReportID,
const uint8_t ReportType,
const void* ReportData,
const uint16_t ReportSize)
{
}