Hello community, here is the log from the commit of package roccat-tools for openSUSE:Factory checked in at 2015-02-05 11:01:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/roccat-tools (Old) and /work/SRC/openSUSE:Factory/.roccat-tools.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "roccat-tools" Changes: -------- --- /work/SRC/openSUSE:Factory/roccat-tools/roccat-tools.changes 2015-02-03 11:39:37.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.roccat-tools.new/roccat-tools.changes 2015-02-05 11:01:25.000000000 +0100 @@ -1,0 +2,5 @@ +Sun Feb 1 13:06:41 UTC 2015 - [email protected] + +- update to version 2.4.0 + +------------------------------------------------------------------- Old: ---- roccat-tools-2.3.0.tar.bz2 New: ---- roccat-tools-2.4.0.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ roccat-tools.spec ++++++ --- /var/tmp/diff_new_pack.9b9vGO/_old 2015-02-05 11:01:26.000000000 +0100 +++ /var/tmp/diff_new_pack.9b9vGO/_new 2015-02-05 11:01:26.000000000 +0100 @@ -18,7 +18,7 @@ %{!?_udevrulesdir: %global _udevrulesdir %(pkg-config --variable=udevdir udev)/rules.d} Name: roccat-tools -Version: 2.3.0 +Version: 2.4.0 Release: 0 License: GPL-2.0+ and CC-BY-3.0 Group: Hardware/Other ++++++ roccat-tools-2.3.0.tar.bz2 -> roccat-tools-2.4.0.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/CMakeLists.txt new/roccat-tools-2.4.0/CMakeLists.txt --- old/roccat-tools-2.3.0/CMakeLists.txt 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/CMakeLists.txt 2015-01-25 17:36:09.000000000 +0100 @@ -80,7 +80,7 @@ "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") SET(V_MAJOR 2) -SET(V_MINOR 3) +SET(V_MINOR 4) SET(V_PATCH 0) ENABLE_TESTING() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/Changelog new/roccat-tools-2.4.0/Changelog --- old/roccat-tools-2.3.0/Changelog 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/Changelog 2015-01-25 17:36:09.000000000 +0100 @@ -1,3 +1,11 @@ +2.4.0 2015-01-25 + + * Added: Tyon support for TalkFX switch + * Fixed: Tyon firmware update ended with error, although working flawlessly + * Fixed: Tyon macros now support full 480 actions + * Fixed: Tyon talk works now with firmware 1.29 + * Fixed: Macro saving did not work as expected + 2.3.0 2015-01-10 * Added: KoneXTD and IskuFX support for TalkFX switch diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/isku/libiskueventhandler/isku_eventhandler.c new/roccat-tools-2.4.0/isku/libiskueventhandler/isku_eventhandler.c --- old/roccat-tools-2.3.0/isku/libiskueventhandler/isku_eventhandler.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/isku/libiskueventhandler/isku_eventhandler.c 2015-01-25 17:36:09.000000000 +0100 @@ -329,7 +329,7 @@ (event == ISKU_REPORT_BUTTON_EVENT_ACTION_PRESS) ? ROCCAT_TALK_EASYAIM_5 : ROCCAT_TALK_EASYAIM_OFF); break; default: - g_debug("unknown talk event of type 0x%2x", priv->active_talk_type); + g_debug("unknown talk event of type 0x%02x", priv->active_talk_type); } if (event == ISKU_REPORT_BUTTON_EVENT_ACTION_RELEASE) @@ -468,7 +468,7 @@ isku_configuration_get_notification_volume(priv->config)); break; default: - g_debug("unknown live recording event of type 0x%2x", event); + g_debug("unknown live recording event of type 0x%02x", event); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/iskufx/libiskufxeventhandler/iskufx_eventhandler.c new/roccat-tools-2.4.0/iskufx/libiskufxeventhandler/iskufx_eventhandler.c --- old/roccat-tools-2.3.0/iskufx/libiskufxeventhandler/iskufx_eventhandler.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/iskufx/libiskufxeventhandler/iskufx_eventhandler.c 2015-01-25 17:36:09.000000000 +0100 @@ -395,7 +395,7 @@ (event == ISKU_REPORT_BUTTON_EVENT_ACTION_PRESS) ? ROCCAT_TALK_EASYAIM_5 : ROCCAT_TALK_EASYAIM_OFF); break; default: - g_debug("unknown talk event of type 0x%2x", priv->active_talk_type); + g_debug("unknown talk event of type 0x%02x", priv->active_talk_type); } if (event == ISKU_REPORT_BUTTON_EVENT_ACTION_RELEASE) @@ -534,7 +534,7 @@ isku_configuration_get_notification_volume(priv->config)); break; default: - g_debug("unknown live recording event of type 0x%2x", event); + g_debug("unknown live recording event of type 0x%02x", event); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/koneplus/libkoneplus/koneplus.h new/roccat-tools-2.4.0/koneplus/libkoneplus/koneplus.h --- old/roccat-tools-2.3.0/koneplus/libkoneplus/koneplus.h 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/koneplus/libkoneplus/koneplus.h 2015-01-25 17:36:09.000000000 +0100 @@ -507,6 +507,7 @@ typedef enum { KONEPLUS_CHRDEV_EVENT_TYPE_TILT = 0x10, + KONEPLUS_CHRDEV_EVENT_TYPE_SCROLL = 0x1b, KONEPLUS_CHRDEV_EVENT_TYPE_PROFILE = 0x20, KONEPLUS_CHRDEV_EVENT_TYPE_QUICKLAUNCH = 0x60, KONEPLUS_CHRDEV_EVENT_TYPE_TIMER = 0x80, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/koneplus/libkonepluseventhandler/koneplus_eventhandler.c new/roccat-tools-2.4.0/koneplus/libkonepluseventhandler/koneplus_eventhandler.c --- old/roccat-tools-2.3.0/koneplus/libkonepluseventhandler/koneplus_eventhandler.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/koneplus/libkonepluseventhandler/koneplus_eventhandler.c 2015-01-25 17:36:09.000000000 +0100 @@ -410,7 +410,7 @@ } break; default: - g_debug("unknown talk event of type 0x%2x", priv->active_talk_type); + g_debug("unknown talk event of type 0x%02x", priv->active_talk_type); } if (event == KONEPLUS_CHRDEV_EVENT_ACTION_RELEASE) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/konepure/libkonepureeventhandler/konepure_eventhandler.c new/roccat-tools-2.4.0/konepure/libkonepureeventhandler/konepure_eventhandler.c --- old/roccat-tools-2.3.0/konepure/libkonepureeventhandler/konepure_eventhandler.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/konepure/libkonepureeventhandler/konepure_eventhandler.c 2015-01-25 17:36:09.000000000 +0100 @@ -410,7 +410,7 @@ } break; default: - g_debug("unknown talk event of type 0x%2x", priv->active_talk_type); + g_debug("unknown talk event of type 0x%02x", priv->active_talk_type); } if (event == KONEPLUS_CHRDEV_EVENT_ACTION_RELEASE) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/konepuremilitary/libkonepuremilitaryeventhandler/konepuremilitary_eventhandler.c new/roccat-tools-2.4.0/konepuremilitary/libkonepuremilitaryeventhandler/konepuremilitary_eventhandler.c --- old/roccat-tools-2.3.0/konepuremilitary/libkonepuremilitaryeventhandler/konepuremilitary_eventhandler.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/konepuremilitary/libkonepuremilitaryeventhandler/konepuremilitary_eventhandler.c 2015-01-25 17:36:09.000000000 +0100 @@ -403,7 +403,7 @@ } break; default: - g_debug("unknown talk event of type 0x%2x", priv->active_talk_type); + g_debug("unknown talk event of type 0x%02x", priv->active_talk_type); } if (event == KONEPLUS_CHRDEV_EVENT_ACTION_RELEASE) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/konepureoptical/libkonepureopticaleventhandler/konepureoptical_eventhandler.c new/roccat-tools-2.4.0/konepureoptical/libkonepureopticaleventhandler/konepureoptical_eventhandler.c --- old/roccat-tools-2.3.0/konepureoptical/libkonepureopticaleventhandler/konepureoptical_eventhandler.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/konepureoptical/libkonepureopticaleventhandler/konepureoptical_eventhandler.c 2015-01-25 17:36:09.000000000 +0100 @@ -412,7 +412,7 @@ } break; default: - g_debug("unknown talk event of type 0x%2x", priv->active_talk_type); + g_debug("unknown talk event of type 0x%02x", priv->active_talk_type); } if (event == KONEPLUS_CHRDEV_EVENT_ACTION_RELEASE) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/konextd/libkonextd/konextd.h new/roccat-tools-2.4.0/konextd/libkonextd/konextd.h --- old/roccat-tools-2.3.0/konextd/libkonextd/konextd.h 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/konextd/libkonextd/konextd.h 2015-01-25 17:36:09.000000000 +0100 @@ -43,9 +43,9 @@ KONEXTD_CHRDEV_EVENT_TYPE_RAD_THUMB_2 = 0xe5, KONEXTD_CHRDEV_EVENT_TYPE_RAD_SCROLL_WHEEL_UP = 0xe6, KONEXTD_CHRDEV_EVENT_TYPE_RAD_SCROLL_WHEEL_DOWN = 0xe7, - KONEXTD_CHRDEV_EVENT_TYPE_RAD_EASYSHIFT = 0xe8, // only talk? - KONEXTD_CHRDEV_EVENT_TYPE_RAD_EASYAIM = 0xe9, - KONEXTD_CHRDEV_EVENT_TYPE_RAD_DISTANCE = 0xea, // TOTO unit + KONEXTD_CHRDEV_EVENT_TYPE_RAD_DISTANCE = 0xea, // TODO unit? + KONEXTD_CHRDEV_EVENT_TYPE_RAD_EASYSHIFT = 0xed, + KONEXTD_CHRDEV_EVENT_TYPE_RAD_EASYAIM = 0xee, } KonextdChrdevEventType; struct _KonextdSRom { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/konextd/libkonextdeventhandler/konextd_eventhandler.c new/roccat-tools-2.4.0/konextd/libkonextdeventhandler/konextd_eventhandler.c --- old/roccat-tools-2.3.0/konextd/libkonextdeventhandler/konextd_eventhandler.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/konextd/libkonextdeventhandler/konextd_eventhandler.c 2015-01-25 17:36:09.000000000 +0100 @@ -423,7 +423,7 @@ } break; default: - g_debug("unknown talk event of type 0x%2x", priv->active_talk_type); + g_debug("unknown talk event of type 0x%02x", priv->active_talk_type); } if (event == KONEPLUS_CHRDEV_EVENT_ACTION_RELEASE) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/konextdoptical/libkonextdopticaleventhandler/konextdoptical_eventhandler.c new/roccat-tools-2.4.0/konextdoptical/libkonextdopticaleventhandler/konextdoptical_eventhandler.c --- old/roccat-tools-2.3.0/konextdoptical/libkonextdopticaleventhandler/konextdoptical_eventhandler.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/konextdoptical/libkonextdopticaleventhandler/konextdoptical_eventhandler.c 2015-01-25 17:36:09.000000000 +0100 @@ -409,7 +409,7 @@ } break; default: - g_debug("unknown talk event of type 0x%2x", priv->active_talk_type); + g_debug("unknown talk event of type 0x%02x", priv->active_talk_type); } if (event == KONEPLUS_CHRDEV_EVENT_ACTION_RELEASE) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/konextdoptical/libkonextdopticaleventhandler/konextdoptical_eventhandler_channel.c new/roccat-tools-2.4.0/konextdoptical/libkonextdopticaleventhandler/konextdoptical_eventhandler_channel.c --- old/roccat-tools-2.3.0/konextdoptical/libkonextdopticaleventhandler/konextdoptical_eventhandler_channel.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/konextdoptical/libkonextdopticaleventhandler/konextdoptical_eventhandler_channel.c 2015-01-25 17:36:09.000000000 +0100 @@ -92,7 +92,8 @@ g_signal_emit((gpointer)eventhandler_channel, signals[OPEN_DRIVER], 0); break; case KONEPLUS_CHRDEV_EVENT_TYPE_TILT: - /* just ignore this event */ + case KONEPLUS_CHRDEV_EVENT_TYPE_SCROLL: + /* just ignore these events */ break; case KONEPLUS_CHRDEV_EVENT_TYPE_TIMER: if (event->data2 == KONEPLUS_CHRDEV_EVENT_ACTION_PRESS) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/libroccat/roccat_device_hidraw.c new/roccat-tools-2.4.0/libroccat/roccat_device_hidraw.c --- old/roccat-tools-2.3.0/libroccat/roccat_device_hidraw.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/libroccat/roccat_device_hidraw.c 2015-01-25 17:36:09.000000000 +0100 @@ -94,13 +94,13 @@ gaminggear_device_unlock(GAMINGGEAR_DEVICE(roccat_device)); + roccat_device_hidraw_debug(roccat_device, TRUE, buffer[0], (guchar const *)buffer, length); + if (retval == -1) { g_set_error(error, G_FILE_ERROR, g_file_error_from_errno(errno), "Error in ioctl HIDIOCSFEATURE: %s", g_strerror(errno)); return FALSE; } - roccat_device_hidraw_debug(roccat_device, TRUE, buffer[0], (guchar const *)buffer, length); - return TRUE; #else g_set_error(error, G_FILE_ERROR, G_FILE_ERROR_NOSYS, "ioctl HIDIOCSFEATURE not implemented"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/libroccat/roccat_firmware.c new/roccat-tools-2.4.0/libroccat/roccat_firmware.c --- old/roccat-tools-2.3.0/libroccat/roccat_firmware.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/libroccat/roccat_firmware.c 2015-01-25 17:36:09.000000000 +0100 @@ -240,6 +240,7 @@ gboolean roccat_firmware_state_tick(RoccatFirmwareState *state, GError **error) { guint8 const *chunk; + GError *local_error = NULL; switch (state->update_state) { case 0: @@ -277,8 +278,15 @@ ++state->update_state; break; case 4: - if (!roccat_firmware_write_f(state->device, state->wait_after_34f, error)) - return FALSE; + if (!roccat_firmware_write_f(state->device, state->wait_after_34f, &local_error)) { + if (g_error_matches(local_error, G_FILE_ERROR, G_FILE_ERROR_PIPE)) { + /* It is normal for e.g. Tyon to reset without even answering to f */ + g_clear_error(&local_error); + } else { + g_propagate_error(error, local_error); + return FALSE; + } + } ++state->update_state; return FALSE; break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/roccat-tools.spec new/roccat-tools-2.4.0/roccat-tools.spec --- old/roccat-tools-2.3.0/roccat-tools.spec 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/roccat-tools.spec 2015-01-25 17:36:09.000000000 +0100 @@ -1,5 +1,5 @@ Name: roccat -Version: 2.3.0 +Version: 2.4.0 Release: 1 License: GPL Source: roccat-tools-%{version}.tar.bz2 @@ -496,5 +496,5 @@ %{prefix}/share/man/*/man1/tyon* %changelog -* Sat Jan 10 2015 Stefan Achatz <[email protected]> 2.3.0-1 +* Sun Jan 25 2015 Stefan Achatz <[email protected]> 2.4.0-1 - Initial version diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/ryos/libryos/ryos_rkp.c new/roccat-tools-2.4.0/ryos/libryos/ryos_rkp.c --- old/roccat-tools-2.3.0/ryos/libryos/ryos_rkp.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/ryos/libryos/ryos_rkp.c 2015-01-25 17:36:09.000000000 +0100 @@ -196,7 +196,7 @@ guint i; for (i = 0; i < RYOS_KEYS_THUMBSTER_NUM * 2; ++i) { - if (!ryos_rkp_save_macro_when_needed(ryos, rkp, profile_index, ryos_keys_thumbster_index_to_macro_index(i), rkp->data.keys_macro.keys[i].type, error)) + if (!ryos_rkp_save_macro_when_needed(ryos, rkp, profile_index, ryos_keys_thumbster_index_to_macro_index(i), rkp->data.keys_thumbster.keys[i].type, error)) return FALSE; } @@ -223,7 +223,7 @@ guint i; for (i = 0; i < RYOS_KEYS_EASYZONE_NUM; ++i) { - if (!ryos_rkp_save_macro_when_needed(ryos, rkp, profile_index, ryos_keys_easyzone_index_to_macro_index(i), rkp->data.keys_macro.keys[i].type, error)) + if (!ryos_rkp_save_macro_when_needed(ryos, rkp, profile_index, ryos_keys_easyzone_index_to_macro_index(i), rkp->data.keys_easyzone.keys[i].type, error)) return FALSE; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/ryos/libryoseventhandler/ryos_eventhandler.c new/roccat-tools-2.4.0/ryos/libryoseventhandler/ryos_eventhandler.c --- old/roccat-tools-2.3.0/ryos/libryoseventhandler/ryos_eventhandler.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/ryos/libryoseventhandler/ryos_eventhandler.c 2015-01-25 17:36:09.000000000 +0100 @@ -462,7 +462,7 @@ ryos_configuration_get_notification_volume(priv->config)); break; default: - g_debug("unknown live recording event of type 0x%2x", event); + g_debug("unknown live recording event of type 0x%02x", event); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/tyon/libtyon/tyon_device.c new/roccat-tools-2.4.0/tyon/libtyon/tyon_device.c --- old/roccat-tools-2.3.0/tyon/libtyon/tyon_device.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/tyon/libtyon/tyon_device.c 2015-01-25 17:36:09.000000000 +0100 @@ -36,7 +36,7 @@ } static gboolean tyon_check_write(RoccatDevice *device, GError **error) { - return roccat_check_write(device, TYON_COMMAND_CONTROL, 10, 10, error); + return roccat_check_write(device, TYON_COMMAND_CONTROL, 200, 500, error); } gboolean tyon_device_write(RoccatDevice *device, gchar const *buffer, gssize length, GError **error) { @@ -49,9 +49,8 @@ return tyon_check_write(device, error); } -gboolean tyon_select(RoccatDevice *device, guint profile_index, guint request, GError **error) { - g_assert(profile_index < TYON_PROFILE_NUM); - if (!roccat_select(device, TYON_COMMAND_CONTROL, profile_index, request, error)) +gboolean tyon_select(RoccatDevice *device, guint profile_index, TyonControlDataIndex data_index, guint request, GError **error) { + if (!roccat_select(device, TYON_COMMAND_CONTROL, data_index | profile_index, request, error)) return FALSE; return tyon_check_write(device, error); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/tyon/libtyon/tyon_device.h new/roccat-tools-2.4.0/tyon/libtyon/tyon_device.h --- old/roccat-tools-2.3.0/tyon/libtyon/tyon_device.h 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/tyon/libtyon/tyon_device.h 2015-01-25 17:36:09.000000000 +0100 @@ -24,11 +24,18 @@ typedef enum { TYON_CONTROL_REQUEST_CHECK = 0x00, + /* button indexes for requesting macros */ TYON_CONTROL_REQUEST_PROFILE_SETTINGS = 0x80, TYON_CONTROL_REQUEST_PROFILE_BUTTONS = 0x90, } TyonControlRequest; typedef enum { + TYON_CONTROL_DATA_INDEX_NONE = 0x00, + TYON_CONTROL_DATA_INDEX_MACRO_1 = 0x10, + TYON_CONTROL_DATA_INDEX_MACRO_2 = 0x20, +} TyonControlDataIndex; + +typedef enum { TYON_COMMAND_CONTROL = 0x04, /* 3 */ TYON_COMMAND_PROFILE = 0x05, /* 3 */ TYON_COMMAND_PROFILE_SETTINGS = 0x06, /* 30 */ @@ -57,7 +64,7 @@ gchar *tyon_device_read(RoccatDevice *device, guint command, gssize length, GError **error); gboolean tyon_device_write(RoccatDevice *device, gchar const *buffer, gssize length, GError **error); -gboolean tyon_select(RoccatDevice *device, guint profile_index, guint request, GError **error); +gboolean tyon_select(RoccatDevice *device, guint profile_index, TyonControlDataIndex data_index, guint request, GError **error); guint tyon_add_event_watch(RoccatDevice *device, guint endpoint, GIOFunc callback, gpointer user_data, GError **error); G_END_DECLS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/tyon/libtyon/tyon_event.h new/roccat-tools-2.4.0/tyon/libtyon/tyon_event.h --- old/roccat-tools-2.3.0/tyon/libtyon/tyon_event.h 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/tyon/libtyon/tyon_event.h 2015-01-25 17:36:09.000000000 +0100 @@ -58,6 +58,7 @@ TYON_EVENT_TYPE_RAD_EASYSHIFT = 0xe8, TYON_EVENT_TYPE_RAD_EASYAIM = 0xe9, TYON_EVENT_TYPE_RAD_DISTANCE = 0xea, + TYON_EVENT_TYPE_TALK = 0xff, /* data: button_nr, action: press/release */ } TyonEventType; typedef enum { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/tyon/libtyon/tyon_macro.c new/roccat-tools-2.4.0/tyon/libtyon/tyon_macro.c --- old/roccat-tools-2.3.0/tyon/libtyon/tyon_macro.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/tyon/libtyon/tyon_macro.c 2015-01-25 17:36:09.000000000 +0100 @@ -21,6 +21,28 @@ #include "roccat.h" #include <string.h> +typedef struct _TyonMacro1 TyonMacro1; +typedef struct _TyonMacro2 TyonMacro2; + +enum { + TYON_MACRO_1_DATA_SIZE = 1024, + TYON_MACRO_2_DATA_SIZE = 973, + TYON_MACRO_2_UNUSED_SIZE = 51, +}; + +struct _TyonMacro1 { + guint8 command; + guint8 one; + guint8 data[TYON_MACRO_1_DATA_SIZE]; +} __attribute__ ((packed)); + +struct _TyonMacro2 { + guint8 command; + guint8 two; + guint8 data[TYON_MACRO_2_DATA_SIZE]; + guint8 unused[TYON_MACRO_2_UNUSED_SIZE]; +} __attribute__ ((packed)); + void tyon_macro_set_macroset_name(TyonMacro *macro, gchar const *new_name) { g_strlcpy((gchar *)(macro->macroset_name), new_name, TYON_MACRO_MACROSET_NAME_LENGTH); } @@ -29,35 +51,78 @@ g_strlcpy((gchar *)(macro->macro_name), new_name, TYON_MACRO_MACRO_NAME_LENGTH); } -static void tyon_macro_finalize(TyonMacro *macro, guint command, guint profile_index, guint button_index) { - macro->command = command; - macro->one = 1; +static void tyon_macro_finalize(TyonMacro *macro, guint profile_index, guint button_index) { macro->profile_index = profile_index; macro->button_index = button_index; } gboolean tyon_macro_write(RoccatDevice *tyon, guint profile_index, guint button_index, TyonMacro *macro, GError **error) { + TyonMacro1 macro1; + TyonMacro2 macro2; + gboolean result; + g_assert(profile_index < TYON_PROFILE_NUM); - tyon_macro_finalize(macro, TYON_COMMAND_MACRO, profile_index, button_index); - return tyon_device_write(tyon, (gchar const *)macro, sizeof(TyonMacro), error); + + tyon_macro_finalize(macro, profile_index, button_index); + + macro1.command = TYON_COMMAND_MACRO; + macro1.one = 1; + memcpy(macro1.data, macro, TYON_MACRO_1_DATA_SIZE); + + macro2.command = TYON_COMMAND_MACRO; + macro2.two = 2; + memcpy(macro2.data, (guint8 *)macro + TYON_MACRO_1_DATA_SIZE, TYON_MACRO_2_DATA_SIZE); + memset(macro2.unused, 0, TYON_MACRO_2_UNUSED_SIZE); + + result = tyon_device_write(tyon, (gchar const *)¯o1, sizeof(TyonMacro1), error); + if (!result) + return FALSE; + + return tyon_device_write(tyon, (gchar const *)¯o2, sizeof(TyonMacro2), error); } TyonMacro *tyon_macro_read(RoccatDevice *tyon, guint profile_index, guint button_index, GError **error) { + TyonMacro1 *macro1; + TyonMacro2 *macro2; TyonMacro *macro; g_assert(profile_index < TYON_PROFILE_NUM); gaminggear_device_lock(GAMINGGEAR_DEVICE(tyon)); - if (!tyon_select(tyon, profile_index, button_index, error)) { + if (!tyon_select(tyon, profile_index, TYON_CONTROL_DATA_INDEX_MACRO_1, button_index, error)) { gaminggear_device_unlock(GAMINGGEAR_DEVICE(tyon)); return NULL; } - macro = (TyonMacro *)tyon_device_read(tyon, TYON_COMMAND_MACRO, sizeof(TyonMacro), error); + macro1 = (TyonMacro1 *)tyon_device_read(tyon, TYON_COMMAND_MACRO, sizeof(TyonMacro1), error); + if (!macro1) { + gaminggear_device_unlock(GAMINGGEAR_DEVICE(tyon)); + return NULL; + } + + if (!tyon_select(tyon, profile_index, TYON_CONTROL_DATA_INDEX_MACRO_2, button_index, error)) { + gaminggear_device_unlock(GAMINGGEAR_DEVICE(tyon)); + g_free(macro1); + return NULL; + } + + macro2 = (TyonMacro2 *)tyon_device_read(tyon, TYON_COMMAND_MACRO, sizeof(TyonMacro2), error); + if (!macro2) { + gaminggear_device_unlock(GAMINGGEAR_DEVICE(tyon)); + g_free(macro1); + return NULL; + } gaminggear_device_unlock(GAMINGGEAR_DEVICE(tyon)); + macro = (TyonMacro *)g_malloc(sizeof(TyonMacro)); + memcpy(macro, macro1->data, TYON_MACRO_1_DATA_SIZE); + memcpy((guint8 *)macro + TYON_MACRO_1_DATA_SIZE, macro2->data, TYON_MACRO_2_DATA_SIZE); + + g_free(macro1); + g_free(macro2); + return macro; } @@ -123,7 +188,7 @@ gboolean tyon_macro_equal(TyonMacro const *left, TyonMacro const *right) { gboolean equal; - equal = ROCCAT_MEMCMP_PARTIALLY(left, right, TyonMacro, loop, unused2); + equal = ROCCAT_MEMCMP_PARTIALLY_TO_END(left, right, TyonMacro, loop); return equal ? FALSE : TRUE; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/tyon/libtyon/tyon_macro.h new/roccat-tools-2.4.0/tyon/libtyon/tyon_macro.h --- old/roccat-tools-2.3.0/tyon/libtyon/tyon_macro.h 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/tyon/libtyon/tyon_macro.h 2015-01-25 17:36:09.000000000 +0100 @@ -27,7 +27,7 @@ enum { TYON_MACRO_MACROSET_NAME_LENGTH = 24, TYON_MACRO_MACRO_NAME_LENGTH = 24, - TYON_MACRO_KEYSTROKES_NUM = 236, + TYON_MACRO_KEYSTROKES_NUM = 480, }; typedef struct _TyonKeystroke TyonKeystroke; @@ -52,9 +52,8 @@ TYON_KEYSTROKE_ACTION_RELEASE = 2, } TyonKeystrokeAction; +/* This structure is transferred to hardware in 2 parts */ struct _TyonMacro { - guint8 command; /* TYON_COMMAND_MACRO */ - guint8 one; guint8 profile_index; guint8 button_index; guint8 loop; @@ -63,7 +62,6 @@ guint8 macro_name[TYON_MACRO_MACRO_NAME_LENGTH]; guint16 count; TyonKeystroke keystrokes[TYON_MACRO_KEYSTROKES_NUM]; - guint8 unused2[3]; } __attribute__ ((packed)); static inline guint16 tyon_macro_get_count(TyonMacro const *macro) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/tyon/libtyon/tyon_profile_buttons.c new/roccat-tools-2.4.0/tyon/libtyon/tyon_profile_buttons.c --- old/roccat-tools-2.3.0/tyon/libtyon/tyon_profile_buttons.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/tyon/libtyon/tyon_profile_buttons.c 2015-01-25 17:36:09.000000000 +0100 @@ -38,7 +38,7 @@ gaminggear_device_lock(GAMINGGEAR_DEVICE(device)); - if (!tyon_select(device, profile_index, TYON_CONTROL_REQUEST_PROFILE_BUTTONS, error)) { + if (!tyon_select(device, profile_index, TYON_CONTROL_DATA_INDEX_NONE, TYON_CONTROL_REQUEST_PROFILE_BUTTONS, error)) { g_clear_error(error); gaminggear_device_unlock(GAMINGGEAR_DEVICE(device)); return NULL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/tyon/libtyon/tyon_profile_settings.c new/roccat-tools-2.4.0/tyon/libtyon/tyon_profile_settings.c --- old/roccat-tools-2.3.0/tyon/libtyon/tyon_profile_settings.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/tyon/libtyon/tyon_profile_settings.c 2015-01-25 17:36:09.000000000 +0100 @@ -48,7 +48,7 @@ gaminggear_device_lock(GAMINGGEAR_DEVICE(device)); - if (!tyon_select(device, profile_index, TYON_CONTROL_REQUEST_PROFILE_SETTINGS, error)) { + if (!tyon_select(device, profile_index, TYON_CONTROL_DATA_INDEX_NONE, TYON_CONTROL_REQUEST_PROFILE_SETTINGS, error)) { g_clear_error(error); gaminggear_device_unlock(GAMINGGEAR_DEVICE(device)); return NULL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/tyon/libtyon/tyon_profile_settings.h new/roccat-tools-2.4.0/tyon/libtyon/tyon_profile_settings.h --- old/roccat-tools-2.3.0/tyon/libtyon/tyon_profile_settings.h 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/tyon/libtyon/tyon_profile_settings.h 2015-01-25 17:36:09.000000000 +0100 @@ -25,6 +25,10 @@ enum { TYON_PROFILE_SETTINGS_CPI_LEVELS_NUM = 5, + TYON_PROFILE_SETTINGS_POLLING_RATE_MASK = 0x0f, + TYON_PROFILE_SETTINGS_TALKFX_MASK = 0xf0, + TYON_PROFILE_SETTINGS_POLLING_RATE_SHIFT = 0, + TYON_PROFILE_SETTINGS_TALKFX_SHIFT = 4, }; typedef struct _TyonProfileSettings TyonProfileSettings; @@ -48,7 +52,7 @@ guint8 cpi_levels_enabled; guint8 cpi_levels[TYON_PROFILE_SETTINGS_CPI_LEVELS_NUM]; guint8 cpi_active; /* range 0-4 */ - guint8 polling_rate; + guint8 talkfx_polling_rate; guint8 lights_enabled; guint8 color_flow; guint8 light_effect; @@ -57,6 +61,22 @@ guint16 checksum; } __attribute__ ((packed)); +static inline guint8 tyon_profile_settings_get_polling_rate(TyonProfileSettings const *profile_settings) { + return (profile_settings->talkfx_polling_rate & TYON_PROFILE_SETTINGS_POLLING_RATE_MASK) >> TYON_PROFILE_SETTINGS_POLLING_RATE_SHIFT; +} + +static inline guint8 tyon_profile_settings_get_talkfx(TyonProfileSettings const *profile_settings) { + return (profile_settings->talkfx_polling_rate & TYON_PROFILE_SETTINGS_TALKFX_MASK) >> TYON_PROFILE_SETTINGS_TALKFX_SHIFT; +} + +static inline void tyon_profile_settings_set_polling_rate(TyonProfileSettings *profile_settings, guint8 new_value) { + profile_settings->talkfx_polling_rate = (profile_settings->talkfx_polling_rate & TYON_PROFILE_SETTINGS_TALKFX_MASK) | (new_value << TYON_PROFILE_SETTINGS_POLLING_RATE_SHIFT); +} + +static inline void tyon_profile_settings_set_talkfx(TyonProfileSettings *profile_settings, guint8 new_value) { + profile_settings->talkfx_polling_rate = (profile_settings->talkfx_polling_rate & TYON_PROFILE_SETTINGS_POLLING_RATE_MASK) | (new_value << TYON_PROFILE_SETTINGS_TALKFX_SHIFT); +} + typedef enum { TYON_PROFILE_SETTINGS_ADVANCED_SENSITIVITY_OFF = 0, TYON_PROFILE_SETTINGS_ADVANCED_SENSITIVITY_ON = 1, @@ -75,6 +95,11 @@ } TyonProfileSettingsPollingRate; typedef enum { + TYON_PROFILE_SETTINGS_TALKFX_ON = 0, + TYON_PROFILE_SETTINGS_TALKFX_OFF = 1, +} TyonProfileSettingsTalkfx; + +typedef enum { TYON_PROFILE_SETTINGS_LIGHTS_ENABLED_BIT_WHEEL = 0, TYON_PROFILE_SETTINGS_LIGHTS_ENABLED_BIT_BOTTOM = 1, TYON_PROFILE_SETTINGS_LIGHTS_ENABLED_BIT_CUSTOM_COLOR = 4, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/tyon/libtyon/tyon_rmp.h new/roccat-tools-2.4.0/tyon/libtyon/tyon_rmp.h --- old/roccat-tools-2.3.0/tyon/libtyon/tyon_rmp.h 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/tyon/libtyon/tyon_rmp.h 2015-01-25 17:36:09.000000000 +0100 @@ -96,6 +96,8 @@ //void tyon_rmp_set_color_options(TyonRmp *rmp, guint value); void tyon_rmp_set_use_color_for_all(TyonRmp *rmp, guint value); guint tyon_rmp_get_use_color_for_all(TyonRmp *rmp); +void tyon_rmp_set_talkfx(TyonRmp *rmp, guint value); +guint tyon_rmp_get_talkfx(TyonRmp *rmp); guint tyon_rmp_cpi_to_bin(guint rmp_value); guint tyon_bin_cpi_to_rmp(guint bin_value); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/tyon/libtyon/tyon_rmp_accessors.c new/roccat-tools-2.4.0/tyon/libtyon/tyon_rmp_accessors.c --- old/roccat-tools-2.3.0/tyon/libtyon/tyon_rmp_accessors.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/tyon/libtyon/tyon_rmp_accessors.c 2015-01-25 17:36:09.000000000 +0100 @@ -43,6 +43,7 @@ static gchar const * const tyon_rmp_color_options_name = "ColorOptions"; static gchar const * const tyon_rmp_color_change_mode_name = "ColorChangeMode"; static gchar const * const tyon_rmp_use_color_for_all_name = "UseColorForAll"; +static gchar const * const tyon_rmp_talkfx_name = "HDDKeyboard"; static gchar *tyon_rmp_create_macro_key_info_name(guint index) { g_assert(index < TYON_PROFILE_BUTTON_NUM); @@ -403,3 +404,11 @@ guint tyon_rmp_get_use_color_for_all(TyonRmp *rmp) { return tyon_rmp_get_value(rmp, tyon_rmp_use_color_for_all_name); } + +void tyon_rmp_set_talkfx(TyonRmp *rmp, guint value) { + tyon_rmp_set_value_settings(rmp, tyon_rmp_talkfx_name, value); +} + +guint tyon_rmp_get_talkfx(TyonRmp *rmp) { + return tyon_rmp_get_value(rmp, tyon_rmp_talkfx_name); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/tyon/libtyon/tyon_rmp_conversions.c new/roccat-tools-2.4.0/tyon/libtyon/tyon_rmp_conversions.c --- old/roccat-tools-2.3.0/tyon/libtyon/tyon_rmp_conversions.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/tyon/libtyon/tyon_rmp_conversions.c 2015-01-25 17:36:09.000000000 +0100 @@ -52,7 +52,8 @@ settings->cpi_levels_enabled = tyon_rmp_get_cpi_all(rmp); settings->cpi_active = tyon_rmp_get_cpi_x(rmp); - settings->polling_rate = tyon_rmp_get_polling_rate(rmp); + tyon_profile_settings_set_polling_rate(settings, tyon_rmp_get_polling_rate(rmp)); + tyon_profile_settings_set_talkfx(settings, tyon_rmp_get_talkfx(rmp)); custom_color = tyon_rmp_get_light_chose_type(rmp); roccat_set_bit(&settings->lights_enabled, TYON_PROFILE_SETTINGS_LIGHTS_ENABLED_BIT_CUSTOM_COLOR, @@ -111,7 +112,8 @@ tyon_rmp_set_light_effect_speed(rmp, profile_settings->effect_speed); tyon_rmp_set_light_color_flow(rmp, profile_settings->color_flow); - tyon_rmp_set_polling_rate(rmp, profile_settings->polling_rate); + tyon_rmp_set_polling_rate(rmp, tyon_profile_settings_get_polling_rate(profile_settings)); + tyon_rmp_set_talkfx(rmp, tyon_profile_settings_get_talkfx(profile_settings)); } static void tyon_profile_buttons_set_button(TyonRmp *rmp, guint index, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/tyon/libtyon/tyon_rmp_macro_key_info.c new/roccat-tools-2.4.0/tyon/libtyon/tyon_rmp_macro_key_info.c --- old/roccat-tools-2.3.0/tyon/libtyon/tyon_rmp_macro_key_info.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/tyon/libtyon/tyon_rmp_macro_key_info.c 2015-01-25 17:36:09.000000000 +0100 @@ -159,7 +159,6 @@ macro = g_malloc0(sizeof(TyonMacro)); - macro->command = TYON_COMMAND_MACRO; macro->button_index = macro_key_info->button_index; macro->loop = tyon_rmp_macro_key_info_get_loop(macro_key_info); tyon_macro_set_macroset_name(macro, (gchar const *)macro_key_info->macroset_name); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/tyon/libtyon/tyon_rmp_macro_key_info.h new/roccat-tools-2.4.0/tyon/libtyon/tyon_rmp_macro_key_info.h --- old/roccat-tools-2.3.0/tyon/libtyon/tyon_rmp_macro_key_info.h 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/tyon/libtyon/tyon_rmp_macro_key_info.h 2015-01-25 17:36:09.000000000 +0100 @@ -29,7 +29,7 @@ enum { TYON_RMP_MACRO_KEY_INFO_MACROSET_NAME_LENGTH = 50, TYON_RMP_MACRO_KEY_INFO_MACRO_NAME_LENGTH = 50, - TYON_RMP_MACRO_KEY_INFO_KEYSTROKES_NUM = 500, + TYON_RMP_MACRO_KEY_INFO_KEYSTROKES_NUM = TYON_MACRO_KEYSTROKES_NUM, TYON_RMP_MACRO_KEY_INFO_TIMER_NAME_LENGTH = 100, TYON_RMP_MACRO_KEY_INFO_FILENAME_LENGTH = 260, }; @@ -46,7 +46,7 @@ guint32 loop; guint16 count; TyonKeystroke keystrokes[TYON_RMP_MACRO_KEY_INFO_KEYSTROKES_NUM]; - guint16 unused4; + guint8 unused4[82]; guint32 timer_length; guint8 timer_name[TYON_RMP_MACRO_KEY_INFO_TIMER_NAME_LENGTH]; guint8 filename[TYON_RMP_MACRO_KEY_INFO_FILENAME_LENGTH]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/tyon/libtyoneventhandler/tyon_eventhandler.c new/roccat-tools-2.4.0/tyon/libtyoneventhandler/tyon_eventhandler.c --- old/roccat-tools-2.3.0/tyon/libtyoneventhandler/tyon_eventhandler.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/tyon/libtyoneventhandler/tyon_eventhandler.c 2015-01-25 17:36:09.000000000 +0100 @@ -199,17 +199,26 @@ return retval; } +static gboolean should_execute_fx(TyonEventhandler *eventhandler) { + TyonEventhandlerPrivate *priv = eventhandler->priv; + return tyon_rmp_get_talkfx(priv->rmp[priv->actual_profile_index]) == TYON_PROFILE_SETTINGS_TALKFX_ON; +} + static gboolean set_led_rgb(TyonEventhandler *eventhandler, guint32 effect, guint32 ambient_color, guint32 event_color) { TyonEventhandlerPrivate *priv = eventhandler->priv; GError *error = NULL; - gboolean retval = FALSE; + gboolean retval; - if (priv->device_set_up) { - retval = tyon_talkfx(priv->device, effect, ambient_color, event_color, &error); - if (error) { - g_warning("Error issuing talkfx: %s", error->message); - g_clear_error(&error); - } + if (!should_execute_fx(eventhandler)) + return FALSE; + + if (!priv->device_set_up) + return FALSE; + + retval = tyon_talkfx(priv->device, effect, ambient_color, event_color, &error); + if (error) { + g_warning("Error issuing talkfx: %s", error->message); + g_clear_error(&error); } return retval; @@ -218,14 +227,18 @@ static gboolean restore_led_rgb(TyonEventhandler *eventhandler) { TyonEventhandlerPrivate *priv = eventhandler->priv; GError *error = NULL; - gboolean retval = FALSE; + gboolean retval; - if (priv->device_set_up) { - retval = tyon_talkfx_off(priv->device, &error); - if (error) { - g_warning("Error issuing talkfx_off: %s", error->message); - g_clear_error(&error); - } + if (!should_execute_fx(eventhandler)) + return FALSE; + + if (!priv->device_set_up) + return FALSE; + + retval = tyon_talkfx_off(priv->device, &error); + if (error) { + g_warning("Error issuing talkfx_off: %s", error->message); + g_clear_error(&error); } return retval; @@ -394,8 +407,6 @@ priv->active_talk_type = macro_key_info->type; priv->active_talk_device = tyon_rmp_macro_key_info_get_talk_device(macro_key_info); tyon_rmp_macro_key_info_free(macro_key_info); - } else { - priv->active_talk_type = TYON_BUTTON_TYPE_DISABLED; } switch (priv->active_talk_type) { @@ -420,8 +431,11 @@ } break; default: - g_debug("unknown talk event of type 0x%2x", priv->active_talk_type); + g_debug("unknown talk event of type 0x%02x", priv->active_talk_type); } + + if (event == TYON_EVENT_ACTION_RELEASE) + priv->active_talk_type = TYON_BUTTON_TYPE_DISABLED; } static void timer_start_cb(TyonEventhandlerChannel *channel, guchar key_index, gpointer user_data) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/tyon/libtyoneventhandler/tyon_eventhandler_channel.c new/roccat-tools-2.4.0/tyon/libtyoneventhandler/tyon_eventhandler_channel.c --- old/roccat-tools-2.3.0/tyon/libtyoneventhandler/tyon_eventhandler_channel.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/tyon/libtyoneventhandler/tyon_eventhandler_channel.c 2015-01-25 17:36:09.000000000 +0100 @@ -105,9 +105,9 @@ break; case TYON_EVENT_TYPE_MULTIMEDIA: break; -// case TYON_EVENT_TYPE_TALK: -// g_signal_emit((gpointer)eventhandler_channel, signals[TALK], 0, event->data - 1, event->action); // FIXME check -// break; + case TYON_EVENT_TYPE_TALK: + g_signal_emit((gpointer)eventhandler_channel, signals[TALK], 0, event->data - 1, event->action); + break; default: string = roccat_data_to_string((guchar const *)event, sizeof(TyonEvent)); g_debug("unknown event = %s", string); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roccat-tools-2.3.0/tyon/tyonconfig/tyon_profile_page.c new/roccat-tools-2.4.0/tyon/tyonconfig/tyon_profile_page.c --- old/roccat-tools-2.3.0/tyon/tyonconfig/tyon_profile_page.c 2015-01-10 20:10:13.000000000 +0100 +++ new/roccat-tools-2.4.0/tyon/tyonconfig/tyon_profile_page.c 2015-01-25 17:36:09.000000000 +0100 @@ -23,6 +23,7 @@ #include "tyon_color_frame.h" #include "tyon_cpi_selector.h" #include "roccat_gamefile_selector.h" +#include "roccat_talkfx_selector.h" #define TYON_PROFILE_PAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), TYON_PROFILE_PAGE_TYPE, TyonProfilePageClass)) #define IS_TYON_PROFILE_PAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), TYON_PROFILE_PAGE_TYPE)) @@ -49,6 +50,7 @@ TyonSensitivitySelector *sensitivity; TyonLightEffectsFrame *light_effects; TyonColorFrame *colors; + RoccatTalkFXSelector *talkfx; }; G_DEFINE_TYPE(TyonProfilePage, tyon_profile_page, ROCCAT_PROFILE_PAGE_TYPE); @@ -75,6 +77,7 @@ tyon_color_frame_set_from_rmp(priv->colors, priv->rmp); tyon_cpi_selector_set_from_rmp(priv->cpi, priv->rmp); tyon_polling_rate_selector_set_value(priv->polling_rate, tyon_rmp_get_polling_rate(priv->rmp)); + roccat_talkfx_selector_set_active(priv->talkfx, tyon_rmp_get_talkfx(priv->rmp) == TYON_PROFILE_SETTINGS_TALKFX_ON ? TRUE : FALSE); for (i = 0; i < TYON_GAMEFILE_NUM; ++i) roccat_gamefile_selector_set_text(priv->gamefiles, i, tyon_rmp_get_game_file_name(priv->rmp, i)); @@ -95,6 +98,7 @@ tyon_color_frame_update_rmp(priv->colors, rmp); tyon_cpi_selector_update_rmp(priv->cpi, rmp); tyon_rmp_set_polling_rate(rmp, tyon_polling_rate_selector_get_value(priv->polling_rate)); + tyon_rmp_set_talkfx(rmp, roccat_talkfx_selector_get_active(priv->talkfx) ? TYON_PROFILE_SETTINGS_TALKFX_ON : TYON_PROFILE_SETTINGS_TALKFX_OFF); for (i = 0; i < TYON_GAMEFILE_NUM; ++i) tyon_rmp_set_game_file_name(rmp, i, roccat_gamefile_selector_get_text(priv->gamefiles, i)); @@ -126,6 +130,7 @@ priv->sensitivity = TYON_SENSITIVITY_SELECTOR(tyon_sensitivity_selector_new()); priv->light_effects = TYON_LIGHT_EFFECTS_FRAME(tyon_light_effects_frame_new()); priv->colors = TYON_COLOR_FRAME(tyon_color_frame_new()); + priv->talkfx = ROCCAT_TALKFX_SELECTOR(roccat_talkfx_selector_new()); gtk_box_pack_start(GTK_BOX(light), GTK_WIDGET(priv->colors), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(light), GTK_WIDGET(priv->light_effects), TRUE, TRUE, 0); @@ -134,6 +139,7 @@ gtk_box_pack_start(GTK_BOX(right), GTK_WIDGET(priv->polling_rate), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(right), GTK_WIDGET(priv->gamefiles), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(left), light, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(left), GTK_WIDGET(priv->talkfx), FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(left), GTK_WIDGET(priv->cpi), TRUE, TRUE, 0); gtk_container_add(GTK_CONTAINER(sense_frame), GTK_WIDGET(priv->sensitivity)); -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
