USB Mouse (relative) example for mbed NXP LPC11U24 beta

Committer:
chris
Date:
Mon Oct 24 10:26:27 2011 +0000
Revision:
0:163560051396

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chris 0:163560051396 1 /* Keyboard_AbsMouse.c */
chris 0:163560051396 2
chris 0:163560051396 3 /* USB device example: Keyboard and an absolute mouse */
chris 0:163560051396 4 /* Copyright (c) 2011 ARM Limited. All rights reserved. */
chris 0:163560051396 5
chris 0:163560051396 6 #include "stdint.h"
chris 0:163560051396 7
chris 0:163560051396 8 #include "USBAbsMouseKeyboard.h"
chris 0:163560051396 9
chris 0:163560051396 10
chris 0:163560051396 11 uint8_t * USBAbsMouseKeyboard::ReportDesc() {
chris 0:163560051396 12 static uint8_t reportDescriptor[] = {
chris 0:163560051396 13
chris 0:163560051396 14 /* Keyboard */
chris 0:163560051396 15 USAGE_PAGE(1), 0x01,
chris 0:163560051396 16 USAGE(1), 0x06,
chris 0:163560051396 17 COLLECTION(1), 0x01,
chris 0:163560051396 18 REPORT_ID(1), REPORT_ID_KEYBOARD,
chris 0:163560051396 19 USAGE_PAGE(1), 0x07,
chris 0:163560051396 20 USAGE_MINIMUM(1), 0xE0,
chris 0:163560051396 21 USAGE_MAXIMUM(1), 0xE7,
chris 0:163560051396 22 LOGICAL_MINIMUM(1), 0x00,
chris 0:163560051396 23 LOGICAL_MAXIMUM(1), 0x01,
chris 0:163560051396 24 REPORT_SIZE(1), 0x01,
chris 0:163560051396 25 REPORT_COUNT(1), 0x08,
chris 0:163560051396 26 INPUT(1), 0x02,
chris 0:163560051396 27 REPORT_COUNT(1), 0x01,
chris 0:163560051396 28 REPORT_SIZE(1), 0x08,
chris 0:163560051396 29 INPUT(1), 0x01,
chris 0:163560051396 30 REPORT_COUNT(1), 0x05,
chris 0:163560051396 31 REPORT_SIZE(1), 0x01,
chris 0:163560051396 32 USAGE_PAGE(1), 0x08,
chris 0:163560051396 33 USAGE_MINIMUM(1), 0x01,
chris 0:163560051396 34 USAGE_MAXIMUM(1), 0x05,
chris 0:163560051396 35 OUTPUT(1), 0x02,
chris 0:163560051396 36 REPORT_COUNT(1), 0x01,
chris 0:163560051396 37 REPORT_SIZE(1), 0x03,
chris 0:163560051396 38 OUTPUT(1), 0x01,
chris 0:163560051396 39 REPORT_COUNT(1), 0x06,
chris 0:163560051396 40 REPORT_SIZE(1), 0x08,
chris 0:163560051396 41 LOGICAL_MINIMUM(1), 0x00,
chris 0:163560051396 42 LOGICAL_MAXIMUM(2), 0xff, 0x00,
chris 0:163560051396 43 USAGE_PAGE(1), 0x07,
chris 0:163560051396 44 USAGE_MINIMUM(1), 0x00,
chris 0:163560051396 45 USAGE_MAXIMUM(2), 0xff, 0x00,
chris 0:163560051396 46 INPUT(1), 0x00,
chris 0:163560051396 47 END_COLLECTION(0),
chris 0:163560051396 48
chris 0:163560051396 49 /* Mouse */
chris 0:163560051396 50
chris 0:163560051396 51
chris 0:163560051396 52 USAGE_PAGE(1), 0x01, /* Generic Desktop */
chris 0:163560051396 53 USAGE(1), 0x02, /* Mouse */
chris 0:163560051396 54 COLLECTION(1), 0x01, /* Application*/
chris 0:163560051396 55 USAGE(1), 0x01, /* Pointer */
chris 0:163560051396 56 COLLECTION(1), 0x00, /* Physical */
chris 0:163560051396 57 REPORT_ID(1), REPORT_ID_MOUSE,
chris 0:163560051396 58
chris 0:163560051396 59 USAGE_PAGE(1), 0x01, /* Generic Desktop */
chris 0:163560051396 60 USAGE(1), 0x30, /* X */
chris 0:163560051396 61 USAGE(1), 0x31, /* Y */
chris 0:163560051396 62 LOGICAL_MINIMUM(1), 0x00, /* 0 */
chris 0:163560051396 63 LOGICAL_MAXIMUM(2), 0xff, 0x7f, /* 32767 */
chris 0:163560051396 64 REPORT_SIZE(1), 0x10,
chris 0:163560051396 65 REPORT_COUNT(1), 0x02,
chris 0:163560051396 66 INPUT(1), 0x02, /* Data, Variable, Absolute */
chris 0:163560051396 67
chris 0:163560051396 68 USAGE_PAGE(1), 0x01, /* Generic Desktop */
chris 0:163560051396 69 USAGE(1), 0x38, /* scroll */
chris 0:163560051396 70 LOGICAL_MINIMUM(1), 0x81, /* -127 */
chris 0:163560051396 71 LOGICAL_MAXIMUM(1), 0x7f, /* 127 */
chris 0:163560051396 72 REPORT_SIZE(1), 0x08,
chris 0:163560051396 73 REPORT_COUNT(1), 0x01,
chris 0:163560051396 74 INPUT(1), 0x06, /* Data, Variable, Relative */
chris 0:163560051396 75
chris 0:163560051396 76 USAGE_PAGE(1), 0x09, /* Buttons */
chris 0:163560051396 77 USAGE_MINIMUM(1), 0x01,
chris 0:163560051396 78 USAGE_MAXIMUM(1), 0x03,
chris 0:163560051396 79 LOGICAL_MINIMUM(1), 0x00, /* 0 */
chris 0:163560051396 80 LOGICAL_MAXIMUM(1), 0x01, /* 1 */
chris 0:163560051396 81 REPORT_COUNT(1), 0x03,
chris 0:163560051396 82 REPORT_SIZE(1), 0x01,
chris 0:163560051396 83 INPUT(1), 0x02, /* Data, Variable, Absolute */
chris 0:163560051396 84 REPORT_COUNT(1), 0x01,
chris 0:163560051396 85 REPORT_SIZE(1), 0x05,
chris 0:163560051396 86 INPUT(1), 0x01, /* Constant */
chris 0:163560051396 87
chris 0:163560051396 88 END_COLLECTION(0),
chris 0:163560051396 89 END_COLLECTION(0),
chris 0:163560051396 90
chris 0:163560051396 91
chris 0:163560051396 92
chris 0:163560051396 93
chris 0:163560051396 94 USAGE_PAGE(1), 0x0c, /* USAGE_PAGE (Consumer Devices) */
chris 0:163560051396 95 USAGE(1), 0x01, /* USAGE (Consumer Control) */
chris 0:163560051396 96 COLLECTION(1), 0x01, /* COLLECTION (Application) */
chris 0:163560051396 97 REPORT_ID(1), REPORT_ID_VOLUME,
chris 0:163560051396 98 LOGICAL_MINIMUM(1), 0x00, /* LOGICAL_MINIMUM (0) */
chris 0:163560051396 99 LOGICAL_MAXIMUM(1), 0x01, /* LOGICAL_MAXIMUM (1) */
chris 0:163560051396 100 USAGE(1), 0xe9, /* Volume Up */
chris 0:163560051396 101 USAGE(1), 0xea, /* Volume Down */
chris 0:163560051396 102 REPORT_SIZE(1), 0x01,
chris 0:163560051396 103 REPORT_COUNT(1), 0x02,
chris 0:163560051396 104 INPUT(1), 0x06, /* INPUT (Data,Var,Rel) */
chris 0:163560051396 105 USAGE(1), 0xe2, /* Mute */
chris 0:163560051396 106 REPORT_COUNT(1), 0x01, /* REPORT_COUNT (1) */
chris 0:163560051396 107 INPUT(1), 0x06, /* INPUT (Data,Var,Rel) */
chris 0:163560051396 108 REPORT_COUNT(1), 0x05, /* REPORT_COUNT (5) */
chris 0:163560051396 109 INPUT(1), 0x07, /* INPUT (Cnst,Var,Rel) */
chris 0:163560051396 110 END_COLLECTION(0), /* END_COLLECTION */
chris 0:163560051396 111 };
chris 0:163560051396 112 reportLength = sizeof(reportDescriptor);
chris 0:163560051396 113 return reportDescriptor;
chris 0:163560051396 114 }
chris 0:163560051396 115
chris 0:163560051396 116
chris 0:163560051396 117
chris 0:163560051396 118 /*
chris 0:163560051396 119 * Mouse API for user application
chris 0:163560051396 120 */
chris 0:163560051396 121
chris 0:163560051396 122
chris 0:163560051396 123 bool USBAbsMouseKeyboard::update(int16_t x, int16_t y, uint8_t buttons, int8_t z) {
chris 0:163560051396 124 HID_REPORT report;
chris 0:163560051396 125
chris 0:163560051396 126 report.data[0] = REPORT_ID_MOUSE;
chris 0:163560051396 127 report.data[1] = x & 0xff;
chris 0:163560051396 128 report.data[2] = (x >> 8) & 0xff;
chris 0:163560051396 129 report.data[3] = y & 0xff;
chris 0:163560051396 130 report.data[4] = (y >> 8) & 0xff;
chris 0:163560051396 131 report.data[5] = -z;
chris 0:163560051396 132 report.data[6] = buttons & 0x07;
chris 0:163560051396 133
chris 0:163560051396 134 report.length = 7;
chris 0:163560051396 135
chris 0:163560051396 136 return USBClass_HID_sendInputReport(EPINT_IN, &report);
chris 0:163560051396 137 }
chris 0:163560051396 138