First Release
Out_MD/Out_MD.h@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 | /** 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 |