diff options
| author | Jack Humbert <[email protected]> | 2017-07-07 11:55:23 -0400 | 
|---|---|---|
| committer | Jack Humbert <[email protected]> | 2017-07-07 11:55:23 -0400 | 
| commit | 8655d4f4948b2deef7844503c8d690f23ac1a062 (patch) | |
| tree | b2c6effc9d6cd5b5b43933a1e53b8bf17e9e82cf /lib/lufa/Projects/AVRISP-MKII/AVRISP-MKII.c | |
| parent | 1896c76a2928c96f9ab7947bec2ef8dd37623cff (diff) | |
| parent | 60b30c036397cb5627fa374bb930794b225daa29 (diff) | |
| download | qmk_firmware-8655d4f4948b2deef7844503c8d690f23ac1a062.tar.gz qmk_firmware-8655d4f4948b2deef7844503c8d690f23ac1a062.zip | |
Merge commit '60b30c036397cb5627fa374bb930794b225daa29' as 'lib/lufa'
Diffstat (limited to 'lib/lufa/Projects/AVRISP-MKII/AVRISP-MKII.c')
| -rw-r--r-- | lib/lufa/Projects/AVRISP-MKII/AVRISP-MKII.c | 164 | 
1 files changed, 164 insertions, 0 deletions
| diff --git a/lib/lufa/Projects/AVRISP-MKII/AVRISP-MKII.c b/lib/lufa/Projects/AVRISP-MKII/AVRISP-MKII.c new file mode 100644 index 0000000000..a734d960ba --- /dev/null +++ b/lib/lufa/Projects/AVRISP-MKII/AVRISP-MKII.c @@ -0,0 +1,164 @@ +/* +             LUFA Library +     Copyright (C) Dean Camera, 2017. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +*/ + +/* +  Copyright 2017  Dean Camera (dean [at] fourwalledcubicle [dot] com) + +  Permission to use, copy, modify, distribute, and sell this +  software and its documentation for any purpose is hereby granted +  without fee, provided that the above copyright notice appear in +  all copies and that both that the copyright notice and this +  permission notice and warranty disclaimer appear in supporting +  documentation, and that the name of the author not be used in +  advertising or publicity pertaining to distribution of the +  software without specific, written prior permission. + +  The author disclaims all warranties with regard to this +  software, including all implied warranties of merchantability +  and fitness.  In no event shall the author be liable for any +  special, indirect or consequential damages or any damages +  whatsoever resulting from loss of use, data or profits, whether +  in an action of contract, negligence or other tortious action, +  arising out of or in connection with the use or performance of +  this software. +*/ + +/** \file + * + *  Main source file for the AVRISP project. This file contains the main tasks of + *  the project and is responsible for the initial application hardware configuration. + */ + +#include "AVRISP-MKII.h" + +#if (BOARD != BOARD_NONE) +  /* Some board hardware definitions (e.g. the Arduino Micro) have their LEDs defined on the same pins +     as the ISP, PDI or TPI interfaces (see the accompanying project documentation). If a board other +     than NONE is selected (to enable the LED driver with the programmer) you should double-check that +     no conflicts will occur. If there is a conflict, turn off the LEDs (set BOARD to NONE in the makefile) +     or define a custom board driver (see the LUFA manual) with alternative LED mappings. +  */ +  #warning Board specific drivers have been selected; make sure the board LED driver does not conflict with the programmer ISP/PDI/TPI interfaces. +#endif + +/** Main program entry point. This routine contains the overall program flow, including initial + *  setup of all components and the main program loop. + */ +int main(void) +{ +	SetupHardware(); +	V2Protocol_Init(); + +	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); +	GlobalInterruptEnable(); + +	for (;;) +	{ +		#if (BOARD == BOARD_USBTINYMKII) +		/* On the USBTINY-MKII target, there is a secondary LED which indicates the current selected power +		   mode - either VBUS, or sourced from the VTARGET pin of the programming connectors */ +		LEDs_ChangeLEDs(LEDMASK_VBUSPOWER, (PIND & (1 << 0)) ? 0 : LEDMASK_VBUSPOWER); +		#endif + +		AVRISP_Task(); +		USB_USBTask(); +	} +} + +/** Configures the board hardware and chip peripherals for the demo's functionality. */ +void SetupHardware(void) +{ +#if (ARCH == ARCH_AVR8) +	/* Disable watchdog if enabled by bootloader/fuses */ +	MCUSR &= ~(1 << WDRF); +	wdt_disable(); + +	/* Disable clock division */ +	clock_prescale_set(clock_div_1); +#endif + +	/* Hardware Initialization */ +	LEDs_Init(); +	#if defined(RESET_TOGGLES_LIBUSB_COMPAT) +	UpdateCurrentCompatibilityMode(); +	#endif + +	/* USB Stack Initialization */ +	USB_Init(); +} + +/** Event handler for the library USB Connection event. */ +void EVENT_USB_Device_Connect(void) +{ +	LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); +} + +/** Event handler for the library USB Disconnection event. */ +void EVENT_USB_Device_Disconnect(void) +{ +	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); +} + +/** Event handler for the library USB Configuration Changed event. */ +void EVENT_USB_Device_ConfigurationChanged(void) +{ +	bool ConfigSuccess = true; + +	/* Setup AVRISP Data OUT endpoint */ +	ConfigSuccess &= Endpoint_ConfigureEndpoint(AVRISP_DATA_OUT_EPADDR, EP_TYPE_BULK, AVRISP_DATA_EPSIZE, 1); + +	/* Setup AVRISP Data IN endpoint if it is using a physically different endpoint */ +	if ((AVRISP_DATA_IN_EPADDR & ENDPOINT_EPNUM_MASK) != (AVRISP_DATA_OUT_EPADDR & ENDPOINT_EPNUM_MASK)) +	  ConfigSuccess &= Endpoint_ConfigureEndpoint(AVRISP_DATA_IN_EPADDR, EP_TYPE_BULK, AVRISP_DATA_EPSIZE, 1); + +	/* Indicate endpoint configuration success or failure */ +	LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); +} + +/** Processes incoming V2 Protocol commands from the host, returning a response when required. */ +void AVRISP_Task(void) +{ +	/* Device must be connected and configured for the task to run */ +	if (USB_DeviceState != DEVICE_STATE_Configured) +	  return; + +	V2Params_UpdateParamValues(); + +	Endpoint_SelectEndpoint(AVRISP_DATA_OUT_EPADDR); + +	/* Check to see if a V2 Protocol command has been received */ +	if (Endpoint_IsOUTReceived()) +	{ +		LEDs_SetAllLEDs(LEDMASK_BUSY); + +		/* Pass off processing of the V2 Protocol command to the V2 Protocol handler */ +		V2Protocol_ProcessCommand(); + +		LEDs_SetAllLEDs(LEDMASK_USB_READY); +	} +} + +/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors" + *  documentation) by the application code so that the address and size of a requested descriptor can be given + *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function + *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the + *  USB host. + * + *  \param[in]  wValue                 Descriptor type and index to retrieve + *  \param[in]  wIndex                 Sub-index to retrieve (such as a localized string language) + *  \param[out] DescriptorAddress      Address of the retrieved descriptor + * + *  \return Length of the retrieved descriptor in bytes, or NO_DESCRIPTOR if the descriptor was not found + */ +uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, +                                    const uint16_t wIndex, +                                    const void** const DescriptorAddress) +{ +	return AVRISP_GetDescriptor(wValue, wIndex, DescriptorAddress); +} + | 
