[sam] added HID examples (mouse+keyboard)

This commit is contained in:
Thibault RICHARD 2012-06-15 14:46:06 +02:00
parent a1d6cb43a5
commit c4198b3a6c
3 changed files with 173 additions and 50 deletions

View File

@ -2,66 +2,58 @@
#include <stdio.h>
#include <hidboot.h>
/*
class KbdRptParser : public KeyboardReportParser
{
void PrintKey(uint8_t mod, uint8_t key);
#include <avr/pgmspace.h>
#include <avrpins.h>
#include <max3421e.h>
#include <usbhost.h>
#include <usb_ch9.h>
#include <Usb.h>
#include <usbhub.h>
#include <avr/pgmspace.h>
#include <address.h>
#include <hidboot.h>
#include <printhex.h>
#include <message.h>
#include <hexdump.h>
#include <parsetools.h>
*/
class MouseRptParser : public MouseReportParser
{
protected:
virtual void OnMouseMove (MOUSEINFO *mi);
virtual void OnLeftButtonUp (MOUSEINFO *mi);
virtual void OnLeftButtonDown (MOUSEINFO *mi);
virtual void OnRightButtonUp (MOUSEINFO *mi);
virtual void OnRightButtonDown (MOUSEINFO *mi);
virtual void OnMiddleButtonUp (MOUSEINFO *mi);
virtual void OnMiddleButtonDown (MOUSEINFO *mi);
virtual void OnKeyDown (uint8_t mod, uint8_t key);
virtual void OnKeyUp (uint8_t mod, uint8_t key);
virtual void OnKeyPressed(uint8_t key);
};
void MouseRptParser::OnMouseMove(MOUSEINFO *mi)
void KbdRptParser::PrintKey(uint8_t m, uint8_t key)
{
printf("Pos={%d,%d}\r\n", mi->dX, mi->dY);
MODIFIERKEYS mod;
*((uint8_t*)&mod) = m;
printf((mod.bmLeftCtrl == 1) ? "C" : " ");
printf((mod.bmLeftShift == 1) ? "S" : " ");
printf((mod.bmLeftAlt == 1) ? "A" : " ");
printf((mod.bmLeftGUI == 1) ? "G" : " ");
printf("<%c>", key);
printf((mod.bmRightCtrl == 1) ? "C" : " ");
printf((mod.bmRightShift == 1) ? "S" : " ");
printf((mod.bmRightAlt == 1) ? "A" : " ");
printf((mod.bmRightGUI == 1) ? "G" : " ");
};
void MouseRptParser::OnLeftButtonUp (MOUSEINFO *mi)
void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key)
{
printf("L Butt Up\r\n");
};
void MouseRptParser::OnLeftButtonDown (MOUSEINFO *mi)
printf("DN ");
PrintKey(mod, key);
uint8_t c = OemToAscii(mod, key);
if (c)
OnKeyPressed(c);
}
void KbdRptParser::OnKeyUp(uint8_t mod, uint8_t key)
{
printf("L Butt Dn\r\n");
};
void MouseRptParser::OnRightButtonUp (MOUSEINFO *mi)
printf("UP ");
PrintKey(mod, key);
}
void KbdRptParser::OnKeyPressed(uint8_t key)
{
printf("R Butt Up\r\n");
};
void MouseRptParser::OnRightButtonDown (MOUSEINFO *mi)
{
printf("R Butt Dn\r\n");
};
void MouseRptParser::OnMiddleButtonUp (MOUSEINFO *mi)
{
printf("M Butt Up\r\n");
};
void MouseRptParser::OnMiddleButtonDown (MOUSEINFO *mi)
{
printf("M Butt Dn\r\n");
printf("ASCII: %c", key);
};
USBHost Usb;
HIDBoot<HID_PROTOCOL_MOUSE> HostMouse(&Usb);
MouseRptParser Prs;
HIDBoot<HID_PROTOCOL_KEYBOARD> Kbd(&Usb);
KbdRptParser Prs;
void setup()
{
@ -69,7 +61,7 @@ void setup()
printf("\r\nProgram started:\r\n");
delay(200);
HostMouse.SetReportParser(0,(HIDReportParser*)&Prs);
Kbd.SetReportParser(0, (HIDReportParser*)&Prs);
}
void loop()

View File

@ -0,0 +1,70 @@
#include "variant.h"
#include <stdio.h>
#include <hidboot.h>
class KbdRptParser : public KeyboardReportParser
{
void PrintKey(uint8_t mod, uint8_t key);
protected:
virtual void OnKeyDown (uint8_t mod, uint8_t key);
virtual void OnKeyUp (uint8_t mod, uint8_t key);
virtual void OnKeyPressed(uint8_t key);
};
void KbdRptParser::PrintKey(uint8_t m, uint8_t key)
{
MODIFIERKEYS mod;
*((uint8_t*)&mod) = m;
printf((mod.bmLeftCtrl == 1) ? "C" : " ");
printf((mod.bmLeftShift == 1) ? "S" : " ");
printf((mod.bmLeftAlt == 1) ? "A" : " ");
printf((mod.bmLeftGUI == 1) ? "G" : " ");
printf("<%c>", key);
printf((mod.bmRightCtrl == 1) ? "C" : " ");
printf((mod.bmRightShift == 1) ? "S" : " ");
printf((mod.bmRightAlt == 1) ? "A" : " ");
printf((mod.bmRightGUI == 1) ? "G" : " ");
};
void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key)
{
printf("DN ");
PrintKey(mod, key);
uint8_t c = OemToAscii(mod, key);
if (c)
OnKeyPressed(c);
}
void KbdRptParser::OnKeyUp(uint8_t mod, uint8_t key)
{
printf("UP ");
PrintKey(mod, key);
}
void KbdRptParser::OnKeyPressed(uint8_t key)
{
printf("ASCII: %c", key);
};
USBHost Usb;
HIDBoot<HID_PROTOCOL_KEYBOARD> Kbd(&Usb);
KbdRptParser Prs;
void setup()
{
cpu_irq_enable();
printf("\r\nProgram started:\r\n");
delay(200);
Kbd.SetReportParser(0, (HIDReportParser*)&Prs);
}
void loop()
{
Usb.Task();
}

View File

@ -0,0 +1,61 @@
#include "variant.h"
#include <stdio.h>
#include <hidboot.h>
class MouseRptParser : public MouseReportParser
{
protected:
virtual void OnMouseMove (MOUSEINFO *mi);
virtual void OnLeftButtonUp (MOUSEINFO *mi);
virtual void OnLeftButtonDown (MOUSEINFO *mi);
virtual void OnRightButtonUp (MOUSEINFO *mi);
virtual void OnRightButtonDown (MOUSEINFO *mi);
virtual void OnMiddleButtonUp (MOUSEINFO *mi);
virtual void OnMiddleButtonDown (MOUSEINFO *mi);
};
void MouseRptParser::OnMouseMove(MOUSEINFO *mi)
{
printf("Pos={%d,%d}\r\n", mi->dX, mi->dY);
};
void MouseRptParser::OnLeftButtonUp (MOUSEINFO *mi)
{
printf("L Butt Up\r\n");
};
void MouseRptParser::OnLeftButtonDown (MOUSEINFO *mi)
{
printf("L Butt Dn\r\n");
};
void MouseRptParser::OnRightButtonUp (MOUSEINFO *mi)
{
printf("R Butt Up\r\n");
};
void MouseRptParser::OnRightButtonDown (MOUSEINFO *mi)
{
printf("R Butt Dn\r\n");
};
void MouseRptParser::OnMiddleButtonUp (MOUSEINFO *mi)
{
printf("M Butt Up\r\n");
};
void MouseRptParser::OnMiddleButtonDown (MOUSEINFO *mi)
{
printf("M Butt Dn\r\n");
};
USBHost Usb;
HIDBoot<HID_PROTOCOL_MOUSE> HostMouse(&Usb);
MouseRptParser Prs;
void setup()
{
cpu_irq_enable();
printf("\r\nProgram started:\r\n");
delay(200);
HostMouse.SetReportParser(0,(HIDReportParser*)&Prs);
}
void loop()
{
Usb.Task();
}