Added const modifiers to device mode class drivers.
Added parameter directions to function parameter documentation. Added new experimental FAST_STREAM_FUNCTIONS compile time option to speed up stream transfers at the expense of a higher FLASH consumption (needs testing to verify improved throughput).
This commit is contained in:
		
							parent
							
								
									3cbdcd3686
								
							
						
					
					
						commit
						f1076ac4d6
					
				
					 115 changed files with 1031 additions and 633 deletions
				
			
		| 
						 | 
				
			
			@ -206,7 +206,7 @@ void EVENT_USB_UnhandledControlPacket(void)
 | 
			
		|||
/** Reads or writes a block of EEPROM or FLASH memory to or from the appropriate CDC data endpoint, depending
 | 
			
		||||
 *  on the AVR910 protocol command issued.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param Command  Single character AVR910 protocol command indicating what memory operation to perform
 | 
			
		||||
 *  \param[in] Command  Single character AVR910 protocol command indicating what memory operation to perform
 | 
			
		||||
 */
 | 
			
		||||
static void ReadWriteMemoryBlock(const uint8_t Command)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -343,7 +343,7 @@ static uint8_t FetchNextCommandByte(void)
 | 
			
		|||
/** Writes the next response byte to the CDC data IN endpoint, and sends the endpoint back if needed to free up the
 | 
			
		||||
 *  bank when full ready for the next byte in the packet to the host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param Response  Next response byte to send to the host
 | 
			
		||||
 *  \param[in] Response  Next response byte to send to the host
 | 
			
		||||
 */
 | 
			
		||||
static void WriteNextResponseByte(const uint8_t Response)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -84,7 +84,7 @@
 | 
			
		|||
		 *  type define so that the same macro can be used for functional descriptors of varying data lengths,
 | 
			
		||||
		 *  while allowing the sizeof() operator to return correct results.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param DataSize  Size of the functional descriptor's data payload, in bytes
 | 
			
		||||
		 *  \param[in] DataSize  Size of the functional descriptor's data payload, in bytes
 | 
			
		||||
		 */
 | 
			
		||||
		#define CDC_FUNCTIONAL_DESCRIPTOR(DataSize)        \
 | 
			
		||||
		     struct                                        \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -454,7 +454,7 @@ void EVENT_USB_UnhandledControlPacket(void)
 | 
			
		|||
/** Routine to discard the specified number of bytes from the control endpoint stream. This is used to
 | 
			
		||||
 *  discard unused bytes in the stream from the host, including the memory program block suffix.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param NumberOfBytes  Number of bytes to discard from the host from the control endpoint
 | 
			
		||||
 *  \param[in] NumberOfBytes  Number of bytes to discard from the host from the control endpoint
 | 
			
		||||
 */
 | 
			
		||||
static void DiscardFillerBytes(uint8_t NumberOfBytes)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -76,16 +76,16 @@
 | 
			
		|||
		
 | 
			
		||||
		/** Convenience macro, used to determine if the issued command is the given one-byte long command.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param dataarr  Command byte array to check against
 | 
			
		||||
		 *  \param cb1      First command byte to check
 | 
			
		||||
		 *  \param[in] dataarr  Command byte array to check against
 | 
			
		||||
		 *  \param[in] cb1      First command byte to check
 | 
			
		||||
		 */
 | 
			
		||||
		#define IS_ONEBYTE_COMMAND(dataarr, cb1)       (dataarr[0] == cb1)
 | 
			
		||||
 | 
			
		||||
		/** Convenience macro, used to determine if the issued command is the given two-byte long command.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param dataarr  Command byte array to check against
 | 
			
		||||
		 *  \param cb1      First command byte to check
 | 
			
		||||
		 *  \param cb2      Second command byte to check
 | 
			
		||||
		 *  \param[in] dataarr  Command byte array to check against
 | 
			
		||||
		 *  \param[in] cb1      First command byte to check
 | 
			
		||||
		 *  \param[in] cb2      Second command byte to check
 | 
			
		||||
		 */
 | 
			
		||||
		#define IS_TWOBYTE_COMMAND(dataarr, cb1, cb2) ((dataarr[0] == cb1) && (dataarr[1] == cb2))
 | 
			
		||||
	
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -131,13 +131,13 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK)
 | 
			
		|||
 | 
			
		||||
/** HID class driver callback function for the creation of HID reports to the host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param ReportID  Report ID requested by the host if non-zero, otherwise callback should set to the generated report ID
 | 
			
		||||
 *  \param ReportData  Pointer to a buffer where the created report should be stored
 | 
			
		||||
 *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param[in,out] ReportID  Report ID requested by the host if non-zero, otherwise callback should set to the generated report ID
 | 
			
		||||
 *  \param[out] ReportData  Pointer to a buffer where the created report should be stored
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Number of bytes written in the report (or zero if no report is to be sent
 | 
			
		||||
 */
 | 
			
		||||
uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)
 | 
			
		||||
uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID, void* ReportData)
 | 
			
		||||
{
 | 
			
		||||
	// Create generic HID report here
 | 
			
		||||
	
 | 
			
		||||
| 
						 | 
				
			
			@ -146,13 +146,13 @@ uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* HIDInte
 | 
			
		|||
 | 
			
		||||
/** HID class driver callback function for the processing of HID reports from the host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param ReportID  Report ID of the received report from the host
 | 
			
		||||
 *  \param ReportData  Pointer to a buffer where the created report has been stored
 | 
			
		||||
 *  \param ReportSize  Size in bytes of the received HID report
 | 
			
		||||
 *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param[in] ReportID  Report ID of the received report from the host
 | 
			
		||||
 *  \param[in] ReportData  Pointer to a buffer where the created report has been stored
 | 
			
		||||
 *  \param[in] ReportSize  Size in bytes of the received HID report
 | 
			
		||||
 */
 | 
			
		||||
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t ReportID,
 | 
			
		||||
                                          void* ReportData, uint16_t ReportSize)
 | 
			
		||||
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
 | 
			
		||||
                                          const void* ReportData, const uint16_t ReportSize)
 | 
			
		||||
{
 | 
			
		||||
	// Process received generic HID report here
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,9 +72,9 @@
 | 
			
		|||
		void EVENT_USB_ConfigurationChanged(void);
 | 
			
		||||
		void EVENT_USB_UnhandledControlPacket(void);
 | 
			
		||||
 | 
			
		||||
		uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t* ReportID,
 | 
			
		||||
		uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
 | 
			
		||||
		                                             void* ReportData);
 | 
			
		||||
		void     CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t ReportID, 
 | 
			
		||||
		                                              void* ReportData, uint16_t ReportSize);
 | 
			
		||||
		void     CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
 | 
			
		||||
		                                              const void* ReportData, const uint16_t ReportSize);
 | 
			
		||||
		
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -133,13 +133,13 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK)
 | 
			
		|||
 | 
			
		||||
/** HID class driver callback function for the creation of HID reports to the host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param ReportID  Report ID requested by the host if non-zero, otherwise callback should set to the generated report ID
 | 
			
		||||
 *  \param ReportData  Pointer to a buffer where the created report should be stored
 | 
			
		||||
 *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param[in,out] ReportID  Report ID requested by the host if non-zero, otherwise callback should set to the generated report ID
 | 
			
		||||
 *  \param[out] ReportData  Pointer to a buffer where the created report should be stored
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Number of bytes written in the report (or zero if no report is to be sent
 | 
			
		||||
 */
 | 
			
		||||
uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)
 | 
			
		||||
uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID, void* ReportData)
 | 
			
		||||
{
 | 
			
		||||
	USB_JoystickReport_Data_t* JoystickReport = (USB_JoystickReport_Data_t*)ReportData;
 | 
			
		||||
	
 | 
			
		||||
| 
						 | 
				
			
			@ -167,13 +167,13 @@ uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* HIDInte
 | 
			
		|||
 | 
			
		||||
/** HID class driver callback function for the processing of HID reports from the host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param ReportID  Report ID of the received report from the host
 | 
			
		||||
 *  \param ReportData  Pointer to a buffer where the created report has been stored
 | 
			
		||||
 *  \param ReportSize  Size in bytes of the received HID report
 | 
			
		||||
 *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param[in] ReportID  Report ID of the received report from the host
 | 
			
		||||
 *  \param[in] ReportData  Pointer to a buffer where the created report has been stored
 | 
			
		||||
 *  \param[in] ReportSize  Size in bytes of the received HID report
 | 
			
		||||
 */
 | 
			
		||||
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t ReportID,
 | 
			
		||||
                                          void* ReportData, uint16_t ReportSize)
 | 
			
		||||
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
 | 
			
		||||
                                          const void* ReportData, const uint16_t ReportSize)
 | 
			
		||||
{
 | 
			
		||||
	// Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,9 +83,9 @@
 | 
			
		|||
		void EVENT_USB_ConfigurationChanged(void);
 | 
			
		||||
		void EVENT_USB_UnhandledControlPacket(void);
 | 
			
		||||
 | 
			
		||||
		uint16_t CALLBACK_HID_Device_CreateNextHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t* ReportID,
 | 
			
		||||
		uint16_t CALLBACK_HID_Device_CreateNextHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
 | 
			
		||||
		                                                 void* ReportData);
 | 
			
		||||
		void     CALLBACK_HID_Device_ProcessReceivedHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t ReportID, 
 | 
			
		||||
		                                                      void* ReportData, uint16_t ReportSize);
 | 
			
		||||
		void     CALLBACK_HID_Device_ProcessReceivedHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, const uint8_t ReportID, 
 | 
			
		||||
		                                                      const void* ReportData, const uint16_t ReportSize);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -134,13 +134,13 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK)
 | 
			
		|||
 | 
			
		||||
/** HID class driver callback function for the creation of HID reports to the host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param ReportID  Report ID requested by the host if non-zero, otherwise callback should set to the generated report ID
 | 
			
		||||
 *  \param ReportData  Pointer to a buffer where the created report should be stored
 | 
			
		||||
 *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param[in,out] ReportID  Report ID requested by the host if non-zero, otherwise callback should set to the generated report ID
 | 
			
		||||
 *  \param[out] ReportData  Pointer to a buffer where the created report should be stored
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Number of bytes written in the report (or zero if no report is to be sent
 | 
			
		||||
 */
 | 
			
		||||
uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)
 | 
			
		||||
uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID, void* ReportData)
 | 
			
		||||
{
 | 
			
		||||
	USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
 | 
			
		||||
	
 | 
			
		||||
| 
						 | 
				
			
			@ -168,13 +168,13 @@ uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* HIDInte
 | 
			
		|||
 | 
			
		||||
/** HID class driver callback function for the processing of HID reports from the host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param ReportID  Report ID of the received report from the host
 | 
			
		||||
 *  \param ReportData  Pointer to a buffer where the created report has been stored
 | 
			
		||||
 *  \param ReportSize  Size in bytes of the received HID report
 | 
			
		||||
 *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param[in] ReportID  Report ID of the received report from the host
 | 
			
		||||
 *  \param[in] ReportData  Pointer to a buffer where the created report has been stored
 | 
			
		||||
 *  \param[in] ReportSize  Size in bytes of the received HID report
 | 
			
		||||
 */
 | 
			
		||||
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t ReportID,
 | 
			
		||||
                                          void* ReportData, uint16_t ReportSize)
 | 
			
		||||
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
 | 
			
		||||
                                          const void* ReportData, const uint16_t ReportSize)
 | 
			
		||||
{
 | 
			
		||||
	uint8_t  LEDMask   = LEDS_NO_LEDS;
 | 
			
		||||
	uint8_t* LEDReport = (uint8_t*)ReportData;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -86,9 +86,9 @@
 | 
			
		|||
		void EVENT_USB_ConfigurationChanged(void);
 | 
			
		||||
		void EVENT_USB_UnhandledControlPacket(void);
 | 
			
		||||
 | 
			
		||||
		uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t* ReportID,
 | 
			
		||||
		uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
 | 
			
		||||
		                                             void* ReportData);
 | 
			
		||||
		void     CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t ReportID, 
 | 
			
		||||
		                                              void* ReportData, uint16_t ReportSize);
 | 
			
		||||
		void     CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
 | 
			
		||||
		                                              const void* ReportData, const uint16_t ReportSize);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -165,13 +165,13 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK)
 | 
			
		|||
 | 
			
		||||
/** HID class driver callback function for the creation of HID reports to the host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param ReportID  Report ID requested by the host if non-zero, otherwise callback should set to the generated report ID
 | 
			
		||||
 *  \param ReportData  Pointer to a buffer where the created report should be stored
 | 
			
		||||
 *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param[in,out] ReportID  Report ID requested by the host if non-zero, otherwise callback should set to the generated report ID
 | 
			
		||||
 *  \param[out] ReportData  Pointer to a buffer where the created report should be stored
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Number of bytes written in the report (or zero if no report is to be sent
 | 
			
		||||
 */
 | 
			
		||||
uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)
 | 
			
		||||
uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID, void* ReportData)
 | 
			
		||||
{
 | 
			
		||||
	uint8_t JoyStatus_LCL    = Joystick_GetStatus();
 | 
			
		||||
	uint8_t ButtonStatus_LCL = Buttons_GetStatus();
 | 
			
		||||
| 
						 | 
				
			
			@ -226,13 +226,13 @@ uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* HIDInte
 | 
			
		|||
 | 
			
		||||
/** HID class driver callback function for the processing of HID reports from the host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param ReportID  Report ID of the received report from the host
 | 
			
		||||
 *  \param ReportData  Pointer to a buffer where the created report has been stored
 | 
			
		||||
 *  \param ReportSize  Size in bytes of the received HID report
 | 
			
		||||
 *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param[in] ReportID  Report ID of the received report from the host
 | 
			
		||||
 *  \param[in] ReportData  Pointer to a buffer where the created report has been stored
 | 
			
		||||
 *  \param[in] ReportSize  Size in bytes of the received HID report
 | 
			
		||||
 */
 | 
			
		||||
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t ReportID,
 | 
			
		||||
                                          void* ReportData, uint16_t ReportSize)
 | 
			
		||||
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
 | 
			
		||||
                                          const void* ReportData, const uint16_t ReportSize)
 | 
			
		||||
{
 | 
			
		||||
	if (HIDInterfaceInfo == &Keyboard_HID_Interface)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -90,9 +90,9 @@
 | 
			
		|||
		void EVENT_USB_ConfigurationChanged(void);
 | 
			
		||||
		void EVENT_USB_UnhandledControlPacket(void);
 | 
			
		||||
 | 
			
		||||
		uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t* ReportID,
 | 
			
		||||
		uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
 | 
			
		||||
		                                             void* ReportData);
 | 
			
		||||
		void     CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t ReportID, 
 | 
			
		||||
		                                              void* ReportData, uint16_t ReportSize);
 | 
			
		||||
		void     CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
 | 
			
		||||
		                                              const void* ReportData, const uint16_t ReportSize);
 | 
			
		||||
		
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,9 +43,9 @@
 | 
			
		|||
 *  the pre-selected data OUT endpoint. This routine reads in OS sized blocks from the endpoint and writes
 | 
			
		||||
 *  them to the dataflash in Dataflash page sized blocks.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param MSInterfaceInfo  Pointer to a Mass Storage class state structure for the Mass Storage interface being used
 | 
			
		||||
 *  \param BlockAddress  Data block starting address for the write sequence
 | 
			
		||||
 *  \param TotalBlocks   Number of blocks of data to write
 | 
			
		||||
 *  \param[in] MSInterfaceInfo  Pointer to a Mass Storage class state structure for the Mass Storage interface being used
 | 
			
		||||
 *  \param[in] BlockAddress  Data block starting address for the write sequence
 | 
			
		||||
 *  \param[in] TotalBlocks   Number of blocks of data to write
 | 
			
		||||
 */
 | 
			
		||||
void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -169,9 +169,9 @@ void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* MSInterfaceInfo, co
 | 
			
		|||
 *  the pre-selected data IN endpoint. This routine reads in Dataflash page sized blocks from the Dataflash
 | 
			
		||||
 *  and writes them in OS sized blocks to the endpoint.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param MSInterfaceInfo  Pointer to a Mass Storage class state structure for the Mass Storage interface being used
 | 
			
		||||
 *  \param BlockAddress  Data block starting address for the read sequence
 | 
			
		||||
 *  \param TotalBlocks   Number of blocks of data to read
 | 
			
		||||
 *  \param[in] MSInterfaceInfo  Pointer to a Mass Storage class state structure for the Mass Storage interface being used
 | 
			
		||||
 *  \param[in] BlockAddress  Data block starting address for the read sequence
 | 
			
		||||
 *  \param[in] TotalBlocks   Number of blocks of data to read
 | 
			
		||||
 */
 | 
			
		||||
void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -273,9 +273,9 @@ void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* MSInterfaceInfo, con
 | 
			
		|||
 *  dataflash in Dataflash page sized blocks. This can be linked to FAT libraries to write files to the
 | 
			
		||||
 *  dataflash.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param BlockAddress  Data block starting address for the write sequence
 | 
			
		||||
 *  \param TotalBlocks   Number of blocks of data to write
 | 
			
		||||
 *  \param BufferPtr     Pointer to the data source RAM buffer
 | 
			
		||||
 *  \param[in] BlockAddress  Data block starting address for the write sequence
 | 
			
		||||
 *  \param[in] TotalBlocks   Number of blocks of data to write
 | 
			
		||||
 *  \param[in] BufferPtr     Pointer to the data source RAM buffer
 | 
			
		||||
 */
 | 
			
		||||
void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks, uint8_t* BufferPtr)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -365,9 +365,9 @@ void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, uint16_t Tota
 | 
			
		|||
 *  and writes them in OS sized blocks to the given buffer. This can be linked to FAT libraries to read
 | 
			
		||||
 *  the files stored on the dataflash.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param BlockAddress  Data block starting address for the read sequence
 | 
			
		||||
 *  \param TotalBlocks   Number of blocks of data to read
 | 
			
		||||
 *  \param BufferPtr     Pointer to the data destination RAM buffer
 | 
			
		||||
 *  \param[in] BlockAddress  Data block starting address for the read sequence
 | 
			
		||||
 *  \param[in] TotalBlocks   Number of blocks of data to read
 | 
			
		||||
 *  \param[out] BufferPtr     Pointer to the data destination RAM buffer
 | 
			
		||||
 */
 | 
			
		||||
void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks, uint8_t* BufferPtr)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ SCSI_Request_Sense_Response_t SenseData =
 | 
			
		|||
 *  to the appropriate SCSI command handling routine if the issued command is supported by the device, else it returns
 | 
			
		||||
 *  a command failure due to a ILLEGAL REQUEST.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
 | 
			
		||||
 *  \param[in] MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
 | 
			
		||||
 */
 | 
			
		||||
bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -142,7 +142,7 @@ bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
 | 
			
		|||
/** Command processing for an issued SCSI INQUIRY command. This command returns information about the device's features
 | 
			
		||||
 *  and capabilities to the host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
 | 
			
		||||
 *  \param[in] MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Boolean true if the command completed successfully, false otherwise.
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -184,7 +184,7 @@ static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
 | 
			
		|||
/** Command processing for an issued SCSI REQUEST SENSE command. This command returns information about the last issued command,
 | 
			
		||||
 *  including the error code and additional error information so that the host can determine why a command failed to complete.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
 | 
			
		||||
 *  \param[in] MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Boolean true if the command completed successfully, false otherwise.
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -208,7 +208,7 @@ static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* MSInterfaceInf
 | 
			
		|||
/** Command processing for an issued SCSI READ CAPACITY (10) command. This command returns information about the device's capacity
 | 
			
		||||
 *  on the selected Logical Unit (drive), as a number of OS-sized blocks.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
 | 
			
		||||
 *  \param[in] MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Boolean true if the command completed successfully, false otherwise.
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -231,7 +231,7 @@ static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* MSInterface
 | 
			
		|||
 *  board, and indicates if they are present and functioning correctly. Only the Self-Test portion of the diagnostic command is
 | 
			
		||||
 *  supported.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
 | 
			
		||||
 *  \param[in] MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Boolean true if the command completed successfully, false otherwise.
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -296,8 +296,8 @@ static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_Device_t* MSInterfaceI
 | 
			
		|||
 *  and total number of blocks to process, then calls the appropriate low-level dataflash routine to handle the actual
 | 
			
		||||
 *  reading and writing of the data.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
 | 
			
		||||
 *  \param IsDataRead  Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE)
 | 
			
		||||
 *  \param[in] MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
 | 
			
		||||
 *  \param[in] IsDataRead  Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE)
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Boolean true if the command completed successfully, false otherwise.
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,9 +53,9 @@
 | 
			
		|||
		 *  is for convenience, as it allows for all three sense values (returned upon request to the host to give information about
 | 
			
		||||
		 *  the last command failure) in a quick and easy manner.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param key    New SCSI sense key to set the sense code to
 | 
			
		||||
		 *  \param acode  New SCSI additional sense key to set the additional sense code to
 | 
			
		||||
		 *  \param aqual  New SCSI additional sense key qualifier to set the additional sense qualifier code to
 | 
			
		||||
		 *  \param[in] key    New SCSI sense key to set the sense code to
 | 
			
		||||
		 *  \param[in] acode  New SCSI additional sense key to set the additional sense code to
 | 
			
		||||
		 *  \param[in] aqual  New SCSI additional sense key qualifier to set the additional sense qualifier code to
 | 
			
		||||
		 */
 | 
			
		||||
		#define SCSI_SET_SENSE(key, acode, aqual)  MACROS{ SenseData.SenseKey = key;              \
 | 
			
		||||
		                                                   SenseData.AdditionalSenseCode = acode; \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -125,7 +125,7 @@ void EVENT_USB_UnhandledControlPacket(void)
 | 
			
		|||
 | 
			
		||||
/** Mass Storage class driver callback function the reception of SCSI commands from the host, which must be processed.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface configuration structure being referenced
 | 
			
		||||
 *  \param[in] MSInterfaceInfo  Pointer to the Mass Storage class interface configuration structure being referenced
 | 
			
		||||
 */
 | 
			
		||||
bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -133,13 +133,13 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK)
 | 
			
		|||
 | 
			
		||||
/** HID class driver callback function for the creation of HID reports to the host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param ReportID  Report ID requested by the host if non-zero, otherwise callback should set to the generated report ID
 | 
			
		||||
 *  \param ReportData  Pointer to a buffer where the created report should be stored
 | 
			
		||||
 *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param[in,out] ReportID  Report ID requested by the host if non-zero, otherwise callback should set to the generated report ID
 | 
			
		||||
 *  \param[out] ReportData  Pointer to a buffer where the created report should be stored
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Number of bytes written in the report (or zero if no report is to be sent
 | 
			
		||||
 */
 | 
			
		||||
uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)
 | 
			
		||||
uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID, void* ReportData)
 | 
			
		||||
{
 | 
			
		||||
	USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData;
 | 
			
		||||
		
 | 
			
		||||
| 
						 | 
				
			
			@ -167,13 +167,13 @@ uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* HIDInte
 | 
			
		|||
 | 
			
		||||
/** HID class driver callback function for the processing of HID reports from the host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param ReportID  Report ID of the received report from the host
 | 
			
		||||
 *  \param ReportData  Pointer to a buffer where the created report has been stored
 | 
			
		||||
 *  \param ReportSize  Size in bytes of the received HID report
 | 
			
		||||
 *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
			
		||||
 *  \param[in] ReportID  Report ID of the received report from the host
 | 
			
		||||
 *  \param[in] ReportData  Pointer to a buffer where the created report has been stored
 | 
			
		||||
 *  \param[in] ReportSize  Size in bytes of the received HID report
 | 
			
		||||
 */
 | 
			
		||||
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t ReportID,
 | 
			
		||||
                                          void* ReportData, uint16_t ReportSize)
 | 
			
		||||
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
 | 
			
		||||
                                          const void* ReportData, const uint16_t ReportSize)
 | 
			
		||||
{
 | 
			
		||||
	// Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,9 +85,9 @@
 | 
			
		|||
		void EVENT_USB_ConfigurationChanged(void);
 | 
			
		||||
		void EVENT_USB_UnhandledControlPacket(void);
 | 
			
		||||
 | 
			
		||||
		uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t* ReportID,
 | 
			
		||||
		uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
 | 
			
		||||
		                                             void* ReportData);
 | 
			
		||||
		void     CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t ReportID, 
 | 
			
		||||
		                                              void* ReportData, uint16_t ReportSize);
 | 
			
		||||
		void     CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
 | 
			
		||||
		                                              const void* ReportData, const uint16_t ReportSize);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
		 *  a single typedef struct. A macro is used instead so that functional descriptors can be created
 | 
			
		||||
		 *  easily by specifying the size of the payload. This allows sizeof() to work correctly.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param DataSize  Size in bytes of the CDC functional descriptor's data payload
 | 
			
		||||
		 *  \param[in] DataSize  Size in bytes of the CDC functional descriptor's data payload
 | 
			
		||||
		 */		
 | 
			
		||||
		#define CDC_FUNCTIONAL_DESCRIPTOR(DataSize)        \
 | 
			
		||||
		     struct                                        \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,8 +41,8 @@
 | 
			
		|||
 *  to the output Ethernet frame if the host is requesting the IP or MAC address of the
 | 
			
		||||
 *  virtual server device on the network.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart   Pointer to the start of the incoming packet's ARP header
 | 
			
		||||
 *  \param OutDataStart  Pointer to the start of the outgoing packet's ARP header
 | 
			
		||||
 *  \param[in] InDataStart   Pointer to the start of the incoming packet's ARP header
 | 
			
		||||
 *  \param[out] OutDataStart  Pointer to the start of the outgoing packet's ARP header
 | 
			
		||||
 *
 | 
			
		||||
 *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,9 +40,9 @@
 | 
			
		|||
/** Processes a DHCP packet inside an Ethernet frame, and writes the appropriate response
 | 
			
		||||
 *  to the output Ethernet frame if the host is requesting or accepting an IP address.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param IPHeaderInStart     Pointer to the start of the incoming packet's IP header
 | 
			
		||||
 *  \param DHCPHeaderInStart   Pointer to the start of the incoming packet's DHCP header
 | 
			
		||||
 *  \param DHCPHeaderOutStart  Pointer to the start of the outgoing packet's DHCP header
 | 
			
		||||
 *  \param[in] IPHeaderInStart     Pointer to the start of the incoming packet's IP header
 | 
			
		||||
 *  \param[in] DHCPHeaderInStart   Pointer to the start of the incoming packet's DHCP header
 | 
			
		||||
 *  \param[out] DHCPHeaderOutStart  Pointer to the start of the outgoing packet's DHCP header
 | 
			
		||||
 *
 | 
			
		||||
 *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -110,8 +110,8 @@ void Ethernet_ProcessPacket(Ethernet_Frame_Info_t* FrameIN, Ethernet_Frame_Info_
 | 
			
		|||
/** Calculates the appropriate ethernet checksum, consisting of the addition of the one's
 | 
			
		||||
 *  compliment of each word, complimented.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param Data   Pointer to the packet buffer data whose checksum must be calculated
 | 
			
		||||
 *  \param Bytes  Number of bytes in the data buffer to process
 | 
			
		||||
 *  \param[in] Data   Pointer to the packet buffer data whose checksum must be calculated
 | 
			
		||||
 *  \param[in] Bytes  Number of bytes in the data buffer to process
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A 16-bit Ethernet checksum value
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,8 +63,8 @@
 | 
			
		|||
	
 | 
			
		||||
		/** Performs a comparison between two MAC addresses, indicating if they are identical.
 | 
			
		||||
		 *  
 | 
			
		||||
		 *  \param MAC1  First MAC address
 | 
			
		||||
		 *  \param MAC2  Second MAC address
 | 
			
		||||
		 *  \param[in] MAC1  First MAC address
 | 
			
		||||
		 *  \param[in] MAC2  Second MAC address
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \return True if the addresses match, false otherwise
 | 
			
		||||
		 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,9 +40,9 @@
 | 
			
		|||
/** Processes an ICMP packet inside an Ethernet frame, and writes the appropriate response
 | 
			
		||||
 *  to the output Ethernet frame if the host is issuing a ICMP ECHO request.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param FrameIN  Pointer to the incomming Ethernet frame information structure
 | 
			
		||||
 *  \param InDataStart   Pointer to the start of the incoming packet's ICMP header
 | 
			
		||||
 *  \param OutDataStart  Pointer to the start of the outgoing packet's ICMP header
 | 
			
		||||
 *  \param[in] FrameIN        Pointer to the incomming Ethernet frame information structure
 | 
			
		||||
 *  \param[in] InDataStart    Pointer to the start of the incoming packet's ICMP header
 | 
			
		||||
 *  \param[out] OutDataStart  Pointer to the start of the outgoing packet's ICMP header
 | 
			
		||||
 *
 | 
			
		||||
 *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,9 +39,9 @@
 | 
			
		|||
/** Processes an IP packet inside an Ethernet frame, and writes the appropriate response
 | 
			
		||||
 *  to the output Ethernet frame if one is created by a subprotocol handler.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param FrameIN       Pointer to the incomming Ethernet frame information structure
 | 
			
		||||
 *  \param InDataStart   Pointer to the start of the incoming packet's IP header
 | 
			
		||||
 *  \param OutDataStart  Pointer to the start of the outgoing packet's IP header
 | 
			
		||||
 *  \param[in] FrameIN        Pointer to the incomming Ethernet frame information structure
 | 
			
		||||
 *  \param[in] InDataStart    Pointer to the start of the incoming packet's IP header
 | 
			
		||||
 *  \param[out] OutDataStart  Pointer to the start of the outgoing packet's IP header
 | 
			
		||||
 *
 | 
			
		||||
 *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no
 | 
			
		||||
 *           response was generated, NO_PROCESS if the packet processing was deferred until the
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,8 +59,8 @@
 | 
			
		|||
		
 | 
			
		||||
		/** Performs a comparison between two IP addresses, indicating if they are identical.
 | 
			
		||||
		 *  
 | 
			
		||||
		 *  \param IP1  First IP address
 | 
			
		||||
		 *  \param IP2  Second IP address
 | 
			
		||||
		 *  \param[in] IP1  First IP address
 | 
			
		||||
		 *  \param[in] IP2  Second IP address
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \return True if the addresses match, false otherwise
 | 
			
		||||
		 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,7 +51,7 @@
 | 
			
		|||
 | 
			
		||||
/** Decodes an Ethernet frame header and prints its contents to through the USART in a human readable format.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart  Pointer to the start of an Ethernet frame header
 | 
			
		||||
 *  \param[in] InDataStart  Pointer to the start of an Ethernet frame header
 | 
			
		||||
 */
 | 
			
		||||
void DecodeEthernetFrameHeader(void* InDataStart)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -93,7 +93,7 @@ void DecodeEthernetFrameHeader(void* InDataStart)
 | 
			
		|||
 | 
			
		||||
/** Decodes an ARP header and prints its contents to through the USART in a human readable format.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart  Pointer to the start of an ARP packet header
 | 
			
		||||
 *  \param[in] InDataStart  Pointer to the start of an ARP packet header
 | 
			
		||||
 */
 | 
			
		||||
void DecodeARPHeader(void* InDataStart)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -143,7 +143,7 @@ void DecodeARPHeader(void* InDataStart)
 | 
			
		|||
 | 
			
		||||
/** Decodes an IP header and prints its contents to through the USART in a human readable format.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart  Pointer to the start of an IP packet header
 | 
			
		||||
 *  \param[in] InDataStart  Pointer to the start of an IP packet header
 | 
			
		||||
 */
 | 
			
		||||
void DecodeIPHeader(void* InDataStart)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -181,7 +181,7 @@ void DecodeIPHeader(void* InDataStart)
 | 
			
		|||
 | 
			
		||||
/** Decodes an ICMP header and prints its contents to through the USART in a human readable format.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart  Pointer to the start of an ICMP packet header
 | 
			
		||||
 *  \param[in] InDataStart  Pointer to the start of an ICMP packet header
 | 
			
		||||
 */
 | 
			
		||||
void DecodeICMPHeader(void* InDataStart)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -197,7 +197,7 @@ void DecodeICMPHeader(void* InDataStart)
 | 
			
		|||
 | 
			
		||||
/** Decodes a TCP header and prints its contents to through the USART in a human readable format.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart  Pointer to the start of a TCP packet header
 | 
			
		||||
 *  \param[in] InDataStart  Pointer to the start of a TCP packet header
 | 
			
		||||
 */
 | 
			
		||||
void DecodeTCPHeader(void* InDataStart)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -225,7 +225,7 @@ void DecodeTCPHeader(void* InDataStart)
 | 
			
		|||
 | 
			
		||||
/** Decodes an UDP header and prints its contents to through the USART in a human readable format.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart  Pointer to the start of a UDP packet header
 | 
			
		||||
 *  \param[in] InDataStart  Pointer to the start of a UDP packet header
 | 
			
		||||
 */
 | 
			
		||||
void DecodeUDPHeader(void* InDataStart)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -243,7 +243,7 @@ void DecodeUDPHeader(void* InDataStart)
 | 
			
		|||
 | 
			
		||||
/** Decodes an DHCP header and prints its contents to through the USART in a human readable format.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart  Pointer to the start of a DHCP packet header
 | 
			
		||||
 *  \param[in] InDataStart  Pointer to the start of a DHCP packet header
 | 
			
		||||
 */
 | 
			
		||||
void DecodeDHCPHeader(void* InDataStart)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -171,9 +171,9 @@ void TCP_Init(void)
 | 
			
		|||
 | 
			
		||||
/** Sets the state and callback handler of the given port, specified in big endian to the given state.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param Port     Port whose state and callback function to set, specified in big endian
 | 
			
		||||
 *  \param State    New state of the port, a value from the TCP_PortStates_t enum
 | 
			
		||||
 *  \param Handler  Application callback handler for the port
 | 
			
		||||
 *  \param[in] Port     Port whose state and callback function to set, specified in big endian
 | 
			
		||||
 *  \param[in] State    New state of the port, a value from the TCP_PortStates_t enum
 | 
			
		||||
 *  \param[in] Handler  Application callback handler for the port
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Boolean true if the port state was set, false otherwise (no more space in the port state table)
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -220,7 +220,7 @@ bool TCP_SetPortState(uint16_t Port, uint8_t State, void (*Handler)(TCP_Connecti
 | 
			
		|||
 | 
			
		||||
/** Retrieves the current state of a given TCP port, specified in big endian.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param Port  TCP port whose state is to be retrieved, given in big-endian
 | 
			
		||||
 *  \param[in] Port  TCP port whose state is to be retrieved, given in big-endian
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A value from the TCP_PortStates_t enum
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -242,10 +242,10 @@ uint8_t TCP_GetPortState(uint16_t Port)
 | 
			
		|||
/** Sets the connection state of the given port, remote address and remote port to the given TCP connection state. If the
 | 
			
		||||
 *  connection exists in the connection state table it is updated, otherwise it is created if possible.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param Port           TCP port of the connection on the device, specified in big endian
 | 
			
		||||
 *  \param RemoteAddress  Remote protocol IP address of the connected device
 | 
			
		||||
 *  \param RemotePort     TCP port of the remote device in the connection, specified in big endian
 | 
			
		||||
 *  \param State          TCP connection state, a value from the TCP_ConnectionStates_t enum
 | 
			
		||||
 *  \param[in] Port           TCP port of the connection on the device, specified in big endian
 | 
			
		||||
 *  \param[in] RemoteAddress  Remote protocol IP address of the connected device
 | 
			
		||||
 *  \param[in] RemotePort     TCP port of the remote device in the connection, specified in big endian
 | 
			
		||||
 *  \param[in] State          TCP connection state, a value from the TCP_ConnectionStates_t enum
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Boolean true if the connection was updated or created, false otherwise (no more space in the connection state table)
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -283,9 +283,9 @@ bool TCP_SetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t
 | 
			
		|||
 | 
			
		||||
/** Retrieves the current state of a given TCP connection to a host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param Port           TCP port on the device in the connection, specified in big endian
 | 
			
		||||
 *  \param RemoteAddress  Remote protocol IP address of the connected host
 | 
			
		||||
 *  \param RemotePort     Remote TCP port of the connected host, specified in big endian
 | 
			
		||||
 *  \param[in] Port           TCP port on the device in the connection, specified in big endian
 | 
			
		||||
 *  \param[in] RemoteAddress  Remote protocol IP address of the connected host
 | 
			
		||||
 *  \param[in] RemotePort     Remote TCP port of the connected host, specified in big endian
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A value from the TCP_ConnectionStates_t enum
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -310,9 +310,9 @@ uint8_t TCP_GetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16
 | 
			
		|||
 | 
			
		||||
/** Retrieves the connection info structure of a given connection to a host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param Port           TCP port on the device in the connection, specified in big endian
 | 
			
		||||
 *  \param RemoteAddress  Remote protocol IP address of the connected host
 | 
			
		||||
 *  \param RemotePort     Remote TCP port of the connected host, specified in big endian
 | 
			
		||||
 *  \param[in] Port           TCP port on the device in the connection, specified in big endian
 | 
			
		||||
 *  \param[in] RemoteAddress  Remote protocol IP address of the connected host
 | 
			
		||||
 *  \param[in] RemotePort     Remote TCP port of the connected host, specified in big endian
 | 
			
		||||
 *
 | 
			
		||||
 *  \return ConnectionInfo structure of the connection if found, NULL otherwise
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -337,9 +337,9 @@ TCP_ConnectionInfo_t* TCP_GetConnectionInfo(uint16_t Port, IP_Address_t RemoteAd
 | 
			
		|||
/** Processes a TCP packet inside an Ethernet frame, and writes the appropriate response
 | 
			
		||||
 *  to the output Ethernet frame if one is created by a application handler.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param IPHeaderInStart    Pointer to the start of the incoming packet's IP header
 | 
			
		||||
 *  \param TCPHeaderInStart   Pointer to the start of the incoming packet's TCP header
 | 
			
		||||
 *  \param TCPHeaderOutStart  Pointer to the start of the outgoing packet's TCP header
 | 
			
		||||
 *  \param[in] IPHeaderInStart     Pointer to the start of the incoming packet's IP header
 | 
			
		||||
 *  \param[in] TCPHeaderInStart    Pointer to the start of the incoming packet's TCP header
 | 
			
		||||
 *  \param[out] TCPHeaderOutStart  Pointer to the start of the outgoing packet's TCP header
 | 
			
		||||
 *
 | 
			
		||||
 *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no
 | 
			
		||||
 *           response was generated, NO_PROCESS if the packet processing was deferred until the
 | 
			
		||||
| 
						 | 
				
			
			@ -579,10 +579,10 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, void* TCPHeaderInStart, void
 | 
			
		|||
/** Calculates the appropriate TCP checksum, consisting of the addition of the one's compliment of each word,
 | 
			
		||||
 *  complimented.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param TCPHeaderOutStart  Pointer to the start of the packet's outgoing TCP header
 | 
			
		||||
 *  \param SourceAddress      Source protocol IP address of the outgoing IP header
 | 
			
		||||
 *  \param DestinationAddress Destination protocol IP address of the outgoing IP header
 | 
			
		||||
 *  \param TCPOutSize         Size in bytes of the TCP data header and payload
 | 
			
		||||
 *  \param[in] TCPHeaderOutStart   Pointer to the start of the packet's outgoing TCP header
 | 
			
		||||
 *  \param[in] SourceAddress       Source protocol IP address of the outgoing IP header
 | 
			
		||||
 *  \param[in] DestinationAddress  Destination protocol IP address of the outgoing IP header
 | 
			
		||||
 *  \param[in] TCPOutSize          Size in bytes of the TCP data header and payload
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A 16-bit TCP checksum value
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -89,7 +89,7 @@
 | 
			
		|||
		
 | 
			
		||||
		/** Application macro: Determines if the given application buffer contains a packet received from the host
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param Buffer  Application buffer to check
 | 
			
		||||
		 *  \param[in] Buffer  Application buffer to check
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \return Boolean true if the buffer contains a packet from the host, false otherwise
 | 
			
		||||
		 */
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +97,7 @@
 | 
			
		|||
 | 
			
		||||
		/** Application macro: Indicates if the application buffer is currently locked by the application for device-to-host transfers.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param Buffer  Application buffer to check
 | 
			
		||||
		 *  \param[in] Buffer  Application buffer to check
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \return Boolean true if the buffer has been captured by the application for device-to-host transmissions, false otherwise
 | 
			
		||||
		 */
 | 
			
		||||
| 
						 | 
				
			
			@ -106,7 +106,7 @@
 | 
			
		|||
 | 
			
		||||
		/** Application macro: Indicates if the application can lock the buffer for multiple continued device-to-host transmissions.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param Buffer  Application buffer to check
 | 
			
		||||
		 *  \param[in] Buffer  Application buffer to check
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \return Boolean true if the buffer may be captured by the application for device-to-host transmissions, false otherwise
 | 
			
		||||
		 */
 | 
			
		||||
| 
						 | 
				
			
			@ -117,32 +117,32 @@
 | 
			
		|||
		 *
 | 
			
		||||
		 *  \note The application must check that the buffer can be locked first using TCP_APP_CAN_CAPTURE_BUFFER().
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param Buffer  Application buffer to lock
 | 
			
		||||
		 *  \param[in] Buffer  Application buffer to lock
 | 
			
		||||
		 */
 | 
			
		||||
		#define TCP_APP_CAPTURE_BUFFER(Buffer)       MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->InUse = true; }MACROE
 | 
			
		||||
 | 
			
		||||
		/** Application macro: Releases a captured application buffer, allowing for host-to-device packets to be received.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param Buffer  Application buffer to release
 | 
			
		||||
		 *  \param[in] Buffer  Application buffer to release
 | 
			
		||||
		 */
 | 
			
		||||
		#define TCP_APP_RELEASE_BUFFER(Buffer)       MACROS{ Buffer->InUse = false; }MACROE
 | 
			
		||||
 | 
			
		||||
		/** Application macro: Sends the contents of the given application buffer to the host.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param Buffer  Application buffer to send
 | 
			
		||||
		 *  \param Len     Length of data contained in the buffer
 | 
			
		||||
		 *  \param[in] Buffer  Application buffer to send
 | 
			
		||||
		 *  \param[in] Len     Length of data contained in the buffer
 | 
			
		||||
		 */
 | 
			
		||||
		#define TCP_APP_SEND_BUFFER(Buffer, Len)     MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->Length = Len; Buffer->Ready = true; }MACROE
 | 
			
		||||
 | 
			
		||||
		/** Application macro: Clears the application buffer, ready for a packet to be written to it.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param Buffer  Application buffer to clear
 | 
			
		||||
		 *  \param[in] Buffer  Application buffer to clear
 | 
			
		||||
		 */
 | 
			
		||||
		#define TCP_APP_CLEAR_BUFFER(Buffer)         MACROS{ Buffer->Ready = false; Buffer->Length = 0; }MACROE
 | 
			
		||||
		
 | 
			
		||||
		/** Application macro: Closes an open connection to a host.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param Connection  Open TCP connection to close
 | 
			
		||||
		 *  \param[in] Connection  Open TCP connection to close
 | 
			
		||||
		 */
 | 
			
		||||
		#define TCP_APP_CLOSECONNECTION(Connection)  MACROS{ Connection->State = TCP_Connection_Closing;  }MACROE
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,9 +40,9 @@
 | 
			
		|||
/** Processes a UDP packet inside an Ethernet frame, and writes the appropriate response
 | 
			
		||||
 *  to the output Ethernet frame if a subprotocol handler has created a response packet.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param IPHeaderInStart    Pointer to the start of the incoming packet's IP header
 | 
			
		||||
 *  \param UDPHeaderInStart   Pointer to the start of the incoming packet's UDP header
 | 
			
		||||
 *  \param UDPHeaderOutStart  Pointer to the start of the outgoing packet's UDP header
 | 
			
		||||
 *  \param[in] IPHeaderInStart     Pointer to the start of the incoming packet's IP header
 | 
			
		||||
 *  \param[in] UDPHeaderInStart    Pointer to the start of the incoming packet's UDP header
 | 
			
		||||
 *  \param[out] UDPHeaderOutStart  Pointer to the start of the outgoing packet's UDP header
 | 
			
		||||
 *
 | 
			
		||||
 *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,8 +78,8 @@ void Webserver_Init(void)
 | 
			
		|||
 | 
			
		||||
/** Indicates if a given request equals the given HTTP command.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param RequestHeader  HTTP request made by the host
 | 
			
		||||
 *  \param Command        HTTP command to compare the request to
 | 
			
		||||
 *  \param[in] RequestHeader  HTTP request made by the host
 | 
			
		||||
 *  \param[in] Command        HTTP command to compare the request to
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Boolean true if the command matches the request, false otherwise
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -92,8 +92,8 @@ static bool IsHTTPCommand(uint8_t* RequestHeader, char* Command)
 | 
			
		|||
/** Application callback routine, executed each time the TCP processing task runs. This callback determines what request
 | 
			
		||||
 *  has been made (if any), and serves up appropriate responses.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param ConnectionState  Pointer to a TCP Connection State structure giving connection information
 | 
			
		||||
 *  \param Buffer           Pointer to the application's send/receive packet buffer
 | 
			
		||||
 *  \param[in] ConnectionState  Pointer to a TCP Connection State structure giving connection information
 | 
			
		||||
 *  \param[in,out] Buffer       Pointer to the application's send/receive packet buffer
 | 
			
		||||
 */
 | 
			
		||||
void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_ConnectionBuffer_t* Buffer)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -158,9 +158,9 @@ ISR(USART1_RX_vect, ISR_BLOCK)
 | 
			
		|||
 | 
			
		||||
/** Event handler for the CDC Class driver Line Encoding Changed event.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param CDCInterfaceInfo  Pointer to the CDC class interface configuration structure being referenced
 | 
			
		||||
 *  \param[in] CDCInterfaceInfo  Pointer to the CDC class interface configuration structure being referenced
 | 
			
		||||
 */
 | 
			
		||||
void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo)
 | 
			
		||||
void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	uint8_t ConfigMask = 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -74,6 +74,6 @@
 | 
			
		|||
		void EVENT_USB_ConfigurationChanged(void);
 | 
			
		||||
		void EVENT_USB_UnhandledControlPacket(void);
 | 
			
		||||
		
 | 
			
		||||
		void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo);
 | 
			
		||||
		void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -123,7 +123,7 @@
 | 
			
		|||
 | 
			
		||||
		/** Convenience macro, to fill a 24-bit AudioSampleFreq_t structure with the given sample rate as a 24-bit number.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param freq  Required audio sampling frequency in HZ
 | 
			
		||||
		 *  \param[in] freq  Required audio sampling frequency in HZ
 | 
			
		||||
		 */
 | 
			
		||||
		#define SAMPLE_FREQ(freq)  {LowWord: ((uint32_t)freq & 0x00FFFF), HighByte: (((uint32_t)freq >> 16) & 0x0000FF)}
 | 
			
		||||
		
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -123,7 +123,7 @@
 | 
			
		|||
 | 
			
		||||
		/** Convenience macro, to fill a 24-bit AudioSampleFreq_t structure with the given sample rate as a 24-bit number.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param freq  Required audio sampling frequency in HZ
 | 
			
		||||
		 *  \param[in] freq  Required audio sampling frequency in HZ
 | 
			
		||||
		 */
 | 
			
		||||
		#define SAMPLE_FREQ(freq)  {LowWord: ((uint32_t)freq & 0x00FFFF), HighByte: (((uint32_t)freq >> 16) & 0x0000FF)}
 | 
			
		||||
		
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
		 *  a single typedef struct. A macro is used instead so that functional descriptors can be created
 | 
			
		||||
		 *  easily by specifying the size of the payload. This allows sizeof() to work correctly.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param DataSize  Size in bytes of the CDC functional descriptor's data payload
 | 
			
		||||
		 *  \param[in] DataSize  Size in bytes of the CDC functional descriptor's data payload
 | 
			
		||||
		 */
 | 
			
		||||
		#define CDC_FUNCTIONAL_DESCRIPTOR(DataSize)        \
 | 
			
		||||
		     struct                                        \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
		 *  a single typedef struct. A macro is used instead so that functional descriptors can be created
 | 
			
		||||
		 *  easily by specifying the size of the payload. This allows sizeof() to work correctly.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param DataSize  Size in bytes of the CDC functional descriptor's data payload
 | 
			
		||||
		 *  \param[in] DataSize  Size in bytes of the CDC functional descriptor's data payload
 | 
			
		||||
		 */
 | 
			
		||||
		#define CDC_FUNCTIONAL_DESCRIPTOR(DataSize)        \
 | 
			
		||||
		     struct                                        \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -170,7 +170,7 @@ void EVENT_USB_UnhandledControlPacket(void)
 | 
			
		|||
 | 
			
		||||
/** Function to process the lest received report from the host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param DataArray  Pointer to a buffer where the last report data is stored
 | 
			
		||||
 *  \param[in] DataArray  Pointer to a buffer where the last report data is stored
 | 
			
		||||
 */
 | 
			
		||||
void ProcessGenericHIDReport(uint8_t* DataArray)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -186,7 +186,7 @@ void ProcessGenericHIDReport(uint8_t* DataArray)
 | 
			
		|||
 | 
			
		||||
/** Function to create the next report to send back to the host at the next reporting interval.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param DataArray  Pointer to a buffer where the next report data should be stored
 | 
			
		||||
 *  \param[out] DataArray  Pointer to a buffer where the next report data should be stored
 | 
			
		||||
 */
 | 
			
		||||
void CreateGenericHIDReport(uint8_t* DataArray)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -136,7 +136,7 @@ void EVENT_USB_UnhandledControlPacket(void)
 | 
			
		|||
 | 
			
		||||
/** Fills the given HID report data structure with the next HID report to send to the host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param ReportData  Pointer to a HID report data structure to be filled
 | 
			
		||||
 *  \param[out] ReportData  Pointer to a HID report data structure to be filled
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Boolean true if the new report differs from the last report, false otherwise
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -266,7 +266,7 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK)
 | 
			
		|||
 | 
			
		||||
/** Fills the given HID report data structure with the next HID report to send to the host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param ReportData  Pointer to a HID report data structure to be filled
 | 
			
		||||
 *  \param[out] ReportData  Pointer to a HID report data structure to be filled
 | 
			
		||||
 */
 | 
			
		||||
void CreateKeyboardReport(USB_KeyboardReport_Data_t* ReportData)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -291,7 +291,7 @@ void CreateKeyboardReport(USB_KeyboardReport_Data_t* ReportData)
 | 
			
		|||
 | 
			
		||||
/** Processes a received LED report, and updates the board LEDs states to match.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param LEDReport  LED status report from the host
 | 
			
		||||
 *  \param[in] LEDReport  LED status report from the host
 | 
			
		||||
 */
 | 
			
		||||
void ProcessLEDReport(uint8_t LEDReport)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,7 +63,7 @@
 | 
			
		|||
		/** Convenience macro. MIDI channels are numbered from 1-10 (natural numbers) however the logical channel
 | 
			
		||||
		 *  addresses are zero-indexed. This converts a natural MIDI channel number into the logical channel address.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param channel  MIDI channel number to address
 | 
			
		||||
		 *  \param[in] channel  MIDI channel number to address
 | 
			
		||||
		 */
 | 
			
		||||
		#define MIDI_CHANNEL(channel)     (channel - 1)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,8 +43,8 @@
 | 
			
		|||
 *  the pre-selected data OUT endpoint. This routine reads in OS sized blocks from the endpoint and writes
 | 
			
		||||
 *  them to the dataflash in Dataflash page sized blocks.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param BlockAddress  Data block starting address for the write sequence
 | 
			
		||||
 *  \param TotalBlocks   Number of blocks of data to write
 | 
			
		||||
 *  \param[in] BlockAddress  Data block starting address for the write sequence
 | 
			
		||||
 *  \param[in] TotalBlocks   Number of blocks of data to write
 | 
			
		||||
 */
 | 
			
		||||
void DataflashManager_WriteBlocks(const uint32_t BlockAddress, uint16_t TotalBlocks)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -168,8 +168,8 @@ void DataflashManager_WriteBlocks(const uint32_t BlockAddress, uint16_t TotalBlo
 | 
			
		|||
 *  the pre-selected data IN endpoint. This routine reads in Dataflash page sized blocks from the Dataflash
 | 
			
		||||
 *  and writes them in OS sized blocks to the endpoint.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param BlockAddress  Data block starting address for the read sequence
 | 
			
		||||
 *  \param TotalBlocks   Number of blocks of data to read
 | 
			
		||||
 *  \param[in] BlockAddress  Data block starting address for the read sequence
 | 
			
		||||
 *  \param[in] TotalBlocks   Number of blocks of data to read
 | 
			
		||||
 */
 | 
			
		||||
void DataflashManager_ReadBlocks(const uint32_t BlockAddress, uint16_t TotalBlocks)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -271,9 +271,9 @@ void DataflashManager_ReadBlocks(const uint32_t BlockAddress, uint16_t TotalBloc
 | 
			
		|||
 *  dataflash in Dataflash page sized blocks. This can be linked to FAT libraries to write files to the
 | 
			
		||||
 *  dataflash.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param BlockAddress  Data block starting address for the write sequence
 | 
			
		||||
 *  \param TotalBlocks   Number of blocks of data to write
 | 
			
		||||
 *  \param BufferPtr     Pointer to the data source RAM buffer
 | 
			
		||||
 *  \param[in] BlockAddress  Data block starting address for the write sequence
 | 
			
		||||
 *  \param[in] TotalBlocks   Number of blocks of data to write
 | 
			
		||||
 *  \param[in] BufferPtr     Pointer to the data source RAM buffer
 | 
			
		||||
 */
 | 
			
		||||
void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks, uint8_t* BufferPtr)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -367,9 +367,9 @@ void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, uint16_t Tota
 | 
			
		|||
 *  and writes them in OS sized blocks to the given buffer. This can be linked to FAT libraries to read
 | 
			
		||||
 *  the files stored on the dataflash.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param BlockAddress  Data block starting address for the read sequence
 | 
			
		||||
 *  \param TotalBlocks   Number of blocks of data to read
 | 
			
		||||
 *  \param BufferPtr     Pointer to the data destination RAM buffer
 | 
			
		||||
 *  \param[in] BlockAddress  Data block starting address for the read sequence
 | 
			
		||||
 *  \param[in] TotalBlocks   Number of blocks of data to read
 | 
			
		||||
 *  \param[out] BufferPtr    Pointer to the data destination RAM buffer
 | 
			
		||||
 */
 | 
			
		||||
void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks, uint8_t* BufferPtr)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -302,7 +302,7 @@ static bool SCSI_Command_Send_Diagnostic(void)
 | 
			
		|||
 *  and total number of blocks to process, then calls the appropriate low-level dataflash routine to handle the actual
 | 
			
		||||
 *  reading and writing of the data.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param IsDataRead  Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE)
 | 
			
		||||
 *  \param[in] IsDataRead  Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE)
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Boolean true if the command completed successfully, false otherwise.
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,9 +54,9 @@
 | 
			
		|||
		 *  is for convenience, as it allows for all three sense values (returned upon request to the host to give information about
 | 
			
		||||
		 *  the last command failure) in a quick and easy manner.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param key    New SCSI sense key to set the sense code to
 | 
			
		||||
		 *  \param acode  New SCSI additional sense key to set the additional sense code to
 | 
			
		||||
		 *  \param aqual  New SCSI additional sense key qualifier to set the additional sense qualifier code to
 | 
			
		||||
		 *  \param[in] key    New SCSI sense key to set the sense code to
 | 
			
		||||
		 *  \param[in] acode  New SCSI additional sense key to set the additional sense code to
 | 
			
		||||
		 *  \param[in] aqual  New SCSI additional sense key qualifier to set the additional sense qualifier code to
 | 
			
		||||
		 */
 | 
			
		||||
		#define SCSI_SET_SENSE(key, acode, aqual)  MACROS{ SenseData.SenseKey = key;              \
 | 
			
		||||
		                                                   SenseData.AdditionalSenseCode = acode; \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -238,7 +238,7 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK)
 | 
			
		|||
 | 
			
		||||
/** Fills the given HID report data structure with the next HID report to send to the host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param ReportData  Pointer to a HID report data structure to be filled
 | 
			
		||||
 *  \param[out] ReportData  Pointer to a HID report data structure to be filled
 | 
			
		||||
 */
 | 
			
		||||
void CreateMouseReport(USB_MouseReport_Data_t* ReportData)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
		 *  a single typedef struct. A macro is used instead so that functional descriptors can be created
 | 
			
		||||
		 *  easily by specifying the size of the payload. This allows sizeof() to work correctly.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param DataSize  Size in bytes of the CDC functional descriptor's data payload
 | 
			
		||||
		 *  \param[in] DataSize  Size in bytes of the CDC functional descriptor's data payload
 | 
			
		||||
		 */		
 | 
			
		||||
		#define CDC_FUNCTIONAL_DESCRIPTOR(DataSize)        \
 | 
			
		||||
		     struct                                        \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,8 +41,8 @@
 | 
			
		|||
 *  to the output Ethernet frame if the host is requesting the IP or MAC address of the
 | 
			
		||||
 *  virtual server device on the network.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart   Pointer to the start of the incoming packet's ARP header
 | 
			
		||||
 *  \param OutDataStart  Pointer to the start of the outgoing packet's ARP header
 | 
			
		||||
 *  \param[in] InDataStart    Pointer to the start of the incoming packet's ARP header
 | 
			
		||||
 *  \param[out] OutDataStart  Pointer to the start of the outgoing packet's ARP header
 | 
			
		||||
 *
 | 
			
		||||
 *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,9 +40,9 @@
 | 
			
		|||
/** Processes a DHCP packet inside an Ethernet frame, and writes the appropriate response
 | 
			
		||||
 *  to the output Ethernet frame if the host is requesting or accepting an IP address.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param IPHeaderInStart     Pointer to the start of the incoming packet's IP header
 | 
			
		||||
 *  \param DHCPHeaderInStart   Pointer to the start of the incoming packet's DHCP header
 | 
			
		||||
 *  \param DHCPHeaderOutStart  Pointer to the start of the outgoing packet's DHCP header
 | 
			
		||||
 *  \param[in] IPHeaderInStart      Pointer to the start of the incoming packet's IP header
 | 
			
		||||
 *  \param[in] DHCPHeaderInStart    Pointer to the start of the incoming packet's DHCP header
 | 
			
		||||
 *  \param[out] DHCPHeaderOutStart  Pointer to the start of the outgoing packet's DHCP header
 | 
			
		||||
 *
 | 
			
		||||
 *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -116,8 +116,8 @@ void Ethernet_ProcessPacket(void)
 | 
			
		|||
/** Calculates the appropriate ethernet checksum, consisting of the addition of the one's
 | 
			
		||||
 *  compliment of each word, complimented.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param Data   Pointer to the packet buffer data whose checksum must be calculated
 | 
			
		||||
 *  \param Bytes  Number of bytes in the data buffer to process
 | 
			
		||||
 *  \param[in] Data   Pointer to the packet buffer data whose checksum must be calculated
 | 
			
		||||
 *  \param[in] Bytes  Number of bytes in the data buffer to process
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A 16-bit Ethernet checksum value
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -58,8 +58,8 @@
 | 
			
		|||
	
 | 
			
		||||
		/** Performs a comparison between two MAC addresses, indicating if they are identical.
 | 
			
		||||
		 *  
 | 
			
		||||
		 *  \param MAC1  First MAC address
 | 
			
		||||
		 *  \param MAC2  Second MAC address
 | 
			
		||||
		 *  \param[in] MAC1  First MAC address
 | 
			
		||||
		 *  \param[in] MAC2  Second MAC address
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \return True if the addresses match, false otherwise
 | 
			
		||||
		 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,8 +40,8 @@
 | 
			
		|||
/** Processes an ICMP packet inside an Ethernet frame, and writes the appropriate response
 | 
			
		||||
 *  to the output Ethernet frame if the host is issuing a ICMP ECHO request.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart   Pointer to the start of the incoming packet's ICMP header
 | 
			
		||||
 *  \param OutDataStart  Pointer to the start of the outgoing packet's ICMP header
 | 
			
		||||
 *  \param[in] InDataStart    Pointer to the start of the incoming packet's ICMP header
 | 
			
		||||
 *  \param[out] OutDataStart  Pointer to the start of the outgoing packet's ICMP header
 | 
			
		||||
 *
 | 
			
		||||
 *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,8 +39,8 @@
 | 
			
		|||
/** Processes an IP packet inside an Ethernet frame, and writes the appropriate response
 | 
			
		||||
 *  to the output Ethernet frame if one is created by a subprotocol handler.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart   Pointer to the start of the incoming packet's IP header
 | 
			
		||||
 *  \param OutDataStart  Pointer to the start of the outgoing packet's IP header
 | 
			
		||||
 *  \param[in] InDataStart    Pointer to the start of the incoming packet's IP header
 | 
			
		||||
 *  \param[out] OutDataStart  Pointer to the start of the outgoing packet's IP header
 | 
			
		||||
 *
 | 
			
		||||
 *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no
 | 
			
		||||
 *           response was generated, NO_PROCESS if the packet processing was deferred until the
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,8 +59,8 @@
 | 
			
		|||
		
 | 
			
		||||
		/** Performs a comparison between two IP addresses, indicating if they are identical.
 | 
			
		||||
		 *  
 | 
			
		||||
		 *  \param IP1  First IP address
 | 
			
		||||
		 *  \param IP2  Second IP address
 | 
			
		||||
		 *  \param[in] IP1  First IP address
 | 
			
		||||
		 *  \param[in] IP2  Second IP address
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \return True if the addresses match, false otherwise
 | 
			
		||||
		 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,7 +51,7 @@
 | 
			
		|||
 | 
			
		||||
/** Decodes an Ethernet frame header and prints its contents to through the USART in a human readable format.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart  Pointer to the start of an Ethernet frame header
 | 
			
		||||
 *  \param[in] InDataStart  Pointer to the start of an Ethernet frame header
 | 
			
		||||
 */
 | 
			
		||||
void DecodeEthernetFrameHeader(void* InDataStart)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -93,7 +93,7 @@ void DecodeEthernetFrameHeader(void* InDataStart)
 | 
			
		|||
 | 
			
		||||
/** Decodes an ARP header and prints its contents to through the USART in a human readable format.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart  Pointer to the start of an ARP packet header
 | 
			
		||||
 *  \param[in] InDataStart  Pointer to the start of an ARP packet header
 | 
			
		||||
 */
 | 
			
		||||
void DecodeARPHeader(void* InDataStart)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -143,7 +143,7 @@ void DecodeARPHeader(void* InDataStart)
 | 
			
		|||
 | 
			
		||||
/** Decodes an IP header and prints its contents to through the USART in a human readable format.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart  Pointer to the start of an IP packet header
 | 
			
		||||
 *  \param[in] InDataStart  Pointer to the start of an IP packet header
 | 
			
		||||
 */
 | 
			
		||||
void DecodeIPHeader(void* InDataStart)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -181,7 +181,7 @@ void DecodeIPHeader(void* InDataStart)
 | 
			
		|||
 | 
			
		||||
/** Decodes an ICMP header and prints its contents to through the USART in a human readable format.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart  Pointer to the start of an ICMP packet header
 | 
			
		||||
 *  \param[in] InDataStart  Pointer to the start of an ICMP packet header
 | 
			
		||||
 */
 | 
			
		||||
void DecodeICMPHeader(void* InDataStart)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -197,7 +197,7 @@ void DecodeICMPHeader(void* InDataStart)
 | 
			
		|||
 | 
			
		||||
/** Decodes a TCP header and prints its contents to through the USART in a human readable format.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart  Pointer to the start of a TCP packet header
 | 
			
		||||
 *  \param[in] InDataStart  Pointer to the start of a TCP packet header
 | 
			
		||||
 */
 | 
			
		||||
void DecodeTCPHeader(void* InDataStart)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -225,7 +225,7 @@ void DecodeTCPHeader(void* InDataStart)
 | 
			
		|||
 | 
			
		||||
/** Decodes an UDP header and prints its contents to through the USART in a human readable format.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart  Pointer to the start of a UDP packet header
 | 
			
		||||
 *  \param[in] InDataStart  Pointer to the start of a UDP packet header
 | 
			
		||||
 */
 | 
			
		||||
void DecodeUDPHeader(void* InDataStart)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -243,7 +243,7 @@ void DecodeUDPHeader(void* InDataStart)
 | 
			
		|||
 | 
			
		||||
/** Decodes an DHCP header and prints its contents to through the USART in a human readable format.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param InDataStart  Pointer to the start of a DHCP packet header
 | 
			
		||||
 *  \param[in] InDataStart  Pointer to the start of a DHCP packet header
 | 
			
		||||
 */
 | 
			
		||||
void DecodeDHCPHeader(void* InDataStart)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -232,11 +232,11 @@ void ProcessRNDISControlMessage(void)
 | 
			
		|||
/** Processes RNDIS query commands, retrieving information from the adapter and reporting it back to the host. The requested
 | 
			
		||||
 *  parameter is given as an OID value.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param OId           OId value of the parameter being queried
 | 
			
		||||
 *  \param QueryData     Pointer to any extra query data being sent by the host to the device inside the RNDIS message buffer
 | 
			
		||||
 *  \param QuerySize     Size in bytes of the extra query data being sent by the host
 | 
			
		||||
 *  \param ResponseData  Pointer to the start of the query response inside the RNDIS message buffer
 | 
			
		||||
 *  \param ResponseSize  Pointer to the size in bytes of the response data being sent to the host
 | 
			
		||||
 *  \param[in] OId            OId value of the parameter being queried
 | 
			
		||||
 *  \param[in] QueryData      Pointer to any extra query data being sent by the host to the device inside the RNDIS message buffer
 | 
			
		||||
 *  \param[in] QuerySize      Size in bytes of the extra query data being sent by the host
 | 
			
		||||
 *  \param[out] ResponseData  Pointer to the start of the query response inside the RNDIS message buffer
 | 
			
		||||
 *  \param[out] ResponseSize  Pointer to the size in bytes of the response data being sent to the host
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Boolean true if the query was handled, false otherwise
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -364,9 +364,9 @@ static bool ProcessNDISQuery(uint32_t OId, void* QueryData, uint16_t QuerySize,
 | 
			
		|||
/** Processes RNDIS set commands, setting adapter parameters to values given by the host. The requested parameter is given 
 | 
			
		||||
 *  as an OID value.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param OId      OId value of the parameter being set
 | 
			
		||||
 *  \param SetData  Pointer to the parameter value in the RNDIS message buffer
 | 
			
		||||
 *  \param SetSize  Size in bytes of the parameter value being sent by the host
 | 
			
		||||
 *  \param[in] OId      OId value of the parameter being set
 | 
			
		||||
 *  \param[in] SetData  Pointer to the parameter value in the RNDIS message buffer
 | 
			
		||||
 *  \param[in] SetSize  Size in bytes of the parameter value being sent by the host
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Boolean true if the set was handled, false otherwise
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -171,9 +171,9 @@ void TCP_Init(void)
 | 
			
		|||
 | 
			
		||||
/** Sets the state and callback handler of the given port, specified in big endian to the given state.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param Port     Port whose state and callback function to set, specified in big endian
 | 
			
		||||
 *  \param State    New state of the port, a value from the TCP_PortStates_t enum
 | 
			
		||||
 *  \param Handler  Application callback handler for the port
 | 
			
		||||
 *  \param[in] Port     Port whose state and callback function to set, specified in big endian
 | 
			
		||||
 *  \param[in] State    New state of the port, a value from the TCP_PortStates_t enum
 | 
			
		||||
 *  \param[in] Handler  Application callback handler for the port
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Boolean true if the port state was set, false otherwise (no more space in the port state table)
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -220,7 +220,7 @@ bool TCP_SetPortState(uint16_t Port, uint8_t State, void (*Handler)(TCP_Connecti
 | 
			
		|||
 | 
			
		||||
/** Retrieves the current state of a given TCP port, specified in big endian.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param Port  TCP port whose state is to be retrieved, given in big-endian
 | 
			
		||||
 *  \param[in] Port  TCP port whose state is to be retrieved, given in big-endian
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A value from the TCP_PortStates_t enum
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -242,10 +242,10 @@ uint8_t TCP_GetPortState(uint16_t Port)
 | 
			
		|||
/** Sets the connection state of the given port, remote address and remote port to the given TCP connection state. If the
 | 
			
		||||
 *  connection exists in the connection state table it is updated, otherwise it is created if possible.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param Port           TCP port of the connection on the device, specified in big endian
 | 
			
		||||
 *  \param RemoteAddress  Remote protocol IP address of the connected device
 | 
			
		||||
 *  \param RemotePort     TCP port of the remote device in the connection, specified in big endian
 | 
			
		||||
 *  \param State          TCP connection state, a value from the TCP_ConnectionStates_t enum
 | 
			
		||||
 *  \param[in] Port           TCP port of the connection on the device, specified in big endian
 | 
			
		||||
 *  \param[in] RemoteAddress  Remote protocol IP address of the connected device
 | 
			
		||||
 *  \param[in] RemotePort     TCP port of the remote device in the connection, specified in big endian
 | 
			
		||||
 *  \param[in] State          TCP connection state, a value from the TCP_ConnectionStates_t enum
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Boolean true if the connection was updated or created, false otherwise (no more space in the connection state table)
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -283,9 +283,9 @@ bool TCP_SetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t
 | 
			
		|||
 | 
			
		||||
/** Retrieves the current state of a given TCP connection to a host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param Port           TCP port on the device in the connection, specified in big endian
 | 
			
		||||
 *  \param RemoteAddress  Remote protocol IP address of the connected host
 | 
			
		||||
 *  \param RemotePort     Remote TCP port of the connected host, specified in big endian
 | 
			
		||||
 *  \param[in] Port           TCP port on the device in the connection, specified in big endian
 | 
			
		||||
 *  \param[in] RemoteAddress  Remote protocol IP address of the connected host
 | 
			
		||||
 *  \param[in] RemotePort     Remote TCP port of the connected host, specified in big endian
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A value from the TCP_ConnectionStates_t enum
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -310,9 +310,9 @@ uint8_t TCP_GetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16
 | 
			
		|||
 | 
			
		||||
/** Retrieves the connection info structure of a given connection to a host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param Port           TCP port on the device in the connection, specified in big endian
 | 
			
		||||
 *  \param RemoteAddress  Remote protocol IP address of the connected host
 | 
			
		||||
 *  \param RemotePort     Remote TCP port of the connected host, specified in big endian
 | 
			
		||||
 *  \param[in] Port           TCP port on the device in the connection, specified in big endian
 | 
			
		||||
 *  \param[in] RemoteAddress  Remote protocol IP address of the connected host
 | 
			
		||||
 *  \param[in] RemotePort     Remote TCP port of the connected host, specified in big endian
 | 
			
		||||
 *
 | 
			
		||||
 *  \return ConnectionInfo structure of the connection if found, NULL otherwise
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -337,9 +337,9 @@ TCP_ConnectionInfo_t* TCP_GetConnectionInfo(uint16_t Port, IP_Address_t RemoteAd
 | 
			
		|||
/** Processes a TCP packet inside an Ethernet frame, and writes the appropriate response
 | 
			
		||||
 *  to the output Ethernet frame if one is created by a application handler.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param IPHeaderInStart    Pointer to the start of the incoming packet's IP header
 | 
			
		||||
 *  \param TCPHeaderInStart   Pointer to the start of the incoming packet's TCP header
 | 
			
		||||
 *  \param TCPHeaderOutStart  Pointer to the start of the outgoing packet's TCP header
 | 
			
		||||
 *  \param[in] IPHeaderInStart     Pointer to the start of the incoming packet's IP header
 | 
			
		||||
 *  \param[in] TCPHeaderInStart    Pointer to the start of the incoming packet's TCP header
 | 
			
		||||
 *  \param[out] TCPHeaderOutStart  Pointer to the start of the outgoing packet's TCP header
 | 
			
		||||
 *
 | 
			
		||||
 *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no
 | 
			
		||||
 *           response was generated, NO_PROCESS if the packet processing was deferred until the
 | 
			
		||||
| 
						 | 
				
			
			@ -579,10 +579,10 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, void* TCPHeaderInStart, void
 | 
			
		|||
/** Calculates the appropriate TCP checksum, consisting of the addition of the one's compliment of each word,
 | 
			
		||||
 *  complimented.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param TCPHeaderOutStart  Pointer to the start of the packet's outgoing TCP header
 | 
			
		||||
 *  \param SourceAddress      Source protocol IP address of the outgoing IP header
 | 
			
		||||
 *  \param DestinationAddress Destination protocol IP address of the outgoing IP header
 | 
			
		||||
 *  \param TCPOutSize         Size in bytes of the TCP data header and payload
 | 
			
		||||
 *  \param[in] TCPHeaderOutStart  Pointer to the start of the packet's outgoing TCP header
 | 
			
		||||
 *  \param[in] SourceAddress      Source protocol IP address of the outgoing IP header
 | 
			
		||||
 *  \param[in] DestinationAddress Destination protocol IP address of the outgoing IP header
 | 
			
		||||
 *  \param[in] TCPOutSize         Size in bytes of the TCP data header and payload
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A 16-bit TCP checksum value
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -89,7 +89,7 @@
 | 
			
		|||
		
 | 
			
		||||
		/** Application macro: Determines if the given application buffer contains a packet received from the host
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param Buffer  Application buffer to check
 | 
			
		||||
		 *  \param[in] Buffer  Application buffer to check
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \return Boolean true if the buffer contains a packet from the host, false otherwise
 | 
			
		||||
		 */
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +97,7 @@
 | 
			
		|||
 | 
			
		||||
		/** Application macro: Indicates if the application buffer is currently locked by the application for device-to-host transfers.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param Buffer  Application buffer to check
 | 
			
		||||
		 *  \param[in] Buffer  Application buffer to check
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \return Boolean true if the buffer has been captured by the application for device-to-host transmissions, false otherwise
 | 
			
		||||
		 */
 | 
			
		||||
| 
						 | 
				
			
			@ -106,7 +106,7 @@
 | 
			
		|||
 | 
			
		||||
		/** Application macro: Indicates if the application can lock the buffer for multiple continued device-to-host transmissions.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param Buffer  Application buffer to check
 | 
			
		||||
		 *  \param[in] Buffer  Application buffer to check
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \return Boolean true if the buffer may be captured by the application for device-to-host transmissions, false otherwise
 | 
			
		||||
		 */
 | 
			
		||||
| 
						 | 
				
			
			@ -117,32 +117,32 @@
 | 
			
		|||
		 *
 | 
			
		||||
		 *  \note The application must check that the buffer can be locked first using TCP_APP_CAN_CAPTURE_BUFFER().
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param Buffer  Application buffer to lock
 | 
			
		||||
		 *  \param[in] Buffer  Application buffer to lock
 | 
			
		||||
		 */
 | 
			
		||||
		#define TCP_APP_CAPTURE_BUFFER(Buffer)       MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->InUse = true; }MACROE
 | 
			
		||||
 | 
			
		||||
		/** Application macro: Releases a captured application buffer, allowing for host-to-device packets to be received.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param Buffer  Application buffer to release
 | 
			
		||||
		 *  \param[in] Buffer  Application buffer to release
 | 
			
		||||
		 */
 | 
			
		||||
		#define TCP_APP_RELEASE_BUFFER(Buffer)       MACROS{ Buffer->InUse = false; }MACROE
 | 
			
		||||
 | 
			
		||||
		/** Application macro: Sends the contents of the given application buffer to the host.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param Buffer  Application buffer to send
 | 
			
		||||
		 *  \param Len     Length of data contained in the buffer
 | 
			
		||||
		 *  \param[in] Buffer  Application buffer to send
 | 
			
		||||
		 *  \param[in] Len     Length of data contained in the buffer
 | 
			
		||||
		 */
 | 
			
		||||
		#define TCP_APP_SEND_BUFFER(Buffer, Len)     MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->Length = Len; Buffer->Ready = true; }MACROE
 | 
			
		||||
 | 
			
		||||
		/** Application macro: Clears the application buffer, ready for a packet to be written to it.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param Buffer  Application buffer to clear
 | 
			
		||||
		 *  \param[in] Buffer  Application buffer to clear
 | 
			
		||||
		 */
 | 
			
		||||
		#define TCP_APP_CLEAR_BUFFER(Buffer)         MACROS{ Buffer->Ready = false; Buffer->Length = 0; }MACROE
 | 
			
		||||
		
 | 
			
		||||
		/** Application macro: Closes an open connection to a host.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param Connection  Open TCP connection to close
 | 
			
		||||
		 *  \param[in] Connection  Open TCP connection to close
 | 
			
		||||
		 */
 | 
			
		||||
		#define TCP_APP_CLOSECONNECTION(Connection)  MACROS{ Connection->State = TCP_Connection_Closing;  }MACROE
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,9 +40,9 @@
 | 
			
		|||
/** Processes a UDP packet inside an Ethernet frame, and writes the appropriate response
 | 
			
		||||
 *  to the output Ethernet frame if a subprotocol handler has created a response packet.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param IPHeaderInStart    Pointer to the start of the incoming packet's IP header
 | 
			
		||||
 *  \param UDPHeaderInStart   Pointer to the start of the incoming packet's UDP header
 | 
			
		||||
 *  \param UDPHeaderOutStart  Pointer to the start of the outgoing packet's UDP header
 | 
			
		||||
 *  \param[in] IPHeaderInStart     Pointer to the start of the incoming packet's IP header
 | 
			
		||||
 *  \param[in] UDPHeaderInStart    Pointer to the start of the incoming packet's UDP header
 | 
			
		||||
 *  \param[out] UDPHeaderOutStart  Pointer to the start of the outgoing packet's UDP header
 | 
			
		||||
 *
 | 
			
		||||
 *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,8 +78,8 @@ void Webserver_Init(void)
 | 
			
		|||
 | 
			
		||||
/** Indicates if a given request equals the given HTTP command.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param RequestHeader  HTTP request made by the host
 | 
			
		||||
 *  \param Command        HTTP command to compare the request to
 | 
			
		||||
 *  \param[in] RequestHeader  HTTP request made by the host
 | 
			
		||||
 *  \param[in] Command        HTTP command to compare the request to
 | 
			
		||||
 *
 | 
			
		||||
 *  \return Boolean true if the command matches the request, false otherwise
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -92,8 +92,8 @@ static bool IsHTTPCommand(uint8_t* RequestHeader, char* Command)
 | 
			
		|||
/** Application callback routine, executed each time the TCP processing task runs. This callback determines what request
 | 
			
		||||
 *  has been made (if any), and serves up appropriate responses.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param ConnectionState  Pointer to a TCP Connection State structure giving connection information
 | 
			
		||||
 *  \param Buffer           Pointer to the application's send/receive packet buffer
 | 
			
		||||
 *  \param[in] ConnectionState  Pointer to a TCP Connection State structure giving connection information
 | 
			
		||||
 *  \param[in,out] Buffer       Pointer to the application's send/receive packet buffer
 | 
			
		||||
 */
 | 
			
		||||
void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_ConnectionBuffer_t* Buffer)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
		 *  a single typedef struct. A macro is used instead so that functional descriptors can be created
 | 
			
		||||
		 *  easily by specifying the size of the payload. This allows sizeof() to work correctly.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param DataSize  Size in bytes of the CDC functional descriptor's data payload
 | 
			
		||||
		 *  \param[in] DataSize  Size in bytes of the CDC functional descriptor's data payload
 | 
			
		||||
		 */
 | 
			
		||||
		#define CDC_FUNCTIONAL_DESCRIPTOR(DataSize)        \
 | 
			
		||||
		     struct                                        \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -164,10 +164,10 @@ void ReadNextReport(void)
 | 
			
		|||
 | 
			
		||||
/** Writes a report to the attached device.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param ReportOUTData  Buffer containing the report to send to the device
 | 
			
		||||
 *  \param ReportIndex  Index of the report in the device (zero if the device does not use multiple reports)
 | 
			
		||||
 *  \param ReportType  Type of report to send, either HID_REPORTTYPE_OUTPUT or HID_REPORTTYPE_FEATURE
 | 
			
		||||
 *  \param ReportLength  Length of the report to send
 | 
			
		||||
 *  \param[in] ReportOUTData  Buffer containing the report to send to the device
 | 
			
		||||
 *  \param[in] ReportIndex  Index of the report in the device (zero if the device does not use multiple reports)
 | 
			
		||||
 *  \param[in] ReportType  Type of report to send, either HID_REPORTTYPE_OUTPUT or HID_REPORTTYPE_FEATURE
 | 
			
		||||
 *  \param[in] ReportLength  Length of the report to send
 | 
			
		||||
 */
 | 
			
		||||
void WriteNextReport(uint8_t* ReportOUTData, uint8_t ReportIndex, uint8_t ReportType, uint16_t ReportLength)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -224,7 +224,7 @@ void Keyboard_HID_Task(void)
 | 
			
		|||
/** Processes a read HID report from an attached keyboard, extracting out elements via the HID parser results
 | 
			
		||||
 *  as required and prints pressed characters to the serial port. Each time a key is typed, a board LED is toggled.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param KeyboardReport  Pointer to a HID report from an attached keyboard device
 | 
			
		||||
 *  \param[in] KeyboardReport  Pointer to a HID report from an attached keyboard device
 | 
			
		||||
 */
 | 
			
		||||
void ProcessKeyboardReport(uint8_t* KeyboardReport)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -170,7 +170,7 @@ static uint8_t MassStore_WaitForDataReceived(void)
 | 
			
		|||
/** Sends or receives the transaction's data stage to or from the attached device, reading or
 | 
			
		||||
 *  writing to the nominated buffer.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param  BufferPtr  Pointer to the data buffer to read from or write to
 | 
			
		||||
 *  \param[in,out]  BufferPtr  Pointer to the data buffer to read from or write to
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A value from the Pipe_Stream_RW_ErrorCodes_t enum
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -269,7 +269,7 @@ uint8_t MassStore_MassStorageReset(void)
 | 
			
		|||
/** Issues a Mass Storage class specific request to determine the index of the highest numbered Logical
 | 
			
		||||
 *  Unit in the attached device.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param MaxLUNIndex  Pointer to the location that the maximum LUN index value should be stored
 | 
			
		||||
 *  \param[out] MaxLUNIndex  Pointer to the location that the maximum LUN index value should be stored
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A value from the USB_Host_SendControlErrorCodes_t enum
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -304,8 +304,8 @@ uint8_t MassStore_GetMaxLUN(uint8_t* const MaxLUNIndex)
 | 
			
		|||
/** Issues a SCSI Inquiry command to the attached device, to determine the device's information. This
 | 
			
		||||
 *  gives information on the device's capabilities.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param LUNIndex    Index of the LUN inside the device the command is being addressed to
 | 
			
		||||
 *  \param InquiryPtr  Pointer to the inquiry data structure where the inquiry data from the device is to be stored
 | 
			
		||||
 *  \param[in] LUNIndex    Index of the LUN inside the device the command is being addressed to
 | 
			
		||||
 *  \param[out] InquiryPtr  Pointer to the inquiry data structure where the inquiry data from the device is to be stored
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A value from the Pipe_Stream_RW_ErrorCodes_t enum
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -367,8 +367,8 @@ uint8_t MassStore_Inquiry(const uint8_t LUNIndex, const SCSI_Inquiry_Response_t*
 | 
			
		|||
/** Issues a SCSI Request Sense command to the attached device, to determine the current SCSI sense information. This
 | 
			
		||||
 *  gives error codes for the last issued SCSI command to the device.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param LUNIndex  Index of the LUN inside the device the command is being addressed to
 | 
			
		||||
 *  \param SensePtr  Pointer to the sense data structure where the sense data from the device is to be stored
 | 
			
		||||
 *  \param[in] LUNIndex   Index of the LUN inside the device the command is being addressed to
 | 
			
		||||
 *  \param[out] SensePtr  Pointer to the sense data structure where the sense data from the device is to be stored
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A value from the Pipe_Stream_RW_ErrorCodes_t enum
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -430,11 +430,11 @@ uint8_t MassStore_RequestSense(const uint8_t LUNIndex, const SCSI_Request_Sense_
 | 
			
		|||
/** Issues a SCSI Device Block Read command to the attached device, to read in one or more data blocks from the
 | 
			
		||||
 *  storage medium into a buffer.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param LUNIndex      Index of the LUN inside the device the command is being addressed to
 | 
			
		||||
 *  \param BlockAddress  Start block address to read from
 | 
			
		||||
 *  \param Blocks        Number of blocks to read from the device
 | 
			
		||||
 *  \param BlockSize     Size in bytes of each block to read
 | 
			
		||||
 *  \param BufferPtr     Pointer to the buffer where the read data is to be written to
 | 
			
		||||
 *  \param[in] LUNIndex      Index of the LUN inside the device the command is being addressed to
 | 
			
		||||
 *  \param[in] BlockAddress  Start block address to read from
 | 
			
		||||
 *  \param[in] Blocks        Number of blocks to read from the device
 | 
			
		||||
 *  \param[in] BlockSize     Size in bytes of each block to read
 | 
			
		||||
 *  \param[out] BufferPtr    Pointer to the buffer where the read data is to be written to
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A value from the Pipe_Stream_RW_ErrorCodes_t enum
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -501,11 +501,11 @@ uint8_t MassStore_ReadDeviceBlock(const uint8_t LUNIndex, const uint32_t BlockAd
 | 
			
		|||
/** Issues a SCSI Device Block Write command to the attached device, to write one or more data blocks to the
 | 
			
		||||
 *  storage medium from a buffer.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param LUNIndex      Index of the LUN inside the device the command is being addressed to
 | 
			
		||||
 *  \param BlockAddress  Start block address to write to
 | 
			
		||||
 *  \param Blocks        Number of blocks to write to in the device
 | 
			
		||||
 *  \param BlockSize     Size in bytes of each block to write
 | 
			
		||||
 *  \param BufferPtr     Pointer to the buffer where the write data is to be sourced from
 | 
			
		||||
 *  \param[in] LUNIndex      Index of the LUN inside the device the command is being addressed to
 | 
			
		||||
 *  \param[in] BlockAddress  Start block address to write to
 | 
			
		||||
 *  \param[in] Blocks        Number of blocks to write to in the device
 | 
			
		||||
 *  \param[in] BlockSize     Size in bytes of each block to write
 | 
			
		||||
 *  \param[in] BufferPtr     Pointer to the buffer where the write data is to be sourced from
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A value from the Pipe_Stream_RW_ErrorCodes_t enum
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -565,7 +565,7 @@ uint8_t MassStore_WriteDeviceBlock(const uint8_t LUNIndex, const uint32_t BlockA
 | 
			
		|||
/** Issues a SCSI Device Test Unit Ready command to the attached device, to determine if the device is ready to accept
 | 
			
		||||
 *  other commands.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param LUNIndex      Index of the LUN inside the device the command is being addressed to
 | 
			
		||||
 *  \param[in] LUNIndex      Index of the LUN inside the device the command is being addressed to
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A value from the Pipe_Stream_RW_ErrorCodes_t enum
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -613,8 +613,8 @@ uint8_t MassStore_TestUnitReady(const uint8_t LUNIndex)
 | 
			
		|||
/** Issues a SCSI Device Read Capacity command to the attached device, to determine the capacity of the
 | 
			
		||||
 *  given Logical Unit within the device.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param LUNIndex     Index of the LUN inside the device the command is being addressed to
 | 
			
		||||
 *  \param CapacityPtr  Device capacity structure where the capacity data is to be stored
 | 
			
		||||
 *  \param[in] LUNIndex      Index of the LUN inside the device the command is being addressed to
 | 
			
		||||
 *  \param[out] CapacityPtr  Device capacity structure where the capacity data is to be stored
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A value from the Pipe_Stream_RW_ErrorCodes_t enum
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -685,8 +685,8 @@ uint8_t MassStore_ReadCapacity(const uint8_t LUNIndex, SCSI_Capacity_t* const Ca
 | 
			
		|||
 *  being removed. This is a legacy command for SCSI disks with removable storage (such as ZIP disks), but should still
 | 
			
		||||
 *  be issued before the first read or write command is sent.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param LUNIndex        Index of the LUN inside the device the command is being addressed to
 | 
			
		||||
 *  \param PreventRemoval  Whether or not the LUN media should be locked to prevent removal or not
 | 
			
		||||
 *  \param[in] LUNIndex        Index of the LUN inside the device the command is being addressed to
 | 
			
		||||
 *  \param[in] PreventRemoval  Whether or not the LUN media should be locked to prevent removal or not
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A value from the Pipe_Stream_RW_ErrorCodes_t enum
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,7 +42,7 @@
 | 
			
		|||
		#include "MassStorageHost.h"
 | 
			
		||||
		#include "SCSI_Codes.h"
 | 
			
		||||
 | 
			
		||||
		#include <LUFA/Drivers/USB/USB.h>                    // USB Functionality
 | 
			
		||||
		#include <LUFA/Drivers/USB/USB.h>
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** Class specific request to reset the Mass Storage interface of the attached device */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -349,9 +349,9 @@ void MassStorage_Task(void)
 | 
			
		|||
 *  printing error codes to the serial port and waiting until the device is removed before
 | 
			
		||||
 *  continuing.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param CommandString  ASCII string located in PROGMEM space indicating what operation failed
 | 
			
		||||
 *  \param FailedAtSCSILayer  Indicates if the command failed at the (logical) SCSI layer or at the physical USB layer
 | 
			
		||||
 *  \param ErrorCode      Error code of the function which failed to complete successfully
 | 
			
		||||
 *  \param[in] CommandString      ASCII string located in PROGMEM space indicating what operation failed
 | 
			
		||||
 *  \param[in] FailedAtSCSILayer  Indicates if the command failed at the (logical) SCSI layer or at the physical USB layer
 | 
			
		||||
 *  \param[in] ErrorCode          Error code of the function which failed to complete successfully
 | 
			
		||||
 */
 | 
			
		||||
void ShowDiskReadError(char* CommandString, bool FailedAtSCSILayer, uint8_t ErrorCode)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,12 +49,12 @@
 | 
			
		|||
 | 
			
		||||
		#include "Lib/MassStoreCommands.h"
 | 
			
		||||
 | 
			
		||||
		#include <LUFA/Version.h>                                // Library Version Information
 | 
			
		||||
		#include <LUFA/Drivers/Misc/TerminalCodes.h>             // ANSI Terminal Escape Codes
 | 
			
		||||
		#include <LUFA/Drivers/USB/USB.h>                        // USB Functionality
 | 
			
		||||
		#include <LUFA/Drivers/Peripheral/SerialStream.h>        // Serial stream driver
 | 
			
		||||
		#include <LUFA/Drivers/Board/LEDs.h>                     // LEDs driver
 | 
			
		||||
		#include <LUFA/Drivers/Board/Buttons.h>                  // Board Buttons driver
 | 
			
		||||
		#include <LUFA/Version.h>
 | 
			
		||||
		#include <LUFA/Drivers/Misc/TerminalCodes.h>
 | 
			
		||||
		#include <LUFA/Drivers/USB/USB.h>
 | 
			
		||||
		#include <LUFA/Drivers/Peripheral/SerialStream.h>
 | 
			
		||||
		#include <LUFA/Drivers/Board/LEDs.h>
 | 
			
		||||
		#include <LUFA/Drivers/Board/Buttons.h>
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -224,7 +224,7 @@ void Mouse_HID_Task(void)
 | 
			
		|||
/** Processes a read HID report from an attached mouse, extracting out elements via the HID parser results
 | 
			
		||||
 *  as required and displays movement and button presses on the board LEDs.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param MouseReport  Pointer to a HID report from an attached mouse device
 | 
			
		||||
 *  \param[in] MouseReport  Pointer to a HID report from an attached mouse device
 | 
			
		||||
 */
 | 
			
		||||
void ProcessMouseReport(uint8_t* MouseReport)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -190,8 +190,8 @@ uint8_t SImage_RecieveBlockHeader(void)
 | 
			
		|||
 | 
			
		||||
/** Function to send the given data to the device, after a command block has been issued.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param Buffer  Source data buffer to send to the device
 | 
			
		||||
 *  \param Bytes   Number of bytes to send
 | 
			
		||||
 *  \param[in] Buffer  Source data buffer to send to the device
 | 
			
		||||
 *  \param[in] Bytes   Number of bytes to send
 | 
			
		||||
 */
 | 
			
		||||
void SImage_SendData(void* Buffer, uint16_t Bytes)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -211,8 +211,8 @@ void SImage_SendData(void* Buffer, uint16_t Bytes)
 | 
			
		|||
 | 
			
		||||
/** Function to receive the given data to the device, after a response block has been received.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param Buffer  Destination data buffer to put read bytes from the device
 | 
			
		||||
 *  \param Bytes   Number of bytes to receive
 | 
			
		||||
 *  \param[out] Buffer  Destination data buffer to put read bytes from the device
 | 
			
		||||
 *  \param[in] Bytes    Number of bytes to receive
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A value from the Pipe_Stream_RW_ErrorCodes_t enum
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -257,7 +257,7 @@ bool SImage_IsEventReceived(void)
 | 
			
		|||
 | 
			
		||||
/** Clears the stall condition in the attached device on the nominated endpoint number.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param EndpointNum  Endpoint number in the attached device whose stall condition is to be cleared
 | 
			
		||||
 *  \param[in] EndpointNum  Endpoint number in the attached device whose stall condition is to be cleared
 | 
			
		||||
 *
 | 
			
		||||
 *  \return A value from the USB_Host_SendControlErrorCodes_t enum
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,7 +57,7 @@
 | 
			
		|||
		/** Used in the DataLength field of a PIMA container, to give the total container size in bytes for
 | 
			
		||||
		 *  a command container.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param params  Number of parameters which are to be sent in the Param field of the container
 | 
			
		||||
		 *  \param[in] params  Number of parameters which are to be sent in the Param field of the container
 | 
			
		||||
		 */
 | 
			
		||||
		#define PIMA_COMMAND_SIZE(params)      ((sizeof(PIMA_SendBlock) - sizeof(PIMA_SendBlock.Params)) + \
 | 
			
		||||
		                                        (params * sizeof(PIMA_SendBlock.Params[0])))
 | 
			
		||||
| 
						 | 
				
			
			@ -65,7 +65,7 @@
 | 
			
		|||
		/** Used in the DataLength field of a PIMA container, to give the total container size in bytes for
 | 
			
		||||
		 *  a data container.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param datalen  Length in bytes of the data in the container
 | 
			
		||||
		 *  \param[in] datalen  Length in bytes of the data in the container
 | 
			
		||||
		 */
 | 
			
		||||
		#define PIMA_DATA_SIZE(datalen)        ((sizeof(PIMA_SendBlock) - sizeof(PIMA_SendBlock.Params)) + datalen)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -327,8 +327,8 @@ void StillImage_Task(void)
 | 
			
		|||
/** Function to convert a given Unicode encoded string to ASCII. This function will only work correctly on Unicode
 | 
			
		||||
 *  strings which contain ASCII printable characters only.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param UnicodeString  Pointer to a Unicode encoded input string
 | 
			
		||||
 *  \param Buffer         Pointer to a buffer where the converted ASCII string should be stored
 | 
			
		||||
 *  \param[in] UnicodeString  Pointer to a Unicode encoded input string
 | 
			
		||||
 *  \param[out] Buffer        Pointer to a buffer where the converted ASCII string should be stored
 | 
			
		||||
 */
 | 
			
		||||
void UnicodeToASCII(uint8_t* UnicodeString, char* Buffer)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -351,8 +351,8 @@ void UnicodeToASCII(uint8_t* UnicodeString, char* Buffer)
 | 
			
		|||
 | 
			
		||||
/** Displays a PIMA command error via the device's serial port.
 | 
			
		||||
 *
 | 
			
		||||
 *  \param ErrorCode          Error code of the function which failed to complete successfully
 | 
			
		||||
 *  \param ResponseCodeError  Indicates if the error is due to a command failed indication from the device, or a communication failure
 | 
			
		||||
 *  \param[in] ErrorCode          Error code of the function which failed to complete successfully
 | 
			
		||||
 *  \param[in] ResponseCodeError  Indicates if the error is due to a command failed indication from the device, or a communication failure
 | 
			
		||||
 */
 | 
			
		||||
void ShowCommandError(uint8_t ErrorCode, bool ResponseCodeError)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -121,7 +121,7 @@
 | 
			
		|||
			 *
 | 
			
		||||
			 *  \ingroup Group_BitManip
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param Byte   Byte of data whose bits are to be reversed
 | 
			
		||||
			 *  \param[in] Byte   Byte of data whose bits are to be reversed
 | 
			
		||||
			 */
 | 
			
		||||
			static inline uint8_t BitReverse(uint8_t Byte) ATTR_WARN_UNUSED_RESULT ATTR_CONST;
 | 
			
		||||
			static inline uint8_t BitReverse(uint8_t Byte)
 | 
			
		||||
| 
						 | 
				
			
			@ -137,7 +137,7 @@
 | 
			
		|||
			 *
 | 
			
		||||
			 *  \ingroup Group_BitManip
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param Word   Word of data whose bytes are to be swapped
 | 
			
		||||
			 *  \param[in] Word   Word of data whose bytes are to be swapped
 | 
			
		||||
			 */
 | 
			
		||||
			static inline uint16_t SwapEndian_16(uint16_t Word) ATTR_WARN_UNUSED_RESULT ATTR_CONST;
 | 
			
		||||
			static inline uint16_t SwapEndian_16(uint16_t Word)
 | 
			
		||||
| 
						 | 
				
			
			@ -149,7 +149,7 @@
 | 
			
		|||
			 *
 | 
			
		||||
			 *  \ingroup Group_BitManip
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param DWord   Double word of data whose bytes are to be swapped
 | 
			
		||||
			 *  \param[in] DWord   Double word of data whose bytes are to be swapped
 | 
			
		||||
			 */
 | 
			
		||||
			static inline uint32_t SwapEndian_32(uint32_t DWord) ATTR_WARN_UNUSED_RESULT ATTR_CONST;
 | 
			
		||||
			static inline uint32_t SwapEndian_32(uint32_t DWord)
 | 
			
		||||
| 
						 | 
				
			
			@ -164,8 +164,8 @@
 | 
			
		|||
			 *
 | 
			
		||||
			 *  \ingroup Group_BitManip
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param Data   Pointer to a number containing an even number of bytes to be reversed
 | 
			
		||||
			 *  \param Bytes  Length of the data in bytes
 | 
			
		||||
			 *  \param[in,out] Data  Pointer to a number containing an even number of bytes to be reversed
 | 
			
		||||
			 *  \param[in] Bytes  Length of the data in bytes
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void SwapEndian_n(uint8_t* Data, uint8_t Bytes);
 | 
			
		||||
			static inline void SwapEndian_n(uint8_t* Data, uint8_t Bytes)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,8 +85,8 @@
 | 
			
		|||
			 *  the total number of pages contained in the boards dataflash ICs, all dataflash ICs
 | 
			
		||||
			 *  are deselected.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param PageAddress  Address of the page to manipulate, ranging from
 | 
			
		||||
			 *                      ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1).
 | 
			
		||||
			 *  \param[in] PageAddress  Address of the page to manipulate, ranging from
 | 
			
		||||
			 *                          ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1).
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void Dataflash_SelectChipFromPage(const uint16_t PageAddress)
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			@ -102,8 +102,8 @@
 | 
			
		|||
			/** Sends a set of page and buffer address bytes to the currently selected dataflash IC, for use with
 | 
			
		||||
			 *  dataflash commands which require a complete 24-byte address.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param PageAddress  Page address within the selected dataflash IC
 | 
			
		||||
			 *  \param BufferByte   Address within the dataflash's buffer
 | 
			
		||||
			 *  \param[in] PageAddress  Page address within the selected dataflash IC
 | 
			
		||||
			 *  \param[in] BufferByte   Address within the dataflash's buffer
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void Dataflash_SendAddressBytes(uint16_t PageAddress, const uint16_t BufferByte)
 | 
			
		||||
			{	
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -86,8 +86,8 @@
 | 
			
		|||
 | 
			
		||||
				/** Selects the given dataflash chip.
 | 
			
		||||
				 *
 | 
			
		||||
				 *  \param  ChipMask  Mask of the Dataflash IC to select, in the form of DATAFLASH_CHIPn mask (where n is
 | 
			
		||||
				 *          the chip number).
 | 
			
		||||
				 *  \param[in]  ChipMask  Mask of the Dataflash IC to select, in the form of DATAFLASH_CHIPn mask (where n is
 | 
			
		||||
				 *              the chip number).
 | 
			
		||||
				 */
 | 
			
		||||
				static inline void Dataflash_SelectChip(uint8_t ChipMask);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -105,7 +105,7 @@
 | 
			
		|||
		/* Inline Functions: */
 | 
			
		||||
			/** Sends a byte to the currently selected dataflash IC, and returns a byte from the dataflash.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param Byte of data to send to the dataflash
 | 
			
		||||
			 *  \param[in] Byte of data to send to the dataflash
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return Last response byte from the dataflash
 | 
			
		||||
			 */
 | 
			
		||||
| 
						 | 
				
			
			@ -117,7 +117,7 @@
 | 
			
		|||
 | 
			
		||||
			/** Sends a byte to the currently selected dataflash IC, and ignores the next byte from the dataflash.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param Byte of data to send to the dataflash
 | 
			
		||||
			 *  \param[in] Byte of data to send to the dataflash
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
 | 
			
		||||
			static inline void Dataflash_SendByte(const uint8_t Byte)
 | 
			
		||||
| 
						 | 
				
			
			@ -154,7 +154,7 @@
 | 
			
		|||
			/** Initializes the dataflash driver (including the SPI driver) so that commands and data may be
 | 
			
		||||
			 *  sent to an attached dataflash IC.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param PrescalerMask  SPI prescaler mask, see SPI.h documentation
 | 
			
		||||
			 *  \param[in] PrescalerMask  SPI prescaler mask, see SPI.h documentation
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void Dataflash_Init(const uint8_t PrescalerMask)
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			@ -191,16 +191,16 @@
 | 
			
		|||
			 *  the total number of pages contained in the boards dataflash ICs, all dataflash ICs
 | 
			
		||||
			 *  are deselected.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param PageAddress  Address of the page to manipulate, ranging from
 | 
			
		||||
			 *                      ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1).
 | 
			
		||||
			 *  \param[in] PageAddress  Address of the page to manipulate, ranging from
 | 
			
		||||
			 *                          ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1).
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void Dataflash_SelectChipFromPage(const uint16_t PageAddress);
 | 
			
		||||
 | 
			
		||||
			/** Sends a set of page and buffer address bytes to the currently selected dataflash IC, for use with
 | 
			
		||||
			 *  dataflash commands which require a complete 24-byte address.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param PageAddress  Page address within the selected dataflash IC
 | 
			
		||||
			 *  \param BufferByte   Address within the dataflash's buffer
 | 
			
		||||
			 *  \param[in] PageAddress  Page address within the selected dataflash IC
 | 
			
		||||
			 *  \param[in] BufferByte   Address within the dataflash's buffer
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void Dataflash_SendAddressBytes(uint16_t PageAddress, const uint16_t BufferByte);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -117,28 +117,28 @@
 | 
			
		|||
 | 
			
		||||
		/** Turns on the LEDs specified in the given LED mask.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param LEDMask  Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
 | 
			
		||||
		 *  \param[in] LEDMask  Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
 | 
			
		||||
		 */
 | 
			
		||||
		static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask);
 | 
			
		||||
 | 
			
		||||
		/** Turns off the LEDs specified in the given LED mask.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param LEDMask  Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
 | 
			
		||||
		 *  \param[in] LEDMask  Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
 | 
			
		||||
		 */
 | 
			
		||||
		static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask);
 | 
			
		||||
 | 
			
		||||
		/** Turns off all LEDs not specified in the given LED mask, and turns on all the LEDs in the given LED
 | 
			
		||||
		 *  mask.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param LEDMask  Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
 | 
			
		||||
		 *  \param[in] LEDMask  Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
 | 
			
		||||
		 */
 | 
			
		||||
		static inline void LEDs_SetAllLEDs(const uint8_t LEDMask);
 | 
			
		||||
 | 
			
		||||
		/** Turns off all LEDs in the LED mask that are not set in the active mask, and turns on all the LEDs
 | 
			
		||||
		 *  specified in both the LED and active masks.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param LEDMask     Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
 | 
			
		||||
		 *  \param ActiveMask  Mask of whether the LEDs in the LED mask should be turned on or off
 | 
			
		||||
		 *  \param[in] LEDMask     Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
 | 
			
		||||
		 *  \param[in] ActiveMask  Mask of whether the LEDs in the LED mask should be turned on or off
 | 
			
		||||
		 */
 | 
			
		||||
		static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,8 +85,8 @@
 | 
			
		|||
			 *  the total number of pages contained in the boards dataflash ICs, all dataflash ICs
 | 
			
		||||
			 *  are deselected.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param PageAddress  Address of the page to manipulate, ranging from
 | 
			
		||||
			 *                      ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1).
 | 
			
		||||
			 *  \param[in] PageAddress  Address of the page to manipulate, ranging from
 | 
			
		||||
			 *                          ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1).
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void Dataflash_SelectChipFromPage(const uint16_t PageAddress)
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			@ -101,8 +101,8 @@
 | 
			
		|||
			/** Sends a set of page and buffer address bytes to the currently selected dataflash IC, for use with
 | 
			
		||||
			 *  dataflash commands which require a complete 24-byte address.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param PageAddress  Page address within the selected dataflash IC
 | 
			
		||||
			 *  \param BufferByte   Address within the dataflash's buffer
 | 
			
		||||
			 *  \param[in] PageAddress  Page address within the selected dataflash IC
 | 
			
		||||
			 *  \param[in] BufferByte   Address within the dataflash's buffer
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void Dataflash_SendAddressBytes(uint16_t PageAddress, const uint16_t BufferByte)
 | 
			
		||||
			{	
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,8 +85,8 @@
 | 
			
		|||
			 *  the total number of pages contained in the boards dataflash ICs, all dataflash ICs
 | 
			
		||||
			 *  are deselected.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param PageAddress  Address of the page to manipulate, ranging from
 | 
			
		||||
			 *                      ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1).
 | 
			
		||||
			 *  \param[in] PageAddress  Address of the page to manipulate, ranging from
 | 
			
		||||
			 *                          ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1).
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void Dataflash_SelectChipFromPage(const uint16_t PageAddress)
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			@ -101,8 +101,8 @@
 | 
			
		|||
			/** Sends a set of page and buffer address bytes to the currently selected dataflash IC, for use with
 | 
			
		||||
			 *  dataflash commands which require a complete 24-byte address.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param PageAddress  Page address within the selected dataflash IC
 | 
			
		||||
			 *  \param BufferByte   Address within the dataflash's buffer
 | 
			
		||||
			 *  \param[in] PageAddress  Page address within the selected dataflash IC
 | 
			
		||||
			 *  \param[in] BufferByte   Address within the dataflash's buffer
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void Dataflash_SendAddressBytes(uint16_t PageAddress, const uint16_t BufferByte)
 | 
			
		||||
			{	
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -88,8 +88,8 @@
 | 
			
		|||
			 *  the total number of pages contained in the boards dataflash ICs, all dataflash ICs
 | 
			
		||||
			 *  are deselected.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param PageAddress  Address of the page to manipulate, ranging from
 | 
			
		||||
			 *                      ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1).
 | 
			
		||||
			 *  \param[in] PageAddress  Address of the page to manipulate, ranging from
 | 
			
		||||
			 *                          ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1).
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void Dataflash_SelectChipFromPage(const uint16_t PageAddress)
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			@ -107,8 +107,8 @@
 | 
			
		|||
			/** Sends a set of page and buffer address bytes to the currently selected dataflash IC, for use with
 | 
			
		||||
			 *  dataflash commands which require a complete 24-byte address.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param PageAddress  Page address within the selected dataflash IC
 | 
			
		||||
			 *  \param BufferByte   Address within the dataflash's buffer
 | 
			
		||||
			 *  \param[in] PageAddress  Page address within the selected dataflash IC
 | 
			
		||||
			 *  \param[in] BufferByte   Address within the dataflash's buffer
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void Dataflash_SendAddressBytes(uint16_t PageAddress, const uint16_t BufferByte)
 | 
			
		||||
			{	
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -115,7 +115,7 @@
 | 
			
		|||
				 *  The "mode" parameter should be a mask comprised of a conversion mode (free running or single) and
 | 
			
		||||
				 *  prescaler masks.
 | 
			
		||||
				 *
 | 
			
		||||
				 *  \param Mode  Mask of ADC settings, including adjustment, prescale, mode and reference
 | 
			
		||||
				 *  \param[in] Mode  Mask of ADC settings, including adjustment, prescale, mode and reference
 | 
			
		||||
				 */
 | 
			
		||||
				static inline void ADC_Init(uint8_t Mode);
 | 
			
		||||
				
 | 
			
		||||
| 
						 | 
				
			
			@ -159,7 +159,7 @@
 | 
			
		|||
			 *  associated port pin as an input and disables the digital portion of the I/O to reduce
 | 
			
		||||
			 *  power consumption.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param Channel  ADC channel number to set up for conversions
 | 
			
		||||
			 *  \param[in] Channel  ADC channel number to set up for conversions
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void ADC_SetupChannel(const uint8_t Channel)
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			@ -196,7 +196,7 @@
 | 
			
		|||
			 *  Once executed, the conversion status can be determined via the \ref ADC_IsReadingComplete() macro and
 | 
			
		||||
			 *  the result read via the \ref ADC_GetResult() macro.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param MUXMask  Mask comprising of an ADC channel number, reference mask and adjustment mask
 | 
			
		||||
			 *  \param[in] MUXMask  Mask comprising of an ADC channel number, reference mask and adjustment mask
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void ADC_StartReading(const uint8_t MUXMask)
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			@ -208,7 +208,7 @@
 | 
			
		|||
			/** Performs a complete single reading from channel, including a polling spinloop to wait for the
 | 
			
		||||
			 *  conversion to complete, and the returning of the converted value.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param MUXMask  Mask comprising of an ADC channel number, reference mask and adjustment mask
 | 
			
		||||
			 *  \param[in] MUXMask  Mask comprising of an ADC channel number, reference mask and adjustment mask
 | 
			
		||||
			 */
 | 
			
		||||
			static inline uint16_t ADC_GetChannelReading(const uint8_t MUXMask) ATTR_WARN_UNUSED_RESULT;
 | 
			
		||||
			static inline uint16_t ADC_GetChannelReading(const uint8_t MUXMask)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -90,8 +90,8 @@
 | 
			
		|||
			/** Initializes the SPI subsystem, ready for transfers. Must be called before calling any other
 | 
			
		||||
			 *  SPI routines.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param PrescalerMask  Prescaler mask to set the SPI clock speed
 | 
			
		||||
			 *  \param Master         If true, sets the SPI system to use master mode, slave if false
 | 
			
		||||
			 *  \param[in] PrescalerMask  Prescaler mask to set the SPI clock speed
 | 
			
		||||
			 *  \param[in] Master         If true, sets the SPI system to use master mode, slave if false
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void SPI_Init(const uint8_t PrescalerMask, const bool Master)
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			@ -109,7 +109,7 @@
 | 
			
		|||
			
 | 
			
		||||
			/** Sends and receives a byte through the SPI interface, blocking until the transfer is complete.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param Byte  Byte to send through the SPI interface
 | 
			
		||||
			 *  \param[in] Byte  Byte to send through the SPI interface
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return Response byte from the attached SPI device
 | 
			
		||||
			 */
 | 
			
		||||
| 
						 | 
				
			
			@ -124,7 +124,7 @@
 | 
			
		|||
			/** Sends a byte through the SPI interface, blocking until the transfer is complete. The response
 | 
			
		||||
			 *  byte sent to from the attached SPI device is ignored.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param Byte Byte to send through the SPI interface
 | 
			
		||||
			 *  \param[in] Byte Byte to send through the SPI interface
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void SPI_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
 | 
			
		||||
			static inline void SPI_SendByte(const uint8_t Byte)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -88,13 +88,13 @@
 | 
			
		|||
		/* Function Prototypes: */
 | 
			
		||||
			/** Transmits a given string located in program space (FLASH) through the USART.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param FlashStringPtr  Pointer to a string located in program space
 | 
			
		||||
			 *  \param[in] FlashStringPtr  Pointer to a string located in program space
 | 
			
		||||
			 */
 | 
			
		||||
			void Serial_TxString_P(const char *FlashStringPtr) ATTR_NON_NULL_PTR_ARG(1);
 | 
			
		||||
 | 
			
		||||
			/** Transmits a given string located in SRAM memory through the USART.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param StringPtr  Pointer to a string located in SRAM space
 | 
			
		||||
			 *  \param[in] StringPtr  Pointer to a string located in SRAM space
 | 
			
		||||
			 */
 | 
			
		||||
			void Serial_TxString(const char *StringPtr) ATTR_NON_NULL_PTR_ARG(1);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -102,8 +102,8 @@
 | 
			
		|||
			/** Initializes the USART, ready for serial data transmission and reception. This initialises the interface to
 | 
			
		||||
			 *  standard 8-bit, no parity, 1 stop bit settings suitable for most applications.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param BaudRate     Serial baud rate, in bits per second
 | 
			
		||||
			 *  \param DoubleSpeed  Enables double speed mode when set, halving the sample time to double the baud rate
 | 
			
		||||
			 *  \param[in] BaudRate     Serial baud rate, in bits per second
 | 
			
		||||
			 *  \param[in] DoubleSpeed  Enables double speed mode when set, halving the sample time to double the baud rate
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void Serial_Init(const uint32_t BaudRate, const bool DoubleSpeed)
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			@ -119,7 +119,7 @@
 | 
			
		|||
 | 
			
		||||
			/** Transmits a given byte through the USART.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param DataByte  Byte to transmit through the USART
 | 
			
		||||
			 *  \param[in] DataByte  Byte to transmit through the USART
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void Serial_TxByte(const char DataByte)
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,8 +79,8 @@
 | 
			
		|||
			/** Initializes the serial stream (and regular USART driver) so that both the stream and regular
 | 
			
		||||
			 *  USART driver functions can be used. Must be called before any stream or regular USART functions.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param BaudRate     Baud rate to configure the USART to
 | 
			
		||||
			 *  \param DoubleSpeed  Enables double speed mode when set, halving the sample time to double the baud rate
 | 
			
		||||
			 *  \param[in] BaudRate     Baud rate to configure the USART to
 | 
			
		||||
			 *  \param[in] DoubleSpeed  Enables double speed mode when set, halving the sample time to double the baud rate
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void SerialStream_Init(const uint32_t BaudRate, const bool DoubleSpeed)
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -201,7 +201,7 @@
 | 
			
		|||
 | 
			
		||||
		/** Convenience macro, to fill a 24-bit AudioSampleFreq_t structure with the given sample rate as a 24-bit number.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param freq  Required audio sampling frequency in HZ
 | 
			
		||||
		 *  \param[in] freq  Required audio sampling frequency in HZ
 | 
			
		||||
		 */
 | 
			
		||||
		#define AUDIO_SAMPLE_FREQ(freq)  {LowWord: ((uint32_t)freq & 0x00FFFF), HighByte: (((uint32_t)freq >> 16) & 0x0000FF)}
 | 
			
		||||
		
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -111,7 +111,7 @@
 | 
			
		|||
		 *  a single typedef struct. A macro is used instead so that functional descriptors can be created
 | 
			
		||||
		 *  easily by specifying the size of the payload. This allows sizeof() to work correctly.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param DataSize  Size in bytes of the CDC functional descriptor's data payload
 | 
			
		||||
		 *  \param[in] DataSize  Size in bytes of the CDC functional descriptor's data payload
 | 
			
		||||
		 */
 | 
			
		||||
		#define CDC_FUNCTIONAL_DESCRIPTOR(DataSize)        \
 | 
			
		||||
		     struct                                        \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -71,7 +71,7 @@
 | 
			
		|||
		/** Convenience macro. MIDI channels are numbered from 1-10 (natural numbers) however the logical channel
 | 
			
		||||
		 *  addresses are zero-indexed. This converts a natural MIDI channel number into the logical channel address.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param channel  MIDI channel number to address
 | 
			
		||||
		 *  \param[in] channel  MIDI channel number to address
 | 
			
		||||
		 */
 | 
			
		||||
		#define MIDI_CHANNEL(channel)        (channel - 1)
 | 
			
		||||
		
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,7 +33,7 @@
 | 
			
		|||
 | 
			
		||||
#include "Audio.h"
 | 
			
		||||
 | 
			
		||||
void Audio_Device_ProcessControlPacket(USB_ClassInfo_Audio_Device_t* AudioInterfaceInfo)
 | 
			
		||||
void Audio_Device_ProcessControlPacket(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	if (!(Endpoint_IsSETUPReceived()))
 | 
			
		||||
	  return;
 | 
			
		||||
| 
						 | 
				
			
			@ -83,7 +83,7 @@ bool Audio_Device_ConfigureEndpoints(USB_ClassInfo_Audio_Device_t* AudioInterfac
 | 
			
		|||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Audio_Device_USBTask(USB_ClassInfo_Audio_Device_t* AudioInterfaceInfo)
 | 
			
		||||
void Audio_Device_USBTask(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -124,7 +124,7 @@ int32_t Audio_Device_ReadSample24(void)
 | 
			
		|||
	return Sample;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Audio_Device_WriteSample8(int8_t Sample)
 | 
			
		||||
void Audio_Device_WriteSample8(const int8_t Sample)
 | 
			
		||||
{
 | 
			
		||||
	Endpoint_Write_Byte(Sample);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -132,7 +132,7 @@ void Audio_Device_WriteSample8(int8_t Sample)
 | 
			
		|||
	  Endpoint_ClearIN();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Audio_Device_WriteSample16(int16_t Sample)
 | 
			
		||||
void Audio_Device_WriteSample16(const int16_t Sample)
 | 
			
		||||
{
 | 
			
		||||
	Endpoint_Write_Word_LE(Sample);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -140,7 +140,7 @@ void Audio_Device_WriteSample16(int16_t Sample)
 | 
			
		|||
	  Endpoint_ClearIN();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Audio_Device_WriteSample24(int32_t Sample)
 | 
			
		||||
void Audio_Device_WriteSample24(const int32_t Sample)
 | 
			
		||||
{
 | 
			
		||||
	Endpoint_Write_Byte(Sample >> 16);
 | 
			
		||||
	Endpoint_Write_Word_LE(Sample);
 | 
			
		||||
| 
						 | 
				
			
			@ -149,13 +149,13 @@ void Audio_Device_WriteSample24(int32_t Sample)
 | 
			
		|||
	  Endpoint_ClearIN();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool Audio_Device_IsSampleReceived(USB_ClassInfo_Audio_Device_t* AudioInterfaceInfo)
 | 
			
		||||
bool Audio_Device_IsSampleReceived(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	Endpoint_SelectEndpoint(AudioInterfaceInfo->Config.DataOUTEndpointNumber);
 | 
			
		||||
	return Endpoint_IsOUTReceived();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool Audio_Device_IsReadyForNextSample(USB_ClassInfo_Audio_Device_t* AudioInterfaceInfo)
 | 
			
		||||
bool Audio_Device_IsReadyForNextSample(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	Endpoint_SelectEndpoint(AudioInterfaceInfo->Config.DataINEndpointNumber);
 | 
			
		||||
	return Endpoint_IsINReady();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -97,25 +97,25 @@
 | 
			
		|||
			 *  \ref EVENT_USB_ConfigurationChanged() event so that the endpoints are configured when the configuration containing the
 | 
			
		||||
			 *  given Audio interface is selected.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return Boolean true if the endpoints were sucessfully configured, false otherwise
 | 
			
		||||
			 */
 | 
			
		||||
			bool Audio_Device_ConfigureEndpoints(USB_ClassInfo_Audio_Device_t* AudioInterfaceInfo);
 | 
			
		||||
			bool Audio_Device_ConfigureEndpoints(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo);
 | 
			
		||||
 | 
			
		||||
			/** Processes incomming control requests from the host, that are directed to the given Audio class interface. This should be
 | 
			
		||||
			 *  linked to the library \ref EVENT_USB_UnhandledControlPacket() event.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
 | 
			
		||||
			 */
 | 
			
		||||
			void Audio_Device_ProcessControlPacket(USB_ClassInfo_Audio_Device_t* AudioInterfaceInfo);
 | 
			
		||||
			void Audio_Device_ProcessControlPacket(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo);
 | 
			
		||||
 | 
			
		||||
			/** General management task for a given Audio class interface, required for the correct operation of the interface. This should
 | 
			
		||||
			 *  be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
 | 
			
		||||
			 */
 | 
			
		||||
			void Audio_Device_USBTask(USB_ClassInfo_Audio_Device_t* AudioInterfaceInfo);
 | 
			
		||||
			void Audio_Device_USBTask(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo);
 | 
			
		||||
			
 | 
			
		||||
			/** Reads the next 8-bit audio sample from the current audio interface.
 | 
			
		||||
			 *
 | 
			
		||||
| 
						 | 
				
			
			@ -149,43 +149,43 @@
 | 
			
		|||
			 *  \note This should be preceeded immediately by a call to the USB_Audio_IsReadyForNextSample() function to ensure that
 | 
			
		||||
			 *        the correct endpoint is selected and ready for data.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param Sample  Signed 8-bit audio sample
 | 
			
		||||
			 *  \param[in] Sample  Signed 8-bit audio sample
 | 
			
		||||
			 */
 | 
			
		||||
			void Audio_Device_WriteSample8(int8_t Sample);
 | 
			
		||||
			void Audio_Device_WriteSample8(const int8_t Sample);
 | 
			
		||||
 | 
			
		||||
			/** Writes the next 16-bit audio sample to the current audio interface.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \note This should be preceeded immediately by a call to the USB_Audio_IsReadyForNextSample() function to ensure that
 | 
			
		||||
			 *        the correct endpoint is selected and ready for data.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param Sample  Signed 16-bit audio sample
 | 
			
		||||
			 *  \param[in] Sample  Signed 16-bit audio sample
 | 
			
		||||
			 */
 | 
			
		||||
			void Audio_Device_WriteSample16(int16_t Sample);
 | 
			
		||||
			void Audio_Device_WriteSample16(const int16_t Sample);
 | 
			
		||||
 | 
			
		||||
			/** Writes the next 24-bit audio sample to the current audio interface.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \note This should be preceeded immediately by a call to the USB_Audio_IsReadyForNextSample() function to ensure that
 | 
			
		||||
			 *        the correct endpoint is selected and ready for data.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param Sample  Signed 24-bit audio sample
 | 
			
		||||
			 *  \param[in] Sample  Signed 24-bit audio sample
 | 
			
		||||
			 */
 | 
			
		||||
			void Audio_Device_WriteSample24(int32_t Sample);
 | 
			
		||||
			void Audio_Device_WriteSample24(const int32_t Sample);
 | 
			
		||||
 | 
			
		||||
			/** Determines if the given audio interface is ready for a sample to be read from it.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return Boolean true if the given Audio interface has a sample to be read, false otherwise
 | 
			
		||||
			 */
 | 
			
		||||
			bool Audio_Device_IsSampleReceived(USB_ClassInfo_Audio_Device_t* AudioInterfaceInfo);
 | 
			
		||||
			bool Audio_Device_IsSampleReceived(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo);
 | 
			
		||||
 | 
			
		||||
			/** Determines if the given audio interface is ready to accept the next sample to be written to it.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return Boolean true if the given Audio interface is ready to accept the next sample, false otherwise
 | 
			
		||||
			 */
 | 
			
		||||
			bool Audio_Device_IsReadyForNextSample(USB_ClassInfo_Audio_Device_t* AudioInterfaceInfo);
 | 
			
		||||
			bool Audio_Device_IsReadyForNextSample(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo);
 | 
			
		||||
 | 
			
		||||
	/* Disable C linkage for C++ Compilers: */
 | 
			
		||||
		#if defined(__cplusplus)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -131,7 +131,7 @@ void CDC_Device_USBTask(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo)
 | 
			
		|||
	Endpoint_ClearIN();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CDC_Device_SendString(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo, char* Data, uint16_t Length)
 | 
			
		||||
void CDC_Device_SendString(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, char* const Data, const uint16_t Length)
 | 
			
		||||
{
 | 
			
		||||
	if (!(USB_IsConnected))
 | 
			
		||||
	  return;
 | 
			
		||||
| 
						 | 
				
			
			@ -140,7 +140,7 @@ void CDC_Device_SendString(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo, char* D
 | 
			
		|||
	Endpoint_Write_Stream_LE(Data, Length, NO_STREAM_CALLBACK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo, uint8_t Data)
 | 
			
		||||
void CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, const uint8_t Data)
 | 
			
		||||
{
 | 
			
		||||
	if (!(USB_IsConnected))
 | 
			
		||||
	  return;
 | 
			
		||||
| 
						 | 
				
			
			@ -156,7 +156,7 @@ void CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo, uint8_t D
 | 
			
		|||
	Endpoint_Write_Byte(Data);	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint16_t CDC_Device_BytesReceived(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo)
 | 
			
		||||
uint16_t CDC_Device_BytesReceived(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataOUTEndpointNumber);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +178,7 @@ uint8_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo)
 | 
			
		|||
	return DataByte;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CDC_Device_SendControlLineStateChange(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo)
 | 
			
		||||
void CDC_Device_SendControlLineStateChange(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	if (!(USB_IsConnected))
 | 
			
		||||
	  return;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -108,34 +108,34 @@
 | 
			
		|||
			 *  \ref EVENT_USB_ConfigurationChanged() event so that the endpoints are configured when the configuration containing the
 | 
			
		||||
			 *  given CDC interface is selected.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return Boolean true if the endpoints were sucessfully configured, false otherwise
 | 
			
		||||
			 */
 | 
			
		||||
			bool CDC_Device_ConfigureEndpoints(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo);
 | 
			
		||||
			bool CDC_Device_ConfigureEndpoints(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
 | 
			
		||||
 | 
			
		||||
			/** Processes incomming control requests from the host, that are directed to the given CDC class interface. This should be
 | 
			
		||||
			 *  linked to the library \ref EVENT_USB_UnhandledControlPacket() event.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 */
 | 
			
		||||
			void CDC_Device_ProcessControlPacket(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo);
 | 
			
		||||
			void CDC_Device_ProcessControlPacket(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
 | 
			
		||||
 | 
			
		||||
			/** General management task for a given CDC class interface, required for the correct operation of the interface. This should
 | 
			
		||||
			 *  be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 */
 | 
			
		||||
			void CDC_Device_USBTask(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo);
 | 
			
		||||
			void CDC_Device_USBTask(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
 | 
			
		||||
 | 
			
		||||
			/** CDC class driver event for a line encoding change on a CDC interface. This event fires each time the host requests a
 | 
			
		||||
			 *  line encoding change (containing the serial parity, baud and other configuration information) and may be hooked in the
 | 
			
		||||
			 *  user program by declaring a handler function with the same name and parameters listed here. The new line encoding
 | 
			
		||||
			 *  settings are available in the LineEncoding structure inside the CDC interface structure passed as a parameter.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 */
 | 
			
		||||
			void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo);
 | 
			
		||||
			void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
 | 
			
		||||
			
 | 
			
		||||
			/** CDC class driver event for a control line state change on a CDC interface. This event fires each time the host requests a
 | 
			
		||||
			 *  control line state change (containing the virtual serial control line states, such as DTR) and may be hooked in the
 | 
			
		||||
| 
						 | 
				
			
			@ -143,62 +143,62 @@
 | 
			
		|||
			 *  are available in the ControlLineStates.HostToDevice value inside the CDC interface structure passed as a parameter, set as
 | 
			
		||||
			 *  a mask of CDC_CONTROL_LINE_OUT_* masks.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 */		
 | 
			
		||||
			void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo);
 | 
			
		||||
			void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
 | 
			
		||||
 | 
			
		||||
			/** Sends a given string to the attached USB host, if connected. If a host is not connected when the function is called, the
 | 
			
		||||
			 *  string is discarded.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 *  \param Data  Pointer to the string to send to the host
 | 
			
		||||
			 *  \param Length  Size in bytes of the string to send to the host
 | 
			
		||||
			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 *  \param[in] Data  Pointer to the string to send to the host
 | 
			
		||||
			 *  \param[in] Length  Size in bytes of the string to send to the host
 | 
			
		||||
			 */
 | 
			
		||||
			void CDC_Device_SendString(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo, char* Data, uint16_t Length);
 | 
			
		||||
			void CDC_Device_SendString(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, char* const Data, const uint16_t Length);
 | 
			
		||||
			
 | 
			
		||||
			/** Sends a given byte to the attached USB host, if connected. If a host is not connected when the function is called, the
 | 
			
		||||
			 *  byte is discarded.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 *  \param Data  Byte of data to send to the host
 | 
			
		||||
			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 *  \param[in] Data  Byte of data to send to the host
 | 
			
		||||
			 */
 | 
			
		||||
			void CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo, uint8_t Data);
 | 
			
		||||
			void CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, const uint8_t Data);
 | 
			
		||||
			
 | 
			
		||||
			/** Determines the number of bytes received by the CDC interface from the host, waiting to be read.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return Total number of buffered bytes received from the host
 | 
			
		||||
			 */
 | 
			
		||||
			uint16_t CDC_Device_BytesReceived(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo);
 | 
			
		||||
			uint16_t CDC_Device_BytesReceived(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
 | 
			
		||||
			
 | 
			
		||||
			/** Reads a byte of data from the host. If no data is waiting to be read of if a USB host is not connected, the function
 | 
			
		||||
			 *  returns 0. The USB_CDC_BytesReceived() function should be queried before data is recieved to ensure that no data
 | 
			
		||||
			 *  underflow occurs.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return Next received byte from the host, or 0 if no data received
 | 
			
		||||
			 */
 | 
			
		||||
			uint8_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo);
 | 
			
		||||
			uint8_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
 | 
			
		||||
			
 | 
			
		||||
			/** Sends a Serial Control Line State Change notification to the host. This should be called when the virtual serial
 | 
			
		||||
			 *  control lines (DCD, DSR, etc.) have changed states, or to give BREAK notfications to the host. Line states persist
 | 
			
		||||
			 *  until they are cleared via a second notification. This should be called each time the CDC class driver's 
 | 
			
		||||
			 *  ControlLineStates.DeviceToHost value is updated to push the new states to the USB host.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 | 
			
		||||
			 */
 | 
			
		||||
			void CDC_Device_SendControlLineStateChange(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo);
 | 
			
		||||
			void CDC_Device_SendControlLineStateChange(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
 | 
			
		||||
 | 
			
		||||
	/* Private Interface - For use in library only: */
 | 
			
		||||
	#if !defined(__DOXYGEN__)
 | 
			
		||||
		/* Function Prototypes: */
 | 
			
		||||
			#if defined(INCLUDE_FROM_CDC_CLASS_DEVICE_C)
 | 
			
		||||
				void CDC_Device_Event_Stub(void);
 | 
			
		||||
				void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo)
 | 
			
		||||
				void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
 | 
			
		||||
														  ATTR_WEAK ATTR_ALIAS(CDC_Device_Event_Stub);
 | 
			
		||||
				void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo)
 | 
			
		||||
				void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
 | 
			
		||||
															 ATTR_WEAK ATTR_ALIAS(CDC_Device_Event_Stub);
 | 
			
		||||
			#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,7 +33,7 @@
 | 
			
		|||
 | 
			
		||||
#include "HID.h"
 | 
			
		||||
 | 
			
		||||
void HID_Device_ProcessControlPacket(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo)
 | 
			
		||||
void HID_Device_ProcessControlPacket(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	if (!(Endpoint_IsSETUPReceived()))
 | 
			
		||||
	  return;
 | 
			
		||||
| 
						 | 
				
			
			@ -130,7 +130,7 @@ void HID_Device_ProcessControlPacket(USB_ClassInfo_HID_Device_t* HIDInterfaceInf
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool HID_Device_ConfigureEndpoints(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo)
 | 
			
		||||
bool HID_Device_ConfigureEndpoints(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	HIDInterfaceInfo->State.UsingReportProtocol = true;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -143,7 +143,7 @@ bool HID_Device_ConfigureEndpoints(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo)
 | 
			
		|||
	return true;
 | 
			
		||||
}
 | 
			
		||||
		
 | 
			
		||||
void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo)
 | 
			
		||||
void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	if (!(USB_IsConnected))
 | 
			
		||||
	  return;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -89,7 +89,7 @@
 | 
			
		|||
			 *  \ref EVENT_USB_ConfigurationChanged() event so that the endpoints are configured when the configuration
 | 
			
		||||
			 *  containing the given HID interface is selected.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param HIDInterfaceInfo  Pointer to a structure containing a HID Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] HIDInterfaceInfo  Pointer to a structure containing a HID Class configuration and state.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return Boolean true if the endpoints were sucessfully configured, false otherwise
 | 
			
		||||
			 */
 | 
			
		||||
| 
						 | 
				
			
			@ -98,14 +98,14 @@
 | 
			
		|||
			/** Processes incomming control requests from the host, that are directed to the given HID class interface. This should be
 | 
			
		||||
			 *  linked to the library \ref EVENT_USB_UnhandledControlPacket() event.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param HIDInterfaceInfo  Pointer to a structure containing a HID Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] HIDInterfaceInfo  Pointer to a structure containing a HID Class configuration and state.
 | 
			
		||||
			 */		
 | 
			
		||||
			void HID_Device_ProcessControlPacket(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo);
 | 
			
		||||
 | 
			
		||||
			/** General management task for a given HID class interface, required for the correct operation of the interface. This should
 | 
			
		||||
			 *  be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param HIDInterfaceInfo  Pointer to a structure containing a HID Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] HIDInterfaceInfo  Pointer to a structure containing a HID Class configuration and state.
 | 
			
		||||
			 */
 | 
			
		||||
			void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo);
 | 
			
		||||
			
 | 
			
		||||
| 
						 | 
				
			
			@ -113,11 +113,11 @@
 | 
			
		|||
			 *  HID class control requests from the host, or by the normal HID endpoint polling procedure. Inside this callback the
 | 
			
		||||
			 *  user is responsible for the creation of the next HID input report to be sent to the host.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param HIDInterfaceInfo  Pointer to a structure containing a HID Class configuration and state.
 | 
			
		||||
			 *  \param ReportID  If preset to a non-zero value, this is the report ID being requested by the host. If zero, this should
 | 
			
		||||
			 *                   be set to the report ID of the generated HID input report. If multiple reports are not sent via the
 | 
			
		||||
			 *                   given HID interface, this parameter should be ignored.
 | 
			
		||||
			 *  \param ReportData  Pointer to a buffer where the generated HID report should be stored.
 | 
			
		||||
			 *  \param[in,out] HIDInterfaceInfo  Pointer to a structure containing a HID Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] ReportID  If preset to a non-zero value, this is the report ID being requested by the host. If zero, this should
 | 
			
		||||
			 *                 be set to the report ID of the generated HID input report. If multiple reports are not sent via the
 | 
			
		||||
			 *                 given HID interface, this parameter should be ignored.
 | 
			
		||||
			 *  \param[out] ReportData  Pointer to a buffer where the generated HID report should be stored.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return  Number of bytes in the generated input report, or zero if no report is to be sent
 | 
			
		||||
			 */
 | 
			
		||||
| 
						 | 
				
			
			@ -127,14 +127,14 @@
 | 
			
		|||
			 *  either HID class control requests from the host, or by the normal HID endpoint polling procedure. Inside this callback
 | 
			
		||||
			 *  the user is responsible for the processing of the received HID output report from the host.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param HIDInterfaceInfo  Pointer to a structure containing a HID Class configuration and state.
 | 
			
		||||
			 *  \param ReportID  Report ID of the received output report. If multiple reports are not received via the given HID
 | 
			
		||||
			 *  \param[in,out] HIDInterfaceInfo  Pointer to a structure containing a HID Class configuration and state.
 | 
			
		||||
			 *  \param[in] ReportID  Report ID of the received output report. If multiple reports are not received via the given HID
 | 
			
		||||
			 *                   interface, this parameter should be ignored.
 | 
			
		||||
			 *  \param ReportData  Pointer to a buffer where the received HID report is stored.
 | 
			
		||||
			 *  \param ReportSize  Size in bytes of the received report from the host.
 | 
			
		||||
			 *  \param[in] ReportData  Pointer to a buffer where the received HID report is stored.
 | 
			
		||||
			 *  \param[in] ReportSize  Size in bytes of the received report from the host.
 | 
			
		||||
			 */
 | 
			
		||||
			void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo, uint8_t ReportID, void* ReportData,
 | 
			
		||||
													  uint16_t ReportSize);
 | 
			
		||||
			void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
 | 
			
		||||
			                                          const void* ReportData, const uint16_t ReportSize);
 | 
			
		||||
 | 
			
		||||
	/* Disable C linkage for C++ Compilers: */
 | 
			
		||||
		#if defined(__cplusplus)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,12 +33,12 @@
 | 
			
		|||
 | 
			
		||||
#include "MIDI.h"
 | 
			
		||||
 | 
			
		||||
void MIDI_Device_ProcessControlPacket(USB_ClassInfo_MIDI_Device_t* MIDIInterfaceInfo)
 | 
			
		||||
void MIDI_Device_ProcessControlPacket(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool MIDI_Device_ConfigureEndpoints(USB_ClassInfo_MIDI_Device_t* MIDIInterfaceInfo)
 | 
			
		||||
bool MIDI_Device_ConfigureEndpoints(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	if (MIDIInterfaceInfo->Config.DataINEndpointNumber)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -63,12 +63,12 @@ bool MIDI_Device_ConfigureEndpoints(USB_ClassInfo_MIDI_Device_t* MIDIInterfaceIn
 | 
			
		|||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MIDI_Device_USBTask(USB_ClassInfo_MIDI_Device_t* MIDIInterfaceInfo)
 | 
			
		||||
void MIDI_Device_USBTask(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MIDI_Device_SendEventPacket(USB_ClassInfo_MIDI_Device_t* MIDIInterfaceInfo, MIDI_EventPacket_t* Event)
 | 
			
		||||
void MIDI_Device_SendEventPacket(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo, MIDI_EventPacket_t* const Event)
 | 
			
		||||
{
 | 
			
		||||
	if (!(USB_IsConnected))
 | 
			
		||||
	  return;
 | 
			
		||||
| 
						 | 
				
			
			@ -82,7 +82,7 @@ void MIDI_Device_SendEventPacket(USB_ClassInfo_MIDI_Device_t* MIDIInterfaceInfo,
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool MIDI_Device_ReceiveEventPacket(USB_ClassInfo_MIDI_Device_t* MIDIInterfaceInfo, MIDI_EventPacket_t* Event)
 | 
			
		||||
bool MIDI_Device_ReceiveEventPacket(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo, MIDI_EventPacket_t* const Event)
 | 
			
		||||
{
 | 
			
		||||
	if (!(USB_IsConnected))
 | 
			
		||||
	  return false;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,12 +54,6 @@
 | 
			
		|||
 | 
			
		||||
	/* Public Interface - May be used in end-application: */
 | 
			
		||||
		/* Type Define: */
 | 
			
		||||
			/** Configuration information structure for \ref USB_ClassInfo_MIDI_Device_t MIDI device interface structures. */
 | 
			
		||||
			typedef  USB_ClassInfo_MIDI_Device_Config_t;
 | 
			
		||||
	
 | 
			
		||||
			/** Current State information structure for \ref USB_ClassInfo_MIDI_Device_t MIDI device interface structures. */
 | 
			
		||||
			typedef  USB_ClassInfo_MIDI_Device_State_t;
 | 
			
		||||
	
 | 
			
		||||
			/** Class state structure. An instance of this structure should be made for each MIDI interface
 | 
			
		||||
			 *  within the user application, and passed to each of the MIDI class driver functions as the
 | 
			
		||||
			 *  MIDIInterfaceInfo parameter. This stores each MIDI interface's configuration and state information.
 | 
			
		||||
| 
						 | 
				
			
			@ -92,41 +86,41 @@
 | 
			
		|||
			 *  \ref EVENT_USB_ConfigurationChanged() event so that the endpoints are configured when the configuration
 | 
			
		||||
			 *  containing the given MIDI interface is selected.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param MIDIInterfaceInfo  Pointer to a structure containing a MIDI Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] MIDIInterfaceInfo  Pointer to a structure containing a MIDI Class configuration and state.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return Boolean true if the endpoints were sucessfully configured, false otherwise
 | 
			
		||||
			 */
 | 
			
		||||
			bool MIDI_Device_ConfigureEndpoints(USB_ClassInfo_MIDI_Device_t* MIDIInterfaceInfo);
 | 
			
		||||
			bool MIDI_Device_ConfigureEndpoints(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo);
 | 
			
		||||
			
 | 
			
		||||
			/** Processes incomming control requests from the host, that are directed to the given MIDI class interface. This should be
 | 
			
		||||
			 *  linked to the library \ref EVENT_USB_UnhandledControlPacket() event.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param MIDIInterfaceInfo  Pointer to a structure containing a MIDI Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] MIDIInterfaceInfo  Pointer to a structure containing a MIDI Class configuration and state.
 | 
			
		||||
			 */		
 | 
			
		||||
			void MIDI_Device_ProcessControlPacket(USB_ClassInfo_MIDI_Device_t* MIDIInterfaceInfo);
 | 
			
		||||
			void MIDI_Device_ProcessControlPacket(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo);
 | 
			
		||||
 | 
			
		||||
			/** General management task for a given MIDI class interface, required for the correct operation of the interface. This should
 | 
			
		||||
			 *  be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param MIDIInterfaceInfo  Pointer to a structure containing a MIDI Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] MIDIInterfaceInfo  Pointer to a structure containing a MIDI Class configuration and state.
 | 
			
		||||
			 */
 | 
			
		||||
			void MIDI_Device_USBTask(USB_ClassInfo_MIDI_Device_t* MIDIInterfaceInfo);
 | 
			
		||||
			void MIDI_Device_USBTask(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo);
 | 
			
		||||
 | 
			
		||||
			/** Sends a MIDI event packet to the host. If no host is connected, the event packet is discarded.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param MIDIInterfaceInfo  Pointer to a structure containing a MIDI Class configuration and state.
 | 
			
		||||
			 *  \param Event  Pointer to a populated USB_MIDI_EventPacket_t structure containing the MIDI event to send
 | 
			
		||||
			 *  \param[in,out] MIDIInterfaceInfo  Pointer to a structure containing a MIDI Class configuration and state.
 | 
			
		||||
			 *  \param[in] Event  Pointer to a populated USB_MIDI_EventPacket_t structure containing the MIDI event to send
 | 
			
		||||
			 */
 | 
			
		||||
			void MIDI_Device_SendEventPacket(USB_ClassInfo_MIDI_Device_t* MIDIInterfaceInfo, MIDI_EventPacket_t* Event);
 | 
			
		||||
			void MIDI_Device_SendEventPacket(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo, MIDI_EventPacket_t* const Event);
 | 
			
		||||
 | 
			
		||||
			/** Receives a MIDI event packet from the host.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param MIDIInterfaceInfo  Pointer to a structure containing a MIDI Class configuration and state.
 | 
			
		||||
			 *  \param Event  Pointer to a USB_MIDI_EventPacket_t structure where the received MIDI event is to be placed
 | 
			
		||||
			 *  \param[in,out] MIDIInterfaceInfo  Pointer to a structure containing a MIDI Class configuration and state.
 | 
			
		||||
			 *  \param[out] Event  Pointer to a USB_MIDI_EventPacket_t structure where the received MIDI event is to be placed
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return Boolean true if a MIDI event packet was received, false otherwise
 | 
			
		||||
			 */
 | 
			
		||||
			bool MIDI_Device_ReceiveEventPacket(USB_ClassInfo_MIDI_Device_t* MIDIInterfaceInfo, MIDI_EventPacket_t* Event);
 | 
			
		||||
			bool MIDI_Device_ReceiveEventPacket(USB_ClassInfo_MIDI_Device_t* const MIDIInterfaceInfo, MIDI_EventPacket_t* const Event);
 | 
			
		||||
 | 
			
		||||
	/* Disable C linkage for C++ Compilers: */
 | 
			
		||||
		#if defined(__cplusplus)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,7 +36,7 @@
 | 
			
		|||
 | 
			
		||||
static USB_ClassInfo_MS_Device_t* CallbackMSInterfaceInfo;
 | 
			
		||||
 | 
			
		||||
void MS_Device_ProcessControlPacket(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
 | 
			
		||||
void MS_Device_ProcessControlPacket(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	if (!(Endpoint_IsSETUPReceived()))
 | 
			
		||||
	  return;
 | 
			
		||||
| 
						 | 
				
			
			@ -75,7 +75,7 @@ void MS_Device_ProcessControlPacket(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool MS_Device_ConfigureEndpoints(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
 | 
			
		||||
bool MS_Device_ConfigureEndpoints(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	if (!(Endpoint_ConfigureEndpoint(MSInterfaceInfo->Config.DataINEndpointNumber, EP_TYPE_BULK,
 | 
			
		||||
							         ENDPOINT_DIR_IN, MSInterfaceInfo->Config.DataINEndpointSize,
 | 
			
		||||
| 
						 | 
				
			
			@ -94,7 +94,7 @@ bool MS_Device_ConfigureEndpoints(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
 | 
			
		|||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MS_Device_USBTask(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
 | 
			
		||||
void MS_Device_USBTask(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	if (!(USB_IsConnected))
 | 
			
		||||
	  return;
 | 
			
		||||
| 
						 | 
				
			
			@ -138,7 +138,7 @@ void MS_Device_USBTask(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
 | 
			
		|||
	MSInterfaceInfo->State.IsMassStoreReset = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
 | 
			
		||||
static bool MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataOUTEndpointNumber);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -171,7 +171,7 @@ static bool MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* MSInterfaceI
 | 
			
		|||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void MS_Device_ReturnCommandStatus(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
 | 
			
		||||
static void MS_Device_ReturnCommandStatus(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataOUTEndpointNumber);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -95,43 +95,43 @@
 | 
			
		|||
			 *  \ref EVENT_USB_ConfigurationChanged() event so that the endpoints are configured when the configuration
 | 
			
		||||
			 *  containing the given Mass Storage interface is selected.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param MSInterfaceInfo  Pointer to a structure containing a Mass Storage Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] MSInterfaceInfo  Pointer to a structure containing a Mass Storage Class configuration and state.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return Boolean true if the endpoints were sucessfully configured, false otherwise
 | 
			
		||||
			 */
 | 
			
		||||
			bool MS_Device_ConfigureEndpoints(USB_ClassInfo_MS_Device_t* MSInterfaceInfo);
 | 
			
		||||
			bool MS_Device_ConfigureEndpoints(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo);
 | 
			
		||||
			
 | 
			
		||||
			/** Processes incomming control requests from the host, that are directed to the given Mass Storage class interface. This should be
 | 
			
		||||
			 *  linked to the library \ref EVENT_USB_UnhandledControlPacket() event.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param MSInterfaceInfo  Pointer to a structure containing a Mass Storage Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] MSInterfaceInfo  Pointer to a structure containing a Mass Storage Class configuration and state.
 | 
			
		||||
			 */		
 | 
			
		||||
			void MS_Device_ProcessControlPacket(USB_ClassInfo_MS_Device_t* MSInterfaceInfo);
 | 
			
		||||
			void MS_Device_ProcessControlPacket(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo);
 | 
			
		||||
 | 
			
		||||
			/** General management task for a given Mass Storage class interface, required for the correct operation of the interface. This should
 | 
			
		||||
			 *  be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param MSInterfaceInfo  Pointer to a structure containing a Mass Storage configuration and state.
 | 
			
		||||
			 *  \param[in,out] MSInterfaceInfo  Pointer to a structure containing a Mass Storage configuration and state.
 | 
			
		||||
			 */
 | 
			
		||||
			void MS_Device_USBTask(USB_ClassInfo_MS_Device_t* MSInterfaceInfo);
 | 
			
		||||
			void MS_Device_USBTask(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo);
 | 
			
		||||
			
 | 
			
		||||
			/** Mass Storage class driver callback for the user processing of a received SCSI command. This callback will fire each time the
 | 
			
		||||
			 *  host sends a SCSI command which requires processing by the user application. Inside this callback the user is responsible
 | 
			
		||||
			 *  for the processing of the received SCSI command from the host. The SCSI command is available in the CommandBlock structure
 | 
			
		||||
			 *  inside the Mass Storage class state structure passed as a parameter to the callback function.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param MSInterfaceInfo  Pointer to a structure containing a Mass Storage Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] MSInterfaceInfo  Pointer to a structure containing a Mass Storage Class configuration and state.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return Boolean true if the SCSI command was successfully processed, false otherwise
 | 
			
		||||
			 */
 | 
			
		||||
			bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* MSInterfaceInfo);
 | 
			
		||||
			bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo);
 | 
			
		||||
		
 | 
			
		||||
	/* Private Interface - For use in library only: */
 | 
			
		||||
	#if !defined(__DOXYGEN__)
 | 
			
		||||
		/* Function Prototypes: */
 | 
			
		||||
			#if defined(INCLUDE_FROM_MS_CLASS_DEVICE_C)
 | 
			
		||||
				static void    MS_Device_ReturnCommandStatus(USB_ClassInfo_MS_Device_t* MSInterfaceInfo);
 | 
			
		||||
				static bool    MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* MSInterfaceInfo);
 | 
			
		||||
				static void    MS_Device_ReturnCommandStatus(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo);
 | 
			
		||||
				static bool    MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo);
 | 
			
		||||
				static uint8_t StreamCallback_MS_Device_AbortOnMassStoreReset(void);
 | 
			
		||||
			#endif
 | 
			
		||||
		
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,7 +65,7 @@ static const uint32_t PROGMEM AdapterSupportedOIDList[]  =
 | 
			
		|||
		OID_802_3_XMIT_MORE_COLLISIONS,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
void RNDIS_Device_ProcessControlPacket(USB_ClassInfo_RNDIS_Device_t* RNDISInterfaceInfo)
 | 
			
		||||
void RNDIS_Device_ProcessControlPacket(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	if (!(Endpoint_IsSETUPReceived()))
 | 
			
		||||
	  return;
 | 
			
		||||
| 
						 | 
				
			
			@ -110,7 +110,7 @@ void RNDIS_Device_ProcessControlPacket(USB_ClassInfo_RNDIS_Device_t* RNDISInterf
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool RNDIS_Device_ConfigureEndpoints(USB_ClassInfo_RNDIS_Device_t* RNDISInterfaceInfo)
 | 
			
		||||
bool RNDIS_Device_ConfigureEndpoints(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	if (!(Endpoint_ConfigureEndpoint(RNDISInterfaceInfo->Config.DataINEndpointNumber, EP_TYPE_BULK,
 | 
			
		||||
							         ENDPOINT_DIR_IN, RNDISInterfaceInfo->Config.DataINEndpointSize,
 | 
			
		||||
| 
						 | 
				
			
			@ -136,7 +136,7 @@ bool RNDIS_Device_ConfigureEndpoints(USB_ClassInfo_RNDIS_Device_t* RNDISInterfac
 | 
			
		|||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RNDIS_Device_USBTask(USB_ClassInfo_RNDIS_Device_t* RNDISInterfaceInfo)
 | 
			
		||||
void RNDIS_Device_USBTask(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	if (!(USB_IsConnected))
 | 
			
		||||
	  return;
 | 
			
		||||
| 
						 | 
				
			
			@ -208,7 +208,7 @@ void RNDIS_Device_USBTask(USB_ClassInfo_RNDIS_Device_t* RNDISInterfaceInfo)
 | 
			
		|||
	}
 | 
			
		||||
}							
 | 
			
		||||
 | 
			
		||||
void RNDIS_Device_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_Device_t* RNDISInterfaceInfo)
 | 
			
		||||
void RNDIS_Device_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	/* Note: Only a single buffer is used for both the received message and its response to save SRAM. Because of
 | 
			
		||||
	         this, response bytes should be filled in order so that they do not clobber unread data in the buffer. */
 | 
			
		||||
| 
						 | 
				
			
			@ -331,9 +331,9 @@ void RNDIS_Device_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_Device_t* RNDIS
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool RNDIS_Device_ProcessNDISQuery(USB_ClassInfo_RNDIS_Device_t* RNDISInterfaceInfo,
 | 
			
		||||
                                          uint32_t OId, void* QueryData, uint16_t QuerySize,
 | 
			
		||||
                                          void* ResponseData, uint16_t* ResponseSize)
 | 
			
		||||
static bool RNDIS_Device_ProcessNDISQuery(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo,
 | 
			
		||||
                                          const uint32_t OId, void* const QueryData, const uint16_t QuerySize,
 | 
			
		||||
                                          void* ResponseData, uint16_t* const ResponseSize)
 | 
			
		||||
{
 | 
			
		||||
	switch (OId)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -443,8 +443,8 @@ static bool RNDIS_Device_ProcessNDISQuery(USB_ClassInfo_RNDIS_Device_t* RNDISInt
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool RNDIS_Device_ProcessNDISSet(USB_ClassInfo_RNDIS_Device_t* RNDISInterfaceInfo, uint32_t OId, void* SetData,
 | 
			
		||||
                                        uint16_t SetSize)
 | 
			
		||||
static bool RNDIS_Device_ProcessNDISSet(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo, const uint32_t OId, void* SetData,
 | 
			
		||||
                                        const uint16_t SetSize)
 | 
			
		||||
{
 | 
			
		||||
	switch (OId)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -103,36 +103,36 @@
 | 
			
		|||
			 *  \ref EVENT_USB_ConfigurationChanged() event so that the endpoints are configured when the configuration
 | 
			
		||||
			 *  containing the given HID interface is selected.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param RNDISInterfaceInfo  Pointer to a structure containing a RNDIS Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] RNDISInterfaceInfo  Pointer to a structure containing a RNDIS Class configuration and state.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return Boolean true if the endpoints were sucessfully configured, false otherwise
 | 
			
		||||
			 */
 | 
			
		||||
			bool RNDIS_Device_ConfigureEndpoints(USB_ClassInfo_RNDIS_Device_t* RNDISInterfaceInfo);
 | 
			
		||||
			bool RNDIS_Device_ConfigureEndpoints(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo);
 | 
			
		||||
 | 
			
		||||
			/** Processes incomming control requests from the host, that are directed to the given RNDIS class interface. This should be
 | 
			
		||||
			 *  linked to the library \ref EVENT_USB_UnhandledControlPacket() event.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param RNDISInterfaceInfo  Pointer to a structure containing a RNDIS Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] RNDISInterfaceInfo  Pointer to a structure containing a RNDIS Class configuration and state.
 | 
			
		||||
			 */		
 | 
			
		||||
			void RNDIS_Device_ProcessControlPacket(USB_ClassInfo_RNDIS_Device_t* RNDISInterfaceInfo);
 | 
			
		||||
			void RNDIS_Device_ProcessControlPacket(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo);
 | 
			
		||||
			
 | 
			
		||||
			/** General management task for a given HID class interface, required for the correct operation of the interface. This should
 | 
			
		||||
			 *  be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param RNDISInterfaceInfo  Pointer to a structure containing a RNDIS Class configuration and state.
 | 
			
		||||
			 *  \param[in,out] RNDISInterfaceInfo  Pointer to a structure containing a RNDIS Class configuration and state.
 | 
			
		||||
			 */
 | 
			
		||||
			void RNDIS_Device_USBTask(USB_ClassInfo_RNDIS_Device_t* RNDISInterfaceInfo);
 | 
			
		||||
			void RNDIS_Device_USBTask(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo);
 | 
			
		||||
		
 | 
			
		||||
	/* Private Interface - For use in library only: */
 | 
			
		||||
	#if !defined(__DOXYGEN__)
 | 
			
		||||
		/* Function Prototypes: */
 | 
			
		||||
		#if defined(INCLUDE_FROM_RNDIS_CLASS_DEVICE_C)
 | 
			
		||||
			static void RNDIS_Device_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_Device_t* RNDISInterfaceInfo);
 | 
			
		||||
			static bool RNDIS_Device_ProcessNDISQuery(USB_ClassInfo_RNDIS_Device_t* RNDISInterfaceInfo, 
 | 
			
		||||
			                                          uint32_t OId, void* QueryData, uint16_t QuerySize,
 | 
			
		||||
										              void* ResponseData, uint16_t* ResponseSize);
 | 
			
		||||
			static bool RNDIS_Device_ProcessNDISSet(USB_ClassInfo_RNDIS_Device_t* RNDISInterfaceInfo, uint32_t OId,
 | 
			
		||||
			                                        void* SetData, uint16_t SetSize);	
 | 
			
		||||
			static void RNDIS_Device_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo);
 | 
			
		||||
			static bool RNDIS_Device_ProcessNDISQuery(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo, 
 | 
			
		||||
			                                          const uint32_t OId, void* const QueryData, const uint16_t QuerySize,
 | 
			
		||||
										              void* ResponseData, uint16_t* const ResponseSize);
 | 
			
		||||
			static bool RNDIS_Device_ProcessNDISSet(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo, const uint32_t OId,
 | 
			
		||||
			                                        void* SetData, const uint16_t SetSize);	
 | 
			
		||||
		#endif
 | 
			
		||||
		
 | 
			
		||||
	#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -209,9 +209,9 @@
 | 
			
		|||
			/** Function to process a given HID report returned from an attached device, and store it into a given
 | 
			
		||||
			 *  \ref HID_ReportInfo_t structure.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param ReportData  Buffer containing the device's HID report table
 | 
			
		||||
			 *  \param ReportSize  Size in bytes of the HID report table
 | 
			
		||||
			 *  \param ParserData  Pointer to a \ref HID_ReportInfo_t instance for the parser output
 | 
			
		||||
			 *  \param[in] ReportData  Buffer containing the device's HID report table
 | 
			
		||||
			 *  \param[in] ReportSize  Size in bytes of the HID report table
 | 
			
		||||
			 *  \param[out] ParserData  Pointer to a \ref HID_ReportInfo_t instance for the parser output
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return A value in the \ref HID_Parse_ErrorCodes_t enum
 | 
			
		||||
			 */
 | 
			
		||||
| 
						 | 
				
			
			@ -221,8 +221,8 @@
 | 
			
		|||
			/** Extracts the given report item's value out of the given HID report and places it into the Value
 | 
			
		||||
			 *  member of the report item's \ref HID_ReportItem_t structure.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param ReportData  Buffer containing an IN or FEATURE report from an attached device
 | 
			
		||||
			 *  \param ReportItem  Pointer to the report item of interest in a \ref HID_ReportInfo_t ReportItem array
 | 
			
		||||
			 *  \param[in] ReportData  Buffer containing an IN or FEATURE report from an attached device
 | 
			
		||||
			 *  \param[in,out] ReportItem  Pointer to the report item of interest in a \ref HID_ReportInfo_t ReportItem array
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \returns Boolean true if the item to retrieve was located in the given report, false otherwise
 | 
			
		||||
			 */
 | 
			
		||||
| 
						 | 
				
			
			@ -236,8 +236,8 @@
 | 
			
		|||
			 *
 | 
			
		||||
			 *  If the device has multiple HID reports, the report ID is set to the report ID of the given item.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param ReportData  Buffer holding the current OUT report data
 | 
			
		||||
			 *  \param ReportItem  Pointer to the report item of interest in a \ref HID_ReportInfo_t ReportItem array
 | 
			
		||||
			 *  \param[out] ReportData  Buffer holding the current OUT report data
 | 
			
		||||
			 *  \param[in] ReportItem  Pointer to the report item of interest in a \ref HID_ReportInfo_t ReportItem array
 | 
			
		||||
			 */
 | 
			
		||||
			void USB_SetHIDReportItemInfo(uint8_t* ReportData, const HID_ReportItem_t* ReportItem)
 | 
			
		||||
			                              ATTR_NON_NULL_PTR_ARG(1, 2);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -133,9 +133,9 @@
 | 
			
		|||
			 *
 | 
			
		||||
			 *  \note This function is available in USB Host mode only.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param BytesRem  Pointer to an int storing the remaining bytes in the configuration descriptor
 | 
			
		||||
			 *  \param CurrConfigLoc  Pointer to the current position in the configuration descriptor
 | 
			
		||||
			 *  \param ComparatorRoutine  Name of the comparator search function to use on the configuration descriptor
 | 
			
		||||
			 *  \param[in,out] BytesRem  Pointer to an int storing the remaining bytes in the configuration descriptor
 | 
			
		||||
			 *  \param[in,out] CurrConfigLoc  Pointer to the current position in the configuration descriptor
 | 
			
		||||
			 *  \param[in] ComparatorRoutine  Name of the comparator search function to use on the configuration descriptor
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return Value of one of the members of the \ref DSearch_Comp_Return_ErrorCodes_t enum
 | 
			
		||||
			 *
 | 
			
		||||
| 
						 | 
				
			
			@ -183,17 +183,17 @@
 | 
			
		|||
		/* Function Prototypes: */
 | 
			
		||||
			/** Retrieves the configuration descriptor data or size from an attached device via a standard request.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param ConfigNumber  Device configuration descriptor number to fetch from the device (usually set to 1 for
 | 
			
		||||
			 *                       single configuration devices)
 | 
			
		||||
			 *  \param[in] ConfigNumber  Device configuration descriptor number to fetch from the device (usually set to 1 for
 | 
			
		||||
			 *                           single configuration devices)
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param ConfigSizePtr  Pointer to a uint16_t for either storing or retrieving the configuration
 | 
			
		||||
			 *         descriptor size
 | 
			
		||||
			 *  \param[in,out] ConfigSizePtr  Pointer to a uint16_t for either storing or retrieving the configuration
 | 
			
		||||
			 *                                descriptor size
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param BufferPtr  Pointer to the buffer for storing the configuration descriptor data. If this is
 | 
			
		||||
			 *                    NULL, the size of the configuration descriptor will be retrieved instead and
 | 
			
		||||
			 *                    placed in the variable pointed to by ConfigSizePtr. If this is non-NULL, the number
 | 
			
		||||
			 *                    of bytes indicated by ConfigSizePtr of the configuration descriptor will be loaded
 | 
			
		||||
			 *                    into the buffer
 | 
			
		||||
			 *  \param[out] BufferPtr  Pointer to the buffer for storing the configuration descriptor data. If this is
 | 
			
		||||
			 *                         NULL, the size of the configuration descriptor will be retrieved instead and
 | 
			
		||||
			 *                         placed in the variable pointed to by ConfigSizePtr. If this is non-NULL, the number
 | 
			
		||||
			 *                         of bytes indicated by ConfigSizePtr of the configuration descriptor will be loaded
 | 
			
		||||
			 *                         into the buffer
 | 
			
		||||
			 */
 | 
			
		||||
			uint8_t USB_GetDeviceConfigDescriptor(uint8_t ConfigNumber, uint16_t* const ConfigSizePtr, void* BufferPtr)
 | 
			
		||||
			                                      ATTR_NON_NULL_PTR_ARG(2);
 | 
			
		||||
| 
						 | 
				
			
			@ -201,9 +201,9 @@
 | 
			
		|||
			/** Skips to the next sub-descriptor inside the configuration descriptor of the specified type value.
 | 
			
		||||
			 *  The bytes remaining value is automatically decremented.
 | 
			
		||||
			 *
 | 
			
		||||
			 * \param BytesRem  Pointer to the number of bytes remaining of the configuration descriptor
 | 
			
		||||
			 * \param CurrConfigLoc  Pointer to the current descriptor inside the configuration descriptor
 | 
			
		||||
			 * \param Type  Descriptor type value to search for
 | 
			
		||||
			 * \param[in,out] BytesRem  Pointer to the number of bytes remaining of the configuration descriptor
 | 
			
		||||
			 * \param[in,out] CurrConfigLoc  Pointer to the current descriptor inside the configuration descriptor
 | 
			
		||||
			 * \param[in] Type  Descriptor type value to search for
 | 
			
		||||
			 */
 | 
			
		||||
			void USB_GetNextDescriptorOfType(uint16_t* const BytesRem,
 | 
			
		||||
			                                 uint8_t** const CurrConfigLoc,
 | 
			
		||||
| 
						 | 
				
			
			@ -215,10 +215,10 @@
 | 
			
		|||
			 *  descriptor is reached first, the number of bytes remaining to process is set to zero and the
 | 
			
		||||
			 *  function exits. The bytes remaining value is automatically decremented.
 | 
			
		||||
			 *
 | 
			
		||||
			 * \param BytesRem  Pointer to the number of bytes remaining of the configuration descriptor
 | 
			
		||||
			 * \param CurrConfigLoc  Pointer to the current descriptor inside the configuration descriptor
 | 
			
		||||
			 * \param Type  Descriptor type value to search for
 | 
			
		||||
			 * \param BeforeType  Descriptor type value which must not be reached before the given Type descriptor
 | 
			
		||||
			 * \param[in,out] BytesRem  Pointer to the number of bytes remaining of the configuration descriptor
 | 
			
		||||
			 * \param[in,out] CurrConfigLoc  Pointer to the current descriptor inside the configuration descriptor
 | 
			
		||||
			 * \param[in] Type  Descriptor type value to search for
 | 
			
		||||
			 * \param[in] BeforeType  Descriptor type value which must not be reached before the given Type descriptor
 | 
			
		||||
			 */
 | 
			
		||||
			void USB_GetNextDescriptorOfTypeBefore(uint16_t* const BytesRem,
 | 
			
		||||
			                                       uint8_t** const CurrConfigLoc,
 | 
			
		||||
| 
						 | 
				
			
			@ -230,10 +230,10 @@
 | 
			
		|||
			 *  which must come after a descriptor of the second given type value. The bytes remaining value is
 | 
			
		||||
			 *  automatically decremented.
 | 
			
		||||
			 *
 | 
			
		||||
			 * \param BytesRem  Pointer to the number of bytes remaining of the configuration descriptor
 | 
			
		||||
			 * \param CurrConfigLoc  Pointer to the current descriptor inside the configuration descriptor
 | 
			
		||||
			 * \param Type  Descriptor type value to search for
 | 
			
		||||
			 * \param AfterType  Descriptor type value which must be reached before the given Type descriptor
 | 
			
		||||
			 * \param[in,out] BytesRem  Pointer to the number of bytes remaining of the configuration descriptor
 | 
			
		||||
			 * \param[in,out] CurrConfigLoc  Pointer to the current descriptor inside the configuration descriptor
 | 
			
		||||
			 * \param[in] Type  Descriptor type value to search for
 | 
			
		||||
			 * \param[in] AfterType  Descriptor type value which must be reached before the given Type descriptor
 | 
			
		||||
			 */
 | 
			
		||||
			void USB_GetNextDescriptorOfTypeAfter(uint16_t* const BytesRem,
 | 
			
		||||
			                                      uint8_t** const CurrConfigLoc,
 | 
			
		||||
| 
						 | 
				
			
			@ -245,8 +245,8 @@
 | 
			
		|||
			/** Skips over the current sub-descriptor inside the configuration descriptor, so that the pointer then
 | 
			
		||||
			    points to the next sub-descriptor. The bytes remaining value is automatically decremented.
 | 
			
		||||
			 *
 | 
			
		||||
			 * \param BytesRem  Pointer to the number of bytes remaining of the configuration descriptor
 | 
			
		||||
			 * \param CurrConfigLoc  Pointer to the current descriptor inside the configuration descriptor
 | 
			
		||||
			 * \param[in,out] BytesRem  Pointer to the number of bytes remaining of the configuration descriptor
 | 
			
		||||
			 * \param[in,out] CurrConfigLoc  Pointer to the current descriptor inside the configuration descriptor
 | 
			
		||||
			 */
 | 
			
		||||
			static inline void USB_GetNextDescriptor(uint16_t* const BytesRem,
 | 
			
		||||
			                                         uint8_t** const CurrConfigLoc) 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -127,7 +127,7 @@
 | 
			
		|||
			 *
 | 
			
		||||
			 *  \note This event only exists on USB AVR models which support dual role modes.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param ErrorCode  Error code indicating the failure reason, a value in \ref USB_InitErrorCodes_t
 | 
			
		||||
			 *  \param[in] ErrorCode  Error code indicating the failure reason, a value in \ref USB_InitErrorCodes_t
 | 
			
		||||
			 */
 | 
			
		||||
			void EVENT_USB_InitFailure(const uint8_t ErrorCode);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -146,7 +146,7 @@
 | 
			
		|||
			/** Event for USB host error. This event fires when a hardware fault has occurred whilst the USB
 | 
			
		||||
			 *  interface is in host mode.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param ErrorCode  Error code indicating the failure reason, a value in \ref USB_Host_ErrorCodes_t
 | 
			
		||||
			 *  \param[in] ErrorCode  Error code indicating the failure reason, a value in \ref USB_Host_ErrorCodes_t
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \note This event only exists on USB AVR models which supports host mode.
 | 
			
		||||
			 *
 | 
			
		||||
| 
						 | 
				
			
			@ -185,12 +185,12 @@
 | 
			
		|||
			/** Event for USB device enumeration failure. This event fires when a the USB interface is
 | 
			
		||||
			 *  in host mode, and an attached USB device has failed to enumerate completely.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param ErrorCode  Error code indicating the failure reason, a value in 
 | 
			
		||||
			 *                    \ref USB_Host_EnumerationErrorCodes_t
 | 
			
		||||
			 *  \param[in] ErrorCode  Error code indicating the failure reason, a value in 
 | 
			
		||||
			 *                        \ref USB_Host_EnumerationErrorCodes_t
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param SubErrorCode  Sub error code indicating the reason for failure - for example, if the
 | 
			
		||||
			 *                       ErrorCode parameter indicates a control error, this will give the error
 | 
			
		||||
			 *                       code returned by the \ref USB_Host_SendControlRequest() function.
 | 
			
		||||
			 *  \param[in] SubErrorCode  Sub error code indicating the reason for failure - for example, if the
 | 
			
		||||
			 *                           ErrorCode parameter indicates a control error, this will give the error
 | 
			
		||||
			 *                           code returned by the \ref USB_Host_SendControlRequest() function.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \note This event only exists on USB AVR models which supports host mode.
 | 
			
		||||
			 *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -124,15 +124,15 @@
 | 
			
		|||
			 *  index and language ID. This function MUST be overridden in the user application (added with full, identical  
 | 
			
		||||
			 *  prototype and name so that the library can call it to retrieve descriptor data.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param wValue             The type of the descriptor to retrieve in the upper byte, and the index in the 
 | 
			
		||||
			 *                            lower byte (when more than one descriptor of the given type exists, such as the
 | 
			
		||||
			 *                            case of string descriptors). The type may be one of the standard types defined
 | 
			
		||||
			 *                            in the DescriptorTypes_t enum, or may be a class-specific descriptor type value.
 | 
			
		||||
			 *  \param wIndex             The language ID of the string to return if the wValue type indicates DTYPE_String,
 | 
			
		||||
			 *                            otherwise zero for standard descriptors, or as defined in a class-specific
 | 
			
		||||
			 *                            standards.
 | 
			
		||||
			 *  \param DescriptorAddress  Pointer to the descriptor in memory. This should be set by the routine to
 | 
			
		||||
			 *                            the address of the descriptor.
 | 
			
		||||
			 *  \param[in] wValue  The type of the descriptor to retrieve in the upper byte, and the index in the 
 | 
			
		||||
			 *                     lower byte (when more than one descriptor of the given type exists, such as the
 | 
			
		||||
			 *                     case of string descriptors). The type may be one of the standard types defined
 | 
			
		||||
			 *                     in the DescriptorTypes_t enum, or may be a class-specific descriptor type value.
 | 
			
		||||
			 *  \param[in] wIndex  The language ID of the string to return if the wValue type indicates DTYPE_String,
 | 
			
		||||
			 *                     otherwise zero for standard descriptors, or as defined in a class-specific
 | 
			
		||||
			 *                     standards.
 | 
			
		||||
			 *  \param[out] DescriptorAddress  Pointer to the descriptor in memory. This should be set by the routine to
 | 
			
		||||
			 *                                 the address of the descriptor.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \note By default, the library expects all descriptors to be located in flash memory via the PROGMEM attribute.
 | 
			
		||||
			 *        If descriptors should be located in RAM or EEPROM instead (to speed up access in the case of RAM, or to
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue