The firmware of fav-button which distributed at Comike86.

Dependencies:   M0_EEPROM_test USBDevice mbed

Fork of USBMouseKeyboard_HelloWorld by Samuel Mokrani

Files at this revision

API Documentation at this revision

Comitter:
betaEncoder
Date:
Fri Aug 15 14:19:12 2014 +0000
Parent:
6:09cebc93f3a7
Commit message:
first commit

Changed in this revision

M0_EEPROM_test.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
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 09cebc93f3a7 -r d637e03e22bb M0_EEPROM_test.lib
--- /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
diff -r 09cebc93f3a7 -r d637e03e22bb USBDevice.lib
--- 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
diff -r 09cebc93f3a7 -r d637e03e22bb main.cpp
--- 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
diff -r 09cebc93f3a7 -r d637e03e22bb mbed.bld
--- 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