Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: M0_EEPROM_test USBDevice mbed
Fork of USBMouseKeyboard_HelloWorld by
Revision 7:d637e03e22bb, committed 2014-08-15
- Comitter:
- betaEncoder
- Date:
- Fri Aug 15 14:19:12 2014 +0000
- Parent:
- 6:09cebc93f3a7
- Commit message:
- first commit
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/M0_EEPROM_test.lib Fri Aug 15 14:19:12 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/betaEncoder/code/M0_EEPROM_test/#d7fcc8d6c4a1
--- a/USBDevice.lib Fri Mar 01 13:26:37 2013 +0000 +++ b/USBDevice.lib Fri Aug 15 14:19:12 2014 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/USBDevice/#335f2506f422 +http://mbed.org/users/betaEncoder/code/USBDevice/#6cc8a2d36729
--- a/main.cpp Fri Mar 01 13:26:37 2013 +0000
+++ b/main.cpp Fri Aug 15 14:19:12 2014 +0000
@@ -1,22 +1,168 @@
#include "mbed.h"
+
#include "USBMouseKeyboard.h"
-
-//LED1: NUM_LOCK
-//LED2: CAPS_LOCK
-//LED3: SCROLL_LOCK
-BusOut leds(LED1, LED2, LED3);
-
-//USBMouseKeyboard
-USBMouseKeyboard key_mouse;
-
+#include "IAP.h"
+
+#define TARGET_ADDRESS (64)
+
+#define QUEUE_IDLE (0)
+#define QUEUE_READ (1)
+#define QUEUE_WRITE (2)
+#define QUEUE_DUMP (3)
+volatile unsigned char queue = QUEUE_IDLE;
+volatile unsigned char messageLength = 0;
+char buff[64];
+
+DigitalOut myled0(P1_15), myled1(P0_23);
+DigitalIn sw(P0_21, PullUp);
+USBMouseKeyboard key_mouse(REL_MOUSE, 0x1FC9, 0x80BA, 0x0001);
+IAP iap;
+
+typedef struct _hidCommand{
+ uint8_t reportSize;
+ uint8_t reportID;
+ uint8_t report[8];
+} hidCommand;
+
+void errorLED() {
+ while(1) {
+ myled1 = 0;
+ wait(0.1);
+ myled1 = 1;
+ wait(0.1);
+ }
+}
+
+void key_pressed(hidCommand *command){
+ int i = 0;
+ while(1){
+ if(command[i].reportSize == 0){
+ return;
+ }
+
+ HID_REPORT report;
+
+ report.length = command[i].reportSize+1;
+ report.data[0] = command[i].reportID;
+ memcpy(&report.data[1], command[i].report, command[i].reportSize);
+ key_mouse.send(&report);
+
+ if(report.data[0]==REPORT_ID_KEYBOARD || report.data[0]==REPORT_ID_MOUSE){
+ for(int j=0;j<report.length;j++){
+ report.data[j+1] = 0;
+ }
+ key_mouse.send(&report);
+ }
+
+ i++;
+ wait(0.01);
+ }
+}
+
int main(void) {
+ if( iap.read_eeprom( (char*)TARGET_ADDRESS, &buff[0], 64 ) ) {
+ errorLED();
+ }
+
+ unsigned int cnt = 0, pwm = 0;
+ const int pwm_resolution = 1023;
+ unsigned char dir = 1, blink = 0, blink_cnt = 255;
+ const unsigned char blinc_count = 8;
+
while (1) {
- key_mouse.mediaControl(KEY_VOLUME_DOWN);
- key_mouse.printf("Hello World from Mbed\r\n");
- key_mouse.keyCode('s', KEY_CTRL);
- key_mouse.move(20, 0);
- key_mouse.keyCode(KEY_SCROLL_LOCK);
- wait(1);
- leds = key_mouse.lockStatus();
+ if(cnt==0){
+ cnt = pwm_resolution;
+ }else{
+ cnt--;
+ }
+ // drive led
+ if(blink>0){
+ // blink section
+ if( cnt == 0 ){
+ blink_cnt--;
+ if( blink_cnt == 0 ){
+ blink_cnt = 255;
+ blink--;
+ myled0 = blink & 1;
+ myled1 = blink & 1;
+ }
+ }
+ }else{
+ // dimmer section
+ if(cnt==0){
+ if(dir){
+ pwm++;
+ if(pwm==pwm_resolution){
+ dir = 0;
+ }
+ }else{
+ pwm--;
+ if(pwm==0){
+ dir = 1;
+ }
+ }
+ }
+ if(cnt<pwm){
+ myled0 = 1;
+ myled1 = 1;
+ }else{
+ myled0 = 0;
+ myled1 = 0;
+ }
+ }
+
+ // sw polling
+ if(sw==0){
+ wait(0.02);
+ if(sw==0){
+ key_pressed((hidCommand*)buff);
+ myled0 = 1;
+ myled1 = 1;
+ while(sw==0);
+ myled0 = 0;
+ myled1 = 0;
+ }
+ }
+
+ // queue polling
+ if(queue == QUEUE_READ){
+ HID_REPORT report;
+ report.data[0] = REPORT_ID_UTILITY;
+ report.data[1] = iap.read_eeprom( (char*)TARGET_ADDRESS, &buff[0], 64 );
+ memcpy(&report.data[1], &buff[0], REPORT_PAYLOAD_SIZE);
+ report.length = REPORT_PAYLOAD_SIZE + 1;
+ key_mouse.send(&report);
+ queue = QUEUE_IDLE;
+ blink = blinc_count;
+ } else if(queue == QUEUE_WRITE){
+ HID_REPORT report;
+ report.data[0] = REPORT_ID_UTILITY;
+ report.data[1] = iap.write_eeprom( &buff[0], (char*)TARGET_ADDRESS, 64 );
+ for(int i=2;i<REPORT_PAYLOAD_SIZE+1;i++){
+ report.data[i] = 0;
+ }
+ report.length = REPORT_PAYLOAD_SIZE + 1;
+ key_mouse.send(&report);
+ queue = QUEUE_IDLE;
+ } else if(queue == QUEUE_DUMP){
+ HID_REPORT report;
+ report.data[0] = REPORT_ID_UTILITY;
+ memcpy(&report.data[1], &buff[0], REPORT_PAYLOAD_SIZE);
+ report.length = REPORT_PAYLOAD_SIZE + 1;
+ key_mouse.send(&report);
+ }
}
+}
+
+void USBMouseKeyboard::genericHidCallback(uint32_t length, uint8_t *data){
+ messageLength = length;
+ if(data[0] == QUEUE_READ){
+ queue = QUEUE_READ;
+ } else if(data[0] == QUEUE_WRITE) {
+ memcpy(buff, &data[1], REPORT_PAYLOAD_SIZE-1);
+ queue = QUEUE_WRITE;
+ } else if(data[0] == QUEUE_DUMP) {
+ queue = QUEUE_DUMP;
+ }
+ return;
}
\ No newline at end of file
--- a/mbed.bld Fri Mar 01 13:26:37 2013 +0000 +++ b/mbed.bld Fri Aug 15 14:19:12 2014 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/3d0ef94e36ec \ No newline at end of file +http://mbed.org/users/mbed_official/code/mbed/builds/04dd9b1680ae \ No newline at end of file
