First Release
Out_PS3USB/Out_PS3USB.cpp@1:6c392ebcd4d4, 2013-07-27 (annotated)
- 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?
User | Revision | Line number | New 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 |