BlueUSBをつかってみた

Dependencies:   FatFileSystem mbed

Fork of PS3_BlueUSB by Bart Janssens

Revision:
1:7b5dfa9668df
Parent:
0:99a111b75cb4
--- a/TestShell.cpp	Tue Apr 26 16:09:17 2011 +0000
+++ b/TestShell.cpp	Wed Jun 17 09:48:19 2015 +0000
@@ -35,6 +35,10 @@
 #include "ps3.h"
 
 #include "mbed.h"
+DigitalOut LEDa(LED1);
+PwmOut     LEDb(LED2);
+PwmOut     LEDc(LED3);
+Serial Dev(p13,p14);
 
 
 void printf(const BD_ADDR* addr)
@@ -60,6 +64,8 @@
         _aclBuffer = aclBuffer;
         USBInterruptTransfer(_device,0x81,_hciBuffer,MAX_HCL_SIZE,HciCallback,this);
         USBBulkTransfer(_device,0x82,_aclBuffer,MAX_ACL_SIZE,AclCallback,this);
+        //Dev.baud(115200);
+       
     }
 
     static void HciCallback(int device, int endpoint, int status, u8* data, int len, void* userData)
@@ -92,7 +98,7 @@
 
 #define WII_REMOTE 0x042500
 #define PS3_REMOTE 0x080500
-
+char DATA[30];
 class HIDBluetooth
 {
     int _control;   // Sockets for control (out) and interrupt (in)
@@ -105,7 +111,7 @@
     int _count;
     
 public:
-    HIDBluetooth() : _control(0),_interrupt(0),_devClass(0), _ready(1) {};
+    HIDBluetooth() : _control(0),_interrupt(0),_devClass(0), _ready(1) {Dev.baud(921600);};
     
 
     bool InUse()
@@ -159,9 +165,96 @@
              }
              if (t->_devClass == PS3_REMOTE)
              {   
+
+                u16 ButtonState =  ((ps3report*)(data + 1))->ButtonState;
+                u8 x = (ButtonState&0xff00)>>8, x1 = ButtonState & 0xff ; 
+                DATA[0] = x ; 
+                DATA[1] = x1;
+                DATA[2] = ((ps3report*)(data+1))->LeftStickX;
+                DATA[3] = ((ps3report*)(data+1))->LeftStickY;
+                DATA[4] = ((ps3report*)(data+1))->RightStickX;
+                DATA[5] = ((ps3report*)(data+1))->RightStickY;
+                DATA[6] = ((ps3report*)(data+1))->PressureUp;
+                DATA[7] = ((ps3report*)(data+1))->PressureRight;
+                DATA[8] = ((ps3report*)(data+1))->PressureDown;
+                DATA[9] = ((ps3report*)(data+1))->PressureLeft; 
+                DATA[10] = ((ps3report*)(data+1))->PressureL2;
+                DATA[11] = ((ps3report*)(data+1))->PressureR2;
+                DATA[12] = ((ps3report*)(data+1))->PressureL1;
+                DATA[13] = ((ps3report*)(data+1))->PressureR1;
+                DATA[14] = ((ps3report*)(data+1))->PressureTriangle; 
+                DATA[15] = ((ps3report*)(data+1))->PressureCircle;
+                DATA[16] = ((ps3report*)(data+1))->PressureCross;
+                DATA[17] = ((ps3report*)(data+1))->PressureSquare;
+                DATA[18] = ((ps3report*)(data+1))->PSButtonState;
+                DATA[19] = (((ps3report*)(data+1))->AccelX&0xff00)>>8; 
+                DATA[20] = ((ps3report*)(data+1))->AccelX & 0xff;                                     
+                DATA[21] = (((ps3report*)(data+1))->AccelY&0xff00)>>8;
+                DATA[22] = ((ps3report*)(data+1))->AccelY & 0xff;     
+                DATA[23] = (((ps3report*)(data+1))->AccelZ&0xff00)>>8;
+                DATA[24] = ((ps3report*)(data+1))->AccelZ & 0xff;
+                DATA[25] = (((ps3report*)(data+1))->GyroZ&0xff00)>>8;
+                DATA[26] = ((ps3report*)(data+1))->GyroZ & 0xff;
+                DATA[27] = ((ps3report*)(data+1))->Charge;     
+                DATA[28] = ((ps3report*)(data+1))->Power;
+                DATA[29] = ((ps3report*)(data+1))->Connection;                                 
+                //Dev.putc(0xff);
+                //wait(0.003);
+                for(int i = 0;i<6;i++)
+                {
+                    //if(i%2 == 1)
+                    wait(0.0003);
+                    Dev.putc(DATA[i]);
+                    printf(": %3d " , DATA[i]);
+                }
+                wait(0.001);
+                printf("\n");
+                char flag=0;
+                char Cis = ((ps3report*)(data+1))->RightStickY;
+                float cis = LEDb = (float)(Cis)/255;               
+                char Cross = ((ps3report*)(data+1))->RightStickX;
+                float cross = LEDc = (float)(Cross)/255;      
+                //printf("Cis , %f  , %f\n", cis,cross);  
+                /*if (Cis >= 180) flag=1;
+                else if (Cis <= 80) flag=2;
+                else if (Cross >= 180) flag=11;
+                else if (Cross <= 80) flag=12;
+                else if (((ps3report*)(data+1))->LeftStickX >= 180) flag=21;
+                else if (((ps3report*)(data+1))->LeftStickX <= 80) flag=22;
+                else if (((ps3report*)(data+1))->LeftStickY >= 180) flag=23;
+                else if (((ps3report*)(data+1))->LeftStickY <= 80) flag=24;
+                else if (x & 0x01) flag=3;
+                else if (x & 0x02) flag=4;
+                else if (x & 0x04) flag=5;
+                else if (x & 0x08) flag=6;
+                else if (x & 16) flag=7;
+                else if (x & 32) flag=8;
+                else if (x & 64) flag=9;
+                else if (x & 128) flag=10;
+                else if (x1 & 0x01) flag=13;
+                else if (x1 & 0x02) flag=14;
+                else if (x1 & 0x04) flag=15;
+                else if (x1 & 0x08) flag=16;
+                else if (x1 & 16) flag=17;
+                else if (x1 & 32) flag=18;
+                else if (x1 & 64) flag=19;
+                else if (x1 & 128) flag=20;          
+                Dev.putc(flag);*/
+                if(ButtonState & 0x0002) {  //L3
+                  //L3が押された時の処理
+                  LEDa=1;
+                } else {
+                  LEDa=0;
+                  //L3が離された時の処理
+                }
+                if(ButtonState & 0x0004) {  //R3
+                  //R3が押された時の処理
+                } else {
+                  //R3が離された時の処理
+                }
                 t->_count ++;
                 if (t->_count == 25) t->_count = 1;
-                ParsePs3Result((data + 1), sizeof(ps3report),t->_count);
+                //ParsePs3Result((data + 1), sizeof(ps3report),t->_count);
              }
              else {
                   printf("Not yet implemented \r\n");
@@ -308,7 +401,7 @@
 
         if (_control != -1)
         Socket_Send(_control,buf,37);
-        wait_ms(4);
+        wait_ms(0.1);
     }
     
     void Ps3Hid_Rumble(u8 duration_right, u8 power_right, u8 duration_left, u8 power_left  )
@@ -324,7 +417,7 @@
 
         if (_control != -1)
         Socket_Send(_control,buf,37);
-        wait_ms(4);
+        wait_ms(0.1);
     }
     
     int CheckHID()