Skip to content

Commit 62b7a6c

Browse files
committed
Fixed rumble, battery and backlight for DualShock 4, added emulation of new buttons and commands
1 parent addf10c commit 62b7a6c

File tree

4 files changed

+272
-191
lines changed

4 files changed

+272
-191
lines changed

BINDINGS.RU.md

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,15 @@ F12 | `F12`
3535
TAB | `TAB`
3636
CAPS-LOCK | `CAPS-LOCK`
3737
SHIFT | `SHIFT`
38+
ЛЕВЫЙ SHIFT | `LSHIFT`
39+
ПРАВЫЙ SHIFT | `RSHIFT`
3840
CTRL | `CTRL`
41+
ЛЕВЫЙ CTRL | `LCTRL`
42+
ПРАВЫЙ CTRL | `RCTRL`
3943
WIN | `WIN`
4044
ALT | `ALT`
45+
ЛЕВЫЙ ALT | `LALT`
46+
ПРАВЫЙ ALT | `RALT`
4147
ПРОБЕЛ | `SPACE`
4248
ENTER | `ENTER`
4349
BACKSPACE | `BACKSPACE`
@@ -119,16 +125,30 @@ NUMPAD + | `NUMPAD-PLUS`
119125
NUMPAD DEL | `NUMPAD-DEL`
120126

121127
## Дополнительные кнопки
122-
Описание | Значение
128+
Значение | Описание
123129
------------ | -------------
124-
`VOLUME-UP` | Увеличить громкость
125-
`VOLUME-DOWN` | Уменьшить громкость
126-
`VOLUME-MUTE` | Включить / выключить звук
127-
`HIDE-APPS` | Свернуть все приложения
128-
`SWITCH-APP` | Показать все окна
129-
`DISPLAY-KEYBOARD` | Вывести / спрятать экранную клавиатуру
130-
`GAMEBAR` | Игровая панель
131-
`GAMEBAR-SCREENSHOT` | Скриншот игровой панели
132-
`FULLSCREEN` | Переключиться в полноэкранный режим `ALT + ENTER`
133-
`FULLSCREEN-PLUS` | Переключиться в полноэкранный режим `ALT + ENTER` + `F` для сервисов YouTube и Twitch
134-
`CHANGE-LANGUAGE` | Переключиться на другой язык
130+
`VOLUME-UP` | Увеличить громкость.
131+
`VOLUME-DOWN` | Уменьшить громкость.
132+
`VOLUME-MUTE` | Включить / выключить звук.
133+
`HIDE-APPS` | Свернуть все приложения.
134+
`SWITCH-APP` | Показать все окна.
135+
`DISPLAY-KEYBOARD` | Вывести / спрятать экранную клавиатуру.
136+
`GAMEBAR` | Игровая панель.
137+
`GAMEBAR-SCREENSHOT` | Скриншот игровой панели.
138+
`FULLSCREEN` | Переключиться в полноэкранный режим `ALT + ENTER`.
139+
`FULLSCREEN-PLUS` | Переключиться в полноэкранный режим `ALT + ENTER` + `F` для сервисов YouTube и Twitch.
140+
`CHANGE-LANGUAGE` | Переключиться на другой язык.
141+
`CUT` | Вырезать.
142+
`COPY` | Копировать.
143+
`PASTE` | Вставить.
144+
`MEDIA-NEXT-TRACK` | Воспроизведение следующего трека.
145+
`MEDIA-PREV-TRACK` | Воспроизведение предыдущего трека.
146+
`MEDIA-STOP` | Остановка воспроизведения медиа.
147+
`MEDIA-PLAY-PAUSE` | Воспроизведение или пауза медиа.
148+
`BROWSER-BACK` | Переход назад в браузере.
149+
`BROWSER-FORWARD` | Переход вперед в браузере.
150+
`BROWSER-REFRESH` | Обновление текущей страницы.
151+
`BROWSER-STOP` | Остановка загрузки страницы.
152+
`BROWSER-SEARCH` | Открытие поиска в браузере.
153+
`BROWSER-FAVORITES` | Открытие списка избранного.
154+
`BROWSER-HOME` | Переход на главную страницу.

BINDINGS.md

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,15 @@ F12 | `F12`
3434
TAB | `TAB`
3535
CAPS-LOCK | `CAPS-LOCK`
3636
SHIFT | `SHIFT`
37+
LEFT SHIFT | `LSHIFT`
38+
RIGHT SHIFT | `RSHIFT`
3739
CTRL | `CTRL`
40+
LEFT CTRL | `LCTRL`
41+
RIGHT CTRL | `RCTRL`
3842
WIN | `WIN`
3943
ALT | `ALT`
44+
LEFT ALT | `LALT`
45+
RIGHT ALT | `RALT`
4046
SPACE | `SPACE`
4147
ENTER | `ENTER`
4248
BACKSPACE | `BACKSPACE`
@@ -120,14 +126,28 @@ NUMPAD DEL | `NUMPAD-DEL`
120126
## Additional action buttons
121127
Value | Description
122128
------------ | -------------
123-
`VOLUME-UP` | Volume up
124-
`VOLUME-DOWN` | Volume down
125-
`VOLUME-MUTE` | Enable / disable sound
126-
`HIDE-APPS` | Minimize all applications
127-
`SWITCH-APP` | Show all windows
128-
`DISPLAY-KEYBOARD` | Show / hide the on-screen keyboard
129-
`GAMEBAR` | Show / hide the Game Bar
130-
`GAMEBAR-SCREENSHOT` | Game bar screenshot
131-
`FULLSCREEN` | Switch to full screen mode `ALT + ENTER`
132-
`FULLSCREEN-PLUS` | Switch to full screen mode `ALT + ENTER` + `F` for YouTube and Twitch services
133-
`CHANGE-LANGUAGE` | Switch to another language
129+
`VOLUME-UP` | Volume up.
130+
`VOLUME-DOWN` | Volume down.
131+
`VOLUME-MUTE` | Enable / disable sound.
132+
`HIDE-APPS` | Minimize all applications.
133+
`SWITCH-APP` | Show all windows.
134+
`DISPLAY-KEYBOARD` | Show / hide the on-screen keyboard.
135+
`GAMEBAR` | Show / hide the Game Bar.
136+
`GAMEBAR-SCREENSHOT` | Game bar screenshot.
137+
`FULLSCREEN` | Switch to full screen mode `ALT + ENTER`.
138+
`FULLSCREEN-PLUS` | Switch to full screen mode `ALT + ENTER` + `F` for YouTube and Twitch services.
139+
`CHANGE-LANGUAGE` | Switch to another language.
140+
`CUT` | Cut.
141+
`COPY` | Copy.
142+
`PASTE` | Paste.
143+
`MEDIA-NEXT-TRACK` | Play the next track.
144+
`MEDIA-PREV-TRACK` | Play the previous track.
145+
`MEDIA-STOP` | Stop media playback.
146+
`MEDIA-PLAY-PAUSE` | Play or pause media.
147+
`BROWSER-BACK` | Go back in the browser.
148+
`BROWSER-FORWARD` | Go forward in the browser.
149+
`BROWSER-REFRESH` | Refresh the current page.
150+
`BROWSER-STOP` | Stop loading the page.
151+
`BROWSER-SEARCH` | Open search in the browser.
152+
`BROWSER-FAVORITES` | Open the favorites list.
153+
`BROWSER-HOME` | Go to the home page.

Source/DSAdvance/DSAdvance.cpp

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,15 @@ void GamepadSearch() {
199199
} else if (cur_dev->product_id == SONY_DS4_USB || cur_dev->product_id == SONY_DS4_V2_USB || cur_dev->product_id == SONY_DS4_DONGLE) {
200200
CurGamepad.ControllerType = SONY_DUALSHOCK4;
201201
CurGamepad.USBConnection = true;
202+
203+
// BT detection
204+
unsigned char buf[64];
205+
memset(buf, 0, sizeof(buf));
206+
int bytesRead = hid_read_timeout(CurGamepad.HidHandle, buf, sizeof(buf), 100);
207+
if (bytesRead > 0 && buf[0] == 0x11)
208+
CurGamepad.USBConnection = false;
202209

203-
} else if (cur_dev->product_id == SONY_DS4_BT) {
210+
} else if (cur_dev->product_id == SONY_DS4_BT) { // ?
204211
CurGamepad.ControllerType = SONY_DUALSHOCK4;
205212
CurGamepad.USBConnection = false;
206213
}
@@ -253,25 +260,23 @@ void GetBatteryInfo() {
253260
if (CurGamepad.USBConnection)
254261
CurGamepad.BatteryLevel = (buf[30] & DS_STATUS_BATTERY_CAPACITY) * 100 / DS4_USB_BATTERY_MAX;
255262
else
256-
CurGamepad.BatteryLevel = (buf[31] & DS_STATUS_BATTERY_CAPACITY) * 100 / DS_BATTERY_MAX; // offset 1?
263+
CurGamepad.BatteryLevel = (buf[32] & DS_STATUS_BATTERY_CAPACITY) * 100 / DS_BATTERY_MAX;
257264
}
258265
if (CurGamepad.BatteryLevel > 100) CurGamepad.BatteryLevel = 100; // It looks like something is not right, once it gave out 125%
259266
}
260267
}
261268

262269
void ExternalPedalsDInputSearch() {
263-
if (joyGetPosEx(JOYSTICKID1, &AppStatus.ExternalPedalsJoyInfo) == JOYERR_NOERROR &&
264-
joyGetDevCaps(JOYSTICKID1, &AppStatus.ExternalPedalsJoyCaps, sizeof(AppStatus.ExternalPedalsJoyCaps)) == JOYERR_NOERROR &&
265-
AppStatus.ExternalPedalsJoyCaps.wNumButtons == 16) { // DualSense - 15, DigiJoy - 16
266-
AppStatus.ExternalPedalsJoyIndex = JOYSTICKID1;
267-
AppStatus.ExternalPedalsDInputConnected = true;
268-
} else if (joyGetPosEx(JOYSTICKID2, &AppStatus.ExternalPedalsJoyInfo) == JOYERR_NOERROR &&
269-
joyGetDevCaps(JOYSTICKID2, &AppStatus.ExternalPedalsJoyCaps, sizeof(AppStatus.ExternalPedalsJoyCaps)) == JOYERR_NOERROR &&
270-
AppStatus.ExternalPedalsJoyCaps.wNumButtons == 16) {
271-
AppStatus.ExternalPedalsJoyIndex = JOYSTICKID2;
272-
AppStatus.ExternalPedalsDInputConnected = true;
273-
} else
274-
AppStatus.ExternalPedalsDInputConnected = false;
270+
ExternalPedalsConnected = false;
271+
for (int JoyID = 0; JoyID < 4; ++JoyID) { // JOYSTICKID4 - 3
272+
if (joyGetPosEx(JoyID, &AppStatus.ExternalPedalsJoyInfo) == JOYERR_NOERROR && // JoyID - JOYSTICKID1..4
273+
joyGetDevCaps(JoyID, &AppStatus.ExternalPedalsJoyCaps, sizeof(AppStatus.ExternalPedalsJoyCaps)) == JOYERR_NOERROR &&
274+
AppStatus.ExternalPedalsJoyCaps.wNumButtons == 16) { // DualSense - 15, DigiJoy - 16
275+
AppStatus.ExternalPedalsJoyIndex = JoyID;
276+
AppStatus.ExternalPedalsDInputConnected = true;
277+
break;
278+
}
279+
}
275280
}
276281

277282
void ExternalPedalsArduinoRead()
@@ -520,7 +525,7 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
520525

521526
int main(int argc, char **argv)
522527
{
523-
SetConsoleTitle("DSAdvance 0.9.7");
528+
SetConsoleTitle("DSAdvance 0.9.8");
524529

525530
WNDCLASS AppWndClass = {};
526531
AppWndClass.lpfnWndProc = WindowProc;

0 commit comments

Comments
 (0)