First Release

Dependencies:   USBDevice

Committer:
sankichi
Date:
Sat Jul 27 14:05:47 2013 +0000
Revision:
0:e1265f6b3565
First Release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sankichi 0:e1265f6b3565 1 /** Class: Out_MD
sankichi 0:e1265f6b3565 2 *
sankichi 0:e1265f6b3565 3 * Used for writing to Megadrive analog joystick input mode
sankichi 0:e1265f6b3565 4 *
sankichi 0:e1265f6b3565 5 */
sankichi 0:e1265f6b3565 6
sankichi 0:e1265f6b3565 7 #include "mbed.h"
sankichi 0:e1265f6b3565 8 #include "InputStatus.h"
sankichi 0:e1265f6b3565 9
sankichi 0:e1265f6b3565 10 class Out_MD
sankichi 0:e1265f6b3565 11 {
sankichi 0:e1265f6b3565 12 public:
sankichi 0:e1265f6b3565 13 /** Constructor: Out_MD
sankichi 0:e1265f6b3565 14 *
sankichi 0:e1265f6b3565 15 * Parameters:
sankichi 0:e1265f6b3565 16 * pn_D0 - DigitalOut for Megadrive's D0 (D-Sub 9pin connector's pin1)
sankichi 0:e1265f6b3565 17 * pn_D1 - DigitalOut for D1 (D-Sub9 pin2)
sankichi 0:e1265f6b3565 18 * pn_D2 - DigitalOut for D2 (D-Sub9 pin3)
sankichi 0:e1265f6b3565 19 * pn_D3 - DigitalOut for D3 (D-Sub9 pin4)
sankichi 0:e1265f6b3565 20 * pn_LH - DigitalOut for L/H (D-Sub9 pin6)
sankichi 0:e1265f6b3565 21 * pn_REQ - InterruptIn for Req (D-Sub9 pin7)
sankichi 0:e1265f6b3565 22 * pn_ACK - DigitalOut for Ack (D-Sub9 pin9)
sankichi 0:e1265f6b3565 23 * inputStatus - The variable holds input status
sankichi 0:e1265f6b3565 24 */
sankichi 0:e1265f6b3565 25
sankichi 0:e1265f6b3565 26 Out_MD(
sankichi 0:e1265f6b3565 27 PinName pn_D0, PinName pn_D1, PinName pn_D2, PinName pn_D3,
sankichi 0:e1265f6b3565 28 PinName pn_LH, PinName pn_REQ, PinName pn_ACK,
sankichi 0:e1265f6b3565 29 InputStatus *inputStatus
sankichi 0:e1265f6b3565 30 );
sankichi 0:e1265f6b3565 31 /*
sankichi 0:e1265f6b3565 32 void ShowReqInterval();
sankichi 0:e1265f6b3565 33 */
sankichi 0:e1265f6b3565 34 void SetupInputControll(void (*startInputFunction)(void), void (*stopInputFunction)(void));
sankichi 0:e1265f6b3565 35 class CDummy;
sankichi 0:e1265f6b3565 36 template<class T>
sankichi 0:e1265f6b3565 37 void SetupInputControll(T* inputInstance, void (T::*startInputMethod)(void), void (T::*stopInputMethod)(void))
sankichi 0:e1265f6b3565 38 {
sankichi 0:e1265f6b3565 39 _InputInstance = (CDummy*) inputInstance;
sankichi 0:e1265f6b3565 40 StartInputMethod = (void (CDummy::*)(void)) startInputMethod;
sankichi 0:e1265f6b3565 41 StopInputMethod = (void (CDummy::*)(void)) stopInputMethod;
sankichi 0:e1265f6b3565 42 }
sankichi 0:e1265f6b3565 43
sankichi 0:e1265f6b3565 44 // Public constants
sankichi 0:e1265f6b3565 45 static const int DIGITAL_PERIODICPOLLING_COUNTERMAX = 12000;//7300; // 周期ポーリングカウンタ最大値
sankichi 0:e1265f6b3565 46 // (ポーリングに使うカウンタ最大値)
sankichi 0:e1265f6b3565 47
sankichi 0:e1265f6b3565 48
sankichi 0:e1265f6b3565 49 private:
sankichi 0:e1265f6b3565 50 // Private constants
sankichi 0:e1265f6b3565 51 static const int REQUESTINTERVAL__MICROSEC = 10000; // reading period 10msec
sankichi 0:e1265f6b3565 52 static const int TRANSFERSPEED_MAX__MICROSEC = 50; // from AJOY_SUB.DOC
sankichi 0:e1265f6b3565 53 static const int TRANSFERSPEED_1_2__MICROSEC = 96;
sankichi 0:e1265f6b3565 54 static const int TRANSFERSPEED_1_3__MICROSEC = 144;
sankichi 0:e1265f6b3565 55 static const int TRANSFERSPEED_1_4__MICROSEC = 192;
sankichi 0:e1265f6b3565 56
sankichi 0:e1265f6b3565 57 static const int DIGITAL_PERIODICPOLLING_INTERVAL__MICROSEC = 7000;//10000; // 周期ポーリングの間隔
sankichi 0:e1265f6b3565 58 // (フレーム毎のゲーム機からのパッド読み取りの
sankichi 0:e1265f6b3565 59 // 前後のみ、集中してポーリングを行う)
sankichi 0:e1265f6b3565 60
sankichi 0:e1265f6b3565 61 static const int DIGITAL_STATE_RENEW_INTERVAL__MICROSEC = 2000; // 周期ポーリングの休みの間、デジタルパッド更新
sankichi 0:e1265f6b3565 62 static const int MODECHECK_INTERVAL__MICROSEC = 2000; // InputStatusのデジタルモード・アナログモード切替を見張る間隔
sankichi 0:e1265f6b3565 63
sankichi 0:e1265f6b3565 64 // mbed pins
sankichi 0:e1265f6b3565 65 DigitalOut _OUT_D0;
sankichi 0:e1265f6b3565 66 DigitalOut _OUT_D1;
sankichi 0:e1265f6b3565 67 DigitalOut _OUT_D2;
sankichi 0:e1265f6b3565 68 DigitalOut _OUT_D3;
sankichi 0:e1265f6b3565 69 DigitalOut _OUT_LH;
sankichi 0:e1265f6b3565 70 InterruptIn _INTR_REQ;
sankichi 0:e1265f6b3565 71 DigitalOut _OUT_ACK;
sankichi 0:e1265f6b3565 72 BusOut _DataBus;
sankichi 0:e1265f6b3565 73
sankichi 0:e1265f6b3565 74 // Variables
sankichi 0:e1265f6b3565 75 InputStatus *_InputStatus;
sankichi 0:e1265f6b3565 76 volatile char _InputMode;
sankichi 0:e1265f6b3565 77 int _TransferSpeed;
sankichi 0:e1265f6b3565 78 Ticker _DigitalStateRenewTicker;
sankichi 0:e1265f6b3565 79 Ticker _DigitalPeriodicPollingTicker;
sankichi 0:e1265f6b3565 80 Ticker _ModeChecker;
sankichi 0:e1265f6b3565 81 volatile int _ButtonStatus;
sankichi 0:e1265f6b3565 82 char _SwapAC; // Aボタン-Cボタンをスワップする?(マスターシステム向け)
sankichi 0:e1265f6b3565 83 char _AnalogMUSHAMethod; // 武者アレスタ向けAnalog処理を使う?
sankichi 0:e1265f6b3565 84
sankichi 0:e1265f6b3565 85 CDummy* _InputInstance;
sankichi 0:e1265f6b3565 86
sankichi 0:e1265f6b3565 87
sankichi 0:e1265f6b3565 88 // Private Method
sankichi 0:e1265f6b3565 89 void Initialize(void);
sankichi 0:e1265f6b3565 90 // void InitInterruptPriority(void);
sankichi 0:e1265f6b3565 91 void ISR_Analog_ReqFall(void);
sankichi 0:e1265f6b3565 92 void SetPinValue(int val);
sankichi 0:e1265f6b3565 93 void SetData_Analog_PhaseOf(char phase);
sankichi 0:e1265f6b3565 94
sankichi 0:e1265f6b3565 95 void DigitalStateRenewMethod(void);
sankichi 0:e1265f6b3565 96 void EnableDigitalStateRenew(void);
sankichi 0:e1265f6b3565 97 void DisableDigitalStateRenew(void);
sankichi 0:e1265f6b3565 98 void RenewDigitalPadStatus(char phase);
sankichi 0:e1265f6b3565 99
sankichi 0:e1265f6b3565 100 void RestartDigitalPeriodicPolling(void);
sankichi 0:e1265f6b3565 101 void DigitalPeriodicPollingMethod(void);
sankichi 0:e1265f6b3565 102
sankichi 0:e1265f6b3565 103 void EnableModeChecker(void);
sankichi 0:e1265f6b3565 104 void DisableModeChecker(void);
sankichi 0:e1265f6b3565 105 void ModeCheckerMethod(void);
sankichi 0:e1265f6b3565 106
sankichi 0:e1265f6b3565 107
sankichi 0:e1265f6b3565 108
sankichi 0:e1265f6b3565 109
sankichi 0:e1265f6b3565 110 void (CDummy::*StartInputMethod)(void);
sankichi 0:e1265f6b3565 111 void (CDummy::*StopInputMethod)(void);
sankichi 0:e1265f6b3565 112 void (*StartInputFunction)(void);
sankichi 0:e1265f6b3565 113 void (*StopInputFunction)(void);
sankichi 0:e1265f6b3565 114
sankichi 0:e1265f6b3565 115 void EnableInput(void);
sankichi 0:e1265f6b3565 116 void DisableInput(void);
sankichi 0:e1265f6b3565 117 };
sankichi 0:e1265f6b3565 118