This code will display two unsigned shorts (representing health & remaining ammo) on a TextLCD display. The mbed receives them via the USB HID interface.
main.cpp@0:36b4415952d0, 2011-12-11 (annotated)
- Committer:
- mblokzijl
- Date:
- Sun Dec 11 19:14:27 2011 +0000
- Revision:
- 0:36b4415952d0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mblokzijl | 0:36b4415952d0 | 1 | #include "mbed.h" |
mblokzijl | 0:36b4415952d0 | 2 | #include "TextLCD.h" |
mblokzijl | 0:36b4415952d0 | 3 | #include "USBHID.h" |
mblokzijl | 0:36b4415952d0 | 4 | |
mblokzijl | 0:36b4415952d0 | 5 | //for debugging |
mblokzijl | 0:36b4415952d0 | 6 | Serial pc(USBTX, USBRX); |
mblokzijl | 0:36b4415952d0 | 7 | |
mblokzijl | 0:36b4415952d0 | 8 | //an LED to display activity |
mblokzijl | 0:36b4415952d0 | 9 | DigitalOut hid_activity_led(LED2); |
mblokzijl | 0:36b4415952d0 | 10 | DigitalOut alive_led(LED1); |
mblokzijl | 0:36b4415952d0 | 11 | |
mblokzijl | 0:36b4415952d0 | 12 | //The TextLCD |
mblokzijl | 0:36b4415952d0 | 13 | TextLCD lcd(p21, p22, p17, p18, p19, p20); // rs, e, d4-d7 |
mblokzijl | 0:36b4415952d0 | 14 | |
mblokzijl | 0:36b4415952d0 | 15 | //the mbed doesn't return the report ID. |
mblokzijl | 0:36b4415952d0 | 16 | union hid_report_t { |
mblokzijl | 0:36b4415952d0 | 17 | uint8_t bytes[sizeof(int16_t)*2]; |
mblokzijl | 0:36b4415952d0 | 18 | struct { |
mblokzijl | 0:36b4415952d0 | 19 | uint16_t health; |
mblokzijl | 0:36b4415952d0 | 20 | uint16_t ammo; |
mblokzijl | 0:36b4415952d0 | 21 | } data; |
mblokzijl | 0:36b4415952d0 | 22 | }; |
mblokzijl | 0:36b4415952d0 | 23 | |
mblokzijl | 0:36b4415952d0 | 24 | //We declare a USBHID device. |
mblokzijl | 0:36b4415952d0 | 25 | // output report size = 1 (not needed here) |
mblokzijl | 0:36b4415952d0 | 26 | // input report size matches the one defined above |
mblokzijl | 0:36b4415952d0 | 27 | USBHID hid(sizeof(int16_t)*2, 1); |
mblokzijl | 0:36b4415952d0 | 28 | |
mblokzijl | 0:36b4415952d0 | 29 | //This report will contain data to be received |
mblokzijl | 0:36b4415952d0 | 30 | HID_REPORT recv_report; |
mblokzijl | 0:36b4415952d0 | 31 | |
mblokzijl | 0:36b4415952d0 | 32 | int main() { |
mblokzijl | 0:36b4415952d0 | 33 | //initialise the LCD |
mblokzijl | 0:36b4415952d0 | 34 | lcd.printf(" CRYSIS\n Maximum mbed"); |
mblokzijl | 0:36b4415952d0 | 35 | pc.printf("ready!\r\n"); |
mblokzijl | 0:36b4415952d0 | 36 | uint16_t health, ammo; |
mblokzijl | 0:36b4415952d0 | 37 | |
mblokzijl | 0:36b4415952d0 | 38 | while(1) { |
mblokzijl | 0:36b4415952d0 | 39 | if(hid.readNB(&recv_report)) { |
mblokzijl | 0:36b4415952d0 | 40 | pc.printf("recv[%d]: ", recv_report.length); |
mblokzijl | 0:36b4415952d0 | 41 | for(int i = 0; i < recv_report.length; i++) { |
mblokzijl | 0:36b4415952d0 | 42 | pc.printf("%d ", recv_report.data[i]); |
mblokzijl | 0:36b4415952d0 | 43 | } |
mblokzijl | 0:36b4415952d0 | 44 | pc.printf("\r\n"); |
mblokzijl | 0:36b4415952d0 | 45 | |
mblokzijl | 0:36b4415952d0 | 46 | //receive data |
mblokzijl | 0:36b4415952d0 | 47 | hid_report_t* pHidData = (hid_report_t*)(recv_report.data); |
mblokzijl | 0:36b4415952d0 | 48 | |
mblokzijl | 0:36b4415952d0 | 49 | //for some reason, the byte order has been changed! |
mblokzijl | 0:36b4415952d0 | 50 | //negative number support will need sign extension |
mblokzijl | 0:36b4415952d0 | 51 | health = __REV16(pHidData->data.health); |
mblokzijl | 0:36b4415952d0 | 52 | ammo = __REV16(pHidData->data.ammo); |
mblokzijl | 0:36b4415952d0 | 53 | |
mblokzijl | 0:36b4415952d0 | 54 | //for debugging... |
mblokzijl | 0:36b4415952d0 | 55 | //pc.printf("Health: %d, Ammo: %d\r\n", health, ammo); |
mblokzijl | 0:36b4415952d0 | 56 | //pc.printf("HEX: Health: %x, Ammo: %x\r\n", health, ammo); |
mblokzijl | 0:36b4415952d0 | 57 | |
mblokzijl | 0:36b4415952d0 | 58 | //write new values on screen. |
mblokzijl | 0:36b4415952d0 | 59 | lcd.cls(); |
mblokzijl | 0:36b4415952d0 | 60 | lcd.printf("Health: %d\nAmmo: %d", health, ammo); |
mblokzijl | 0:36b4415952d0 | 61 | hid_activity_led = hid_activity_led == 0 ? 1 : 0;//show HID activity |
mblokzijl | 0:36b4415952d0 | 62 | } |
mblokzijl | 0:36b4415952d0 | 63 | |
mblokzijl | 0:36b4415952d0 | 64 | //toggle an LED to show us, that the mbed is alive. |
mblokzijl | 0:36b4415952d0 | 65 | wait(0.1); |
mblokzijl | 0:36b4415952d0 | 66 | alive_led = alive_led == 0 ? 1 : 0; |
mblokzijl | 0:36b4415952d0 | 67 | } |
mblokzijl | 0:36b4415952d0 | 68 | } |