First Release

Dependencies:   USBDevice

Committer:
sankichi
Date:
Sat Jul 27 14:19:33 2013 +0000
Revision:
1:6c392ebcd4d4
Parent:
0:e1265f6b3565
First release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sankichi 0:e1265f6b3565 1 #include "NiseKabuto.h"
sankichi 0:e1265f6b3565 2
sankichi 0:e1265f6b3565 3 //
sankichi 0:e1265f6b3565 4 // Constructor
sankichi 0:e1265f6b3565 5 //
sankichi 0:e1265f6b3565 6 Out_PS3USB::Out_PS3USB(InputStatus *inputStatus)
sankichi 0:e1265f6b3565 7 {
sankichi 0:e1265f6b3565 8 // wait(1);
sankichi 0:e1265f6b3565 9 _InputStatus = inputStatus;
sankichi 0:e1265f6b3565 10 _MyJS = new USBJoystick();
sankichi 0:e1265f6b3565 11 Initialize();
sankichi 0:e1265f6b3565 12 }
sankichi 0:e1265f6b3565 13
sankichi 0:e1265f6b3565 14 //
sankichi 0:e1265f6b3565 15 // Initialize
sankichi 0:e1265f6b3565 16 //
sankichi 0:e1265f6b3565 17 void Out_PS3USB::Initialize()
sankichi 0:e1265f6b3565 18 {
sankichi 0:e1265f6b3565 19
sankichi 0:e1265f6b3565 20 // Pin Setting
sankichi 0:e1265f6b3565 21
sankichi 0:e1265f6b3565 22 // Class Variable Setting
sankichi 0:e1265f6b3565 23
sankichi 0:e1265f6b3565 24 // Interrupt Setting
sankichi 0:e1265f6b3565 25 _USBUpdateTicker.attach_us(this, &Out_PS3USB::USBUpdate, USBUPDATEINTERVAL__MSEC*1000);
sankichi 0:e1265f6b3565 26 }
sankichi 0:e1265f6b3565 27
sankichi 0:e1265f6b3565 28
sankichi 0:e1265f6b3565 29 //
sankichi 0:e1265f6b3565 30 // USB Joystick Update Method
sankichi 0:e1265f6b3565 31 //
sankichi 0:e1265f6b3565 32 void Out_PS3USB::USBUpdate()
sankichi 0:e1265f6b3565 33 {
sankichi 0:e1265f6b3565 34 int16_t x;
sankichi 0:e1265f6b3565 35 int16_t y;
sankichi 0:e1265f6b3565 36 int16_t z;
sankichi 0:e1265f6b3565 37 int16_t rz;
sankichi 0:e1265f6b3565 38 uint32_t buttons;
sankichi 0:e1265f6b3565 39 uint8_t button_hat;
sankichi 0:e1265f6b3565 40
sankichi 0:e1265f6b3565 41 int in_Buttons;
sankichi 0:e1265f6b3565 42
sankichi 0:e1265f6b3565 43 in_Buttons = _InputStatus->Buttons;
sankichi 0:e1265f6b3565 44
sankichi 0:e1265f6b3565 45 // Dボタンが押されている/押されていないで送る情報を変える
sankichi 0:e1265f6b3565 46
sankichi 0:e1265f6b3565 47 if( (in_Buttons & 0x0010) )
sankichi 0:e1265f6b3565 48 {
sankichi 0:e1265f6b3565 49 // Dボタン押されてない
sankichi 0:e1265f6b3565 50
sankichi 0:e1265f6b3565 51 x = (int)(0x80 + _InputStatus->Ch1)& 0xff; // x
sankichi 0:e1265f6b3565 52 y = (int)(0x80 + _InputStatus->Ch0)& 0xff; // y
sankichi 0:e1265f6b3565 53 z = (int)(0x80 + 0x80) & 0xff; // z
sankichi 0:e1265f6b3565 54 rz = (int)(0x80 + _InputStatus->Ch2)& 0xff; // rz
sankichi 0:e1265f6b3565 55
sankichi 0:e1265f6b3565 56 buttons =
sankichi 0:e1265f6b3565 57 ((in_Buttons & 0x0020)? 0: 0x0001) | // button □
sankichi 0:e1265f6b3565 58 ((in_Buttons & 0x0100)? 0: 0x0002) | // ×
sankichi 0:e1265f6b3565 59 ((in_Buttons & 0x0200)? 0: 0x0004) | // ○
sankichi 0:e1265f6b3565 60 0 | // △
sankichi 0:e1265f6b3565 61 ((in_Buttons & 0x0008)? 0: 0x0010) | // L1
sankichi 0:e1265f6b3565 62 ((in_Buttons & 0x0004)? 0: 0x0020) | // R1
sankichi 0:e1265f6b3565 63 0 | // L2
sankichi 0:e1265f6b3565 64 0 | // R2
sankichi 0:e1265f6b3565 65 ((in_Buttons & 0x0001)? 0: 0x0100) | // SELECT
sankichi 0:e1265f6b3565 66 ((in_Buttons & 0x0002)? 0: 0x0200) | // START
sankichi 0:e1265f6b3565 67 0 | // L3
sankichi 0:e1265f6b3565 68 0 | // R3
sankichi 0:e1265f6b3565 69 0 ; // PS button
sankichi 0:e1265f6b3565 70
sankichi 0:e1265f6b3565 71 button_hat = 0;
sankichi 0:e1265f6b3565 72
sankichi 0:e1265f6b3565 73 }
sankichi 0:e1265f6b3565 74 else
sankichi 0:e1265f6b3565 75 {
sankichi 0:e1265f6b3565 76 // Dボタン押されてる
sankichi 0:e1265f6b3565 77
sankichi 0:e1265f6b3565 78 x = (int)(0x80 + 0x80)& 0xff; // x
sankichi 0:e1265f6b3565 79 y = (int)(0x80 + 0x80)& 0xff; // y
sankichi 0:e1265f6b3565 80 z = (int)(0x80 + _InputStatus->Ch2) & 0xff; // z
sankichi 0:e1265f6b3565 81 rz = (int)(0x80 + 0x80)& 0xff; // rz
sankichi 0:e1265f6b3565 82
sankichi 0:e1265f6b3565 83 buttons =
sankichi 0:e1265f6b3565 84 0 | // button □
sankichi 0:e1265f6b3565 85 0 | // ×
sankichi 0:e1265f6b3565 86 0 | // ○
sankichi 0:e1265f6b3565 87 ((in_Buttons & 0x0100)? 0: 0x0008) | // △
sankichi 0:e1265f6b3565 88 0 | // L1
sankichi 0:e1265f6b3565 89 0 | // R1
sankichi 0:e1265f6b3565 90 ((in_Buttons & 0x0008)? 0: 0x0040) | // L2
sankichi 0:e1265f6b3565 91 ((in_Buttons & 0x0004)? 0: 0x0080) | // R2
sankichi 0:e1265f6b3565 92 0 | // SELECT
sankichi 0:e1265f6b3565 93 0 | // START
sankichi 0:e1265f6b3565 94 ((in_Buttons & 0x0200)? 0: 0x0400) | // L3
sankichi 0:e1265f6b3565 95 ((in_Buttons & 0x0020)? 0: 0x0800) | // R3
sankichi 0:e1265f6b3565 96 ((in_Buttons & 0x0002)? 0: 0x1000) ; // PS button
sankichi 0:e1265f6b3565 97
sankichi 0:e1265f6b3565 98 button_hat =
sankichi 0:e1265f6b3565 99 (( (_InputStatus->Ch0<0x20) )? 0x01: 0) | // hat up
sankichi 0:e1265f6b3565 100 (( (_InputStatus->Ch0>0xe0) )? 0x02: 0) | // down
sankichi 0:e1265f6b3565 101 (( (_InputStatus->Ch1<0x10) )? 0x04: 0) | // left
sankichi 0:e1265f6b3565 102 (( (_InputStatus->Ch1>0xe0) )? 0x08: 0) ; // right
sankichi 0:e1265f6b3565 103 }
sankichi 0:e1265f6b3565 104
sankichi 0:e1265f6b3565 105 _MyJS->update(x, y, z, rz, buttons, button_hat);
sankichi 0:e1265f6b3565 106
sankichi 0:e1265f6b3565 107 /*
sankichi 0:e1265f6b3565 108 _MyJS->update( //int16_t x, int16_t y, int16_t z, int16_t rz, uint32_t buttons, uint8_t button_hat
sankichi 0:e1265f6b3565 109 (int)(0x80 + _InputStatus->Ch1)& 0xff, // x
sankichi 0:e1265f6b3565 110 (int)(0x80 + _InputStatus->Ch0)& 0xff, // y
sankichi 0:e1265f6b3565 111 (int)(0x80 + 0x80) & 0xff, // z
sankichi 0:e1265f6b3565 112 (int)(0x80 + _InputStatus->Ch2)& 0xff, // rz
sankichi 0:e1265f6b3565 113
sankichi 0:e1265f6b3565 114 ((_InputStatus->Buttons & 0x0020)? 0: 0x0001) | // button □
sankichi 0:e1265f6b3565 115 ((_InputStatus->Buttons & 0x0100)? 0: 0x0002) | // ×
sankichi 0:e1265f6b3565 116 ((_InputStatus->Buttons & 0x0200)? 0: 0x0004) | // ○
sankichi 0:e1265f6b3565 117 ((!(_InputStatus->Buttons & 0x0010) && !(_InputStatus->Buttons & 0x0100))? 0x0008: 0) | // △
sankichi 0:e1265f6b3565 118 ((_InputStatus->Buttons & 0x0008)? 0: 0x0010) | // L1
sankichi 0:e1265f6b3565 119 ((_InputStatus->Buttons & 0x0004)? 0: 0x0020) | // R2
sankichi 0:e1265f6b3565 120 ((!(_InputStatus->Buttons & 0x0010) && !(_InputStatus->Buttons & 0x0008))? 0x0040: 0) | // L2
sankichi 0:e1265f6b3565 121 ((!(_InputStatus->Buttons & 0x0010) && !(_InputStatus->Buttons & 0x0004))? 0x0080: 0) | // R2
sankichi 0:e1265f6b3565 122 ((_InputStatus->Buttons & 0x0001)? 0: 0x0100) | // SELECT
sankichi 0:e1265f6b3565 123 ((_InputStatus->Buttons & 0x0002)? 0: 0x0200) | // START
sankichi 0:e1265f6b3565 124 ((!(_InputStatus->Buttons & 0x0010) && (_InputStatus->Ch2<0x20))? 0x0400: 0) | // L3?
sankichi 0:e1265f6b3565 125 ((!(_InputStatus->Buttons & 0x0010) && (_InputStatus->Ch2>0xe0))? 0x0800: 0) | // R3?
sankichi 0:e1265f6b3565 126 ((!(_InputStatus->Buttons & 0x0010) && !(_InputStatus->Buttons & 0x0002))? 0x1000: 0), // PS button
sankichi 0:e1265f6b3565 127
sankichi 0:e1265f6b3565 128 ((!(_InputStatus->Buttons & 0x0010) && (_InputStatus->Ch0<0x20))? 0x01: 0) | // hat up
sankichi 0:e1265f6b3565 129 ((!(_InputStatus->Buttons & 0x0010) && (_InputStatus->Ch0>0xe0))? 0x02: 0) | // down
sankichi 0:e1265f6b3565 130 ((!(_InputStatus->Buttons & 0x0010) && (_InputStatus->Ch1<0x10))? 0x04: 0) | // left
sankichi 0:e1265f6b3565 131 ((!(_InputStatus->Buttons & 0x0010) && (_InputStatus->Ch1>0xe0))? 0x08: 0) // right
sankichi 0:e1265f6b3565 132 );
sankichi 0:e1265f6b3565 133 */
sankichi 0:e1265f6b3565 134 }
sankichi 0:e1265f6b3565 135
sankichi 0:e1265f6b3565 136
sankichi 0:e1265f6b3565 137
sankichi 0:e1265f6b3565 138
sankichi 0:e1265f6b3565 139
sankichi 0:e1265f6b3565 140 void Out_PS3USB::SetupInputControll(void (*startInputFunction)(void), void (*stopInputFunction)(void))
sankichi 0:e1265f6b3565 141 {
sankichi 0:e1265f6b3565 142 StartInputFunction = startInputFunction;
sankichi 0:e1265f6b3565 143 StopInputFunction = stopInputFunction;
sankichi 0:e1265f6b3565 144 }
sankichi 0:e1265f6b3565 145
sankichi 0:e1265f6b3565 146 void Out_PS3USB::EnableInput(void)
sankichi 0:e1265f6b3565 147 {
sankichi 0:e1265f6b3565 148 if(_InputInstance && StartInputMethod)
sankichi 0:e1265f6b3565 149 {
sankichi 0:e1265f6b3565 150 (_InputInstance->*StartInputMethod)();
sankichi 0:e1265f6b3565 151 }
sankichi 0:e1265f6b3565 152 else if(StartInputFunction)
sankichi 0:e1265f6b3565 153 {
sankichi 0:e1265f6b3565 154 StartInputFunction();
sankichi 0:e1265f6b3565 155 }
sankichi 0:e1265f6b3565 156 }
sankichi 0:e1265f6b3565 157
sankichi 0:e1265f6b3565 158 void Out_PS3USB::DisableInput(void)
sankichi 0:e1265f6b3565 159 {
sankichi 0:e1265f6b3565 160 if(_InputInstance && StopInputMethod)
sankichi 0:e1265f6b3565 161 {
sankichi 0:e1265f6b3565 162 (_InputInstance->*StopInputMethod)();
sankichi 0:e1265f6b3565 163 }
sankichi 0:e1265f6b3565 164 else if(StopInputFunction)
sankichi 0:e1265f6b3565 165 {
sankichi 0:e1265f6b3565 166 StopInputFunction();
sankichi 0:e1265f6b3565 167 }
sankichi 0:e1265f6b3565 168 }
sankichi 0:e1265f6b3565 169
sankichi 0:e1265f6b3565 170