This code will display two unsigned shorts (representing health & remaining ammo) on a TextLCD display. The mbed receives them via the USB HID interface.

Dependencies:   TextLCD

Committer:
mblokzijl
Date:
Sun Dec 11 19:14:27 2011 +0000
Revision:
0:36b4415952d0

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }