新部内対抗A班 / Mbed 2 deprecated PS3_BlueUSB_user_ver_circlewarA

Dependencies:   mbed

Fork of PS3_BlueUSB_user_ver_circlewar by 智也 馬場

User.cpp

Committer:
jack0325suzu
Date:
2016-02-17
Revision:
14:639d019dfee8
Parent:
12:d35077f98a08
Child:
15:d9485d4c3b8c

File content as of revision 14:639d019dfee8:


/*分かれ!J!*/

#include "Utils.h"
#include "USBHost.h"
#include "hci.h"
#include "ps3.h"
#include "User.h"
#include "mbed.h"
#define DEBUG_MODE

int RSX,RSY,LSX,LSY,BSU,BSL;
//これより下に関数外に書く要素を記入する
PwmOut led1(LED1);
PwmOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);
DigitalOut LA(p21);
DigitalOut RA(p23);
DigitalOut LH(p22);
DigitalOut RH(p24);
DigitalOut CH(p25);
SPI m(p5, p6, p7);
DigitalOut cs(p8);
void UserLoopSetting(){
    //一度だけ行いたい初期設定をここに書く
    led1.period_ms(20);
}

void UserLoop(char n,const u8* data){
    u16 ButtonState;
    if(n==0){//有線Ps3USB.cpp
        RSX = ((ps3report*)data)->RightStickX;
        RSY = ((ps3report*)data)->RightStickY;
        LSX = ((ps3report*)data)->LeftStickX;
        LSY = ((ps3report*)data)->LeftStickY;
        BSU = (u8)(((ps3report*)data)->ButtonState & 0x00ff);
        BSL = (u8)(((ps3report*)data)->ButtonState >> 8);
        //ボタンの処理
        ButtonState =  ((ps3report*)data)->ButtonState;
    }else {//無線TestShell.cpp
        RSX = ((ps3report*)(data + 1))->RightStickX;
        RSY = ((ps3report*)(data + 1))->RightStickY;
        LSX = ((ps3report*)(data + 1))->LeftStickX;
        LSY = ((ps3report*)(data + 1))->LeftStickY;
        BSU = (u8)(((ps3report*)(data + 1))->ButtonState & 0x00ff);
        BSL = (u8)(((ps3report*)(data + 1))->ButtonState >> 8);
        //ボタンの処理
        ButtonState =  ((ps3report*)(data + 1))->ButtonState;
    }
    //ここより下にプログラムを書く
    //データ取得例
    int M=0;
    m.format(16,3);
    m.frequency(1000000);
    cs=0;
    if((ButtonState >> BUTTONCIRCLE)&1) {
        //○が押されたとき
    }
    if((ButtonState >> BUTTONL2)&1){
        LA=1;
        }
    else if((ButtonState >> BUTTONR2)&1){
        RA=1;
        }
    else if((ButtonState >> BUTTONCROSS)&1){
        RA=1;
        LA=1;
        }
    else if((ButtonState >> BUTTONCIRCLE)&1){
        RH=1;
        }
    else if((ButtonState >> BUTTONTRIANGEL)&1){
        CH=1;
        }
    else if((ButtonState >> BUTTONSQUARE)&1){
        LH=1;
        }
    if((ButtonState >> BUTTONR1)&1){
        M+=1 << 15;
        }
    else if((ButtonState >> BUTTONL1)&1){
        M+=1 << 14;
        }
    if(LSX-128>=0){
        M+=1 << 13;
        M+=((LSX-128)/2) << 7;
        }
    else if(LSX-128<0){
        if(128-LSX==128)M+=63 << 7;
        else M+=((128-LSX)/2) << 7;
        }
    if(LSY-127<=0){
        M+=1 << 6;
        M+=((127-LSY)/2);
        }
    else if(LSY-127>0){
        if(LSY-127==128)M+=63;
        else M+=(LSY-127)/2;
        }
    #ifdef DEBUG_MODE
    int MM,i,MA[16];
    MM=M;
    for(i=0;MM>0;i++){
        MA[i]=MM % 2;
        MM=MM/2;
    }
    for(i=i+1;i<16;i++){
        MA[i]=0;
    }
    for(i=15;i>=0;i--){printf("%d",MA[i]);}
    printf("\r\n");
    #endif    
    //printf("LSX=%d,LSY=%d\r\n",LSX,LSY);
    printf("M=%d \r\n",M);
    
    m.write(M);    
    
    led1=LSX/256.0f;
    led2=LSY/256.0f;
    led3=ButtonState & 0x0400;  //L1の状態
    led4=ButtonState & 0x0800;  //R1の状態
    //値の取得はps3.hを参照
    cs=1;
}