Controller Class for Mbed.

Committer:
kikuchi8810
Date:
Fri Dec 17 10:04:13 2021 +0000
Revision:
1:ab1c94d6f4fb
Parent:
0:4f5b9889cbc4
update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kikuchi8810 0:4f5b9889cbc4 1 #include "Controller.h"
kikuchi8810 0:4f5b9889cbc4 2
kikuchi8810 0:4f5b9889cbc4 3 Controller::Controller(PinName tx, PinName rx, int baudrate) : serial(tx, rx, baudrate)
kikuchi8810 0:4f5b9889cbc4 4 {
kikuchi8810 0:4f5b9889cbc4 5 conData.ButtonState = 0;
kikuchi8810 0:4f5b9889cbc4 6 conData.RJoyX = 127, conData.RJoyY = 127, conData.LJoyX = 127, conData.LJoyY = 127;
kikuchi8810 0:4f5b9889cbc4 7
kikuchi8810 0:4f5b9889cbc4 8 lastButtonState = 0;
kikuchi8810 0:4f5b9889cbc4 9
kikuchi8810 0:4f5b9889cbc4 10 comCheck = false;
kikuchi8810 0:4f5b9889cbc4 11 conAvailable = false;
kikuchi8810 0:4f5b9889cbc4 12 time_out_ms = -1;
kikuchi8810 0:4f5b9889cbc4 13 }
kikuchi8810 0:4f5b9889cbc4 14
kikuchi8810 0:4f5b9889cbc4 15 void Controller::init(int _time_out_ms, int _int_time_ms)
kikuchi8810 0:4f5b9889cbc4 16 {
kikuchi8810 0:4f5b9889cbc4 17 time_out_ms = _time_out_ms;
kikuchi8810 0:4f5b9889cbc4 18 int_time_ms = _int_time_ms;
kikuchi8810 0:4f5b9889cbc4 19 //serial.attach(this, &Controller::update, Serial::RxIrq);
kikuchi8810 0:4f5b9889cbc4 20 //timer.start();
kikuchi8810 0:4f5b9889cbc4 21 }
kikuchi8810 0:4f5b9889cbc4 22
kikuchi8810 0:4f5b9889cbc4 23 bool Controller::update()
kikuchi8810 0:4f5b9889cbc4 24 {
kikuchi8810 0:4f5b9889cbc4 25 //receptionTime = timer.read();
kikuchi8810 0:4f5b9889cbc4 26 static int count_ms = time_out_ms, pre_count_ms = 0; //受信時刻と前回の受信時刻
kikuchi8810 0:4f5b9889cbc4 27 count_ms += int_time_ms;
kikuchi8810 0:4f5b9889cbc4 28
kikuchi8810 0:4f5b9889cbc4 29 char receive_data[10];
kikuchi8810 0:4f5b9889cbc4 30 unsigned int loop_count = 0, checksum = 0x00;
kikuchi8810 0:4f5b9889cbc4 31 comCheck = false;
kikuchi8810 0:4f5b9889cbc4 32
kikuchi8810 0:4f5b9889cbc4 33 #if CON_TYPE == CON_ADACHI // 安達君開発のコントローラを使う場合の処理(どのコントローラを使うかはdefine.hで設定)
kikuchi8810 0:4f5b9889cbc4 34 while (loop_count < 10 && serial.readable())
kikuchi8810 0:4f5b9889cbc4 35 {
kikuchi8810 0:4f5b9889cbc4 36 if (serial_recieve() == '\n')
kikuchi8810 0:4f5b9889cbc4 37 {
kikuchi8810 0:4f5b9889cbc4 38 for (int i = 0; i < 8; i++)
kikuchi8810 0:4f5b9889cbc4 39 receive_data[i] = serial_recieve();
kikuchi8810 0:4f5b9889cbc4 40 for (int i = 0; i < 8; i++)
kikuchi8810 0:4f5b9889cbc4 41 receive_data[i] -= 0x20;
kikuchi8810 0:4f5b9889cbc4 42 for (int i = 0; i < 7; i++)
kikuchi8810 0:4f5b9889cbc4 43 checksum ^= receive_data[i];
kikuchi8810 0:4f5b9889cbc4 44
kikuchi8810 0:4f5b9889cbc4 45 if (receive_data[7] == checksum & 0xFF)
kikuchi8810 0:4f5b9889cbc4 46 {
kikuchi8810 0:4f5b9889cbc4 47 comCheck = true;
kikuchi8810 0:4f5b9889cbc4 48
kikuchi8810 0:4f5b9889cbc4 49 //pre_conData.ButtonState = conData.ButtonState;
kikuchi8810 0:4f5b9889cbc4 50 lastButtonState = ((receive_data[0] & 0x3F) << 2) | ((receive_data[1] & 0x30) >> 4);
kikuchi8810 0:4f5b9889cbc4 51 conData.ButtonState |= lastButtonState;
kikuchi8810 0:4f5b9889cbc4 52
kikuchi8810 0:4f5b9889cbc4 53 conData.RJoyX = ((receive_data[1] & 0x0F) << 4) | ((receive_data[2] & 0x3C) >> 2);
kikuchi8810 0:4f5b9889cbc4 54 conData.RJoyY = ((receive_data[2] & 0x03) << 6) | (receive_data[3] & 0x3F);
kikuchi8810 0:4f5b9889cbc4 55 conData.LJoyX = ((receive_data[4] & 0x3F) << 2) | ((receive_data[5] & 0x30) >> 4);
kikuchi8810 0:4f5b9889cbc4 56 conData.LJoyY = ((receive_data[5] & 0x0F) << 4) | (receive_data[6] & 0x0F);
kikuchi8810 0:4f5b9889cbc4 57
kikuchi8810 0:4f5b9889cbc4 58 break;
kikuchi8810 0:4f5b9889cbc4 59 }
kikuchi8810 0:4f5b9889cbc4 60
kikuchi8810 0:4f5b9889cbc4 61 pre_count_ms = count_ms; //受信時間の更新
kikuchi8810 0:4f5b9889cbc4 62 }
kikuchi8810 0:4f5b9889cbc4 63 loop_count++;
kikuchi8810 0:4f5b9889cbc4 64 }
kikuchi8810 0:4f5b9889cbc4 65 #elif CON_TYPE == CON_ELECOM // ELECOMのコントローラを使う場合の処理(どのコントローラを使うかはdefine.hで設定)
kikuchi8810 0:4f5b9889cbc4 66 // コントローラデータを取得する部分
kikuchi8810 0:4f5b9889cbc4 67 static int recv_num = 0;
kikuchi8810 0:4f5b9889cbc4 68 char c;
kikuchi8810 0:4f5b9889cbc4 69 while (serial.readable())
kikuchi8810 0:4f5b9889cbc4 70 {
kikuchi8810 0:4f5b9889cbc4 71 c = serial.getc();
kikuchi8810 0:4f5b9889cbc4 72 if (c == '\n')
kikuchi8810 0:4f5b9889cbc4 73 {
kikuchi8810 0:4f5b9889cbc4 74 if (recv_num == 10)
kikuchi8810 0:4f5b9889cbc4 75 { // チェックサムは無く,9個受信したら値を格納
kikuchi8810 0:4f5b9889cbc4 76 for (int i = 0; i < 9; i++)
kikuchi8810 0:4f5b9889cbc4 77 checksum += (unsigned int)(receive_data[i] - 0x20); // チェックサムの計算
kikuchi8810 0:4f5b9889cbc4 78 if ((checksum & 0x3F) == (receive_data[9] - 0x20))
kikuchi8810 0:4f5b9889cbc4 79 { // チェックサムの計算が合っていた場合のみ値を格納
kikuchi8810 0:4f5b9889cbc4 80 comCheck = true;
kikuchi8810 0:4f5b9889cbc4 81
kikuchi8810 0:4f5b9889cbc4 82 //conData.ButtonState = 0;
kikuchi8810 0:4f5b9889cbc4 83 conData.LJoyX = 0, conData.LJoyY = 0, conData.RJoyX = 0, conData.RJoyY = 0;
kikuchi8810 0:4f5b9889cbc4 84 lastButtonState = (unsigned int)(receive_data[0] - 0x20);
kikuchi8810 0:4f5b9889cbc4 85 lastButtonState |= (unsigned int)(receive_data[1] - 0x20) << 6;
kikuchi8810 0:4f5b9889cbc4 86 lastButtonState |= (unsigned int)(receive_data[2] - 0x20) << 12;
kikuchi8810 0:4f5b9889cbc4 87
kikuchi8810 0:4f5b9889cbc4 88 conData.LJoyX |= (unsigned int)(receive_data[3] - 0x20);
kikuchi8810 0:4f5b9889cbc4 89 conData.LJoyX |= (unsigned int)((receive_data[4] - 0x20) & 0x03) << 6;
kikuchi8810 0:4f5b9889cbc4 90 conData.LJoyX = abs(conData.LJoyX - 0xFF);
kikuchi8810 0:4f5b9889cbc4 91
kikuchi8810 0:4f5b9889cbc4 92 conData.LJoyY |= (unsigned int)((receive_data[4] - 0x20) & 0x3C) >> 2;
kikuchi8810 0:4f5b9889cbc4 93 conData.LJoyY |= (unsigned int)((receive_data[5] - 0x20) & 0x0F) << 4;
kikuchi8810 0:4f5b9889cbc4 94 conData.LJoyY = abs(conData.LJoyY - 0xFF);
kikuchi8810 0:4f5b9889cbc4 95
kikuchi8810 0:4f5b9889cbc4 96 conData.RJoyX |= (unsigned int)((receive_data[5] - 0x20) & 0x30) >> 4;
kikuchi8810 0:4f5b9889cbc4 97 conData.RJoyX |= (unsigned int)((receive_data[6] - 0x20) & 0x3F) << 2;
kikuchi8810 0:4f5b9889cbc4 98 conData.RJoyX = abs(conData.RJoyX - 0xFF);
kikuchi8810 0:4f5b9889cbc4 99
kikuchi8810 0:4f5b9889cbc4 100 conData.RJoyY |= (unsigned int)(receive_data[7] - 0x20);
kikuchi8810 0:4f5b9889cbc4 101 conData.RJoyY |= (unsigned int)((receive_data[8] - 0x20) & 0x03) << 6;
kikuchi8810 0:4f5b9889cbc4 102 conData.RJoyY = abs(conData.RJoyY - 0xFF);
kikuchi8810 0:4f5b9889cbc4 103
kikuchi8810 0:4f5b9889cbc4 104 int buttonPushNum = 0;
kikuchi8810 0:4f5b9889cbc4 105 for (int i = 0; i < 16; i++)
kikuchi8810 0:4f5b9889cbc4 106 {
kikuchi8810 0:4f5b9889cbc4 107 buttonPushNum += (conData.ButtonState >> i) & 0x0001;
kikuchi8810 0:4f5b9889cbc4 108 }
kikuchi8810 0:4f5b9889cbc4 109 if (buttonPushNum > 5)
kikuchi8810 0:4f5b9889cbc4 110 {
kikuchi8810 0:4f5b9889cbc4 111 //conData.ButtonState = pre_conData.ButtonState;
kikuchi8810 0:4f5b9889cbc4 112 comCheck = false;
kikuchi8810 0:4f5b9889cbc4 113 }
kikuchi8810 0:4f5b9889cbc4 114 else
kikuchi8810 0:4f5b9889cbc4 115 {
kikuchi8810 0:4f5b9889cbc4 116 conData.ButtonState |= lastButtonState;
kikuchi8810 0:4f5b9889cbc4 117 }
kikuchi8810 0:4f5b9889cbc4 118
kikuchi8810 0:4f5b9889cbc4 119 pre_count_ms = count_ms; //受信時間の更新
kikuchi8810 0:4f5b9889cbc4 120 }
kikuchi8810 0:4f5b9889cbc4 121 }
kikuchi8810 0:4f5b9889cbc4 122 recv_num = 0;
kikuchi8810 0:4f5b9889cbc4 123 }
kikuchi8810 0:4f5b9889cbc4 124 else
kikuchi8810 0:4f5b9889cbc4 125 {
kikuchi8810 0:4f5b9889cbc4 126 receive_data[recv_num] = c;
kikuchi8810 0:4f5b9889cbc4 127 recv_num++;
kikuchi8810 0:4f5b9889cbc4 128 }
kikuchi8810 0:4f5b9889cbc4 129 }
kikuchi8810 0:4f5b9889cbc4 130 #elif CON_TYPE == CON_DS4 // DualShock4を使う場合の処理(どのコントローラを使うかはdefine.hで設定)
kikuchi8810 0:4f5b9889cbc4 131 // コントローラデータを取得する部分
kikuchi8810 0:4f5b9889cbc4 132 static int recv_num = 0;
kikuchi8810 0:4f5b9889cbc4 133 char c;
kikuchi8810 0:4f5b9889cbc4 134 while (serial.readable())
kikuchi8810 0:4f5b9889cbc4 135 {
kikuchi8810 0:4f5b9889cbc4 136 c = serial.getc();
kikuchi8810 0:4f5b9889cbc4 137 //Serial.print(c);
kikuchi8810 0:4f5b9889cbc4 138 if (c == '\n')
kikuchi8810 0:4f5b9889cbc4 139 {
kikuchi8810 0:4f5b9889cbc4 140 if (recv_num == 10)
kikuchi8810 0:4f5b9889cbc4 141 { // データ数はチェックサム含めて10個(0~9)
kikuchi8810 0:4f5b9889cbc4 142 checksum = 0;
kikuchi8810 0:4f5b9889cbc4 143 for (int i = 0; i < 9; i++)
kikuchi8810 0:4f5b9889cbc4 144 checksum ^= (unsigned int)(receive_data[i] - 0x20); // チェックサムの計算
kikuchi8810 0:4f5b9889cbc4 145 if ((checksum & 0x3F) == (receive_data[9] - 0x20))
kikuchi8810 0:4f5b9889cbc4 146 { // チェックサムの計算が合っていた場合のみ値を格納
kikuchi8810 0:4f5b9889cbc4 147 comCheck = true;
kikuchi8810 0:4f5b9889cbc4 148
kikuchi8810 0:4f5b9889cbc4 149 //conData.ButtonState = 0;
kikuchi8810 0:4f5b9889cbc4 150 conData.LJoyX = 0, conData.LJoyY = 0, conData.RJoyX = 0, conData.RJoyY = 0;
kikuchi8810 0:4f5b9889cbc4 151 lastButtonState = (unsigned int)(receive_data[0] - 0x20) & 0x3F;
kikuchi8810 0:4f5b9889cbc4 152 lastButtonState |= (unsigned int)((receive_data[1] - 0x20) & 0x3F) << 6;
kikuchi8810 0:4f5b9889cbc4 153 lastButtonState |= (unsigned int)((receive_data[2] - 0x20) & 0x0F) << 12;
kikuchi8810 0:4f5b9889cbc4 154
kikuchi8810 0:4f5b9889cbc4 155 conData.LJoyX |= (unsigned int)(receive_data[3] - 0x20);
kikuchi8810 0:4f5b9889cbc4 156 conData.LJoyX |= (unsigned int)((receive_data[4] - 0x20) & 0x03) << 6;
kikuchi8810 0:4f5b9889cbc4 157 conData.LJoyX = abs(conData.LJoyX - 0xFF);
kikuchi8810 0:4f5b9889cbc4 158
kikuchi8810 0:4f5b9889cbc4 159 conData.LJoyY |= (unsigned int)((receive_data[4] - 0x20) & 0x3C) >> 2;
kikuchi8810 0:4f5b9889cbc4 160 conData.LJoyY |= (unsigned int)((receive_data[5] - 0x20) & 0x0F) << 4;
kikuchi8810 0:4f5b9889cbc4 161 conData.LJoyY = abs(conData.LJoyY - 0xFF);
kikuchi8810 0:4f5b9889cbc4 162
kikuchi8810 0:4f5b9889cbc4 163 conData.RJoyX |= (unsigned int)((receive_data[5] - 0x20) & 0x30) >> 4;
kikuchi8810 0:4f5b9889cbc4 164 conData.RJoyX |= (unsigned int)((receive_data[6] - 0x20) & 0x3F) << 2;
kikuchi8810 0:4f5b9889cbc4 165 conData.RJoyX = abs(conData.RJoyX - 0xFF);
kikuchi8810 0:4f5b9889cbc4 166
kikuchi8810 0:4f5b9889cbc4 167 conData.RJoyY |= (unsigned int)(receive_data[7] - 0x20);
kikuchi8810 0:4f5b9889cbc4 168 conData.RJoyY |= (unsigned int)((receive_data[8] - 0x20) & 0x03) << 6;
kikuchi8810 0:4f5b9889cbc4 169 conData.RJoyY = abs(conData.RJoyY - 0xFF);
kikuchi8810 0:4f5b9889cbc4 170
kikuchi8810 0:4f5b9889cbc4 171 // 通信ミスであり得ない数のボタン数押されていた場合に無視する処理
kikuchi8810 0:4f5b9889cbc4 172 int buttonPushNum = 0;
kikuchi8810 0:4f5b9889cbc4 173 for (int i = 0; i < 16; i++)
kikuchi8810 0:4f5b9889cbc4 174 {
kikuchi8810 0:4f5b9889cbc4 175 buttonPushNum += (lastButtonState >> i) & 0x0001;
kikuchi8810 0:4f5b9889cbc4 176 }
kikuchi8810 0:4f5b9889cbc4 177 if (buttonPushNum > 5)
kikuchi8810 0:4f5b9889cbc4 178 {
kikuchi8810 0:4f5b9889cbc4 179 //conData.ButtonState = pre_conData.ButtonState;
kikuchi8810 0:4f5b9889cbc4 180 comCheck = false;
kikuchi8810 0:4f5b9889cbc4 181 }
kikuchi8810 0:4f5b9889cbc4 182 else
kikuchi8810 0:4f5b9889cbc4 183 {
kikuchi8810 0:4f5b9889cbc4 184 conData.ButtonState = lastButtonState & 0xFFFF;
kikuchi8810 0:4f5b9889cbc4 185 }
kikuchi8810 0:4f5b9889cbc4 186
kikuchi8810 0:4f5b9889cbc4 187 pre_count_ms = count_ms; //受信時間の更新
kikuchi8810 0:4f5b9889cbc4 188 }
kikuchi8810 0:4f5b9889cbc4 189 }
kikuchi8810 0:4f5b9889cbc4 190 recv_num = 0;
kikuchi8810 0:4f5b9889cbc4 191 }
kikuchi8810 0:4f5b9889cbc4 192 else
kikuchi8810 0:4f5b9889cbc4 193 {
kikuchi8810 0:4f5b9889cbc4 194 receive_data[recv_num] = c;
kikuchi8810 0:4f5b9889cbc4 195 recv_num++;
kikuchi8810 0:4f5b9889cbc4 196 }
kikuchi8810 0:4f5b9889cbc4 197 }
kikuchi8810 0:4f5b9889cbc4 198
kikuchi8810 0:4f5b9889cbc4 199 #endif
kikuchi8810 0:4f5b9889cbc4 200
kikuchi8810 0:4f5b9889cbc4 201 if(!(time_out_ms == -1)) conAvailable = (time_out_ms > (count_ms - pre_count_ms)); //タイムアウトとインターバルの比較
kikuchi8810 0:4f5b9889cbc4 202 else conAvailable = true;
kikuchi8810 0:4f5b9889cbc4 203 if(count_ms > time_out_ms * 1000) count_ms = time_out_ms; //オーバーフロー対策
kikuchi8810 0:4f5b9889cbc4 204
kikuchi8810 0:4f5b9889cbc4 205 return comCheck;
kikuchi8810 0:4f5b9889cbc4 206 }
kikuchi8810 0:4f5b9889cbc4 207
kikuchi8810 0:4f5b9889cbc4 208 bool Controller::getComCheck(void)
kikuchi8810 0:4f5b9889cbc4 209 {
kikuchi8810 0:4f5b9889cbc4 210 return comCheck;
kikuchi8810 0:4f5b9889cbc4 211 }
kikuchi8810 0:4f5b9889cbc4 212
kikuchi8810 0:4f5b9889cbc4 213 bool Controller::available(void)
kikuchi8810 0:4f5b9889cbc4 214 {
kikuchi8810 0:4f5b9889cbc4 215 return conAvailable;
kikuchi8810 0:4f5b9889cbc4 216 }
kikuchi8810 0:4f5b9889cbc4 217
kikuchi8810 0:4f5b9889cbc4 218 bool Controller::readButton_bin(unsigned int ButtonNum)
kikuchi8810 0:4f5b9889cbc4 219 { //放しているときは0,押しているときは1
kikuchi8810 0:4f5b9889cbc4 220 return ((conData.ButtonState & (0x0001 << (ButtonNum - 1))) == (0x0001 << (ButtonNum - 1))) ? true : false;
kikuchi8810 0:4f5b9889cbc4 221 }
kikuchi8810 0:4f5b9889cbc4 222
kikuchi8810 0:4f5b9889cbc4 223 int Controller::readButton(unsigned int ButtonNum)
kikuchi8810 0:4f5b9889cbc4 224 { //放しているときは0,押しているときは1,押した瞬間は2,放した瞬間は-1
kikuchi8810 0:4f5b9889cbc4 225 int result = 0;
kikuchi8810 0:4f5b9889cbc4 226 if ((conData.ButtonState & (0x0001 << (ButtonNum - 1))) == (0x0001 << (ButtonNum - 1)))
kikuchi8810 0:4f5b9889cbc4 227 result += 2;
kikuchi8810 0:4f5b9889cbc4 228 if ((pre_conData.ButtonState & (0x0001 << (ButtonNum - 1))) == (0x0001 << (ButtonNum - 1)))
kikuchi8810 0:4f5b9889cbc4 229 result -= 1;
kikuchi8810 0:4f5b9889cbc4 230 return result;
kikuchi8810 0:4f5b9889cbc4 231 }
kikuchi8810 0:4f5b9889cbc4 232
kikuchi8810 0:4f5b9889cbc4 233 unsigned int Controller::getButtonState()
kikuchi8810 0:4f5b9889cbc4 234 {
kikuchi8810 0:4f5b9889cbc4 235 return conData.ButtonState;
kikuchi8810 0:4f5b9889cbc4 236 }
kikuchi8810 0:4f5b9889cbc4 237
kikuchi8810 0:4f5b9889cbc4 238 void Controller::clearButtonState()
kikuchi8810 0:4f5b9889cbc4 239 {
kikuchi8810 0:4f5b9889cbc4 240 pre_conData.ButtonState = conData.ButtonState;
kikuchi8810 0:4f5b9889cbc4 241 }
kikuchi8810 0:4f5b9889cbc4 242
kikuchi8810 0:4f5b9889cbc4 243 ControllerData Controller::getConData()
kikuchi8810 0:4f5b9889cbc4 244 {
kikuchi8810 0:4f5b9889cbc4 245 return conData;
kikuchi8810 0:4f5b9889cbc4 246 }
kikuchi8810 0:4f5b9889cbc4 247
kikuchi8810 0:4f5b9889cbc4 248 double Controller::readJoyRX()
kikuchi8810 0:4f5b9889cbc4 249 {
kikuchi8810 0:4f5b9889cbc4 250 if (conData.RJoyX == 127)
kikuchi8810 0:4f5b9889cbc4 251 return 0;
kikuchi8810 0:4f5b9889cbc4 252 return ((double)conData.RJoyX - 127.5) / 127.5;
kikuchi8810 0:4f5b9889cbc4 253 }
kikuchi8810 0:4f5b9889cbc4 254
kikuchi8810 0:4f5b9889cbc4 255 double Controller::readJoyRY()
kikuchi8810 0:4f5b9889cbc4 256 {
kikuchi8810 0:4f5b9889cbc4 257 if (conData.RJoyY == 127)
kikuchi8810 0:4f5b9889cbc4 258 return 0;
kikuchi8810 0:4f5b9889cbc4 259 return ((double)conData.RJoyY - 127.5) / 127.5;
kikuchi8810 0:4f5b9889cbc4 260 }
kikuchi8810 0:4f5b9889cbc4 261
kikuchi8810 0:4f5b9889cbc4 262 double Controller::readJoyLX()
kikuchi8810 0:4f5b9889cbc4 263 {
kikuchi8810 0:4f5b9889cbc4 264 if (conData.LJoyX == 127)
kikuchi8810 0:4f5b9889cbc4 265 return 0;
kikuchi8810 0:4f5b9889cbc4 266 return ((double)conData.LJoyX - 127.5) / 127.5;
kikuchi8810 0:4f5b9889cbc4 267 }
kikuchi8810 0:4f5b9889cbc4 268
kikuchi8810 0:4f5b9889cbc4 269 double Controller::readJoyLY()
kikuchi8810 0:4f5b9889cbc4 270 {
kikuchi8810 0:4f5b9889cbc4 271 if (conData.LJoyY == 127)
kikuchi8810 0:4f5b9889cbc4 272 return 0;
kikuchi8810 0:4f5b9889cbc4 273 return ((double)conData.LJoyY - 127.5) / 127.5;
kikuchi8810 0:4f5b9889cbc4 274 }
kikuchi8810 0:4f5b9889cbc4 275
kikuchi8810 0:4f5b9889cbc4 276 uint8_t Controller::readJoyRXbyte()
kikuchi8810 0:4f5b9889cbc4 277 {
kikuchi8810 0:4f5b9889cbc4 278 return conData.RJoyX;
kikuchi8810 0:4f5b9889cbc4 279 }
kikuchi8810 0:4f5b9889cbc4 280
kikuchi8810 0:4f5b9889cbc4 281 uint8_t Controller::readJoyRYbyte()
kikuchi8810 0:4f5b9889cbc4 282 {
kikuchi8810 0:4f5b9889cbc4 283 return conData.RJoyY;
kikuchi8810 0:4f5b9889cbc4 284 }
kikuchi8810 0:4f5b9889cbc4 285
kikuchi8810 0:4f5b9889cbc4 286 uint8_t Controller::readJoyLXbyte()
kikuchi8810 0:4f5b9889cbc4 287 {
kikuchi8810 0:4f5b9889cbc4 288 return conData.LJoyX;
kikuchi8810 0:4f5b9889cbc4 289 }
kikuchi8810 0:4f5b9889cbc4 290
kikuchi8810 0:4f5b9889cbc4 291 uint8_t Controller::readJoyLYbyte()
kikuchi8810 0:4f5b9889cbc4 292 {
kikuchi8810 0:4f5b9889cbc4 293 return conData.LJoyY;
kikuchi8810 0:4f5b9889cbc4 294 }
kikuchi8810 0:4f5b9889cbc4 295
kikuchi8810 0:4f5b9889cbc4 296 unsigned int Controller::getButtonFlagRise()
kikuchi8810 0:4f5b9889cbc4 297 {
kikuchi8810 0:4f5b9889cbc4 298 // 立ち上がり,立下りのフラッギング処理 (フラグクリアは別関数で)
kikuchi8810 0:4f5b9889cbc4 299 unsigned int buttonFlagRise = 0;
kikuchi8810 0:4f5b9889cbc4 300 if (pre_conData.ButtonState != conData.ButtonState)
kikuchi8810 0:4f5b9889cbc4 301 {
kikuchi8810 0:4f5b9889cbc4 302 for (int i = 0; i < 16; i++)
kikuchi8810 0:4f5b9889cbc4 303 {
kikuchi8810 0:4f5b9889cbc4 304 int mask = 0x01 << i;
kikuchi8810 0:4f5b9889cbc4 305 if ((conData.ButtonState & mask) != (pre_conData.ButtonState & mask))
kikuchi8810 0:4f5b9889cbc4 306 {
kikuchi8810 0:4f5b9889cbc4 307 if ((conData.ButtonState & mask) == mask)
kikuchi8810 0:4f5b9889cbc4 308 buttonFlagRise |= (conData.ButtonState & mask);
kikuchi8810 0:4f5b9889cbc4 309 }
kikuchi8810 0:4f5b9889cbc4 310 }
kikuchi8810 0:4f5b9889cbc4 311 }
kikuchi8810 0:4f5b9889cbc4 312 return buttonFlagRise;
kikuchi8810 0:4f5b9889cbc4 313 }
kikuchi8810 0:4f5b9889cbc4 314
kikuchi8810 0:4f5b9889cbc4 315 unsigned int Controller::getButtonFlagFall()
kikuchi8810 0:4f5b9889cbc4 316 {
kikuchi8810 0:4f5b9889cbc4 317 unsigned int buttonFlagFall = 0;
kikuchi8810 0:4f5b9889cbc4 318 if (pre_conData.ButtonState != conData.ButtonState)
kikuchi8810 0:4f5b9889cbc4 319 {
kikuchi8810 0:4f5b9889cbc4 320 for (int i = 0; i < 16; i++)
kikuchi8810 0:4f5b9889cbc4 321 {
kikuchi8810 0:4f5b9889cbc4 322 int mask = 0x01 << i;
kikuchi8810 0:4f5b9889cbc4 323 if ((conData.ButtonState & mask) != (pre_conData.ButtonState & mask))
kikuchi8810 0:4f5b9889cbc4 324 {
kikuchi8810 0:4f5b9889cbc4 325 if ((pre_conData.ButtonState & mask) == mask)
kikuchi8810 0:4f5b9889cbc4 326 buttonFlagFall |= (pre_conData.ButtonState & mask);
kikuchi8810 0:4f5b9889cbc4 327 }
kikuchi8810 0:4f5b9889cbc4 328 }
kikuchi8810 0:4f5b9889cbc4 329 }
kikuchi8810 0:4f5b9889cbc4 330 return buttonFlagFall;
kikuchi8810 0:4f5b9889cbc4 331 }
kikuchi8810 0:4f5b9889cbc4 332