Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Erik Strand
lufa
Commits
6c5c9212
Commit
6c5c9212
authored
Sep 20, 2009
by
Dean Camera
Browse files
Add KeyboardHost HID Host Class driver demo to the library.
parent
aa640330
Changes
8
Expand all
Hide whitespace changes
Inline
Side-by-side
Demos/Host/ClassDriver/KeyboardHost/Doxygen.conf
0 → 100644
View file @
6c5c9212
This diff is collapsed.
Click to expand it.
Demos/Host/ClassDriver/KeyboardHost/KeyboardHost.c
0 → 100644
View file @
6c5c9212
/*
LUFA Library
Copyright (C) Dean Camera, 2009.
dean [at] fourwalledcubicle [dot] com
www.fourwalledcubicle.com
*/
/*
Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)
Permission to use, copy, modify, and distribute this software
and its documentation for any purpose and without fee is hereby
granted, provided that the above copyright notice appear in all
copies and that both that the copyright notice and this
permission notice and warranty disclaimer appear in supporting
documentation, and that the name of the author not be used in
advertising or publicity pertaining to distribution of the
software without specific, written prior permission.
The author disclaim all warranties with regard to this
software, including all implied warranties of merchantability
and fitness. In no event shall the author be liable for any
special, indirect or consequential damages or any damages
whatsoever resulting from loss of use, data or profits, whether
in an action of contract, negligence or other tortious action,
arising out of or in connection with the use or performance of
this software.
*/
/** \file
*
* Main source file for the KeyboardHost demo. This file contains the main tasks of
* the demo and is responsible for the initial application hardware configuration.
*/
#include "KeyboardHost.h"
/** 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
* within a device can be differentiated from one another.
*/
USB_ClassInfo_HID_Host_t
Keyboard_HID_Interface
=
{
.
Config
=
{
.
DataINPipeNumber
=
1
,
.
DataOUTPipeNumber
=
2
,
.
HIDInterfaceProtocol
=
HID_BOOT_KEYBOARD_PROTOCOL
,
},
};
/** Main program entry point. This routine configures the hardware required by the application, then
* starts the scheduler to run the application tasks.
*/
int
main
(
void
)
{
SetupHardware
();
puts_P
(
PSTR
(
ESC_FG_CYAN
"Keyboard Host Demo running.
\r\n
"
ESC_FG_WHITE
));
LEDs_SetAllLEDs
(
LEDMASK_USB_NOTREADY
);
for
(;;)
{
switch
(
USB_HostState
)
{
case
HOST_STATE_Addressed
:
LEDs_SetAllLEDs
(
LEDMASK_USB_ENUMERATING
);
uint16_t
ConfigDescriptorSize
;
uint8_t
ConfigDescriptorData
[
512
];
if
(
USB_GetDeviceConfigDescriptor
(
1
,
&
ConfigDescriptorSize
,
ConfigDescriptorData
,
sizeof
(
ConfigDescriptorData
))
!=
HOST_GETCONFIG_Successful
)
{
printf
(
"Error Retrieving Configuration Descriptor.
\r\n
"
);
LEDs_SetAllLEDs
(
LEDMASK_USB_ERROR
);
USB_HostState
=
HOST_STATE_WaitForDeviceRemoval
;
break
;
}
if
(
HID_Host_ConfigurePipes
(
&
Keyboard_HID_Interface
,
ConfigDescriptorSize
,
ConfigDescriptorData
)
!=
HID_ENUMERROR_NoError
)
{
printf
(
"Attached Device Not a Valid Keyboard.
\r\n
"
);
LEDs_SetAllLEDs
(
LEDMASK_USB_ERROR
);
USB_HostState
=
HOST_STATE_WaitForDeviceRemoval
;
break
;
}
if
(
USB_Host_SetDeviceConfiguration
(
1
)
!=
HOST_SENDCONTROL_Successful
)
{
printf
(
"Error Setting Device Configuration.
\r\n
"
);
LEDs_SetAllLEDs
(
LEDMASK_USB_ERROR
);
USB_HostState
=
HOST_STATE_WaitForDeviceRemoval
;
break
;
}
if
(
USB_HID_Host_SetBootProtocol
(
&
Keyboard_HID_Interface
)
!=
0
)
{
printf
(
"Could not Set Boot Protocol Mode.
\r\n
"
);
LEDs_SetAllLEDs
(
LEDMASK_USB_ERROR
);
USB_HostState
=
HOST_STATE_WaitForDeviceRemoval
;
break
;
}
printf
(
"Keyboard Enumerated.
\r\n
"
);
USB_HostState
=
HOST_STATE_Configured
;
break
;
case
HOST_STATE_Configured
:
if
(
HID_Host_IsReportReceived
(
&
Keyboard_HID_Interface
))
{
USB_KeyboardReport_Data_t
KeyboardReport
;
uint8_t
ReportID
=
0
;
HID_Host_ReceiveReport
(
&
Keyboard_HID_Interface
,
false
,
&
ReportID
,
&
KeyboardReport
);
LEDs_ChangeLEDs
(
LEDS_LED1
,
(
KeyboardReport
.
Modifier
)
?
LEDS_LED1
:
0
);
if
(
KeyboardReport
.
KeyCode
)
{
char
PressedKey
=
0
;
LEDs_ToggleLEDs
(
LEDS_LED2
);
/* Retrieve pressed key character if alphanumeric */
if
((
KeyboardReport
.
KeyCode
>=
0x04
)
&&
(
KeyboardReport
.
KeyCode
<=
0x1D
))
PressedKey
=
(
KeyboardReport
.
KeyCode
-
0x04
)
+
'A'
;
else
if
((
KeyboardReport
.
KeyCode
>=
0x1E
)
&&
(
KeyboardReport
.
KeyCode
<=
0x27
))
PressedKey
=
(
KeyboardReport
.
KeyCode
-
0x1E
)
+
'0'
;
else
if
(
KeyboardReport
.
KeyCode
==
0x2C
)
PressedKey
=
' '
;
else
if
(
KeyboardReport
.
KeyCode
==
0x28
)
PressedKey
=
'\n'
;
if
(
PressedKey
)
putchar
(
PressedKey
);
}
}
break
;
}
HID_Host_USBTask
(
&
Keyboard_HID_Interface
);
USB_USBTask
();
}
}
/** Configures the board hardware and chip peripherals for the demo's functionality. */
void
SetupHardware
(
void
)
{
/* Disable watchdog if enabled by bootloader/fuses */
MCUSR
&=
~
(
1
<<
WDRF
);
wdt_disable
();
/* Disable clock division */
clock_prescale_set
(
clock_div_1
);
/* Hardware Initialization */
SerialStream_Init
(
9600
,
false
);
LEDs_Init
();
USB_Init
();
}
/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and
* starts the library USB task to begin the enumeration and USB management process.
*/
void
EVENT_USB_Host_DeviceAttached
(
void
)
{
puts_P
(
PSTR
(
"Device Attached.
\r\n
"
));
LEDs_SetAllLEDs
(
LEDMASK_USB_ENUMERATING
);
}
/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and
* stops the library USB task management process.
*/
void
EVENT_USB_Host_DeviceUnattached
(
void
)
{
puts_P
(
PSTR
(
"
\r\n
Device Unattached.
\r\n
"
));
LEDs_SetAllLEDs
(
LEDMASK_USB_NOTREADY
);
}
/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully
* enumerated by the host and is now ready to be used by the application.
*/
void
EVENT_USB_Host_DeviceEnumerationComplete
(
void
)
{
LEDs_SetAllLEDs
(
LEDMASK_USB_READY
);
}
/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */
void
EVENT_USB_Host_HostError
(
const
uint8_t
ErrorCode
)
{
USB_ShutDown
();
printf_P
(
PSTR
(
ESC_FG_RED
"Host Mode Error
\r\n
"
" -- Error Code %d
\r\n
"
ESC_FG_WHITE
),
ErrorCode
);
LEDs_SetAllLEDs
(
LEDMASK_USB_ERROR
);
for
(;;);
}
/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while
* enumerating an attached USB device.
*/
void
EVENT_USB_Host_DeviceEnumerationFailed
(
const
uint8_t
ErrorCode
,
const
uint8_t
SubErrorCode
)
{
printf_P
(
PSTR
(
ESC_FG_RED
"Dev Enum Error
\r\n
"
" -- Error Code %d
\r\n
"
" -- Sub Error Code %d
\r\n
"
" -- In State %d
\r\n
"
ESC_FG_WHITE
),
ErrorCode
,
SubErrorCode
,
USB_HostState
);
LEDs_SetAllLEDs
(
LEDMASK_USB_ERROR
);
}
Demos/Host/ClassDriver/KeyboardHost/KeyboardHost.h
0 → 100644
View file @
6c5c9212
/*
LUFA Library
Copyright (C) Dean Camera, 2009.
dean [at] fourwalledcubicle [dot] com
www.fourwalledcubicle.com
*/
/*
Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)
Permission to use, copy, modify, and distribute this software
and its documentation for any purpose and without fee is hereby
granted, provided that the above copyright notice appear in all
copies and that both that the copyright notice and this
permission notice and warranty disclaimer appear in supporting
documentation, and that the name of the author not be used in
advertising or publicity pertaining to distribution of the
software without specific, written prior permission.
The author disclaim all warranties with regard to this
software, including all implied warranties of merchantability
and fitness. In no event shall the author be liable for any
special, indirect or consequential damages or any damages
whatsoever resulting from loss of use, data or profits, whether
in an action of contract, negligence or other tortious action,
arising out of or in connection with the use or performance of
this software.
*/
/** \file
*
* Header file for KeyboardHost.c.
*/
#ifndef _KEYBOARD_HOST_H_
#define _KEYBOARD_HOST_H_
/* Includes: */
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/pgmspace.h>
#include <avr/power.h>
#include <stdio.h>
#include <LUFA/Version.h>
#include <LUFA/Drivers/Misc/TerminalCodes.h>
#include <LUFA/Drivers/Peripheral/SerialStream.h>
#include <LUFA/Drivers/Board/LEDs.h>
#include <LUFA/Drivers/USB/USB.h>
#include <LUFA/Drivers/USB/Class/HID.h>
/* Macros: */
/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
#define LEDMASK_USB_NOTREADY LEDS_LED1
/** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
#define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)
/** LED mask for the library LED driver, to indicate that the USB interface is ready. */
#define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)
/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
#define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)
/* Function Prototypes: */
void
SetupHardware
(
void
);
void
EVENT_USB_Host_HostError
(
const
uint8_t
ErrorCode
);
void
EVENT_USB_Host_DeviceAttached
(
void
);
void
EVENT_USB_Host_DeviceUnattached
(
void
);
void
EVENT_USB_Host_DeviceEnumerationFailed
(
const
uint8_t
ErrorCode
,
const
uint8_t
SubErrorCode
);
void
EVENT_USB_Host_DeviceEnumerationComplete
(
void
);
#endif
Demos/Host/ClassDriver/KeyboardHost/KeyboardHost.txt
0 → 100644
View file @
6c5c9212
/** \file
*
* This file contains special DoxyGen information for the generation of the main page and other special
* documentation pages. It is not a project source file.
*/
/** \mainpage Keyboard Host Demo
*
* \section SSec_Compat Demo Compatibility:
*
* The following table indicates what microcontrollers are compatible with this demo.
*
* - AT90USB1287
* - AT90USB647
*
* \section SSec_Info USB Information:
*
* The following table gives a rundown of the USB utilization of this demo.
*
* <table>
* <tr>
* <td><b>USB Mode:</b></td>
* <td>Host</td>
* </tr>
* <tr>
* <td><b>USB Class:</b></td>
* <td>Human Interface Device (HID)</td>
* </tr>
* <tr>
* <td><b>USB Subclass:</b></td>
* <td>N/A</td>
* </tr>
* <tr>
* <td><b>Relevant Standards:</b></td>
* <td>USBIF HID Specification, USBIF HID Usage Tables</td>
* </tr>
* <tr>
* <td><b>Usable Speeds:</b></td>
* <td>Low Speed Mode, Full Speed Mode</td>
* </tr>
* </table>
*
* \section SSec_Description Project Description:
*
* Keyboard host demonstration application. This gives a simple reference
* application for implementing a USB keyboard, for USB keyboards using
* the standard keyboard HID profile.
*
* Pressed alpha-numeric, enter or space key is transmitted through the serial
* USART at serial settings 9600, 8, N, 1.
*
* This uses a naive method where the keyboard is set to Boot Protocol mode, so
* that the report structure is fixed and known. A better implementation
* uses the HID report parser for correct report data processing across
* all compatible mice with advanced characteristics, as shown in the
* KeyboardHostWithParser demo application.
*
* Currently only single interface keyboards are supported.
*
* \section SSec_Options Project Options
*
* The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
*
* <table>
* <tr>
* <td>
* None
* </td>
* </tr>
* </table>
*/
Demos/Host/ClassDriver/KeyboardHost/makefile
0 → 100644
View file @
6c5c9212
This diff is collapsed.
Click to expand it.
Demos/Host/ClassDriver/MouseHost/MouseHost.c
View file @
6c5c9212
...
...
@@ -125,19 +125,16 @@ int main(void)
MouseReport
.
Y
,
MouseReport
.
Button
);
/* Alter status LEDs according to mouse X movement */
if
(
MouseReport
.
X
>
0
)
LEDMask
|=
LEDS_LED1
;
else
if
(
MouseReport
.
X
<
0
)
LEDMask
|=
LEDS_LED2
;
/* Alter status LEDs according to mouse Y movement */
if
(
MouseReport
.
Y
>
0
)
LEDMask
|=
LEDS_LED3
;
else
if
(
MouseReport
.
Y
<
0
)
LEDMask
|=
LEDS_LED4
;
/* Alter status LEDs according to mouse button position */
if
(
MouseReport
.
Button
)
LEDMask
=
LEDS_ALL_LEDS
;
...
...
Demos/Host/ClassDriver/makefile
View file @
6c5c9212
...
...
@@ -17,6 +17,9 @@ all:
make
-C
CDCHost clean
make
-C
CDCHost all
make
-C
KeyboardHost
clean
make
-C
KeyboardHost
all
make
-C
MouseHost
clean
make
-C
MouseHost
all
...
...
@@ -28,6 +31,7 @@ all:
%
:
make
-C
CDCHost
$@
make
-C
KeyboardHost
$@
make
-C
MouseHost
$@
make
-C
MassStorageHost
$@
make
-C
StillImageHost
$@
LUFA.pnproj
View file @
6c5c9212
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment