[chronojump] Implemented flicker, discriminative (pending start/end signal)
- From: Xavier de Blas <xaviblas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [chronojump] Implemented flicker, discriminative (pending start/end signal)
- Date: Thu, 30 Apr 2015 18:33:22 +0000 (UTC)
commit 23a79620586e4e32a905adf7bbcb91dcbd52b627
Author: Xavier de Blas <xaviblas gmail com>
Date: Thu Apr 30 20:32:34 2015 +0200
Implemented flicker, discriminative (pending start/end signal)
.../chronopic-firmware-multitest.c | 105 ++-
glade/chronojump.glade | 1272 +++++++++++++++++++-
src/chronopic.cs | 20 +-
src/gui/chronojump.cs | 39 +
4 files changed, 1417 insertions(+), 19 deletions(-)
---
diff --git a/chronopic-firmware/chronopic-firmware-c/chronopic-firmware-multitest.c
b/chronopic-firmware/chronopic-firmware-c/chronopic-firmware-multitest.c
index 108af91..a8232e8 100644
--- a/chronopic-firmware/chronopic-firmware-c/chronopic-firmware-multitest.c
+++ b/chronopic-firmware/chronopic-firmware-c/chronopic-firmware-multitest.c
@@ -36,8 +36,6 @@ History:
2012-04-19 if PC send command 'J' for port scanning, Chronopic will return 'J' 2014-08-30 if PC send
command 'V' for getting version, ex: 2.1\n
if PC send command 'a' get debounce time , ex:0x01
if PC send command 'bx' for setting debounce time, x is from byte value 0~255(\x0 ~ \xFF)
- if PC send command 'c' for starting contiuned to send encoder value
- if PC send command 'd' for stopping contiuned to send encoder value
2015-02-19
if PC send command 'R','r' for reaction time protocol on pin RB3 (R/r open/close this light)
if PC send command 'S','s' for reaction time protocol on pin RB6 (S/s open/close this light)
@@ -127,8 +125,6 @@ unsigned char command_port_scanning = 'J'; // for port scanning, it will return
unsigned char command_get_version = 'V'; // for getting version, it will return '2.1'
unsigned char command_get_debounce_time = 'a'; // for setting debounce time, pc send two unsigned char, 'Sx'
-- x:0~255
unsigned char command_set_debounce_time = 'b'; // for getting debounce time, it will return x:0~255(HEX)
-//unsigned char command_start_send_encoder_value = 'c'; // starting continued send encoder's value
-//unsigned char command_stop_send_encoder_value = 'd'; // stopping continued send encoder's value
unsigned char command_reaction_time_rb3_on = 'R';
unsigned char command_reaction_time_rb6_on = 'S';
unsigned char command_reaction_time_rb7_on = 'T';
@@ -137,7 +133,10 @@ unsigned char command_reaction_time_rb6_off = 's';
unsigned char command_reaction_time_rb7_off = 't';
unsigned char command_reaction_time_animation_light = 'l';
unsigned char command_reaction_time_animation_flicker = 'f';
-unsigned char command_reaction_time_animation_buzzer = 'z';
+unsigned char command_reaction_time_animation_discriminative1 = 'd'; //d for 'd'iscriminative
+unsigned char command_reaction_time_animation_discriminative2 = 'D';
+unsigned char command_reaction_time_animation_discriminative3 = 'i'; //i for d'i'scriminative
+unsigned char command_reaction_time_animation_discriminative4 = 'I';
unsigned char position = 0;
unsigned int timer2Times;
@@ -152,6 +151,8 @@ unsigned int animation_tick = 61;
unsigned int animation_tick_n_times = 160;
unsigned char animation_light_should_run = 0; //0 until and 'l' is sent from Chronojump
+unsigned char flicker_light_should_run = 0; //0 until and 'f' is sent from Chronojump
+unsigned char discriminative_running = 0;
char version_major = '1';
char version_minor = '1';
@@ -502,6 +503,51 @@ void reaction_time_animation_lights_do()
}
+void reaction_time_flicker_do()
+{
+ if(TMR2IF == 1) {
+ timer2_start();
+ timer2Times --;
+
+ if(timer2Times <= 0) {
+ switch(position) {
+ case 0:
+ RB7 = 0; RB3 = 0; RB0 = 0; RB2 = 0; //OFF
+ position = 1;
+ break;
+ case 1:
+ RB7 = 0; RB3 = 0; RB0 = 0; RB2 = 1;
+ position = 0;
+ break;
+ }
+
+ timer2Times = animation_tick_n_times;
+ }
+ }
+}
+
+void reaction_time_discriminative_do(char mode)
+{
+ switch(mode) {
+ case 'd':
+ RB7 = 0; RB3 = 1; RB0 = 0; RB2 = 0; //light red
+ break;
+ case 'D':
+ RB7 = 0; RB3 = 0; RB0 = 1; RB2 = 1; //light yellow
+ break;
+ case 'i':
+ RB7 = 0; RB3 = 0; RB0 = 1; RB2 = 0; //light green
+ break;
+ case 'I':
+ RB7 = 0; RB3 = 0; RB0 = 0; RB2 = 1; //buzzer
+ break;
+ }
+}
+void reaction_time_discriminative_stop()
+{
+ RB7 = 0; RB3 = 0; RB0 = 0; RB2 = 0;
+}
+
//*****************************************************
//* Activate interruption of changing of port B
//* INPUT: None
@@ -569,6 +615,36 @@ static void animation_light_convert(char sentData)
break;
}
}
+static void flickr_light_convert(char sentData)
+{
+ switch(sentData) {
+ case 0:
+ animation_tick_n_times = 1;
+ break;
+ case 1:
+ animation_tick_n_times = 2;
+ break;
+ case 2:
+ animation_tick_n_times = 3;
+ break;
+ case 3:
+ animation_tick_n_times = 4;
+ break;
+ case 4:
+ animation_tick_n_times = 5;
+ break;
+ case 5:
+ animation_tick_n_times = 6;
+ break;
+ case 6:
+ animation_tick_n_times = 7;
+ break;
+ case 7:
+ animation_tick_n_times = 8;
+ break;
+ }
+}
+
void main(void)
{
@@ -762,6 +838,19 @@ void main(void)
animation_light_convert(sci_readchar());
animation_light_should_run = 1;
}
+ else if (my_char == command_reaction_time_animation_flicker) { // 'f'
+ flickr_light_convert(sci_readchar());
+ flicker_light_should_run = 1;
+ }
+ else if (
+ my_char == command_reaction_time_animation_discriminative1 ||
+ my_char == command_reaction_time_animation_discriminative2 ||
+ my_char == command_reaction_time_animation_discriminative3 ||
+ my_char == command_reaction_time_animation_discriminative4 )
+ { // 'd', 'D', 'i', 'I'
+ reaction_time_discriminative_do(my_char);
+ discriminative_running = 1;
+ }
else
send_error();
}
@@ -774,6 +863,8 @@ void main(void)
//TODO: only if an 'l' has been sent before
if(animation_light_should_run == 1)
reaction_time_animation_lights_do();
+ else if(flicker_light_should_run == 1)
+ reaction_time_flicker_do();
}
else if (status == STAT_DEBOUNCE) // status = DEBOUNCE?
{
@@ -829,6 +920,10 @@ void main(void)
//stop animation light, and go to the beginning
animation_light_should_run = 0;
position = 0;
+
+ if(discriminative_running)
+ reaction_time_discriminative_stop();
+
//-- Send frame of changing input
//-- First the frame identifier
diff --git a/glade/chronojump.glade b/glade/chronojump.glade
index 586403e..1fd60de 100644
--- a/glade/chronojump.glade
+++ b/glade/chronojump.glade
@@ -5243,14 +5243,13 @@ It starts before and arrives there with some speed.</property>
<property name="can_focus">False</property>
<child>
<widget class="GtkLabel" id="label77">
- <property name="height_request">100</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">No
options</property>
</widget>
<packing>
<property name="expand">False</property>
- <property name="fill">True</property>
+ <property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
@@ -5264,7 +5263,7 @@ It starts before and arrives there with some speed.</property>
<widget class="GtkLabel" id="label123">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="label">experimental
stuff</property>
+ <property name="label">Experimental
stuff</property>
</widget>
<packing>
<property name="expand">False</property>
@@ -5277,8 +5276,6 @@ It starts before and arrives there with some speed.</property>
<property name="can_focus">False</property>
<property name="n_rows">2</property>
<property name="n_columns">3</property>
- <property name="column_spacing">20</property>
- <property name="row_spacing">20</property>
<child>
<widget class="GtkButton" id="button_rt_3_on">
<property name="label">3 on</property>
@@ -5287,6 +5284,10 @@ It starts before and arrives there with some speed.</property>
<property name="receives_default">True</property>
<signal name="clicked"
handler="on_button_rt_3_on_clicked" swapped="no"/>
</widget>
+ <packing>
+ <property name="x_options"/>
+ <property name="y_options"/>
+ </packing>
</child>
<child>
<widget class="GtkButton" id="button_rt_3_off">
@@ -5299,6 +5300,8 @@ It starts before and arrives there with some speed.</property>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
+ <property name="x_options"/>
+ <property name="y_options"/>
</packing>
</child>
<child>
@@ -5312,6 +5315,8 @@ It starts before and arrives there with some speed.</property>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
+ <property name="x_options"/>
+ <property name="y_options"/>
</packing>
</child>
<child>
@@ -5325,6 +5330,8 @@ It starts before and arrives there with some speed.</property>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
+ <property name="x_options"/>
+ <property name="y_options"/>
</packing>
</child>
<child>
@@ -5340,6 +5347,8 @@ It starts before and arrives there with some speed.</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
+ <property name="x_options"/>
+ <property name="y_options"/>
</packing>
</child>
<child>
@@ -5355,20 +5364,299 @@ It starts before and arrives there with some speed.</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
+ <property name="x_options"/>
+ <property name="y_options"/>
</packing>
</child>
</widget>
<packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
- <widget class="GtkHBox" id="hbox147">
+ <widget class="GtkNotebook" id="notebook1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <widget class="GtkHBox" id="hbox148">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="spacing">12</property>
+ <property name="border_width">10</property>
+ <property name="spacing">20</property>
+ <child>
+ <widget class="GtkTable" id="table12">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="n_rows">9</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">8</property>
+ <property name="row_spacing">4</property>
+ <child>
+ <widget class="GtkLabel" id="label131">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">Value</property>
+ </widget>
+ <packing>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label132">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">7</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label135">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property
name="xalign">0.47999998927116394</property>
+ <property name="label">6</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label136">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">5</property>
+ </widget>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label137">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">4</property>
+ </widget>
+ <packing>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label138">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">3</property>
+ </widget>
+ <packing>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label139">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">2</property>
+ </widget>
+ <packing>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label140">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">1</property>
+ </widget>
+ <packing>
+ <property name="top_attach">7</property>
+ <property name="bottom_attach">8</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label141">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">0</property>
+ </widget>
+ <packing>
+ <property name="top_attach">8</property>
+ <property name="bottom_attach">9</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label142">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">Interval</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="x_options"/>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label143">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">2 s</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label144">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">1 s</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label145">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">500 ms</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label146">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">250 ms</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label147">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">125 ms</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label148">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">62.5 ms</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label149">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">31.25 ms</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">7</property>
+ <property name="bottom_attach">8</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label150">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">15.625 ms</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">8</property>
+ <property name="bottom_attach">9</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox98">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <widget class="GtkHBox" id="hbox151">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <widget class="GtkVBox" id="vbox101">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <widget class="GtkLabel" id="label179">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">Value</property>
+ </widget>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
<child>
<widget class="GtkSpinButton"
id="spinbutton_animation_lights_speed">
<property name="visible">True</property>
@@ -5384,14 +5672,29 @@ It starts before and arrives there with some speed.</property>
<property name="numeric">True</property>
</widget>
<packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
<property name="expand">False</property>
<property name="fill">False</property>
+ <property name="padding">20</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkButton"
id="button_animation_lights_start">
- <property name="label">Animation ligths -
start</property>
+ <property name="label">Start</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@@ -5407,13 +5710,730 @@ It starts before and arrives there with some speed.</property>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">2</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label128">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">Animation
lights</property>
+ </widget>
+ <packing>
+ <property name="tab_fill">False</property>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox152">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">10</property>
+ <property name="spacing">20</property>
+ <child>
+ <widget class="GtkTable" id="table13">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="n_rows">9</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">8</property>
+ <property name="row_spacing">4</property>
+ <child>
+ <widget class="GtkLabel" id="label151">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">Value</property>
+ </widget>
+ <packing>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label152">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">7</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label153">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property
name="xalign">0.47999998927116394</property>
+ <property name="label">6</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label154">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">5</property>
+ </widget>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label155">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">4</property>
+ </widget>
+ <packing>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label156">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">3</property>
+ </widget>
+ <packing>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label157">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">2</property>
+ </widget>
+ <packing>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label158">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">1</property>
+ </widget>
+ <packing>
+ <property name="top_attach">7</property>
+ <property name="bottom_attach">8</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label159">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">0</property>
+ </widget>
+ <packing>
+ <property name="top_attach">8</property>
+ <property name="bottom_attach">9</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label160">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">Cycle time</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="x_options"/>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label161">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">800 ms</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label162">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">400 ms</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label163">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">200 ms</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label164">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">100 ms</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label165">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">50 ms</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label166">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">25 ms</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label167">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">12.5 ms</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">7</property>
+ <property name="bottom_attach">8</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label168">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">6.25 ms</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">8</property>
+ <property name="bottom_attach">9</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label169">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">Freq</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="x_options"/>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label170">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">1.25 Hz</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label172">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">2.5 Hz</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label173">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">5 Hz</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label174">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">10 Hz</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label175">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">20 Hz</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label176">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">40 Hz</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label177">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">80 Hz</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">7</property>
+ <property name="bottom_attach">8</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label171">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">160 Hz</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">8</property>
+ <property name="bottom_attach">9</property>
+ <property name="x_options"/>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox99">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <widget class="GtkHBox" id="hbox153">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <widget class="GtkVBox" id="vbox100">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <widget class="GtkLabel" id="label178">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">Value</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton"
id="spinbutton_flicker_lights_speed">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property
name="invisible_char_set">True</property>
+ <property
name="primary_icon_activatable">False</property>
+ <property
name="secondary_icon_activatable">False</property>
+ <property
name="primary_icon_sensitive">True</property>
+ <property
name="secondary_icon_sensitive">True</property>
+ <property name="adjustment">5 0 7 1 1
0</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">True</property>
- <property name="fill">True</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="padding">20</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton"
id="button_flicker_lights_start">
+ <property name="label">Start</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <signal name="clicked"
handler="on_button_flicker_lights_start_clicked" swapped="no"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label129">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">Flicker</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox102">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">10</property>
+ <property name="spacing">20</property>
+ <child>
+ <widget class="GtkHBox" id="hbox147">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">10</property>
+ <child>
+ <widget class="GtkRadioButton"
id="radiobutton_reaction_time_disc_lr">
+ <property name="label">Light red</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property
name="receives_default">False</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkRadioButton"
id="radiobutton_reaction_time_disc_ly">
+ <property name="label">Light yellow</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property
name="receives_default">False</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <property
name="group">radiobutton_reaction_time_disc_lr</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkRadioButton"
id="radiobutton_reaction_time_disc_lg">
+ <property name="label">Light green</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property
name="receives_default">False</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <property
name="group">radiobutton_reaction_time_disc_lr</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkRadioButton"
id="radiobutton_reaction_time_disc_bz">
+ <property name="label">Buzzer</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property
name="receives_default">False</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <property
name="group">radiobutton_reaction_time_disc_lr</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox155">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">30</property>
+ <child>
+ <widget class="GtkTable" id="table14">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">20</property>
+ <property name="row_spacing">10</property>
+ <child>
+ <widget class="GtkLabel" id="label180">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">Minimum</property>
+ </widget>
+ <packing>
+ <property name="x_options"/>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label181">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">Maximum</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="x_options"/>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton"
id="spinbutton_discriminative_lights_minimum">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property
name="invisible_char_set">True</property>
+ <property
name="primary_icon_activatable">False</property>
+ <property
name="secondary_icon_activatable">False</property>
+ <property
name="primary_icon_sensitive">True</property>
+ <property
name="secondary_icon_sensitive">True</property>
+ <property name="adjustment">1 1 9 1 1
0</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ <signal name="changed"
handler="on_spinbutton_discriminative_lights_minimum_changed" swapped="no"/>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options"/>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton"
id="spinbutton_discriminative_lights_maximum">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property
name="invisible_char_set">True</property>
+ <property
name="primary_icon_activatable">False</property>
+ <property
name="secondary_icon_activatable">False</property>
+ <property
name="primary_icon_sensitive">True</property>
+ <property
name="secondary_icon_sensitive">True</property>
+ <property name="adjustment">3 2 10 1 1
0</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ <signal name="changed"
handler="on_spinbutton_discriminative_lights_maximum_changed" swapped="no"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options"/>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox103">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <widget class="GtkButton"
id="button_discriminative_lights_start">
+ <property name="label">Start</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <signal name="clicked"
handler="on_button_discriminative_lights_start_clicked" swapped="no"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label130">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">Discriminative</property>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ <property name="tab_fill">False</property>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
@@ -6755,6 +7775,18 @@ Second Chronopic to platforms.</property>
<child>
<placeholder/>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</widget>
<packing>
<property name="expand">True</property>
@@ -7653,6 +8685,18 @@ Second Chronopic to platforms.</property>
<child>
<placeholder/>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</widget>
</child>
<child>
@@ -8803,6 +9847,18 @@ Second Chronopic to platforms.</property>
<child>
<placeholder/>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</widget>
<packing>
<property name="position">2</property>
@@ -9594,6 +10650,18 @@ Second Chronopic to platforms.</property>
<child>
<placeholder/>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</widget>
<packing>
<property name="position">4</property>
@@ -20439,6 +21507,18 @@ by you</property>
<child>
<placeholder/>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</widget>
</child>
</widget>
@@ -21138,6 +22218,18 @@ by you</property>
<child>
<placeholder/>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</widget>
</child>
</widget>
@@ -22329,6 +23421,18 @@ by you</property>
<placeholder/>
</child>
<child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
<widget class="GtkButton" id="button_video_url">
<property name="visible">True</property>
<property name="can_focus">True</property>
@@ -22577,6 +23681,18 @@ by you</property>
<child>
<placeholder/>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</widget>
<packing>
<property name="expand">True</property>
@@ -32721,6 +33837,78 @@ options</property>
<child>
<placeholder/>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</widget>
</child>
</widget>
@@ -34800,6 +35988,18 @@ To differentiate between male and female, use the values 1/0, or m/f, or M/F on
<child>
<placeholder/>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</widget>
</child>
</widget>
@@ -35537,6 +36737,18 @@ To differentiate between male and female, use the values 1/0, or m/f, or M/F on
<child>
<placeholder/>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</widget>
</child>
</widget>
@@ -38240,6 +39452,18 @@ show elevation as:</property>
<child>
<placeholder/>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</widget>
<packing>
<property name="left_attach">2</property>
@@ -38603,6 +39827,18 @@ show elevation as:</property>
<child>
<placeholder/>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</widget>
</child>
</widget>
@@ -38981,6 +40217,18 @@ show elevation as:</property>
<child>
<placeholder/>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</widget>
</child>
</widget>
diff --git a/src/chronopic.cs b/src/chronopic.cs
index ab166f7..8b3dbdc 100644
--- a/src/chronopic.cs
+++ b/src/chronopic.cs
@@ -629,10 +629,26 @@ public class ChronopicStartReactionTimeAnimation : ChronopicAuto
protected internal override string Communicate()
{
try {
+ byte b;
+ if(CharToSend == "l")
+ b = 0x6c;
+ else if(CharToSend == "f")
+ b = 0x66;
+ else if(CharToSend == "d")
+ b = 0x64;
+ else if(CharToSend == "D")
+ b = 0x44;
+ else if(CharToSend == "i")
+ b = 0x69;
+ else if(CharToSend == "I")
+ b = 0x49;
+ else
+ return "ERROR";
+
//values go from 0 to 7
- byte[] bytesToSend = new byte[2] { 0x6c, BitConverter.GetBytes(sendNum)[0] }; //l, 05
+ byte[] bytesToSend = new byte[2] { b, BitConverter.GetBytes(sendNum)[0] }; //eg. l,
05; of f, 05
sp.Write(bytesToSend,0,2);
-
+
} catch {
return "ERROR";
}
diff --git a/src/gui/chronojump.cs b/src/gui/chronojump.cs
index 37cb8d4..ffa8d80 100644
--- a/src/gui/chronojump.cs
+++ b/src/gui/chronojump.cs
@@ -195,6 +195,13 @@ public partial class ChronoJumpWindow
[Widget] Gtk.Button button_video_play_selected_reaction_time;
[Widget] Gtk.Button button_delete_selected_reaction_time;
[Widget] Gtk.SpinButton spinbutton_animation_lights_speed;
+ [Widget] Gtk.SpinButton spinbutton_flicker_lights_speed;
+ [Widget] Gtk.RadioButton radiobutton_reaction_time_disc_lr;
+ [Widget] Gtk.RadioButton radiobutton_reaction_time_disc_ly;
+ [Widget] Gtk.RadioButton radiobutton_reaction_time_disc_lg;
+ [Widget] Gtk.RadioButton radiobutton_reaction_time_disc_bz;
+ [Widget] Gtk.SpinButton spinbutton_discriminative_lights_minimum;
+ [Widget] Gtk.SpinButton spinbutton_discriminative_lights_maximum;
//pulse
[Widget] Gtk.Button button_edit_selected_pulse;
@@ -4488,6 +4495,38 @@ public partial class ChronoJumpWindow
cs.CharToSend = "l";
cs.Write(chronopicWin.SP,speed);
}
+
+ private void on_button_flicker_lights_start_clicked (object o, EventArgs args) {
+ int speed = Convert.ToInt32(spinbutton_flicker_lights_speed.Value);
+ ChronopicAuto cs = new ChronopicStartReactionTimeAnimation();
+ cs.CharToSend = "f";
+ cs.Write(chronopicWin.SP,speed);
+ }
+
+ private void on_button_discriminative_lights_start_clicked (object o, EventArgs args) {
+ //int speed = Convert.ToInt32(spinbutton_flicker_lights_speed.Value); //TODO
+ ChronopicAuto cs = new ChronopicStartReactionTimeAnimation();
+ if(radiobutton_reaction_time_disc_lr.Active == true)
+ cs.CharToSend = "d";
+ else if(radiobutton_reaction_time_disc_ly.Active == true)
+ cs.CharToSend = "D";
+ else if(radiobutton_reaction_time_disc_lg.Active == true)
+ cs.CharToSend = "i";
+ else if(radiobutton_reaction_time_disc_bz.Active == true)
+ cs.CharToSend = "I";
+ cs.Write(chronopicWin.SP,0); //TODO
+ }
+
+ private void on_spinbutton_discriminative_lights_minimum_changed (object o, EventArgs args) {
+ if(spinbutton_discriminative_lights_maximum.Value <=
spinbutton_discriminative_lights_minimum.Value)
+ spinbutton_discriminative_lights_maximum.Value =
spinbutton_discriminative_lights_minimum.Value +1;
+ }
+ private void on_spinbutton_discriminative_lights_maximum_changed (object o, EventArgs args) {
+ if(spinbutton_discriminative_lights_minimum.Value >=
spinbutton_discriminative_lights_maximum.Value)
+ spinbutton_discriminative_lights_minimum.Value =
spinbutton_discriminative_lights_maximum.Value -1;
+ }
+
+
/* ---------------------------------------------------------
* ---------------- PULSES EXECUTION ----------------------
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]