Add static keyword to all project globals whose scope should be restricted to the same module as they are declared in.

Tighten up the HID class bootloader code slightly, document that it currently exceeds 2KB of bootloader space for all models other than the Series 2 USB AVRs.
pull/1469/head
Dean Camera 14 years ago
parent 57b382558d
commit 782614dbb5

@ -39,22 +39,22 @@
/** Contains the current baud rate and other settings of the first virtual serial port. This must be retained as some /** Contains the current baud rate and other settings of the first virtual serial port. This must be retained as some
* operating systems will not open the port unless the settings can be set successfully. * operating systems will not open the port unless the settings can be set successfully.
*/ */
CDC_Line_Coding_t LineEncoding = { .BaudRateBPS = 0, static CDC_LineEncoding_t LineEncoding = { .BaudRateBPS = 0,
.CharFormat = OneStopBit, .CharFormat = CDC_LINEENCODING_OneStopBit,
.ParityType = Parity_None, .ParityType = CDC_PARITY_None,
.DataBits = 8 }; .DataBits = 8 };
/** Current address counter. This stores the current address of the FLASH or EEPROM as set by the host, /** Current address counter. This stores the current address of the FLASH or EEPROM as set by the host,
* and is used when reading or writing to the AVRs memory (either FLASH or EEPROM depending on the issued * and is used when reading or writing to the AVRs memory (either FLASH or EEPROM depending on the issued
* command.) * command.)
*/ */
uint32_t CurrAddress; static uint32_t CurrAddress;
/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run /** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run
* via a watchdog reset. When cleared the bootloader will exit, starting the watchdog and entering an infinite * via a watchdog reset. When cleared the bootloader will exit, starting the watchdog and entering an infinite
* loop until the AVR restarts and the application runs. * loop until the AVR restarts and the application runs.
*/ */
bool RunBootloader = true; static bool RunBootloader = true;
/** Main program entry point. This routine configures the hardware required by the bootloader, then continuously /** Main program entry point. This routine configures the hardware required by the bootloader, then continuously
@ -137,24 +137,24 @@ void EVENT_USB_Device_ControlRequest(void)
/* Process CDC specific control requests */ /* Process CDC specific control requests */
switch (USB_ControlRequest.bRequest) switch (USB_ControlRequest.bRequest)
{ {
case REQ_GetLineEncoding: case CDC_REQ_GetLineEncoding:
if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
{ {
Endpoint_ClearSETUP(); Endpoint_ClearSETUP();
/* Write the line coding data to the control endpoint */ /* Write the line coding data to the control endpoint */
Endpoint_Write_Control_Stream_LE(&LineEncoding, sizeof(CDC_Line_Coding_t)); Endpoint_Write_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t));
Endpoint_ClearOUT(); Endpoint_ClearOUT();
} }
break; break;
case REQ_SetLineEncoding: case CDC_REQ_SetLineEncoding:
if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
{ {
Endpoint_ClearSETUP(); Endpoint_ClearSETUP();
/* Read the line coding data in from the host into the global struct */ /* Read the line coding data in from the host into the global struct */
Endpoint_Read_Control_Stream_LE(&LineEncoding, sizeof(CDC_Line_Coding_t)); Endpoint_Read_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t));
Endpoint_ClearIN(); Endpoint_ClearIN();
} }

@ -65,50 +65,10 @@
/** Eight character bootloader firmware identifier reported to the host when requested */ /** Eight character bootloader firmware identifier reported to the host when requested */
#define SOFTWARE_IDENTIFIER "LUFACDC" #define SOFTWARE_IDENTIFIER "LUFACDC"
/** CDC Class specific request to get the current virtual serial port configuration settings. */
#define REQ_GetLineEncoding 0x21
/** CDC Class specific request to set the current virtual serial port configuration settings. */
#define REQ_SetLineEncoding 0x20
/* Type Defines: */ /* Type Defines: */
/** Type define for the virtual serial port line encoding settings, for storing the current USART configuration
* as set by the host via a class specific request.
*/
typedef struct
{
uint32_t BaudRateBPS; /**< Baud rate of the virtual serial port, in bits per second */
uint8_t CharFormat; /**< Character format of the virtual serial port, a value from the
* CDCDevice_CDC_LineCodingFormats_t enum
*/
uint8_t ParityType; /**< Parity setting of the virtual serial port, a value from the
* CDCDevice_LineCodingParity_t enum
*/
uint8_t DataBits; /**< Bits of data per character of the virtual serial port */
} CDC_Line_Coding_t;
/** Type define for a non-returning pointer to the start of the loaded application in flash memory. */ /** Type define for a non-returning pointer to the start of the loaded application in flash memory. */
typedef void (*AppPtr_t)(void) ATTR_NO_RETURN; typedef void (*AppPtr_t)(void) ATTR_NO_RETURN;
/* Enums: */
/** Enum for the possible line encoding formats of a virtual serial port. */
enum CDCDevice_CDC_LineCodingFormats_t
{
OneStopBit = 0, /**< Each frame contains one stop bit */
OneAndAHalfStopBits = 1, /**< Each frame contains one and a half stop bits */
TwoStopBits = 2, /**< Each frame contains two stop bits */
};
/** Enum for the possible line encoding parity settings of a virtual serial port. */
enum CDCDevice_LineCodingParity_t
{
Parity_None = 0, /**< No parity bit mode on each frame */
Parity_Odd = 1, /**< Odd parity bit mode on each frame */
Parity_Even = 2, /**< Even parity bit mode on each frame */
Parity_Mark = 3, /**< Mark parity bit mode on each frame */
Parity_Space = 4, /**< Space parity bit mode on each frame */
};
/* Function Prototypes: */ /* Function Prototypes: */
void CDC_Task(void); void CDC_Task(void);
void SetupHardware(void); void SetupHardware(void);

@ -40,57 +40,57 @@
* other than erase. This is initially set to the value set by SECURE_MODE, and cleared by the bootloader * other than erase. This is initially set to the value set by SECURE_MODE, and cleared by the bootloader
* once a memory erase has completed in a bootloader session. * once a memory erase has completed in a bootloader session.
*/ */
bool IsSecure = SECURE_MODE; static bool IsSecure = SECURE_MODE;
/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run /** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run
* via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application * via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application
* jumped to via an indirect jump to location 0x0000 (or other location specified by the host). * jumped to via an indirect jump to location 0x0000 (or other location specified by the host).
*/ */
bool RunBootloader = true; static bool RunBootloader = true;
/** Flag to indicate if the bootloader is waiting to exit. When the host requests the bootloader to exit and /** Flag to indicate if the bootloader is waiting to exit. When the host requests the bootloader to exit and
* jump to the application address it specifies, it sends two sequential commands which must be properly * jump to the application address it specifies, it sends two sequential commands which must be properly
* acknowledged. Upon reception of the first the RunBootloader flag is cleared and the WaitForExit flag is set, * acknowledged. Upon reception of the first the RunBootloader flag is cleared and the WaitForExit flag is set,
* causing the bootloader to wait for the final exit command before shutting down. * causing the bootloader to wait for the final exit command before shutting down.
*/ */
bool WaitForExit = false; static bool WaitForExit = false;
/** Current DFU state machine state, one of the values in the DFU_State_t enum. */ /** Current DFU state machine state, one of the values in the DFU_State_t enum. */
uint8_t DFU_State = dfuIDLE; static uint8_t DFU_State = dfuIDLE;
/** Status code of the last executed DFU command. This is set to one of the values in the DFU_Status_t enum after /** Status code of the last executed DFU command. This is set to one of the values in the DFU_Status_t enum after
* each operation, and returned to the host when a Get Status DFU request is issued. * each operation, and returned to the host when a Get Status DFU request is issued.
*/ */
uint8_t DFU_Status = OK; static uint8_t DFU_Status = OK;
/** Data containing the DFU command sent from the host. */ /** Data containing the DFU command sent from the host. */
DFU_Command_t SentCommand; static DFU_Command_t SentCommand;
/** Response to the last issued Read Data DFU command. Unlike other DFU commands, the read command /** Response to the last issued Read Data DFU command. Unlike other DFU commands, the read command
* requires a single byte response from the bootloader containing the read data when the next DFU_UPLOAD command * requires a single byte response from the bootloader containing the read data when the next DFU_UPLOAD command
* is issued by the host. * is issued by the host.
*/ */
uint8_t ResponseByte; static uint8_t ResponseByte;
/** Pointer to the start of the user application. By default this is 0x0000 (the reset vector), however the host /** Pointer to the start of the user application. By default this is 0x0000 (the reset vector), however the host
* may specify an alternate address when issuing the application soft-start command. * may specify an alternate address when issuing the application soft-start command.
*/ */
AppPtr_t AppStartPtr = (AppPtr_t)0x0000; static AppPtr_t AppStartPtr = (AppPtr_t)0x0000;
/** 64-bit flash page number. This is concatenated with the current 16-bit address on USB AVRs containing more than /** 64-bit flash page number. This is concatenated with the current 16-bit address on USB AVRs containing more than
* 64KB of flash memory. * 64KB of flash memory.
*/ */
uint8_t Flash64KBPage = 0; static uint8_t Flash64KBPage = 0;
/** Memory start address, indicating the current address in the memory being addressed (either FLASH or EEPROM /** Memory start address, indicating the current address in the memory being addressed (either FLASH or EEPROM
* depending on the issued command from the host). * depending on the issued command from the host).
*/ */
uint16_t StartAddr = 0x0000; static uint16_t StartAddr = 0x0000;
/** Memory end address, indicating the end address to read to/write from in the memory being addressed (either FLASH /** Memory end address, indicating the end address to read to/write from in the memory being addressed (either FLASH
* of EEPROM depending on the issued command from the host). * of EEPROM depending on the issued command from the host).
*/ */
uint16_t EndAddr = 0x0000; static uint16_t EndAddr = 0x0000;
/** Main program entry point. This routine configures the hardware required by the bootloader, then continuously /** Main program entry point. This routine configures the hardware required by the bootloader, then continuously
@ -180,7 +180,7 @@ void EVENT_USB_Device_ControlRequest(void)
switch (USB_ControlRequest.bRequest) switch (USB_ControlRequest.bRequest)
{ {
case REQ_DFU_DNLOAD: case DFU_REQ_DNLOAD:
Endpoint_ClearSETUP(); Endpoint_ClearSETUP();
/* Check if bootloader is waiting to terminate */ /* Check if bootloader is waiting to terminate */
@ -333,7 +333,7 @@ void EVENT_USB_Device_ControlRequest(void)
Endpoint_ClearStatusStage(); Endpoint_ClearStatusStage();
break; break;
case REQ_DFU_UPLOAD: case DFU_REQ_UPLOAD:
Endpoint_ClearSETUP(); Endpoint_ClearSETUP();
while (!(Endpoint_IsINReady())) while (!(Endpoint_IsINReady()))
@ -432,7 +432,7 @@ void EVENT_USB_Device_ControlRequest(void)
Endpoint_ClearStatusStage(); Endpoint_ClearStatusStage();
break; break;
case REQ_DFU_GETSTATUS: case DFU_REQ_GETSTATUS:
Endpoint_ClearSETUP(); Endpoint_ClearSETUP();
/* Write 8-bit status value */ /* Write 8-bit status value */
@ -452,7 +452,7 @@ void EVENT_USB_Device_ControlRequest(void)
Endpoint_ClearStatusStage(); Endpoint_ClearStatusStage();
break; break;
case REQ_DFU_CLRSTATUS: case DFU_REQ_CLRSTATUS:
Endpoint_ClearSETUP(); Endpoint_ClearSETUP();
/* Reset the status value variable to the default OK status */ /* Reset the status value variable to the default OK status */
@ -460,7 +460,7 @@ void EVENT_USB_Device_ControlRequest(void)
Endpoint_ClearStatusStage(); Endpoint_ClearStatusStage();
break; break;
case REQ_DFU_GETSTATE: case DFU_REQ_GETSTATE:
Endpoint_ClearSETUP(); Endpoint_ClearSETUP();
/* Write the current device state to the endpoint */ /* Write the current device state to the endpoint */
@ -470,7 +470,7 @@ void EVENT_USB_Device_ControlRequest(void)
Endpoint_ClearStatusStage(); Endpoint_ClearStatusStage();
break; break;
case REQ_DFU_ABORT: case DFU_REQ_ABORT:
Endpoint_ClearSETUP(); Endpoint_ClearSETUP();
/* Reset the current state variable to the default idle state */ /* Reset the current state variable to the default idle state */

@ -103,25 +103,25 @@
#define DFU_FILLER_BYTES_SIZE 26 #define DFU_FILLER_BYTES_SIZE 26
/** DFU class command request to detach from the host. */ /** DFU class command request to detach from the host. */
#define REQ_DFU_DETATCH 0x00 #define DFU_REQ_DETATCH 0x00
/** DFU class command request to send data from the host to the bootloader. */ /** DFU class command request to send data from the host to the bootloader. */
#define REQ_DFU_DNLOAD 0x01 #define DFU_REQ_DNLOAD 0x01
/** DFU class command request to send data from the bootloader to the host. */ /** DFU class command request to send data from the bootloader to the host. */
#define REQ_DFU_UPLOAD 0x02 #define DFU_REQ_UPLOAD 0x02
/** DFU class command request to get the current DFU status and state from the bootloader. */ /** DFU class command request to get the current DFU status and state from the bootloader. */
#define REQ_DFU_GETSTATUS 0x03 #define DFU_REQ_GETSTATUS 0x03
/** DFU class command request to reset the current DFU status and state variables to their defaults. */ /** DFU class command request to reset the current DFU status and state variables to their defaults. */
#define REQ_DFU_CLRSTATUS 0x04 #define DFU_REQ_CLRSTATUS 0x04
/** DFU class command request to get the current DFU state of the bootloader. */ /** DFU class command request to get the current DFU state of the bootloader. */
#define REQ_DFU_GETSTATE 0x05 #define DFU_REQ_GETSTATE 0x05
/** DFU class command request to abort the current multi-request transfer and return to the dfuIDLE state. */ /** DFU class command request to abort the current multi-request transfer and return to the dfuIDLE state. */
#define REQ_DFU_ABORT 0x06 #define DFU_REQ_ABORT 0x06
/** DFU command to begin programming the device's memory. */ /** DFU command to begin programming the device's memory. */
#define COMMAND_PROG_START 0x01 #define COMMAND_PROG_START 0x01

@ -39,7 +39,7 @@
* via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application * via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application
* started via a forced watchdog reset. * started via a forced watchdog reset.
*/ */
bool RunBootloader = true; static bool RunBootloader = true;
/** Main program entry point. This routine configures the hardware required by the bootloader, then continuously /** Main program entry point. This routine configures the hardware required by the bootloader, then continuously
* runs the bootloader processing routine until instructed to soft-exit. * runs the bootloader processing routine until instructed to soft-exit.
@ -127,7 +127,7 @@ void EVENT_USB_Device_ControlRequest(void)
boot_spm_busy_wait(); boot_spm_busy_wait();
/* Write each of the FLASH page's bytes in sequence */ /* Write each of the FLASH page's bytes in sequence */
for (uint16_t PageByte = 0; PageByte < SPM_PAGESIZE; PageByte += 2) for (uint8_t PageWord = 0; PageWord < (SPM_PAGESIZE / 2); PageWord++)
{ {
/* Check if endpoint is empty - if so clear it and wait until ready for next packet */ /* Check if endpoint is empty - if so clear it and wait until ready for next packet */
if (!(Endpoint_BytesInEndpoint())) if (!(Endpoint_BytesInEndpoint()))
@ -137,7 +137,7 @@ void EVENT_USB_Device_ControlRequest(void)
} }
/* Write the next data word to the FLASH page */ /* Write the next data word to the FLASH page */
boot_page_fill(PageAddress + PageByte, Endpoint_Read_Word_LE()); boot_page_fill(PageAddress + ((uint16_t)PageWord << 1), Endpoint_Read_Word_LE());
} }
/* Write the filled FLASH page to memory */ /* Write the filled FLASH page to memory */

@ -51,9 +51,10 @@
* from PJRC, used with permission. This bootloader is delibertely non-compatible with the properietary HalfKay * from PJRC, used with permission. This bootloader is delibertely non-compatible with the properietary HalfKay
* bootloader GUI; only the command line interface software accompanying this bootloader will work with it. * bootloader GUI; only the command line interface software accompanying this bootloader will work with it.
* *
* Out of the box this bootloader builds for the USB1287, and will fit into 4KB of bootloader space. If * Out of the box this bootloader builds for the USB1287, and will fit into 2KB of bootloader space for the
* you wish to enlarge this space and/or change the AVR model, you will need to edit the BOOT_START and MCU * Series 2 USB AVRs (ATMEGAxxU2, AT90USBxx2) or 4KB of bootloader space for all other models. If you wish to
* values in the accompanying makefile. * enlarge this space and/or change the AVR model, you will need to edit the BOOT_START and MCU values in the
* accompanying makefile.
* *
* \section SSec_Options Project Options * \section SSec_Options Project Options
* *

@ -43,12 +43,12 @@
* the device will send, and what it may be sent back from the host. Refer to the HID specification for * the device will send, and what it may be sent back from the host. Refer to the HID specification for
* more details on HID report descriptors. * more details on HID report descriptors.
*/ */
USB_Descriptor_HIDReport_Datatype_t HIDReport[] = const USB_Descriptor_HIDReport_Datatype_t HIDReport[] =
{ {
HID_RI_USAGE_PAGE(16, 0xFF00), /* Vendor Page 1 */ HID_RI_USAGE_PAGE(16, 0xFFDC), /* Vendor Page 0xDC */
HID_RI_USAGE(8, 0x01), /* Vendor Usage 1 */ HID_RI_USAGE(8, 0xFB), /* Vendor Usage 0xFB */
HID_RI_COLLECTION(8, 0x01), /* Vendor Usage 1 */ HID_RI_COLLECTION(8, 0x01), /* Vendor Usage 1 */
HID_RI_USAGE(8, 0x03), /* Vendor Usage 3 */ HID_RI_USAGE(8, 0x02), /* Vendor Usage 2 */
HID_RI_LOGICAL_MINIMUM(8, 0x00), HID_RI_LOGICAL_MINIMUM(8, 0x00),
HID_RI_LOGICAL_MAXIMUM(8, 0xFF), HID_RI_LOGICAL_MAXIMUM(8, 0xFF),
HID_RI_REPORT_SIZE(8, 0x08), HID_RI_REPORT_SIZE(8, 0x08),
@ -62,7 +62,7 @@ USB_Descriptor_HIDReport_Datatype_t HIDReport[] =
* number of device configurations. The descriptor is read out by the USB host when the enumeration * number of device configurations. The descriptor is read out by the USB host when the enumeration
* process begins. * process begins.
*/ */
USB_Descriptor_Device_t DeviceDescriptor = const USB_Descriptor_Device_t DeviceDescriptor =
{ {
.Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
@ -89,7 +89,7 @@ USB_Descriptor_Device_t DeviceDescriptor =
* and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
* a configuration so that the host may correctly communicate with the USB device. * a configuration so that the host may correctly communicate with the USB device.
*/ */
USB_Descriptor_Configuration_t ConfigurationDescriptor = const USB_Descriptor_Configuration_t ConfigurationDescriptor =
{ {
.Config = .Config =
{ {
@ -159,27 +159,17 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
const void* Address = NULL; const void* Address = NULL;
uint16_t Size = NO_DESCRIPTOR; uint16_t Size = NO_DESCRIPTOR;
/* If/Else If chain compiles slightly smaller than a switch case */
if (DescriptorType == DTYPE_Device) if (DescriptorType == DTYPE_Device)
{
Address = &DeviceDescriptor; Address = &DeviceDescriptor;
Size = sizeof(USB_Descriptor_Device_t);
}
else if (DescriptorType == DTYPE_Configuration) else if (DescriptorType == DTYPE_Configuration)
{
Address = &ConfigurationDescriptor; Address = &ConfigurationDescriptor;
Size = sizeof(USB_Descriptor_Configuration_t);
}
else if (DescriptorType == HID_DTYPE_HID) else if (DescriptorType == HID_DTYPE_HID)
{
Address = &ConfigurationDescriptor.HID_VendorHID; Address = &ConfigurationDescriptor.HID_VendorHID;
Size = sizeof(USB_HID_Descriptor_HID_t);
}
else else
{
Address = &HIDReport; Address = &HIDReport;
Size = sizeof(HIDReport);
} if (Address != NULL)
Size = (Address == &HIDReport) ? sizeof(HIDReport) : ((USB_Descriptor_Header_t*)Address)->Size;
*DescriptorAddress = Address; *DescriptorAddress = Address;
return Size; return Size;

@ -91,7 +91,7 @@ F_CLOCK = $(F_CPU)
# Note that the bootloader size and start address given in AVRStudio is in words and not # Note that the bootloader size and start address given in AVRStudio is in words and not
# bytes, and so will need to be doubled to obtain the byte address needed by AVR-GCC. # bytes, and so will need to be doubled to obtain the byte address needed by AVR-GCC.
FLASH_SIZE_KB = 128 FLASH_SIZE_KB = 128
BOOT_SECTION_SIZE_KB = 2 BOOT_SECTION_SIZE_KB = 4
BOOT_START = 0x$(shell echo "obase=16; ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024" | bc) BOOT_START = 0x$(shell echo "obase=16; ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024" | bc)
@ -124,6 +124,7 @@ LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENAB
LUFA_OPTS += -D NO_INTERNAL_SERIAL LUFA_OPTS += -D NO_INTERNAL_SERIAL
LUFA_OPTS += -D NO_DEVICE_SELF_POWER LUFA_OPTS += -D NO_DEVICE_SELF_POWER
LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP
LUFA_OPTS += -D NO_SOF_EVENTS
# Create the LUFA source path variables by including the LUFA root makefile # Create the LUFA source path variables by including the LUFA root makefile

@ -51,6 +51,7 @@ USB_ClassInfo_Audio_Device_t Microphone_Audio_Interface =
}, },
}; };
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
*/ */

@ -51,6 +51,7 @@ USB_ClassInfo_Audio_Device_t Speaker_Audio_Interface =
}, },
}; };
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
*/ */

@ -86,6 +86,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial2_CDC_Interface =
}, },
}; };
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
*/ */

@ -37,10 +37,10 @@
#include "GenericHID.h" #include "GenericHID.h"
/** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */ /** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */
uint8_t PrevHIDReportBuffer[GENERIC_REPORT_SIZE]; static uint8_t PrevHIDReportBuffer[GENERIC_REPORT_SIZE];
/** Structure to contain reports from the host, so that they can be echoed back upon request */ /** Structure to contain reports from the host, so that they can be echoed back upon request */
struct static struct
{ {
uint8_t ReportID; uint8_t ReportID;
uint16_t ReportSize; uint16_t ReportSize;
@ -66,6 +66,7 @@ USB_ClassInfo_HID_Device_t Generic_HID_Interface =
}, },
}; };
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
*/ */

@ -37,7 +37,7 @@
#include "Joystick.h" #include "Joystick.h"
/** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */ /** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */
uint8_t PrevJoystickHIDReportBuffer[sizeof(USB_JoystickReport_Data_t)]; static uint8_t PrevJoystickHIDReportBuffer[sizeof(USB_JoystickReport_Data_t)];
/** LUFA HID Class driver interface configuration and state information. This structure is /** LUFA HID Class driver interface configuration and state information. This structure is
* passed to all HID Class driver functions, so that multiple instances of the same class * passed to all HID Class driver functions, so that multiple instances of the same class
@ -58,6 +58,7 @@ USB_ClassInfo_HID_Device_t Joystick_HID_Interface =
}, },
}; };
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
*/ */

@ -37,7 +37,7 @@
#include "Keyboard.h" #include "Keyboard.h"
/** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */ /** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */
uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)]; static uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)];
/** LUFA HID Class driver interface configuration and state information. This structure is /** LUFA HID Class driver interface configuration and state information. This structure is
* passed to all HID Class driver functions, so that multiple instances of the same class * passed to all HID Class driver functions, so that multiple instances of the same class
@ -58,6 +58,7 @@ USB_ClassInfo_HID_Device_t Keyboard_HID_Interface =
}, },
}; };
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
*/ */

@ -37,10 +37,10 @@
#include "KeyboardMouse.h" #include "KeyboardMouse.h"
/** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */ /** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */
uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)]; static uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)];
/** Buffer to hold the previously generated Mouse HID report, for comparison purposes inside the HID class driver. */ /** Buffer to hold the previously generated Mouse HID report, for comparison purposes inside the HID class driver. */
uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)]; static uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)];
/** LUFA HID Class driver interface configuration and state information. This structure is /** LUFA HID Class driver interface configuration and state information. This structure is
* passed to all HID Class driver functions, so that multiple instances of the same class * passed to all HID Class driver functions, so that multiple instances of the same class
@ -81,6 +81,7 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Interface =
}, },
}; };
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
*/ */

@ -37,7 +37,7 @@
#include "KeyboardMouseMultiReport.h" #include "KeyboardMouseMultiReport.h"
/** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */ /** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */
uint8_t PrevHIDReportBuffer[MAX(sizeof(USB_KeyboardReport_Data_t), sizeof(USB_MouseReport_Data_t))]; static uint8_t PrevHIDReportBuffer[MAX(sizeof(USB_KeyboardReport_Data_t), sizeof(USB_MouseReport_Data_t))];
/** LUFA HID Class driver interface configuration and state information. This structure is /** LUFA HID Class driver interface configuration and state information. This structure is
* passed to all HID Class driver functions, so that multiple instances of the same class * passed to all HID Class driver functions, so that multiple instances of the same class
@ -58,6 +58,7 @@ USB_ClassInfo_HID_Device_t Device_HID_Interface =
}, },
}; };
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
*/ */

@ -56,6 +56,7 @@ USB_ClassInfo_MIDI_Device_t Keyboard_MIDI_Interface =
}, },
}; };
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
*/ */

@ -41,7 +41,7 @@
/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's /** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's
* features and capabilities. * features and capabilities.
*/ */
SCSI_Inquiry_Response_t InquiryData = static const SCSI_Inquiry_Response_t InquiryData =
{ {
.DeviceType = DEVICE_TYPE_BLOCK, .DeviceType = DEVICE_TYPE_BLOCK,
.PeripheralQualifier = 0, .PeripheralQualifier = 0,
@ -73,7 +73,7 @@ SCSI_Inquiry_Response_t InquiryData =
/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE /** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE
* command is issued. This gives information on exactly why the last command failed to complete. * command is issued. This gives information on exactly why the last command failed to complete.
*/ */
SCSI_Request_Sense_Response_t SenseData = static SCSI_Request_Sense_Response_t SenseData =
{ {
.ResponseCode = 0x70, .ResponseCode = 0x70,
.AdditionalLength = 0x0A, .AdditionalLength = 0x0A,

@ -58,6 +58,7 @@ USB_ClassInfo_MS_Device_t Disk_MS_Interface =
}, },
}; };
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
*/ */

@ -41,7 +41,7 @@
/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's /** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's
* features and capabilities. * features and capabilities.
*/ */
SCSI_Inquiry_Response_t InquiryData = static const SCSI_Inquiry_Response_t InquiryData =
{ {
.DeviceType = DEVICE_TYPE_BLOCK, .DeviceType = DEVICE_TYPE_BLOCK,
.PeripheralQualifier = 0, .PeripheralQualifier = 0,
@ -73,7 +73,7 @@ SCSI_Inquiry_Response_t InquiryData =
/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE /** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE
* command is issued. This gives information on exactly why the last command failed to complete. * command is issued. This gives information on exactly why the last command failed to complete.
*/ */
SCSI_Request_Sense_Response_t SenseData = static SCSI_Request_Sense_Response_t SenseData =
{ {
.ResponseCode = 0x70, .ResponseCode = 0x70,
.AdditionalLength = 0x0A, .AdditionalLength = 0x0A,

@ -60,7 +60,7 @@ USB_ClassInfo_MS_Device_t Disk_MS_Interface =
}; };
/** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */ /** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */
uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)]; static uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)];
/** LUFA HID Class driver interface configuration and state information. This structure is /** LUFA HID Class driver interface configuration and state information. This structure is
* passed to all HID Class driver functions, so that multiple instances of the same class * passed to all HID Class driver functions, so that multiple instances of the same class

@ -37,7 +37,7 @@
#include "Mouse.h" #include "Mouse.h"
/** Buffer to hold the previously generated Mouse HID report, for comparison purposes inside the HID class driver. */ /** Buffer to hold the previously generated Mouse HID report, for comparison purposes inside the HID class driver. */
uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)]; static uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)];
/** LUFA HID Class driver interface configuration and state information. This structure is /** LUFA HID Class driver interface configuration and state information. This structure is
* passed to all HID Class driver functions, so that multiple instances of the same class * passed to all HID Class driver functions, so that multiple instances of the same class
@ -58,6 +58,7 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Interface =
}, },
}; };
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
*/ */

@ -63,6 +63,7 @@ USB_ClassInfo_RNDIS_Device_t Ethernet_RNDIS_Interface =
}, },
}; };
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
*/ */

@ -65,6 +65,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
*/ */
static FILE USBSerialStream; static FILE USBSerialStream;
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
*/ */

@ -61,7 +61,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
}; };
/** Buffer to hold the previously generated Mouse HID report, for comparison purposes inside the HID class driver. */ /** Buffer to hold the previously generated Mouse HID report, for comparison purposes inside the HID class driver. */
uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)]; static uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)];
/** LUFA HID Class driver interface configuration and state information. This structure is /** LUFA HID Class driver interface configuration and state information. This structure is
* passed to all HID Class driver functions, so that multiple instances of the same class * passed to all HID Class driver functions, so that multiple instances of the same class
@ -82,6 +82,7 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Interface =
}, },
}; };
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
*/ */

@ -53,19 +53,19 @@ TMC_Capabilities_t Capabilities =
}; };
/** Current TMC control request that is being processed */ /** Current TMC control request that is being processed */
uint8_t RequestInProgress = 0; static uint8_t RequestInProgress = 0;
/** Stream callback abort flag for bulk IN data */ /** Stream callback abort flag for bulk IN data */
bool IsTMCBulkINReset = false; static bool IsTMCBulkINReset = false;
/** Stream callback abort flag for bulk OUT data */ /** Stream callback abort flag for bulk OUT data */
bool IsTMCBulkOUTReset = false; static bool IsTMCBulkOUTReset = false;
/** Last used tag value for data transfers */ /** Last used tag value for data transfers */
uint8_t CurrentTransferTag = 0; static uint8_t CurrentTransferTag = 0;
/** Length of last data transfer, for reporting to the host in case an in-progress transfer is aborted */ /** Length of last data transfer, for reporting to the host in case an in-progress transfer is aborted */
uint32_t LastTransferLength = 0; static uint32_t LastTransferLength = 0;
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.

@ -37,7 +37,8 @@
#include "AudioInput.h" #include "AudioInput.h"
/** Flag to indicate if the streaming audio alternative interface has been selected by the host. */ /** Flag to indicate if the streaming audio alternative interface has been selected by the host. */
bool StreamingAudioInterfaceSelected = false; static bool StreamingAudioInterfaceSelected = false;
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.

@ -37,7 +37,8 @@
#include "AudioOutput.h" #include "AudioOutput.h"
/** Flag to indicate if the streaming audio alternative interface has been selected by the host. */ /** Flag to indicate if the streaming audio alternative interface has been selected by the host. */
bool StreamingAudioInterfaceSelected = false; static bool StreamingAudioInterfaceSelected = false;
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.

@ -44,7 +44,7 @@
* It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical * It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical
* serial link characteristics and instead sends and receives data in endpoint streams. * serial link characteristics and instead sends and receives data in endpoint streams.
*/ */
CDC_LineEncoding_t LineEncoding1 = { .BaudRateBPS = 0, static CDC_LineEncoding_t LineEncoding1 = { .BaudRateBPS = 0,
.CharFormat = CDC_LINEENCODING_OneStopBit, .CharFormat = CDC_LINEENCODING_OneStopBit,
.ParityType = CDC_PARITY_None, .ParityType = CDC_PARITY_None,
.DataBits = 8 }; .DataBits = 8 };
@ -57,7 +57,7 @@ CDC_LineEncoding_t LineEncoding1 = { .BaudRateBPS = 0,
* It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical * It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical
* serial link characteristics and instead sends and receives data in endpoint streams. * serial link characteristics and instead sends and receives data in endpoint streams.
*/ */
CDC_LineEncoding_t LineEncoding2 = { .BaudRateBPS = 0, static CDC_LineEncoding_t LineEncoding2 = { .BaudRateBPS = 0,
.CharFormat = CDC_LINEENCODING_OneStopBit, .CharFormat = CDC_LINEENCODING_OneStopBit,
.ParityType = CDC_PARITY_None, .ParityType = CDC_PARITY_None,
.DataBits = 8 }; .DataBits = 8 };

@ -40,18 +40,18 @@
/** Indicates what report mode the host has requested, true for normal HID reporting mode, false for special boot /** Indicates what report mode the host has requested, true for normal HID reporting mode, false for special boot
* protocol reporting mode. * protocol reporting mode.
*/ */
bool UsingReportProtocol = true; static bool UsingReportProtocol = true;
/** Current Idle period. This is set by the host via a Set Idle HID class request to silence the device's reports /** Current Idle period. This is set by the host via a Set Idle HID class request to silence the device's reports
* for either the entire idle duration, or until the report status changes (e.g. the user presses a key). * for either the entire idle duration, or until the report status changes (e.g. the user presses a key).
*/ */
uint16_t IdleCount = 500; static uint16_t IdleCount = 500;
/** Current Idle period remaining. When the IdleCount value is set, this tracks the remaining number of idle /** Current Idle period remaining. When the IdleCount value is set, this tracks the remaining number of idle
* milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request * milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request
* the current idle period via a Get Idle HID class request, thus its value must be preserved. * the current idle period via a Get Idle HID class request, thus its value must be preserved.
*/ */
uint16_t IdleMSRemaining = 0; static uint16_t IdleMSRemaining = 0;
/** Main program entry point. This routine configures the hardware required by the application, then /** Main program entry point. This routine configures the hardware required by the application, then

@ -38,10 +38,10 @@
#include "KeyboardMouse.h" #include "KeyboardMouse.h"
/** Global structure to hold the current keyboard interface HID report, for transmission to the host */ /** Global structure to hold the current keyboard interface HID report, for transmission to the host */
USB_KeyboardReport_Data_t KeyboardReportData; static USB_KeyboardReport_Data_t KeyboardReportData;
/** Global structure to hold the current mouse interface HID report, for transmission to the host */ /** Global structure to hold the current mouse interface HID report, for transmission to the host */
USB_MouseReport_Data_t MouseReportData; static USB_MouseReport_Data_t MouseReportData;
/** Main program entry point. This routine configures the hardware required by the application, then /** Main program entry point. This routine configures the hardware required by the application, then

@ -41,7 +41,7 @@
/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's /** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's
* features and capabilities. * features and capabilities.
*/ */
SCSI_Inquiry_Response_t InquiryData = static const SCSI_Inquiry_Response_t InquiryData =
{ {
.DeviceType = DEVICE_TYPE_BLOCK, .DeviceType = DEVICE_TYPE_BLOCK,
.PeripheralQualifier = 0, .PeripheralQualifier = 0,
@ -73,7 +73,7 @@ SCSI_Inquiry_Response_t InquiryData =
/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE /** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE
* command is issued. This gives information on exactly why the last command failed to complete. * command is issued. This gives information on exactly why the last command failed to complete.
*/ */
SCSI_Request_Sense_Response_t SenseData = static SCSI_Request_Sense_Response_t SenseData =
{ {
.ResponseCode = 0x70, .ResponseCode = 0x70,
.AdditionalLength = 0x0A, .AdditionalLength = 0x0A,

@ -39,18 +39,18 @@
/** Indicates what report mode the host has requested, true for normal HID reporting mode, false for special boot /** Indicates what report mode the host has requested, true for normal HID reporting mode, false for special boot
* protocol reporting mode. * protocol reporting mode.
*/ */
bool UsingReportProtocol = true; static bool UsingReportProtocol = true;
/** Current Idle period. This is set by the host via a Set Idle HID class request to silence the device's reports /** Current Idle period. This is set by the host via a Set Idle HID class request to silence the device's reports
* for either the entire idle duration, or until the report status changes (e.g. the user moves the mouse). * for either the entire idle duration, or until the report status changes (e.g. the user moves the mouse).
*/ */
uint16_t IdleCount = 0; static uint16_t IdleCount = 0;
/** Current Idle period remaining. When the IdleCount value is set, this tracks the remaining number of idle /** Current Idle period remaining. When the IdleCount value is set, this tracks the remaining number of idle
* milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request * milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request
* the current idle period via a Get Idle HID class request, thus its value must be preserved. * the current idle period via a Get Idle HID class request, thus its value must be preserved.
*/ */
uint16_t IdleMSRemaining = 0; static uint16_t IdleMSRemaining = 0;
/** Main program entry point. This routine configures the hardware required by the application, then /** Main program entry point. This routine configures the hardware required by the application, then

@ -44,11 +44,12 @@
* It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical * It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical
* serial link characteristics and instead sends and receives data in endpoint streams. * serial link characteristics and instead sends and receives data in endpoint streams.
*/ */
CDC_LineEncoding_t LineEncoding = { .BaudRateBPS = 0, static CDC_LineEncoding_t LineEncoding = { .BaudRateBPS = 0,
.CharFormat = CDC_LINEENCODING_OneStopBit, .CharFormat = CDC_LINEENCODING_OneStopBit,
.ParityType = CDC_PARITY_None, .ParityType = CDC_PARITY_None,
.DataBits = 8 }; .DataBits = 8 };
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
*/ */

@ -37,7 +37,7 @@
#include "DeviceFunctions.h" #include "DeviceFunctions.h"
/** Buffer to hold the previously generated Mouse Device HID report, for comparison purposes inside the HID class driver. */ /** Buffer to hold the previously generated Mouse Device HID report, for comparison purposes inside the HID class driver. */
uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)]; static uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)];
/** LUFA HID Class driver interface configuration and state information. This structure is /** LUFA HID Class driver interface configuration and state information. This structure is
* passed to all HID Class driver functions, so that multiple instances of the same class * passed to all HID Class driver functions, so that multiple instances of the same class

@ -37,7 +37,7 @@
#include "JoystickHostWithParser.h" #include "JoystickHostWithParser.h"
/** Processed HID report descriptor items structure, containing information on each HID report element */ /** Processed HID report descriptor items structure, containing information on each HID report element */
HID_ReportInfo_t HIDReportInfo; static HID_ReportInfo_t HIDReportInfo;
/** LUFA HID Class driver interface configuration and state information. This structure is /** LUFA HID Class driver interface configuration and state information. This structure is
* passed to all HID Class driver functions, so that multiple instances of the same class * passed to all HID Class driver functions, so that multiple instances of the same class

@ -37,7 +37,7 @@
#include "KeyboardHostWithParser.h" #include "KeyboardHostWithParser.h"
/** Processed HID report descriptor items structure, containing information on each HID report element */ /** Processed HID report descriptor items structure, containing information on each HID report element */
HID_ReportInfo_t HIDReportInfo; static HID_ReportInfo_t HIDReportInfo;
/** LUFA HID Class driver interface configuration and state information. This structure is /** LUFA HID Class driver interface configuration and state information. This structure is
* passed to all HID Class driver functions, so that multiple instances of the same class * passed to all HID Class driver functions, so that multiple instances of the same class

@ -37,7 +37,7 @@
#include "MouseHostWithParser.h" #include "MouseHostWithParser.h"
/** Processed HID report descriptor items structure, containing information on each HID report element */ /** Processed HID report descriptor items structure, containing information on each HID report element */
HID_ReportInfo_t HIDReportInfo; static HID_ReportInfo_t HIDReportInfo;
/** LUFA HID Class driver interface configuration and state information. This structure is /** LUFA HID Class driver interface configuration and state information. This structure is
* passed to all HID Class driver functions, so that multiple instances of the same class * passed to all HID Class driver functions, so that multiple instances of the same class

@ -52,6 +52,7 @@ USB_ClassInfo_PRNT_Host_t Printer_PRNT_Interface =
}, },
}; };
/** Main program entry point. This routine configures the hardware required by the application, then /** Main program entry point. This routine configures the hardware required by the application, then
* enters a loop to run the application tasks in sequence. * enters a loop to run the application tasks in sequence.
*/ */

@ -37,7 +37,7 @@
#include "RNDISEthernetHost.h" #include "RNDISEthernetHost.h"
/** Buffer to hold incoming and outgoing Ethernet packets. */ /** Buffer to hold incoming and outgoing Ethernet packets. */
uint8_t PacketBuffer[1024]; static int8_t PacketBuffer[1024];
/** LUFA RNDIS Class driver interface configuration and state information. This structure is /** LUFA RNDIS Class driver interface configuration and state information. This structure is
* passed to all RNDIS Class driver functions, so that multiple instances of the same class * passed to all RNDIS Class driver functions, so that multiple instances of the same class
@ -60,6 +60,7 @@ USB_ClassInfo_RNDIS_Host_t Ethernet_RNDIS_Interface =
}, },
}; };
/** Main program entry point. This routine configures the hardware required by the application, then /** Main program entry point. This routine configures the hardware required by the application, then
* enters a loop to run the application tasks in sequence. * enters a loop to run the application tasks in sequence.
*/ */

@ -55,6 +55,7 @@ USB_ClassInfo_SI_Host_t DigitalCamera_SI_Interface =
}, },
}; };
/** Main program entry point. This routine configures the hardware required by the application, then /** Main program entry point. This routine configures the hardware required by the application, then
* enters a loop to run the application tasks in sequence. * enters a loop to run the application tasks in sequence.
*/ */

@ -55,6 +55,7 @@ USB_ClassInfo_CDC_Host_t VirtualSerial_CDC_Interface =
}, },
}; };
/** Main program entry point. This routine configures the hardware required by the application, then /** Main program entry point. This routine configures the hardware required by the application, then
* enters a loop to run the application tasks in sequence. * enters a loop to run the application tasks in sequence.
*/ */

@ -123,10 +123,10 @@ static void USB_Device_SetAddress(void)
while (!(Endpoint_IsINReady())); while (!(Endpoint_IsINReady()));
USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default;
USB_Device_SetDeviceAddress(DeviceAddress); USB_Device_SetDeviceAddress(DeviceAddress);
} }
USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default;
} }
static void USB_Device_SetConfiguration(void) static void USB_Device_SetConfiguration(void)

@ -108,10 +108,10 @@ static uint16_t TimerCompareFromSCKDuration[] PROGMEM =
bool HardwareSPIMode = true; bool HardwareSPIMode = true;
/** Software SPI data register for sending and receiving */ /** Software SPI data register for sending and receiving */
volatile uint8_t SoftSPI_Data; static volatile uint8_t SoftSPI_Data;
/** Number of bits left to transfer in the software SPI driver */ /** Number of bits left to transfer in the software SPI driver */
volatile uint8_t SoftSPI_BitsRemaining; static volatile uint8_t SoftSPI_BitsRemaining;
/** ISR to handle software SPI transmission and reception */ /** ISR to handle software SPI transmission and reception */

@ -37,7 +37,7 @@
#include "V2ProtocolParams.h" #include "V2ProtocolParams.h"
/* Non-Volatile Parameter Values for EEPROM storage */ /* Non-Volatile Parameter Values for EEPROM storage */
uint8_t EEMEM EEPROM_Rest_Polarity = 0x00; static uint8_t EEMEM EEPROM_Rest_Polarity = 0x00;
/* Volatile Parameter Values for RAM storage */ /* Volatile Parameter Values for RAM storage */
static ParameterItem_t ParameterTable[] = static ParameterItem_t ParameterTable[] =

@ -37,10 +37,10 @@
#include "Benito.h" #include "Benito.h"
/** Circular buffer to hold data from the serial port before it is sent to the host. */ /** Circular buffer to hold data from the serial port before it is sent to the host. */
RingBuffer_t USARTtoUSB_Buffer; static RingBuffer_t USARTtoUSB_Buffer;
/** Underlying data buffer for \ref USARTtoUSB_Buffer, where the stored bytes are located. */ /** Underlying data buffer for \ref USARTtoUSB_Buffer, where the stored bytes are located. */
uint8_t USARTtoUSB_Buffer_Data[128]; static uint8_t USARTtoUSB_Buffer_Data[128];
/** Pulse generation counters to keep track of the number of milliseconds remaining for each pulse type */ /** Pulse generation counters to keep track of the number of milliseconds remaining for each pulse type */
volatile struct volatile struct

@ -53,6 +53,7 @@ USB_ClassInfo_MS_Device_t DiskDevice_MS_Interface =
}, },
}; };
void DiskDevice_USBTask(void) void DiskDevice_USBTask(void)
{ {
MS_Device_USBTask(&DiskDevice_MS_Interface); MS_Device_USBTask(&DiskDevice_MS_Interface);

@ -47,6 +47,7 @@ USB_ClassInfo_MS_Host_t DiskHost_MS_Interface =
}, },
}; };
void DiskHost_USBTask(void) void DiskHost_USBTask(void)
{ {
if (USB_HostState == HOST_STATE_Addressed) if (USB_HostState == HOST_STATE_Addressed)

@ -42,7 +42,7 @@
/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's /** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's
* features and capabilities. * features and capabilities.
*/ */
SCSI_Inquiry_Response_t InquiryData = static const SCSI_Inquiry_Response_t InquiryData =
{ {
.DeviceType = DEVICE_TYPE_BLOCK, .DeviceType = DEVICE_TYPE_BLOCK,
.PeripheralQualifier = 0, .PeripheralQualifier = 0,
@ -74,7 +74,7 @@ SCSI_Inquiry_Response_t InquiryData =
/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE /** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE
* command is issued. This gives information on exactly why the last command failed to complete. * command is issued. This gives information on exactly why the last command failed to complete.
*/ */
SCSI_Request_Sense_Response_t SenseData = static SCSI_Request_Sense_Response_t SenseData =
{ {
.ResponseCode = 0x70, .ResponseCode = 0x70,
.AdditionalLength = 0x0A, .AdditionalLength = 0x0A,

@ -43,6 +43,7 @@ FILE DiskStream = FDEV_SETUP_STREAM(NULL, Disk_getchar, _FDEV_SETUP_READ);
/** Petite FAT Fs structure to hold the internal state of the FAT driver for the Dataflash contents. */ /** Petite FAT Fs structure to hold the internal state of the FAT driver for the Dataflash contents. */
FATFS DiskFATState; FATFS DiskFATState;
/** Stream character fetching routine for the FAT driver so that characters from the currently open file can be /** Stream character fetching routine for the FAT driver so that characters from the currently open file can be
* read in sequence when applied to a stdio stream. * read in sequence when applied to a stdio stream.
*/ */

@ -57,7 +57,7 @@ USB_ClassInfo_MIDI_Device_t Keyboard_MIDI_Interface =
}; };
/** 8-bit 256 entry Sine Wave lookup table */ /** 8-bit 256 entry Sine Wave lookup table */
const uint8_t SineTable[256] = static const uint8_t SineTable[256] =
{ {
128, 131, 134, 137, 140, 143, 146, 149, 152, 156, 159, 162, 165, 168, 171, 174, 128, 131, 134, 137, 140, 143, 146, 149, 152, 156, 159, 162, 165, 168, 171, 174,
176, 179, 182, 185, 188, 191, 193, 196, 199, 201, 204, 206, 209, 211, 213, 216, 176, 179, 182, 185, 188, 191, 193, 196, 199, 201, 204, 206, 209, 211, 213, 216,
@ -78,7 +78,8 @@ const uint8_t SineTable[256] =
}; };
/** Array of structures describing each note being generated */ /** Array of structures describing each note being generated */
DDSNoteData NoteData[MAX_SIMULTANEOUS_NOTES]; static DDSNoteData NoteData[MAX_SIMULTANEOUS_NOTES];
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.

@ -40,13 +40,13 @@
/** Bit buffers to hold the read bits for each of the three magnetic card tracks before they are transmitted /** Bit buffers to hold the read bits for each of the three magnetic card tracks before they are transmitted
* to the host as keyboard presses. * to the host as keyboard presses.
*/ */
BitBuffer_t TrackDataBuffers[TOTAL_TRACKS]; static BitBuffer_t TrackDataBuffers[TOTAL_TRACKS];
/** Pointer to the current track buffer being sent to the host. */ /** Pointer to the current track buffer being sent to the host. */
BitBuffer_t* CurrentTrackBuffer = &TrackDataBuffers[TOTAL_TRACKS]; static BitBuffer_t* CurrentTrackBuffer = &TrackDataBuffers[TOTAL_TRACKS];
/** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */ /** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */
uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)]; static uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)];
/** LUFA HID Class driver interface configuration and state information. This structure is /** LUFA HID Class driver interface configuration and state information. This structure is
* passed to all HID Class driver functions, so that multiple instances of the same class * passed to all HID Class driver functions, so that multiple instances of the same class
@ -67,6 +67,7 @@ USB_ClassInfo_HID_Device_t Keyboard_HID_Interface =
}, },
}; };
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
*/ */

@ -46,46 +46,46 @@
#include "MissileLauncher.h" #include "MissileLauncher.h"
/** Launcher first init command report data sequence */ /** Launcher first init command report data sequence */
uint8_t CMD_INITA[8] = { 85, 83, 66, 67, 0, 0, 4, 0 }; static const uint8_t CMD_INITA[8] = { 85, 83, 66, 67, 0, 0, 4, 0 };
/** Launcher second init command report data sequence */ /** Launcher second init command report data sequence */
uint8_t CMD_INITB[8] = { 85, 83, 66, 67, 0, 64, 2, 0 }; static const uint8_t CMD_INITB[8] = { 85, 83, 66, 67, 0, 64, 2, 0 };
/** Launcher command report data sequence to stop all movement */ /** Launcher command report data sequence to stop all movement */
uint8_t CMD_STOP[8] = { 0, 0, 0, 0, 0, 0, 8, 8 }; static const uint8_t CMD_STOP[8] = { 0, 0, 0, 0, 0, 0, 8, 8 };
/** Launcher command report data sequence to move left */ /** Launcher command report data sequence to move left */
uint8_t CMD_LEFT[8] = { 0, 1, 0, 0, 0, 0, 8, 8 }; static const uint8_t CMD_LEFT[8] = { 0, 1, 0, 0, 0, 0, 8, 8 };
/** Launcher command report data sequence to move right */ /** Launcher command report data sequence to move right */
uint8_t CMD_RIGHT[8] = { 0, 0, 1, 0, 0, 0, 8, 8 }; static const uint8_t CMD_RIGHT[8] = { 0, 0, 1, 0, 0, 0, 8, 8 };
/** Launcher command report data sequence to move up */ /** Launcher command report data sequence to move up */
uint8_t CMD_UP[8] = { 0, 0, 0, 1, 0, 0, 8, 8 }; static const uint8_t CMD_UP[8] = { 0, 0, 0, 1, 0, 0, 8, 8 };
/** Launcher command report data sequence to move down */ /** Launcher command report data sequence to move down */
uint8_t CMD_DOWN[8] = { 0, 0, 0, 0, 1, 0, 8, 8 }; static const uint8_t CMD_DOWN[8] = { 0, 0, 0, 0, 1, 0, 8, 8 };
/** Launcher command report data sequence to move left and up */ /** Launcher command report data sequence to move left and up */
uint8_t CMD_LEFTUP[8] = { 0, 1, 0, 1, 0, 0, 8, 8 }; static const uint8_t CMD_LEFTUP[8] = { 0, 1, 0, 1, 0, 0, 8, 8 };
/** Launcher command report data sequence to move right and up */ /** Launcher command report data sequence to move right and up */
uint8_t CMD_RIGHTUP[8] = { 0, 0, 1, 1, 0, 0, 8, 8 }; static const uint8_t CMD_RIGHTUP[8] = { 0, 0, 1, 1, 0, 0, 8, 8 };
/** Launcher command report data sequence to move left and down */ /** Launcher command report data sequence to move left and down */
uint8_t CMD_LEFTDOWN[8] = { 0, 1, 0, 0, 1, 0, 8, 8 }; static const uint8_t CMD_LEFTDOWN[8] = { 0, 1, 0, 0, 1, 0, 8, 8 };
/** Launcher command report data sequence to move right and down */ /** Launcher command report data sequence to move right and down */
uint8_t CMD_RIGHTDOWN[8] = { 0, 0, 1, 0, 1, 0, 8, 8 }; static const uint8_t CMD_RIGHTDOWN[8] = { 0, 0, 1, 0, 1, 0, 8, 8 };
/** Launcher command report data sequence to fire a missile */ /** Launcher command report data sequence to fire a missile */
uint8_t CMD_FIRE[8] = { 0, 0, 0, 0, 0, 1, 8, 8 }; static const uint8_t CMD_FIRE[8] = { 0, 0, 0, 0, 0, 1, 8, 8 };
/** Last command sent to the launcher, to determine what new command (if any) must be sent */ /** Last command sent to the launcher, to determine what new command (if any) must be sent */
uint8_t* CmdState; static const uint8_t* CmdState;
/** Buffer to hold a command to send to the launcher */ /** Buffer to hold a command to send to the launcher */
uint8_t CmdBuffer[LAUNCHER_CMD_BUFFER_SIZE]; static uint8_t CmdBuffer[LAUNCHER_CMD_BUFFER_SIZE];
/** Main program entry point. This routine configures the hardware required by the application, then /** Main program entry point. This routine configures the hardware required by the application, then
@ -151,7 +151,7 @@ void Read_Joystick_Status(void)
* \param[in] Report Report data to send. * \param[in] Report Report data to send.
* \param[in] ReportSize Report length in bytes. * \param[in] ReportSize Report length in bytes.
*/ */
void Send_Command_Report(uint8_t* const Report, void Send_Command_Report(const uint8_t* const Report,
const uint16_t ReportSize) const uint16_t ReportSize)
{ {
memcpy(CmdBuffer, Report, 8); memcpy(CmdBuffer, Report, 8);
@ -162,7 +162,7 @@ void Send_Command_Report(uint8_t* const Report,
* *
* \param[in] Command One of the command constants. * \param[in] Command One of the command constants.
*/ */
void Send_Command(uint8_t* const Command) void Send_Command(const uint8_t* const Command)
{ {
if ((CmdState == CMD_STOP && Command != CMD_STOP) || if ((CmdState == CMD_STOP && Command != CMD_STOP) ||
(CmdState != CMD_STOP && Command == CMD_STOP)) (CmdState != CMD_STOP && Command == CMD_STOP))

@ -73,9 +73,9 @@
void SetupHardware(void); void SetupHardware(void);
void Read_Joystick_Status(void); void Read_Joystick_Status(void);
void Send_Command_Report(uint8_t* const Report, void Send_Command_Report(const uint8_t* const Report,
const uint16_t ReportSize); const uint16_t ReportSize);
void Send_Command(uint8_t* const Command); void Send_Command(const uint8_t* const Command);
void HID_Host_Task(void); void HID_Host_Task(void);

@ -41,7 +41,7 @@
/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's /** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's
* features and capabilities. * features and capabilities.
*/ */
SCSI_Inquiry_Response_t InquiryData = static const SCSI_Inquiry_Response_t InquiryData =
{ {
.DeviceType = DEVICE_TYPE_BLOCK, .DeviceType = DEVICE_TYPE_BLOCK,
.PeripheralQualifier = 0, .PeripheralQualifier = 0,
@ -73,7 +73,7 @@ SCSI_Inquiry_Response_t InquiryData =
/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE /** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE
* command is issued. This gives information on exactly why the last command failed to complete. * command is issued. This gives information on exactly why the last command failed to complete.
*/ */
SCSI_Request_Sense_Response_t SenseData = static SCSI_Request_Sense_Response_t SenseData =
{ {
.ResponseCode = 0x70, .ResponseCode = 0x70,
.AdditionalLength = 0x0A, .AdditionalLength = 0x0A,

@ -59,7 +59,7 @@ USB_ClassInfo_MS_Device_t Disk_MS_Interface =
}; };
/** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */ /** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */
uint8_t PrevHIDReportBuffer[GENERIC_REPORT_SIZE]; static uint8_t PrevHIDReportBuffer[GENERIC_REPORT_SIZE];
/** LUFA HID Class driver interface configuration and state information. This structure is /** LUFA HID Class driver interface configuration and state information. This structure is
* passed to all HID Class driver functions, so that multiple instances of the same class * passed to all HID Class driver functions, so that multiple instances of the same class
@ -81,19 +81,19 @@ USB_ClassInfo_HID_Device_t Generic_HID_Interface =
}; };
/** Non-volatile Logging Interval value in EEPROM, stored as a number of 500ms ticks */ /** Non-volatile Logging Interval value in EEPROM, stored as a number of 500ms ticks */
uint8_t EEMEM LoggingInterval500MS_EEPROM = DEFAULT_LOG_INTERVAL; static uint8_t EEMEM LoggingInterval500MS_EEPROM = DEFAULT_LOG_INTERVAL;
/** SRAM Logging Interval value fetched from EEPROM, stored as a number of 500ms ticks */ /** SRAM Logging Interval value fetched from EEPROM, stored as a number of 500ms ticks */
uint8_t LoggingInterval500MS_SRAM; static uint8_t LoggingInterval500MS_SRAM;
/** Total number of 500ms logging ticks elapsed since the last log value was recorded */ /** Total number of 500ms logging ticks elapsed since the last log value was recorded */
uint16_t CurrentLoggingTicks; static uint16_t CurrentLoggingTicks;
/** FAT Fs structure to hold the internal state of the FAT driver for the Dataflash contents. */ /** FAT Fs structure to hold the internal state of the FAT driver for the Dataflash contents. */
FATFS DiskFATState; static FATFS DiskFATState;
/** FAT Fs structure to hold a FAT file handle for the log data write destination. */ /** FAT Fs structure to hold a FAT file handle for the log data write destination. */
FIL TempLogFile; static FIL TempLogFile;
/** ISR to handle the 500ms ticks for sampling and data logging */ /** ISR to handle the 500ms ticks for sampling and data logging */

@ -37,17 +37,16 @@
#include "USBtoSerial.h" #include "USBtoSerial.h"
/** Circular buffer to hold data from the host before it is sent to the device via the serial port. */ /** Circular buffer to hold data from the host before it is sent to the device via the serial port. */
RingBuffer_t USBtoUSART_Buffer; static RingBuffer_t USBtoUSART_Buffer;
/** Underlying data buffer for \ref USBtoUSART_Buffer, where the stored bytes are located. */ /** Underlying data buffer for \ref USBtoUSART_Buffer, where the stored bytes are located. */
uint8_t USBtoUSART_Buffer_Data[128]; static uint8_t USBtoUSART_Buffer_Data[128];
/** Circular buffer to hold data from the serial port before it is sent to the host. */ /** Circular buffer to hold data from the serial port before it is sent to the host. */
RingBuffer_t USARTtoUSB_Buffer; static RingBuffer_t USARTtoUSB_Buffer;
/** Underlying data buffer for \ref USARTtoUSB_Buffer, where the stored bytes are located. */ /** Underlying data buffer for \ref USARTtoUSB_Buffer, where the stored bytes are located. */
uint8_t USARTtoUSB_Buffer_Data[128]; static uint8_t USARTtoUSB_Buffer_Data[128];
/** LUFA CDC Class driver interface configuration and state information. This structure is /** LUFA CDC Class driver interface configuration and state information. This structure is
* passed to all CDC Class driver functions, so that multiple instances of the same class * passed to all CDC Class driver functions, so that multiple instances of the same class
@ -73,6 +72,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
}, },
}; };
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
*/ */

@ -41,7 +41,7 @@
/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's /** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's
* features and capabilities. * features and capabilities.
*/ */
SCSI_Inquiry_Response_t InquiryData = static const SCSI_Inquiry_Response_t InquiryData =
{ {
.DeviceType = DEVICE_TYPE_BLOCK, .DeviceType = DEVICE_TYPE_BLOCK,
.PeripheralQualifier = 0, .PeripheralQualifier = 0,
@ -73,7 +73,7 @@ SCSI_Inquiry_Response_t InquiryData =
/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE /** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE
* command is issued. This gives information on exactly why the last command failed to complete. * command is issued. This gives information on exactly why the last command failed to complete.
*/ */
SCSI_Request_Sense_Response_t SenseData = static SCSI_Request_Sense_Response_t SenseData =
{ {
.ResponseCode = 0x70, .ResponseCode = 0x70,
.AdditionalLength = 0x0A, .AdditionalLength = 0x0A,

@ -38,17 +38,19 @@
#include "uIPManagement.h" #include "uIPManagement.h"
/** Connection timer, to retain the time elapsed since the last time the uIP connections were managed. */ /** Connection timer, to retain the time elapsed since the last time the uIP connections were managed. */
struct timer ConnectionTimer; static struct timer ConnectionTimer;
/** ARP timer, to retain the time elapsed since the ARP cache was last updated. */ /** ARP timer, to retain the time elapsed since the ARP cache was last updated. */
struct timer ARPTimer; static struct timer ARPTimer;
/** MAC address of the RNDIS device, when enumerated */ /** MAC address of the RNDIS device, when enumerated. */
struct uip_eth_addr MACAddress; struct uip_eth_addr MACAddress;
/** Indicates if an IP configuration has been set in the device. */
bool HaveIPConfiguration; bool HaveIPConfiguration;
/** Configures the uIP stack ready for network traffic. */
/** Configures the uIP stack ready for network traffic processing. */
void uIPManagement_Init(void) void uIPManagement_Init(void)
{ {
/* uIP Timing Initialization */ /* uIP Timing Initialization */

@ -51,6 +51,7 @@ static uint8_t RX_BitsRemaining;
/** Temporary data variable to hold the byte being received as it is shifted in */ /** Temporary data variable to hold the byte being received as it is shifted in */
static uint8_t RX_Data; static uint8_t RX_Data;
/** Initialises the software UART, ready for data transmission and reception into the global ring buffers. */ /** Initialises the software UART, ready for data transmission and reception into the global ring buffers. */
void SoftUART_Init(void) void SoftUART_Init(void)
{ {

@ -67,13 +67,13 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
RingBuffer_t USBtoUART_Buffer; RingBuffer_t USBtoUART_Buffer;
/** Underlying data buffer for \ref USBtoUART_Buffer, where the stored bytes are located. */ /** Underlying data buffer for \ref USBtoUART_Buffer, where the stored bytes are located. */
uint8_t USBtoUART_Buffer_Data[128]; static uint8_t USBtoUART_Buffer_Data[128];
/** Circular buffer to hold data from the serial port before it is sent to the host. */ /** Circular buffer to hold data from the serial port before it is sent to the host. */
RingBuffer_t UARTtoUSB_Buffer; RingBuffer_t UARTtoUSB_Buffer;
/** Underlying data buffer for \ref UARTtoUSB_Buffer, where the stored bytes are located. */ /** Underlying data buffer for \ref UARTtoUSB_Buffer, where the stored bytes are located. */
uint8_t UARTtoUSB_Buffer_Data[128]; static uint8_t UARTtoUSB_Buffer_Data[128];
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial

Loading…
Cancel
Save