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 DigitalOut led1(LED1);
sankichi 0:e1265f6b3565 4
sankichi 0:e1265f6b3565 5 //
sankichi 0:e1265f6b3565 6 // Constructor
sankichi 0:e1265f6b3565 7 //
sankichi 0:e1265f6b3565 8 Out_SSMulCon::Out_SSMulCon(
sankichi 0:e1265f6b3565 9 PinName pn_D0, PinName pn_D1, PinName pn_D2, PinName pn_D3,
sankichi 0:e1265f6b3565 10 PinName pn_TL, PinName pn_TR, PinName pn_TH,
sankichi 0:e1265f6b3565 11 InputStatus *inputStatus)
sankichi 0:e1265f6b3565 12 : _OUT_D0(pn_D0), _OUT_D1(pn_D1), _OUT_D2(pn_D2), _OUT_D3(pn_D3),
sankichi 0:e1265f6b3565 13 _INTR_TL(pn_TL), _INTR_TR(pn_TR), _OUT_TH(pn_TH)
sankichi 0:e1265f6b3565 14 {
sankichi 0:e1265f6b3565 15 _InputStatus = inputStatus;
sankichi 0:e1265f6b3565 16 Initialize();
sankichi 0:e1265f6b3565 17 }
sankichi 0:e1265f6b3565 18
sankichi 0:e1265f6b3565 19 //
sankichi 0:e1265f6b3565 20 // Initialize
sankichi 0:e1265f6b3565 21 //
sankichi 0:e1265f6b3565 22 void Out_SSMulCon::Initialize()
sankichi 0:e1265f6b3565 23 {
sankichi 0:e1265f6b3565 24
sankichi 0:e1265f6b3565 25 // Pin Setting
sankichi 0:e1265f6b3565 26 _INTR_TL.mode(PullUp);
sankichi 0:e1265f6b3565 27 _INTR_TR.mode(PullUp);
sankichi 0:e1265f6b3565 28
sankichi 0:e1265f6b3565 29 // Class Variable Setting
sankichi 0:e1265f6b3565 30 RenewOutputMode();//_OutputMode = 0;
sankichi 0:e1265f6b3565 31 _PhaseCounter = 0;
sankichi 0:e1265f6b3565 32 _NowWriting = 0;
sankichi 0:e1265f6b3565 33 _RapidFireValue = 1;
sankichi 0:e1265f6b3565 34
sankichi 0:e1265f6b3565 35 // Interrupt Setting
sankichi 0:e1265f6b3565 36 _INTR_TL.fall(this, &Out_SSMulCon::StrobeFallISR);
sankichi 0:e1265f6b3565 37 _INTR_TL.rise(this, &Out_SSMulCon::StrobeRiseISR);
sankichi 0:e1265f6b3565 38 _INTR_TR.fall(this, &Out_SSMulCon::ClockFallISR);
sankichi 0:e1265f6b3565 39 _INTR_TR.rise(this, &Out_SSMulCon::ClockRiseISR);
sankichi 0:e1265f6b3565 40
sankichi 0:e1265f6b3565 41 // Initialize pin status
sankichi 0:e1265f6b3565 42 InitializePinStatus();
sankichi 0:e1265f6b3565 43
sankichi 0:e1265f6b3565 44 }
sankichi 0:e1265f6b3565 45
sankichi 0:e1265f6b3565 46 //
sankichi 0:e1265f6b3565 47 // Initialize pin status
sankichi 0:e1265f6b3565 48 //
sankichi 0:e1265f6b3565 49 void Out_SSMulCon::InitializePinStatus()
sankichi 0:e1265f6b3565 50 {
sankichi 0:e1265f6b3565 51 SetD3D2D1D0(0,0,0,1);
sankichi 0:e1265f6b3565 52
sankichi 0:e1265f6b3565 53 _OUT_TH = 1;
sankichi 0:e1265f6b3565 54
sankichi 0:e1265f6b3565 55 }
sankichi 0:e1265f6b3565 56
sankichi 0:e1265f6b3565 57 //
sankichi 0:e1265f6b3565 58 // ISR for S0/Strobe=L
sankichi 0:e1265f6b3565 59 //
sankichi 0:e1265f6b3565 60 void Out_SSMulCon::StrobeFallISR(void)
sankichi 0:e1265f6b3565 61 {
sankichi 0:e1265f6b3565 62 if( _NowWriting != 1 )
sankichi 0:e1265f6b3565 63 {
sankichi 0:e1265f6b3565 64 /*
sankichi 0:e1265f6b3565 65 // デジタル出力・アナログ出力を_IN_CONFIGによって決める
sankichi 0:e1265f6b3565 66 _OutputMode = _IN_CONFIG;
sankichi 0:e1265f6b3565 67 led1 = _OutputMode;
sankichi 0:e1265f6b3565 68 */
sankichi 0:e1265f6b3565 69
sankichi 0:e1265f6b3565 70 // データフェーズカウンタ初期化
sankichi 0:e1265f6b3565 71 _PhaseCounter = 0;
sankichi 0:e1265f6b3565 72
sankichi 0:e1265f6b3565 73 // ピン状態の設定(phase0向けデータ)
sankichi 0:e1265f6b3565 74 //SetPinStatus();
sankichi 0:e1265f6b3565 75 InitializePinStatus();
sankichi 0:e1265f6b3565 76 SetPinStatus();
sankichi 0:e1265f6b3565 77
sankichi 0:e1265f6b3565 78 // データ出力中
sankichi 0:e1265f6b3565 79 _NowWriting = 1;
sankichi 0:e1265f6b3565 80
sankichi 0:e1265f6b3565 81 DisableInput();
sankichi 0:e1265f6b3565 82 }
sankichi 0:e1265f6b3565 83
sankichi 0:e1265f6b3565 84 RenewOutputMode();
sankichi 0:e1265f6b3565 85 }
sankichi 0:e1265f6b3565 86
sankichi 0:e1265f6b3565 87 //
sankichi 0:e1265f6b3565 88 // ISR for S0/Strobe=H
sankichi 0:e1265f6b3565 89 //
sankichi 0:e1265f6b3565 90 void Out_SSMulCon::StrobeRiseISR(void)
sankichi 0:e1265f6b3565 91 {
sankichi 0:e1265f6b3565 92 led1 = 0;
sankichi 0:e1265f6b3565 93
sankichi 0:e1265f6b3565 94 // データフェーズカウンタ初期化
sankichi 0:e1265f6b3565 95 _PhaseCounter = 0;
sankichi 0:e1265f6b3565 96
sankichi 0:e1265f6b3565 97 // データ出力終了
sankichi 0:e1265f6b3565 98 _NowWriting = 0;
sankichi 0:e1265f6b3565 99
sankichi 0:e1265f6b3565 100 // ピン状態戻す
sankichi 0:e1265f6b3565 101 InitializePinStatus();
sankichi 0:e1265f6b3565 102
sankichi 0:e1265f6b3565 103 EnableInput();
sankichi 0:e1265f6b3565 104
sankichi 0:e1265f6b3565 105 RenewOutputMode();
sankichi 0:e1265f6b3565 106
sankichi 0:e1265f6b3565 107 _RapidFireValue=!_RapidFireValue;
sankichi 0:e1265f6b3565 108 }
sankichi 0:e1265f6b3565 109
sankichi 0:e1265f6b3565 110 //
sankichi 0:e1265f6b3565 111 // ISR for S1/Clock=L
sankichi 0:e1265f6b3565 112 //
sankichi 0:e1265f6b3565 113 void Out_SSMulCon::ClockFallISR(void)
sankichi 0:e1265f6b3565 114 {
sankichi 0:e1265f6b3565 115 // データ出力中の場合のみ処理する
sankichi 0:e1265f6b3565 116 if(_NowWriting==1)
sankichi 0:e1265f6b3565 117 {
sankichi 0:e1265f6b3565 118 // アナログ出力モード
sankichi 0:e1265f6b3565 119 if( _OutputMode==OUTPUTMODE_ANALOG )
sankichi 0:e1265f6b3565 120 {
sankichi 0:e1265f6b3565 121 switch(_PhaseCounter)
sankichi 0:e1265f6b3565 122 {
sankichi 0:e1265f6b3565 123 case 0:
sankichi 0:e1265f6b3565 124 case 2:
sankichi 0:e1265f6b3565 125 case 4:
sankichi 0:e1265f6b3565 126 case 6:
sankichi 0:e1265f6b3565 127 case 8:
sankichi 0:e1265f6b3565 128 case 10:
sankichi 0:e1265f6b3565 129 case 12:
sankichi 0:e1265f6b3565 130 case 14:
sankichi 0:e1265f6b3565 131 _PhaseCounter++;
sankichi 0:e1265f6b3565 132 break;
sankichi 0:e1265f6b3565 133 }
sankichi 0:e1265f6b3565 134 }
sankichi 0:e1265f6b3565 135 // デジタル出力モード
sankichi 0:e1265f6b3565 136 else
sankichi 0:e1265f6b3565 137 {
sankichi 0:e1265f6b3565 138 switch(_PhaseCounter)
sankichi 0:e1265f6b3565 139 {
sankichi 0:e1265f6b3565 140 case 0:
sankichi 0:e1265f6b3565 141 case 2:
sankichi 0:e1265f6b3565 142 case 4:
sankichi 0:e1265f6b3565 143 case 6:
sankichi 0:e1265f6b3565 144 _PhaseCounter++;
sankichi 0:e1265f6b3565 145 break;
sankichi 0:e1265f6b3565 146 }
sankichi 0:e1265f6b3565 147 }
sankichi 0:e1265f6b3565 148 SetPinStatus();
sankichi 0:e1265f6b3565 149 _OUT_TH = 0;
sankichi 0:e1265f6b3565 150 }
sankichi 0:e1265f6b3565 151 }
sankichi 0:e1265f6b3565 152
sankichi 0:e1265f6b3565 153 //
sankichi 0:e1265f6b3565 154 // ISR for S1/Clock=H
sankichi 0:e1265f6b3565 155 //
sankichi 0:e1265f6b3565 156 void Out_SSMulCon::ClockRiseISR(void)
sankichi 0:e1265f6b3565 157 {
sankichi 0:e1265f6b3565 158 // データ出力中の場合のみ処理する
sankichi 0:e1265f6b3565 159 if(_NowWriting==1)
sankichi 0:e1265f6b3565 160 {
sankichi 0:e1265f6b3565 161 // アナログ出力モード
sankichi 0:e1265f6b3565 162 if( _OutputMode==OUTPUTMODE_ANALOG )
sankichi 0:e1265f6b3565 163 {
sankichi 0:e1265f6b3565 164 switch(_PhaseCounter)
sankichi 0:e1265f6b3565 165 {
sankichi 0:e1265f6b3565 166 case 1:
sankichi 0:e1265f6b3565 167 case 3:
sankichi 0:e1265f6b3565 168 case 5:
sankichi 0:e1265f6b3565 169 case 7:
sankichi 0:e1265f6b3565 170 case 9:
sankichi 0:e1265f6b3565 171 case 11:
sankichi 0:e1265f6b3565 172 case 13:
sankichi 0:e1265f6b3565 173 _PhaseCounter++;
sankichi 0:e1265f6b3565 174 break;
sankichi 0:e1265f6b3565 175 case 15:
sankichi 0:e1265f6b3565 176 _PhaseCounter=0;
sankichi 0:e1265f6b3565 177 break;
sankichi 0:e1265f6b3565 178 }
sankichi 0:e1265f6b3565 179 }
sankichi 0:e1265f6b3565 180 // デジタル出力モード
sankichi 0:e1265f6b3565 181 else
sankichi 0:e1265f6b3565 182 {
sankichi 0:e1265f6b3565 183 switch(_PhaseCounter)
sankichi 0:e1265f6b3565 184 {
sankichi 0:e1265f6b3565 185 case 1:
sankichi 0:e1265f6b3565 186 case 3:
sankichi 0:e1265f6b3565 187 case 5:
sankichi 0:e1265f6b3565 188 _PhaseCounter++;
sankichi 0:e1265f6b3565 189 break;
sankichi 0:e1265f6b3565 190 case 7:
sankichi 0:e1265f6b3565 191 _PhaseCounter=0;
sankichi 0:e1265f6b3565 192 break;
sankichi 0:e1265f6b3565 193 }
sankichi 0:e1265f6b3565 194 }
sankichi 0:e1265f6b3565 195
sankichi 0:e1265f6b3565 196 SetPinStatus();
sankichi 0:e1265f6b3565 197 _OUT_TH = 1;
sankichi 0:e1265f6b3565 198 }
sankichi 0:e1265f6b3565 199 }
sankichi 0:e1265f6b3565 200
sankichi 0:e1265f6b3565 201
sankichi 0:e1265f6b3565 202 //
sankichi 0:e1265f6b3565 203 // Set Pin D3,D2,D1,D0 Status
sankichi 0:e1265f6b3565 204 //
sankichi 0:e1265f6b3565 205 void Out_SSMulCon::SetD3D2D1D0(char d3, char d2, char d1, char d0)
sankichi 0:e1265f6b3565 206 {
sankichi 0:e1265f6b3565 207 _OUT_D0 = d0;
sankichi 0:e1265f6b3565 208 _OUT_D1 = d1;
sankichi 0:e1265f6b3565 209 _OUT_D2 = d2;
sankichi 0:e1265f6b3565 210 _OUT_D3 = d3;
sankichi 0:e1265f6b3565 211 }
sankichi 0:e1265f6b3565 212
sankichi 0:e1265f6b3565 213 //
sankichi 0:e1265f6b3565 214 // Set Pin D3,D2,D1,D0 Status (bus)
sankichi 0:e1265f6b3565 215 //
sankichi 0:e1265f6b3565 216 void Out_SSMulCon::SetBus(char data)
sankichi 0:e1265f6b3565 217 {
sankichi 0:e1265f6b3565 218 _OUT_D0 = data & 0x01;
sankichi 0:e1265f6b3565 219 _OUT_D1 = (data>>1) & 0x01;
sankichi 0:e1265f6b3565 220 _OUT_D2 = (data>>2) & 0x01;
sankichi 0:e1265f6b3565 221 _OUT_D3 = (data>>3) & 0x01;
sankichi 0:e1265f6b3565 222 }
sankichi 0:e1265f6b3565 223
sankichi 0:e1265f6b3565 224
sankichi 0:e1265f6b3565 225
sankichi 0:e1265f6b3565 226 //
sankichi 0:e1265f6b3565 227 // Set Pin Status
sankichi 0:e1265f6b3565 228 //
sankichi 0:e1265f6b3565 229 void Out_SSMulCon::SetPinStatus(void)
sankichi 0:e1265f6b3565 230 {
sankichi 0:e1265f6b3565 231 // データ出力中の場合のみ処理する
sankichi 0:e1265f6b3565 232 if(_NowWriting==1)
sankichi 0:e1265f6b3565 233 {
sankichi 0:e1265f6b3565 234 // Get InputStatus
sankichi 0:e1265f6b3565 235 InputStatus *inp = _InputStatus;
sankichi 0:e1265f6b3565 236 char chDat = 0;
sankichi 0:e1265f6b3565 237
sankichi 0:e1265f6b3565 238 int buttons = _InputStatus->Buttons;
sankichi 0:e1265f6b3565 239 char ch0 = _InputStatus->Ch0;
sankichi 0:e1265f6b3565 240 char ch1 = _InputStatus->Ch1;
sankichi 0:e1265f6b3565 241 char ch2 = _InputStatus->Ch2;
sankichi 0:e1265f6b3565 242 char ch3 = _InputStatus->Ch3;
sankichi 0:e1265f6b3565 243
sankichi 0:e1265f6b3565 244 char trigR;
sankichi 0:e1265f6b3565 245 char trigL;
sankichi 0:e1265f6b3565 246
sankichi 0:e1265f6b3565 247 // サイバースティック アナログ出力モード
sankichi 0:e1265f6b3565 248 if( _OutputMode==OUTPUTMODE_ANALOG )
sankichi 0:e1265f6b3565 249 {
sankichi 0:e1265f6b3565 250 switch(_PhaseCounter)
sankichi 0:e1265f6b3565 251 {
sankichi 0:e1265f6b3565 252 case 0:
sankichi 0:e1265f6b3565 253 case 1:
sankichi 0:e1265f6b3565 254 SetD3D2D1D0(0,0,0,1);
sankichi 0:e1265f6b3565 255 break;
sankichi 0:e1265f6b3565 256
sankichi 0:e1265f6b3565 257 case 2:
sankichi 0:e1265f6b3565 258 SetD3D2D1D0(0,1,1,0);
sankichi 0:e1265f6b3565 259 break;
sankichi 0:e1265f6b3565 260
sankichi 0:e1265f6b3565 261 case 3:
sankichi 0:e1265f6b3565 262 if(!(buttons & 0x01)) // G(SELECT)ボタンが押されてたら、アナログスティックで十字キー操作
sankichi 0:e1265f6b3565 263 {
sankichi 0:e1265f6b3565 264 SetD3D2D1D0
sankichi 0:e1265f6b3565 265 (
sankichi 0:e1265f6b3565 266 ch1>0xf0? 0:1,
sankichi 0:e1265f6b3565 267 ch1<0x0f? 0:1,
sankichi 0:e1265f6b3565 268 ch0>0xf0? 0:1,
sankichi 0:e1265f6b3565 269 ch0<0x0f? 0:1
sankichi 0:e1265f6b3565 270 );
sankichi 0:e1265f6b3565 271 }
sankichi 0:e1265f6b3565 272 else
sankichi 0:e1265f6b3565 273 {
sankichi 0:e1265f6b3565 274 SetD3D2D1D0(1,1,1,1);
sankichi 0:e1265f6b3565 275 }
sankichi 0:e1265f6b3565 276 break;
sankichi 0:e1265f6b3565 277
sankichi 0:e1265f6b3565 278 case 4:
sankichi 0:e1265f6b3565 279 SetD3D2D1D0(
sankichi 0:e1265f6b3565 280 ((inp->Buttons) & 0x0002)?1:0, // Start
sankichi 0:e1265f6b3565 281 ((inp->Buttons) & 0x0200)?1:0, // A
sankichi 0:e1265f6b3565 282 ((inp->Buttons) & 0x0020)?1:0, // C
sankichi 0:e1265f6b3565 283 ((inp->Buttons) & 0x0100)?1:0 // B
sankichi 0:e1265f6b3565 284 );
sankichi 0:e1265f6b3565 285 break;
sankichi 0:e1265f6b3565 286
sankichi 0:e1265f6b3565 287 case 5:
sankichi 0:e1265f6b3565 288 trigR = 1;
sankichi 0:e1265f6b3565 289 if(!(buttons & 0x01)) // G(SELECT)ボタンが押されてたら、スロットルでRキー操作
sankichi 0:e1265f6b3565 290 {
sankichi 0:e1265f6b3565 291 trigR = ch2<0x0f? 0:1; //スロットル引く
sankichi 0:e1265f6b3565 292 }
sankichi 0:e1265f6b3565 293
sankichi 0:e1265f6b3565 294 SetD3D2D1D0(
sankichi 0:e1265f6b3565 295 trigR, // R-Trigger
sankichi 0:e1265f6b3565 296 ((inp->Buttons) & 0x0010)?1:0, // D is X
sankichi 0:e1265f6b3565 297 ((inp->Buttons) & 0x0008)?1:0, // E1 is Y
sankichi 0:e1265f6b3565 298 ((inp->Buttons) & 0x0004)?1:0 // E2 is Z
sankichi 0:e1265f6b3565 299 );
sankichi 0:e1265f6b3565 300 break;
sankichi 0:e1265f6b3565 301
sankichi 0:e1265f6b3565 302 case 6:
sankichi 0:e1265f6b3565 303 trigL = 1;
sankichi 0:e1265f6b3565 304 if(!(buttons & 0x01)) // G(SELECT)ボタンが押されてたら、スロットルでLキー操作
sankichi 0:e1265f6b3565 305 {
sankichi 0:e1265f6b3565 306 trigL = ch2>0xf0? 0:1; //スロットル押す
sankichi 0:e1265f6b3565 307 }
sankichi 0:e1265f6b3565 308
sankichi 0:e1265f6b3565 309 SetD3D2D1D0(
sankichi 0:e1265f6b3565 310 trigL, // L-Trigger
sankichi 0:e1265f6b3565 311 1, // (H)
sankichi 0:e1265f6b3565 312 1, // (H)
sankichi 0:e1265f6b3565 313 1 // (H)
sankichi 0:e1265f6b3565 314 );
sankichi 0:e1265f6b3565 315 break;
sankichi 0:e1265f6b3565 316
sankichi 0:e1265f6b3565 317 case 7:
sankichi 0:e1265f6b3565 318 chDat = inp->Ch1; // Upper4bits of axis-X
sankichi 0:e1265f6b3565 319 SetBus(chDat>>4);
sankichi 0:e1265f6b3565 320 break;
sankichi 0:e1265f6b3565 321
sankichi 0:e1265f6b3565 322 case 8:
sankichi 0:e1265f6b3565 323 chDat = inp->Ch1; // Lower4bits of axis-X
sankichi 0:e1265f6b3565 324 SetBus(chDat);
sankichi 0:e1265f6b3565 325 break;
sankichi 0:e1265f6b3565 326
sankichi 0:e1265f6b3565 327 case 9:
sankichi 0:e1265f6b3565 328 chDat = inp->Ch0; // Upper4bits of axis-Y
sankichi 0:e1265f6b3565 329 SetBus(chDat>>4);
sankichi 0:e1265f6b3565 330 break;
sankichi 0:e1265f6b3565 331
sankichi 0:e1265f6b3565 332 case 10:
sankichi 0:e1265f6b3565 333 chDat = inp->Ch0; // Lower4bits of axis-Y
sankichi 0:e1265f6b3565 334 SetBus(chDat);
sankichi 0:e1265f6b3565 335 break;
sankichi 0:e1265f6b3565 336
sankichi 0:e1265f6b3565 337 case 11:
sankichi 0:e1265f6b3565 338 chDat = inp->Ch2; // Upper4bits of throttle
sankichi 0:e1265f6b3565 339 SetBus(chDat>>4);
sankichi 0:e1265f6b3565 340 break;
sankichi 0:e1265f6b3565 341
sankichi 0:e1265f6b3565 342 case 12:
sankichi 0:e1265f6b3565 343 chDat = inp->Ch2; // Lower4bits of throttle
sankichi 0:e1265f6b3565 344 SetBus(chDat);
sankichi 0:e1265f6b3565 345 break;
sankichi 0:e1265f6b3565 346
sankichi 0:e1265f6b3565 347 case 13:
sankichi 0:e1265f6b3565 348 SetD3D2D1D0(0,0,0,0); // L Trigger Upper 4bits
sankichi 0:e1265f6b3565 349 break;
sankichi 0:e1265f6b3565 350
sankichi 0:e1265f6b3565 351 case 14:
sankichi 0:e1265f6b3565 352 SetD3D2D1D0(0,0,0,0); // L Trigger Lower 4bits
sankichi 0:e1265f6b3565 353 break;
sankichi 0:e1265f6b3565 354
sankichi 0:e1265f6b3565 355 case 15:
sankichi 0:e1265f6b3565 356 SetD3D2D1D0(0,0,0,0); // final phase
sankichi 0:e1265f6b3565 357 break;
sankichi 0:e1265f6b3565 358
sankichi 0:e1265f6b3565 359 }
sankichi 0:e1265f6b3565 360 }
sankichi 0:e1265f6b3565 361 // サイバースティック デジタル出力モード
sankichi 0:e1265f6b3565 362 else if( _OutputMode==OUTPUTMODE_DIGITAL )
sankichi 0:e1265f6b3565 363 {
sankichi 0:e1265f6b3565 364 switch(_PhaseCounter)
sankichi 0:e1265f6b3565 365 {
sankichi 0:e1265f6b3565 366 case 0:
sankichi 0:e1265f6b3565 367 SetD3D2D1D0(0,0,0,1);
sankichi 0:e1265f6b3565 368 break;
sankichi 0:e1265f6b3565 369
sankichi 0:e1265f6b3565 370 case 1:
sankichi 0:e1265f6b3565 371 SetD3D2D1D0(0,0,0,0);
sankichi 0:e1265f6b3565 372 break;
sankichi 0:e1265f6b3565 373
sankichi 0:e1265f6b3565 374 case 2:
sankichi 0:e1265f6b3565 375 SetD3D2D1D0(0,0,1,0);
sankichi 0:e1265f6b3565 376 break;
sankichi 0:e1265f6b3565 377
sankichi 0:e1265f6b3565 378 case 3:
sankichi 0:e1265f6b3565 379 SetD3D2D1D0(
sankichi 0:e1265f6b3565 380 ((inp->Buttons) & 0x0400)? 1 : 0, // Right
sankichi 0:e1265f6b3565 381 ((inp->Buttons) & 0x0800)? 1 : 0, // Left
sankichi 0:e1265f6b3565 382 ((inp->Buttons) & 0x1000)? 1 : 0, // Down
sankichi 0:e1265f6b3565 383 ((inp->Buttons) & 0x2000)? 1 : 0 // Up
sankichi 0:e1265f6b3565 384 );
sankichi 0:e1265f6b3565 385
sankichi 0:e1265f6b3565 386 break;
sankichi 0:e1265f6b3565 387
sankichi 0:e1265f6b3565 388 case 4:
sankichi 0:e1265f6b3565 389 // サイバースティックはStartボタンが無い縺ョで、Dで代用
sankichi 0:e1265f6b3565 390 SetD3D2D1D0(
sankichi 0:e1265f6b3565 391 (((inp->Buttons) & 0x0002)?1:0) & (((inp->Buttons) & 0x0010)?1:0), // Start & D
sankichi 0:e1265f6b3565 392 ((inp->Buttons) & 0x0200)?1:0, // A
sankichi 0:e1265f6b3565 393 ((inp->Buttons) & 0x0020)?1:0, // C
sankichi 0:e1265f6b3565 394 ((inp->Buttons) & 0x0100)?1:0 // B
sankichi 0:e1265f6b3565 395 );
sankichi 0:e1265f6b3565 396 break;
sankichi 0:e1265f6b3565 397
sankichi 0:e1265f6b3565 398 case 5:
sankichi 0:e1265f6b3565 399 SetD3D2D1D0(
sankichi 0:e1265f6b3565 400 ((inp->Buttons) & 0x8000)?1:0, // R-Trigger(=ThrotUp)
sankichi 0:e1265f6b3565 401 ((inp->Buttons) & 0x0010)?1:0, // X
sankichi 0:e1265f6b3565 402 ((inp->Buttons) & 0x0008)?1:0, // Y
sankichi 0:e1265f6b3565 403 ((inp->Buttons) & 0x0004)?1:0 // Z
sankichi 0:e1265f6b3565 404 );
sankichi 0:e1265f6b3565 405 break;
sankichi 0:e1265f6b3565 406
sankichi 0:e1265f6b3565 407 case 6:
sankichi 0:e1265f6b3565 408 SetD3D2D1D0(
sankichi 0:e1265f6b3565 409 ((inp->Buttons) & 0x4000)?1:0, // L-Trigger
sankichi 0:e1265f6b3565 410 1, // (H)
sankichi 0:e1265f6b3565 411 1, // (H)
sankichi 0:e1265f6b3565 412 1 // (H)
sankichi 0:e1265f6b3565 413 );
sankichi 0:e1265f6b3565 414 break;
sankichi 0:e1265f6b3565 415
sankichi 0:e1265f6b3565 416 case 7:
sankichi 0:e1265f6b3565 417 SetD3D2D1D0(0,0,0,0);
sankichi 0:e1265f6b3565 418 break;
sankichi 0:e1265f6b3565 419 }
sankichi 0:e1265f6b3565 420 }
sankichi 0:e1265f6b3565 421 // 6B
sankichi 0:e1265f6b3565 422 else if( _OutputMode==OUTPUTMODE_6B )
sankichi 0:e1265f6b3565 423 {
sankichi 0:e1265f6b3565 424 switch(_PhaseCounter)
sankichi 0:e1265f6b3565 425 {
sankichi 0:e1265f6b3565 426 case 0:
sankichi 0:e1265f6b3565 427 SetD3D2D1D0(0,0,0,1);
sankichi 0:e1265f6b3565 428 break;
sankichi 0:e1265f6b3565 429
sankichi 0:e1265f6b3565 430 case 1:
sankichi 0:e1265f6b3565 431 SetD3D2D1D0(0,0,0,0);
sankichi 0:e1265f6b3565 432 break;
sankichi 0:e1265f6b3565 433
sankichi 0:e1265f6b3565 434 case 2:
sankichi 0:e1265f6b3565 435 SetD3D2D1D0(0,0,1,0);
sankichi 0:e1265f6b3565 436 break;
sankichi 0:e1265f6b3565 437
sankichi 0:e1265f6b3565 438 case 3:
sankichi 0:e1265f6b3565 439 SetD3D2D1D0(
sankichi 0:e1265f6b3565 440 ((inp->Buttons) & 0x0400)? 1 : 0, // Right
sankichi 0:e1265f6b3565 441 ((inp->Buttons) & 0x0800)? 1 : 0, // Left
sankichi 0:e1265f6b3565 442 ((inp->Buttons) & 0x1000)? 1 : 0, // Down
sankichi 0:e1265f6b3565 443 ((inp->Buttons) & 0x2000)? 1 : 0 // Up
sankichi 0:e1265f6b3565 444 );
sankichi 0:e1265f6b3565 445
sankichi 0:e1265f6b3565 446 break;
sankichi 0:e1265f6b3565 447
sankichi 0:e1265f6b3565 448 case 4:
sankichi 0:e1265f6b3565 449 // modeキーが押されてたら、_RapidFireValue値を有効に
sankichi 0:e1265f6b3565 450 if( !((inp->Buttons) & 0x0001) )
sankichi 0:e1265f6b3565 451 {
sankichi 0:e1265f6b3565 452 SetD3D2D1D0(
sankichi 0:e1265f6b3565 453 ((inp->Buttons) & 0x0002)?1:0, // Start
sankichi 0:e1265f6b3565 454 ((inp->Buttons) & 0x0200)?1:_RapidFireValue, // A
sankichi 0:e1265f6b3565 455 ((inp->Buttons) & 0x0020)?1:_RapidFireValue, // C
sankichi 0:e1265f6b3565 456 ((inp->Buttons) & 0x0100)?1:_RapidFireValue // B
sankichi 0:e1265f6b3565 457 );
sankichi 0:e1265f6b3565 458 }
sankichi 0:e1265f6b3565 459 else
sankichi 0:e1265f6b3565 460 {
sankichi 0:e1265f6b3565 461 SetD3D2D1D0(
sankichi 0:e1265f6b3565 462 ((inp->Buttons) & 0x0002)?1:0, // Start
sankichi 0:e1265f6b3565 463 ((inp->Buttons) & 0x0200)?1:0, // A
sankichi 0:e1265f6b3565 464 ((inp->Buttons) & 0x0020)?1:0, // C
sankichi 0:e1265f6b3565 465 ((inp->Buttons) & 0x0100)?1:0 // B
sankichi 0:e1265f6b3565 466 );
sankichi 0:e1265f6b3565 467 }
sankichi 0:e1265f6b3565 468 break;
sankichi 0:e1265f6b3565 469
sankichi 0:e1265f6b3565 470 case 5:
sankichi 0:e1265f6b3565 471 // modeキーが押されてたら、_RapidFireValue値を有効に
sankichi 0:e1265f6b3565 472 if( !((inp->Buttons) & 0x0001) )
sankichi 0:e1265f6b3565 473 {
sankichi 0:e1265f6b3565 474 // Rトリガはmode+右
sankichi 0:e1265f6b3565 475 SetD3D2D1D0(
sankichi 0:e1265f6b3565 476 ((inp->Buttons) & 0x0401)?1:0, // R-Trigger
sankichi 0:e1265f6b3565 477 ((inp->Buttons) & 0x0010)?1:_RapidFireValue, // X
sankichi 0:e1265f6b3565 478 ((inp->Buttons) & 0x0008)?1:_RapidFireValue, // Y
sankichi 0:e1265f6b3565 479 ((inp->Buttons) & 0x0004)?1:_RapidFireValue // Z
sankichi 0:e1265f6b3565 480 );
sankichi 0:e1265f6b3565 481 }
sankichi 0:e1265f6b3565 482 else
sankichi 0:e1265f6b3565 483 {
sankichi 0:e1265f6b3565 484 // Rトリガはmode+右 <-おかしい?
sankichi 0:e1265f6b3565 485 SetD3D2D1D0(
sankichi 0:e1265f6b3565 486 ((inp->Buttons) & 0x0401)?1:0, // R-Trigger
sankichi 0:e1265f6b3565 487 ((inp->Buttons) & 0x0010)?1:0, // X
sankichi 0:e1265f6b3565 488 ((inp->Buttons) & 0x0008)?1:0, // Y
sankichi 0:e1265f6b3565 489 ((inp->Buttons) & 0x0004)?1:0 // Z
sankichi 0:e1265f6b3565 490 );
sankichi 0:e1265f6b3565 491 }
sankichi 0:e1265f6b3565 492 break;
sankichi 0:e1265f6b3565 493
sankichi 0:e1265f6b3565 494 case 6:
sankichi 0:e1265f6b3565 495 // Lトリガはmode+左
sankichi 0:e1265f6b3565 496 SetD3D2D1D0(
sankichi 0:e1265f6b3565 497 ((inp->Buttons) & 0x0801)?1:0, // L-Trigger
sankichi 0:e1265f6b3565 498 1, // (H)
sankichi 0:e1265f6b3565 499 1, // (H)
sankichi 0:e1265f6b3565 500 1 // (H)
sankichi 0:e1265f6b3565 501 );
sankichi 0:e1265f6b3565 502 break;
sankichi 0:e1265f6b3565 503
sankichi 0:e1265f6b3565 504 case 7:
sankichi 0:e1265f6b3565 505 SetD3D2D1D0(0,0,0,0);
sankichi 0:e1265f6b3565 506 break;
sankichi 0:e1265f6b3565 507 }
sankichi 0:e1265f6b3565 508 }
sankichi 0:e1265f6b3565 509
sankichi 0:e1265f6b3565 510 }
sankichi 0:e1265f6b3565 511 }
sankichi 0:e1265f6b3565 512
sankichi 0:e1265f6b3565 513
sankichi 0:e1265f6b3565 514 //
sankichi 0:e1265f6b3565 515 // Set output mode
sankichi 0:e1265f6b3565 516 //
sankichi 0:e1265f6b3565 517 void Out_SSMulCon::RenewOutputMode(void)
sankichi 0:e1265f6b3565 518 {
sankichi 0:e1265f6b3565 519 switch(_InputStatus->InputDeviceType)
sankichi 0:e1265f6b3565 520 {
sankichi 0:e1265f6b3565 521 //
sankichi 0:e1265f6b3565 522 // Input: CyberStick ANALOG mode
sankichi 0:e1265f6b3565 523 //
sankichi 0:e1265f6b3565 524 case NiseKabuto::CONFIG_INMODE_CYBERSTICK_ANALOG:
sankichi 0:e1265f6b3565 525 _OutputMode = OUTPUTMODE_ANALOG;
sankichi 0:e1265f6b3565 526 break;
sankichi 0:e1265f6b3565 527
sankichi 0:e1265f6b3565 528 //
sankichi 0:e1265f6b3565 529 // Input: CyberStick DIGITAL mode
sankichi 0:e1265f6b3565 530 // 6B
sankichi 0:e1265f6b3565 531 //
sankichi 0:e1265f6b3565 532 case NiseKabuto::CONFIG_INMODE_CYBERSTICK_DIGITAL:
sankichi 0:e1265f6b3565 533 _OutputMode = OUTPUTMODE_DIGITAL;
sankichi 0:e1265f6b3565 534 break;
sankichi 0:e1265f6b3565 535
sankichi 0:e1265f6b3565 536 case NiseKabuto::CONFIG_INMODE_MD6B:
sankichi 0:e1265f6b3565 537 _OutputMode = OUTPUTMODE_6B;
sankichi 0:e1265f6b3565 538 break;
sankichi 0:e1265f6b3565 539
sankichi 0:e1265f6b3565 540 default:
sankichi 0:e1265f6b3565 541 _OutputMode = OUTPUTMODE_ANALOG;
sankichi 0:e1265f6b3565 542 break;
sankichi 0:e1265f6b3565 543 }
sankichi 0:e1265f6b3565 544 }
sankichi 0:e1265f6b3565 545
sankichi 0:e1265f6b3565 546
sankichi 0:e1265f6b3565 547 void Out_SSMulCon::SetupInputControll(void (*startInputFunction)(void), void (*stopInputFunction)(void))
sankichi 0:e1265f6b3565 548 {
sankichi 0:e1265f6b3565 549 StartInputFunction = startInputFunction;
sankichi 0:e1265f6b3565 550 StopInputFunction = stopInputFunction;
sankichi 0:e1265f6b3565 551 }
sankichi 0:e1265f6b3565 552
sankichi 0:e1265f6b3565 553 void Out_SSMulCon::EnableInput(void)
sankichi 0:e1265f6b3565 554 {
sankichi 0:e1265f6b3565 555 if(_InputInstance && StartInputMethod)
sankichi 0:e1265f6b3565 556 {
sankichi 0:e1265f6b3565 557 (_InputInstance->*StartInputMethod)();
sankichi 0:e1265f6b3565 558 }
sankichi 0:e1265f6b3565 559 else if(StartInputFunction)
sankichi 0:e1265f6b3565 560 {
sankichi 0:e1265f6b3565 561 StartInputFunction();
sankichi 0:e1265f6b3565 562 }
sankichi 0:e1265f6b3565 563 }
sankichi 0:e1265f6b3565 564
sankichi 0:e1265f6b3565 565 void Out_SSMulCon::DisableInput(void)
sankichi 0:e1265f6b3565 566 {
sankichi 0:e1265f6b3565 567 if(_InputInstance && StopInputMethod)
sankichi 0:e1265f6b3565 568 {
sankichi 0:e1265f6b3565 569 (_InputInstance->*StopInputMethod)();
sankichi 0:e1265f6b3565 570 }
sankichi 0:e1265f6b3565 571 else if(StopInputFunction)
sankichi 0:e1265f6b3565 572 {
sankichi 0:e1265f6b3565 573 StopInputFunction();
sankichi 0:e1265f6b3565 574 }
sankichi 0:e1265f6b3565 575 }
sankichi 0:e1265f6b3565 576
sankichi 0:e1265f6b3565 577