Skip to content

Commit 0a1c2ef

Browse files
authored
SteelSeries Arctis 1 Wireless battery status support (#156)
* SteelSeries Arctis 1: battery support Battery requesting code from SteelSeries Arctis 1 Wireless for XBOX works just fine for my SteelSeries Arctis 1 Wireless. * Merge SteelSeries Arctis 1 drivers Now SteelSeries Arctis 1 and SteelSeries Arctis 1 for XBox differ only in function naming and device IDs, there is no reason to keep two separate drivers for these two devices.
1 parent 32ef704 commit 0a1c2ef

6 files changed

+18
-149
lines changed

README.md

+1-3
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@ talking. This differs from a simple loopback via PulseAudio as you won't have an
2121
- Sidetone, Battery (for Wireless), LED on/off
2222
- Logitech G930
2323
- Sidetone, Battery
24-
- SteelSeries Arctis 1
25-
- Sidetone, Inactive time
26-
- SteelSeries Arctis 1 for XBox
24+
- SteelSeries Arctis 1, Arctis 1 for XBox
2725
- Sidetone, Battery, Inactive time
2826
- SteelSeries Arctis (7 and Pro)
2927
- Sidetone, Battery, Inactive time, Chat-Mix level, LED on/off (allows to turn off the blinking LED on the base-station)

src/device_registry.c

+4-6
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,12 @@
1010
#include "devices/logitech_zone_wired.h"
1111
#include "devices/roccat_elo_7_1_air.h"
1212
#include "devices/steelseries_arctis_1.h"
13-
#include "devices/steelseries_arctis_1_xbox.h"
1413
#include "devices/steelseries_arctis_7.h"
1514
#include "devices/steelseries_arctis_9.h"
1615

1716
#include <string.h>
1817

19-
#define NUMDEVICES 13
18+
#define NUMDEVICES 12
2019

2120
// array of pointers to device
2221
static struct device*(devicelist[NUMDEVICES]);
@@ -32,10 +31,9 @@ void init_devices()
3231
arctis_7_init(&devicelist[6]);
3332
arctis_9_init(&devicelist[7]);
3433
gpro_init(&devicelist[8]);
35-
arctis_1_xbox_init(&devicelist[9]);
36-
zone_wired_init(&devicelist[10]);
37-
elo71Air_init(&devicelist[11]);
38-
g432_init(&devicelist[12]);
34+
zone_wired_init(&devicelist[9]);
35+
elo71Air_init(&devicelist[10]);
36+
g432_init(&devicelist[11]);
3937
}
4038

4139
int get_device(struct device* device_found, uint16_t idVendor, uint16_t idProduct)

src/devices/CMakeLists.txt

-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ set(SOURCE_FILES ${SOURCE_FILES}
1111
${CMAKE_CURRENT_SOURCE_DIR}/logitech_g533.h
1212
${CMAKE_CURRENT_SOURCE_DIR}/steelseries_arctis_1.c
1313
${CMAKE_CURRENT_SOURCE_DIR}/steelseries_arctis_1.h
14-
${CMAKE_CURRENT_SOURCE_DIR}/steelseries_arctis_1_xbox.c
15-
${CMAKE_CURRENT_SOURCE_DIR}/steelseries_arctis_1_xbox.h
1614
${CMAKE_CURRENT_SOURCE_DIR}/steelseries_arctis_7.c
1715
${CMAKE_CURRENT_SOURCE_DIR}/steelseries_arctis_7.h
1816
${CMAKE_CURRENT_SOURCE_DIR}/steelseries_arctis_9.c

src/devices/steelseries_arctis_1.c

+13-10
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@
99

1010
static struct device device_arctis;
1111

12-
#define ID_ARCTIS_1 0x12b3
12+
#define ID_ARCTIS_1 0x12b3
13+
#define ID_ARCTIS_1_XBOX 0x12b6
1314

14-
static const uint16_t PRODUCT_IDS[] = { ID_ARCTIS_1 };
15+
static const uint16_t PRODUCT_IDS[] = { ID_ARCTIS_1, ID_ARCTIS_1_XBOX };
1516

1617
static int arctis_1_send_sidetone(hid_device* device_handle, uint8_t num);
17-
//static int arctis_1_request_battery(hid_device* device_handle);
18+
static int arctis_1_request_battery(hid_device* device_handle);
1819
static int arctis_1_send_inactive_time(hid_device* device_handle, uint8_t num);
1920

2021
static int arctis_1_save_state(hid_device* device_handle);
@@ -28,9 +29,9 @@ void arctis_1_init(struct device** device)
2829

2930
strncpy(device_arctis.device_name, "SteelSeries Arctis (1) Wireless", sizeof(device_arctis.device_name));
3031

31-
device_arctis.capabilities = CAP_SIDETONE | CAP_INACTIVE_TIME;
32+
device_arctis.capabilities = CAP_SIDETONE | CAP_BATTERY_STATUS | CAP_INACTIVE_TIME;
3233
device_arctis.send_sidetone = &arctis_1_send_sidetone;
33-
//device_arctis.request_battery = &arctis_1_request_battery;
34+
device_arctis.request_battery = &arctis_1_request_battery;
3435
device_arctis.send_inactive_time = &arctis_1_send_inactive_time;
3536

3637
*device = &device_arctis;
@@ -69,13 +70,12 @@ static int arctis_1_send_sidetone(hid_device* device_handle, uint8_t num)
6970
return ret;
7071
}
7172

72-
/*static int arctis_1_request_battery(hid_device* device_handle)
73+
static int arctis_1_request_battery(hid_device* device_handle)
7374
{
74-
7575
int r = 0;
7676

7777
// request battery status
78-
unsigned char data_request[2] = { 0x06, 0x18 };
78+
unsigned char data_request[2] = { 0x06, 0x12 };
7979

8080
r = hid_write(device_handle, data_request, 2);
8181

@@ -90,13 +90,16 @@ static int arctis_1_send_sidetone(hid_device* device_handle, uint8_t num)
9090
if (r < 0)
9191
return r;
9292

93-
int bat = data_read[2];
93+
if (data_read[2] == 0x01)
94+
return BATTERY_UNAVAILABLE;
95+
96+
int bat = data_read[3];
9497

9598
if (bat > 100)
9699
return 100;
97100

98101
return bat;
99-
}*/
102+
}
100103

101104
static int arctis_1_send_inactive_time(hid_device* device_handle, uint8_t num)
102105
{

src/devices/steelseries_arctis_1_xbox.c

-125
This file was deleted.

src/devices/steelseries_arctis_1_xbox.h

-3
This file was deleted.

0 commit comments

Comments
 (0)