diff -Nru ckb-next-0.5.0-139/CMakeLists.txt ckb-next-0.5.0-141/CMakeLists.txt --- ckb-next-0.5.0-139/CMakeLists.txt 2023-06-12 11:00:03.000000000 +0000 +++ ckb-next-0.5.0-141/CMakeLists.txt 2023-06-19 11:00:04.000000000 +0000 @@ -65,7 +65,7 @@ # Get more precise version from git, fallback on release include(CkbNextDetermineVersion) find_package(Git) -set(ckb-next_VERSION "0.5.0-139-g2dcda6e") +set(ckb-next_VERSION "0.5.0-141-g097f977") find_package(Sanitizers) diff -Nru ckb-next-0.5.0-139/debian/changelog ckb-next-0.5.0-141/debian/changelog --- ckb-next-0.5.0-139/debian/changelog 2023-06-12 11:00:04.000000000 +0000 +++ ckb-next-0.5.0-141/debian/changelog 2023-06-19 11:00:06.000000000 +0000 @@ -1,3 +1,9 @@ +ckb-next (0.5.0-141-g097f977~bionic) bionic; urgency=low + + * 0.5.0-141-g097f977 git upstream + + -- Tasos Sahanidis Mon, 19 Jun 2023 14:00:06 +0300 + ckb-next (0.5.0-139-g2dcda6e~bionic) bionic; urgency=low * 0.5.0-139-g2dcda6e git upstream diff -Nru ckb-next-0.5.0-139/src/daemon/usb.c ckb-next-0.5.0-141/src/daemon/usb.c --- ckb-next-0.5.0-139/src/daemon/usb.c 2023-06-07 23:10:44.000000000 +0000 +++ ckb-next-0.5.0-141/src/daemon/usb.c 2023-06-19 11:00:04.000000000 +0000 @@ -123,6 +123,8 @@ { V_CORSAIR, P_POLARIS, }, // Headset stands { V_CORSAIR, P_ST100, }, + // Misc + { V_CORSAIR, P_GENERIC_BRAGI_DONGLE, }, }; const size_t N_MODELS = sizeof(models) / sizeof(device_desc); @@ -255,6 +257,8 @@ return "darkcore"; if(product == P_ST100) return "st100"; + if(product == P_GENERIC_BRAGI_DONGLE) + return "bragi_dongle"; return ""; } diff -Nru ckb-next-0.5.0-139/src/daemon/usb.h ckb-next-0.5.0-141/src/daemon/usb.h --- ckb-next-0.5.0-139/src/daemon/usb.h 2023-06-12 11:00:03.000000000 +0000 +++ ckb-next-0.5.0-141/src/daemon/usb.h 2023-06-19 11:00:04.000000000 +0000 @@ -167,6 +167,8 @@ #define P_ST100 0x0a34 #define IS_ST100(kb) ((kb)->vendor == V_CORSAIR && ((kb)->product == P_ST100)) +#define P_GENERIC_BRAGI_DONGLE 0x1ba6 + extern const size_t N_MODELS; typedef struct _device_desc { @@ -238,7 +240,7 @@ #define IS_MOUSEPAD_DEV(kb) IS_MOUSEPAD((kb)->vendor, (kb)->product) // Devices that are considered experimental and are either not fully tested, or aren't fully implemented -#define IS_EXPERIMENTAL(vendor, product) ((vendor) == V_CORSAIR && ((product) == P_K63_NRGB_WL || (product) == P_K63_NRGB_WL2 || (product) == P_K63_NRGB_WL3 || (product) == P_K63_NRGB_WL4 || (product) == P_DARK_CORE || (product) == P_DARK_CORE_WL || (product) == P_DARK_CORE_SE || (product) == P_DARK_CORE_SE_WL || (product) == P_IRONCLAW_W_U || (product) == P_IRONCLAW_W_D || (product) == P_DARK_CORE_RGB_PRO_SE || (product) == P_DARK_CORE_RGB_PRO_SE_WL || (product) == P_HARPOON_WL_U || (product) == P_HARPOON_WL_D || (product) == P_K57_U || (product) == P_K57_D || (product) == P_DARK_CORE_RGB_PRO || (product) == P_DARK_CORE_RGB_PRO_WL)) +#define IS_EXPERIMENTAL(vendor, product) ((vendor) == V_CORSAIR && ((product) == P_K63_NRGB_WL || (product) == P_K63_NRGB_WL2 || (product) == P_K63_NRGB_WL3 || (product) == P_K63_NRGB_WL4 || (product) == P_DARK_CORE || (product) == P_DARK_CORE_WL || (product) == P_DARK_CORE_SE || (product) == P_DARK_CORE_SE_WL || (product) == P_IRONCLAW_W_U || (product) == P_IRONCLAW_W_D || (product) == P_DARK_CORE_RGB_PRO_SE || (product) == P_DARK_CORE_RGB_PRO_SE_WL || (product) == P_HARPOON_WL_U || (product) == P_HARPOON_WL_D || (product) == P_K57_U || (product) == P_K57_D || (product) == P_DARK_CORE_RGB_PRO || (product) == P_DARK_CORE_RGB_PRO_WL || (product) == P_GENERIC_BRAGI_DONGLE)) /// Some devices cause usbhid to spend a long time initialising it. To work around this, we intentionally uncleanly /// deinitialise the device, skipping the usbhid handover. @@ -259,15 +261,15 @@ #define IS_WIRELESS_DEV(kb) (IS_WIRELESS((kb)->vendor, (kb)->product)) /// Used for ID combinations which support wireless. -#define IS_WIRELESS(vendor, product) ((vendor) == V_CORSAIR && ((product) == P_DARK_CORE || (product) == P_DARK_CORE_WL || (product) == P_DARK_CORE_SE || (product) == P_DARK_CORE_SE_WL || (product) == P_DARK_CORE_RGB_PRO || (product) == P_DARK_CORE_RGB_PRO_WL || (product) == P_DARK_CORE_RGB_PRO_SE || (product) == P_DARK_CORE_RGB_PRO_SE_WL || (product) == P_K63_NRGB_WL || (product) == P_K63_NRGB_WL2 || (product) == P_K63_NRGB_WL3 || (product) == P_K63_NRGB_WL4 || (product) == P_IRONCLAW_W_U || (product) == P_IRONCLAW_W_D || (product) == P_K57_U || (product) == P_K57_D || (product) == P_HARPOON_WL_U || (product) == P_HARPOON_WL_D)) +#define IS_WIRELESS(vendor, product) ((vendor) == V_CORSAIR && ((product) == P_DARK_CORE || (product) == P_DARK_CORE_WL || (product) == P_DARK_CORE_SE || (product) == P_DARK_CORE_SE_WL || (product) == P_DARK_CORE_RGB_PRO || (product) == P_DARK_CORE_RGB_PRO_WL || (product) == P_DARK_CORE_RGB_PRO_SE || (product) == P_DARK_CORE_RGB_PRO_SE_WL || (product) == P_K63_NRGB_WL || (product) == P_K63_NRGB_WL2 || (product) == P_K63_NRGB_WL3 || (product) == P_K63_NRGB_WL4 || (product) == P_IRONCLAW_W_U || (product) == P_IRONCLAW_W_D || (product) == P_K57_U || (product) == P_K57_D || (product) == P_HARPOON_WL_U || (product) == P_HARPOON_WL_D || (product) == P_GENERIC_BRAGI_DONGLE)) /// Used for devices which are connected via dongle instead of cable. -#define IS_DONGLE(kb) ((kb)->product == P_DARK_CORE_WL || (kb)->product == P_DARK_CORE_SE_WL || (kb)->product == P_DARK_CORE_RGB_PRO_WL || (kb)->product == P_DARK_CORE_RGB_PRO_SE_WL || (kb)->product == P_IRONCLAW_W_D || (kb)->product == P_K63_NRGB_WL2 || (kb)->product == P_K63_NRGB_WL4 || (kb)->product == P_K57_D || (kb)->product == P_HARPOON_WL_D) +#define IS_DONGLE(kb) ((kb)->product == P_DARK_CORE_WL || (kb)->product == P_DARK_CORE_SE_WL || (kb)->product == P_DARK_CORE_RGB_PRO_WL || (kb)->product == P_DARK_CORE_RGB_PRO_SE_WL || (kb)->product == P_IRONCLAW_W_D || (kb)->product == P_K63_NRGB_WL2 || (kb)->product == P_K63_NRGB_WL4 || (kb)->product == P_K57_D || (kb)->product == P_HARPOON_WL_D || (kb)->product == P_GENERIC_BRAGI_DONGLE) /// Used for devices that use a file-based hardware animation system. #define USES_FILE_HWSAVE(kb) ((kb)->product == P_K95_PLATINUM || (kb)->product == P_K70_MK2 || (kb)->product == P_K70_MK2SE || (kb)->product == P_STRAFE_MK2 || (kb)->product == P_GLAIVE || (kb)->product == P_SCIMITAR_PRO || (kb)->product == P_SCIMITAR_ELITE || (kb)->product == P_K70_MK2LP || (kb)->product == P_M65_RGB_ELITE || (kb)->product == P_IRONCLAW || IS_K63_WL(kb) || IS_DARK_CORE_NXP(kb) || (kb)->product == P_IRONCLAW_W_U || (kb)->product == P_IRONCLAW_W_D || (kb)->product == P_NIGHTSWORD) /// Devices here support setting the pollrate through software -#define SUPPORTS_ADJRATE(kb) ((kb)->product == P_K60_PRO_TKL || (kb)->product == P_K60_PRO_RGB || (kb)->product == P_K60_PRO_MONO || (kb)->product == P_K60_PRO_RGB_LP || (kb)->product == P_K60_PRO_RGB_SE || (kb)->product == P_K63_NRGB || (kb)->product == P_K66 || (kb)->product == P_K68 || (kb)->product == P_K68_NRGB || (kb)->product == P_K70_MK2 || (kb)->product == P_K70_MK2SE || (kb)->product == P_K70_MK2LP || (kb)->product == P_K95_PLATINUM || (kb)->product == P_STRAFE || (kb)->product == P_STRAFE_NRGB || (kb)->product == P_STRAFE_NRGB_2 || (kb)->product == P_STRAFE_MK2 || (kb)->product == P_M55_RGB_PRO || (kb)->product == P_M65 || (kb)->product == P_M65_PRO || (kb)->product == P_M65_RGB_ELITE || (kb)->product == P_M95 || (kb)->product == P_SABRE_O || (kb)->product == P_SABRE_L || (kb)->product == P_SABRE_N || (kb)->product == P_SABRE_O2 || (kb)->product == P_SCIMITAR || (kb)->product == P_SCIMITAR_ELITE || (kb)->product == P_SCIMITAR_PRO || (kb)->product == P_HARPOON || (kb)->product == P_HARPOON_PRO || (kb)->product == P_GLAIVE || (kb)->product == P_KATAR || (kb)->product == P_KATAR_PRO_XT || (kb)->product == P_KATAR_PRO || (kb)->product == P_NIGHTSWORD || IS_DARK_CORE_NXP(kb) || (kb)->product == P_K95_PLATINUM_XT || (kb)->product == P_GLAIVE_PRO || (kb)->product == P_K55_PRO || (kb)->product == P_K55_PRO_XT) +#define SUPPORTS_ADJRATE(kb) ((kb)->product == P_K60_PRO_TKL || (kb)->product == P_K60_PRO_RGB || (kb)->product == P_K60_PRO_MONO || (kb)->product == P_K60_PRO_RGB_LP || (kb)->product == P_K60_PRO_RGB_SE || (kb)->product == P_K63_NRGB || (kb)->product == P_K66 || (kb)->product == P_K68 || (kb)->product == P_K68_NRGB || (kb)->product == P_K70_MK2 || (kb)->product == P_K70_MK2SE || (kb)->product == P_K70_MK2LP || (kb)->product == P_K95_PLATINUM || (kb)->product == P_STRAFE || (kb)->product == P_STRAFE_NRGB || (kb)->product == P_STRAFE_NRGB_2 || (kb)->product == P_STRAFE_MK2 || (kb)->product == P_M55_RGB_PRO || (kb)->product == P_M65 || (kb)->product == P_M65_PRO || (kb)->product == P_M65_RGB_ELITE || (kb)->product == P_M95 || (kb)->product == P_SABRE_O || (kb)->product == P_SABRE_L || (kb)->product == P_SABRE_N || (kb)->product == P_SABRE_O2 || (kb)->product == P_SCIMITAR || (kb)->product == P_SCIMITAR_ELITE || (kb)->product == P_SCIMITAR_PRO || (kb)->product == P_HARPOON || (kb)->product == P_HARPOON_PRO || (kb)->product == P_GLAIVE || (kb)->product == P_KATAR || (kb)->product == P_KATAR_PRO_XT || (kb)->product == P_KATAR_PRO || (kb)->product == P_NIGHTSWORD || IS_DARK_CORE_NXP(kb) || (kb)->product == P_K95_PLATINUM_XT || (kb)->product == P_GLAIVE_PRO || (kb)->product == P_K55_PRO || (kb)->product == P_K55_PRO_XT || (kb)->product == P_GENERIC_BRAGI_DONGLE) // Bragi devices that use macros for media keys. Currently used to apply a terrible workaround. #define BRAGI_HAS_MEDIA_MACRO(kb) (IS_K60PRORGB(kb)) @@ -286,7 +288,7 @@ clock_nanosleep(CLOCK_MONOTONIC, 0, &(struct timespec) {.tv_nsec = 30000000}, NULL) // This should be removed in the future when we implement autodetection -#define USES_BRAGI(vendor, product) ((vendor) == (V_CORSAIR) && ((product) == (P_M55_RGB_PRO) || (product) == (P_IRONCLAW_W_U) || (product) == (P_IRONCLAW_W_D) || (product) == (P_K95_PLATINUM_XT) || (product) == (P_DARK_CORE_RGB_PRO_SE) || (product) == (P_DARK_CORE_RGB_PRO_SE_WL) || (product) == P_HARPOON_WL_U || (product) == P_HARPOON_WL_D || (product) == P_K57_U || (product) == P_K57_D || (product) == P_KATAR_PRO_XT || (product) == P_KATAR_PRO || (product) == P_K60_PRO_RGB || (product) == P_K60_PRO_RGB_LP || (product) == P_K60_PRO_RGB_SE || (product) == P_K60_PRO_MONO || (product) == P_K60_PRO_TKL || (product) == P_K55_PRO || (product) == P_K55_PRO_XT || (product) == (P_DARK_CORE_RGB_PRO) || (product) == (P_DARK_CORE_RGB_PRO_WL))) +#define USES_BRAGI(vendor, product) ((vendor) == (V_CORSAIR) && ((product) == (P_M55_RGB_PRO) || (product) == (P_IRONCLAW_W_U) || (product) == (P_IRONCLAW_W_D) || (product) == (P_K95_PLATINUM_XT) || (product) == (P_DARK_CORE_RGB_PRO_SE) || (product) == (P_DARK_CORE_RGB_PRO_SE_WL) || (product) == P_HARPOON_WL_U || (product) == P_HARPOON_WL_D || (product) == P_K57_U || (product) == P_K57_D || (product) == P_KATAR_PRO_XT || (product) == P_KATAR_PRO || (product) == P_K60_PRO_RGB || (product) == P_K60_PRO_RGB_LP || (product) == P_K60_PRO_RGB_SE || (product) == P_K60_PRO_MONO || (product) == P_K60_PRO_TKL || (product) == P_K55_PRO || (product) == P_K55_PRO_XT || (product) == (P_DARK_CORE_RGB_PRO) || (product) == (P_DARK_CORE_RGB_PRO_WL) || (product) == P_GENERIC_BRAGI_DONGLE)) // Devices that use bragi jumbo packets (1024 bytes) #define USES_BRAGI_JUMBO(vendor, product) ((vendor) == (V_CORSAIR) && 0) diff -Nru ckb-next-0.5.0-139/src/gui/keymap.cpp ckb-next-0.5.0-141/src/gui/keymap.cpp --- ckb-next-0.5.0-139/src/gui/keymap.cpp 2023-06-07 23:10:44.000000000 +0000 +++ ckb-next-0.5.0-141/src/gui/keymap.cpp 2023-06-19 11:00:04.000000000 +0000 @@ -1508,6 +1508,8 @@ return GLAIVEPRO; if(lower == "k55pro") return K55PRO; + if(lower == "bragi_dongle") + return BRAGI_DONGLE; return NO_MODEL; } @@ -1583,6 +1585,8 @@ return "k95l"; case GLAIVEPRO: return "glaivepro"; + case BRAGI_DONGLE: + return "bragi_dongle"; default: return ""; } diff -Nru ckb-next-0.5.0-139/src/gui/keymap.h ckb-next-0.5.0-141/src/gui/keymap.h --- ckb-next-0.5.0-139/src/gui/keymap.h 2023-06-07 23:10:44.000000000 +0000 +++ ckb-next-0.5.0-141/src/gui/keymap.h 2023-06-19 11:00:04.000000000 +0000 @@ -87,6 +87,7 @@ K55PRO, DARKCORERGBPRO, K60_TKL, + BRAGI_DONGLE, _MODEL_MAX }; // Key layouts (ordered alphabetically by name) @@ -138,7 +139,7 @@ inline static bool isHeadsetStand(Model model) { return model == ST100; } inline bool isHeadsetStand() const { return isHeadsetStand(keyModel); } - inline static bool hasLights(Model model) { return !(model == M95 || model == K66); } + inline static bool hasLights(Model model) { return !(model == M95 || model == K66 || model == BRAGI_DONGLE); } inline bool hasLights() const { return hasLights(keyModel); } // Creates a blank key map