Log

..

Connecting Opendous-JTAG and LPCXpresso17xx board

Here's working connection between Opendous-JTAG and LPCXpresso1769 (and others) board:

OpendousPin	Function  LPCXpresso
0               TDI       10
1               TMS        4
2               TRST      ??
3               SRST      ??
4               TCK        6
5               TDO        8

LUFA powered mouse with scroll support

I've needed some time ago to build LUFA powered mouse with scroll support.

In LUFA's examples and code I didn't find code to build such device's report descriptor, so here's mine:


/// Mouse Report Descriptor structure including Scroll
typedef struct
{
uint8_t Button; /**< Button mask for currently pressed buttons in the mouse. */
int8_t X; /**< Current delta X movement of the mouse. */
int8_t Y; /**< Current delta Y movement on the mouse. */
int8_t Scroll; /**< Scroll report. */
} ATTR_PACKED USB_MouseReportWS_Data_t;


/// MouseWithScroll report descriptor
#define HID_DESCRIPTOR_MOUSE_WS(MinAxisVal, MaxAxisVal, MinPhysicalVal, MaxPhysicalVal, Buttons, AbsoluteCoords) \
HID_RI_USAGE_PAGE(8, 0x01), \
HID_RI_USAGE(8, 0x02), \
HID_RI_COLLECTION(8, 0x01), \
HID_RI_USAGE(8, 0x01), \
HID_RI_COLLECTION(8, 0x00), \
HID_RI_USAGE_PAGE(8, 0x09), \
HID_RI_USAGE_MINIMUM(8, 0x01), \
HID_RI_USAGE_MAXIMUM(8, Buttons), \
HID_RI_LOGICAL_MINIMUM(8, 0x00), \
HID_RI_LOGICAL_MAXIMUM(8, 0x01), \
HID_RI_REPORT_COUNT(8, Buttons), \
HID_RI_REPORT_SIZE(8, 0x01), \
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), \
HID_RI_REPORT_COUNT(8, 0x01), \
HID_RI_REPORT_SIZE(8, (8 - (Buttons % 8))), \
HID_RI_INPUT(8, HID_IOF_CONSTANT), \
HID_RI_USAGE_PAGE(8, 0x01), \
HID_RI_USAGE(8, 0x30), \
HID_RI_USAGE(8, 0x31), \
HID_RI_LOGICAL_MINIMUM(16, MinAxisVal), \
HID_RI_LOGICAL_MAXIMUM(16, MaxAxisVal), \
HID_RI_PHYSICAL_MINIMUM(16, MinPhysicalVal), \
HID_RI_PHYSICAL_MAXIMUM(16, MaxPhysicalVal), \
HID_RI_REPORT_COUNT(8, 0x02), \
HID_RI_REPORT_SIZE(8, ((((MinAxisVal >= -0xFF) && (MaxAxisVal <= 0xFF)) ? 8 : 16))), \
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | (AbsoluteCoords ? HID_IOF_ABSOLUTE : HID_IOF_RELATIVE)), \
HID_RI_USAGE(8, 0x38), \
HID_RI_LOGICAL_MINIMUM(8, -1), \
HID_RI_LOGICAL_MAXIMUM(8, 1), \
HID_RI_PHYSICAL_MINIMUM(8, 0), \
HID_RI_PHYSICAL_MAXIMUM(8, 0), \
HID_RI_REPORT_SIZE(8, 8), \
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | (AbsoluteCoords ? HID_IOF_ABSOLUTE : HID_IOF_RELATIVE)), \
HID_RI_END_COLLECTION(0), \
HID_RI_END_COLLECTION(0)