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

Files at this revision

API Documentation at this revision

Comitter:
mblokzijl
Date:
Sun Dec 11 19:14:27 2011 +0000
Commit message:

Changed in this revision

TextLCD.lib Show annotated file Show diff for this revision Revisions of this file
USBDevice.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TextLCD.lib	Sun Dec 11 19:14:27 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/simon/code/TextLCD/#44f34c09bd37
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice.lib	Sun Dec 11 19:14:27 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/samux/code/USBDevice/#ef8c6751b185
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Dec 11 19:14:27 2011 +0000
@@ -0,0 +1,68 @@
+#include "mbed.h"
+#include "TextLCD.h"
+#include "USBHID.h"
+
+//for debugging
+Serial pc(USBTX, USBRX);
+
+//an LED to display activity
+DigitalOut hid_activity_led(LED2);
+DigitalOut alive_led(LED1);
+
+//The TextLCD
+TextLCD lcd(p21, p22, p17, p18, p19, p20); // rs, e, d4-d7
+
+//the mbed doesn't return the report ID.
+union hid_report_t {
+    uint8_t bytes[sizeof(int16_t)*2];
+    struct {
+        uint16_t health;
+        uint16_t ammo;
+    } data;
+};
+
+//We declare a USBHID device.
+// output report size = 1 (not needed here)
+// input report size matches the one defined above
+USBHID hid(sizeof(int16_t)*2, 1);
+
+//This report will contain data to be received
+HID_REPORT recv_report;
+
+int main() {
+    //initialise the LCD
+    lcd.printf("     CRYSIS\n  Maximum mbed");
+    pc.printf("ready!\r\n");
+    uint16_t health, ammo;
+    
+    while(1) {
+        if(hid.readNB(&recv_report)) {
+            pc.printf("recv[%d]: ", recv_report.length);
+            for(int i = 0; i < recv_report.length; i++) {
+                pc.printf("%d ", recv_report.data[i]);
+            }
+            pc.printf("\r\n");
+
+            //receive data
+            hid_report_t* pHidData = (hid_report_t*)(recv_report.data);
+            
+            //for some reason, the byte order has been changed!
+            //negative number support will need sign extension
+            health = __REV16(pHidData->data.health);
+            ammo = __REV16(pHidData->data.ammo);
+            
+            //for debugging...
+            //pc.printf("Health: %d, Ammo: %d\r\n", health, ammo);
+            //pc.printf("HEX: Health: %x, Ammo: %x\r\n", health, ammo);
+            
+            //write new values on screen.
+            lcd.cls();
+            lcd.printf("Health: %d\nAmmo: %d", health, ammo);
+            hid_activity_led = hid_activity_led == 0 ? 1 : 0;//show HID activity
+        }
+        
+        //toggle an LED to show us, that the mbed is alive.
+        wait(0.1);
+        alive_led = alive_led == 0 ? 1 : 0;
+    }
+}