Xℹ Ruoyao před 4 roky
rodič
revize
13ba498a1f
1 změnil soubory, kde provedl 17 přidání a 8 odebrání
  1. 17 8
      all.c

+ 17 - 8
all.c

@@ -88,7 +88,7 @@ extern int monotonic_queue_get_len(struct monotonic_queue *mq);
 struct jump_rope_count_config
 {
 	float lg, hg, la, ha, lgz, hgz, a_g_window;
-	int cy_window, cy_crit, cy_suppress_time, wait_time;
+	int cy_window, cy_crit, cy_suppress_time, wait_time, dead_zone_time;
 };
 
 struct jump_rope_count_device
@@ -96,8 +96,8 @@ struct jump_rope_count_device
 	struct schmidt trig_g, trig_a, trig_gz;
 	struct ringbuf rbuf_g, rbuf_a;
 	struct monotonic_queue mq_min_cy, mq_max_cy;
-	int cy_window, cy_crit, cy_suppress_time, wait_time;
-	int cy_suppress, remain_time;
+	int cy_window, cy_crit, cy_suppress_time, wait_time, dead_zone_time;
+	int cy_suppress, wait_remain_time, dead_zone_remain_time;
 	float last_cy, last_cy_fixed;
 };
 
@@ -161,9 +161,11 @@ int jump_rope_count_device_init(struct jump_rope_count_device *dev,
 	dev->cy_crit = cfg->cy_crit;
 	dev->cy_suppress_time = cfg->cy_suppress_time;
 	dev->wait_time = cfg->wait_time;
+	dev->dead_zone_time = cfg->dead_zone_time;
 
 	dev->cy_suppress = 0;
 	dev->last_cy = dev->last_cy_fixed = 0;
+	dev->wait_remain_time = dev->dead_zone_time = 0;
 
 	return 0;
 }
@@ -248,17 +250,23 @@ int process_packet(struct jump_rope_count_device *dev,
 
 	if (schmidt_trig(&dev->trig_gz, gz) == 1 &&
 	    schmidt_get(&dev->trig_gz) == 0 &&
-	    dev->cy_suppress == 0)
+	    dev->cy_suppress == 0 &&
+	    dev->dead_zone_remain_time == 0)
 	{
-		dev->remain_time = dev->wait_time;
+		dev->wait_remain_time = dev->wait_time;
+		dev->dead_zone_remain_time = dev->dead_zone_time;
 		*result = RESULT_TRIGGERED;
 		goto out;
 	}
 
-	if (dev->remain_time)
-		dev->remain_time--;
+	if (dev->wait_remain_time)
+		dev->wait_remain_time--;
 
-	*result = (dev->remain_time > 0 ? RESULT_NONE : RESULT_INACTIVE);
+	if (dev->dead_zone_remain_time)
+		dev->dead_zone_remain_time--;
+
+	*result = (dev->wait_remain_time > 0 ? RESULT_NONE :
+					       RESULT_INACTIVE);
 out:
 	if (dev->cy_suppress > 0)
 		dev->cy_suppress--;
@@ -453,6 +461,7 @@ int main()
 	cfg.cy_crit = 200;
 	cfg.cy_suppress_time = fs * 0.2;
 	cfg.wait_time = fs * 1;
+	cfg.dead_zone_time = fs * 0.2;
 
 	if (jump_rope_count_device_init(&dev, &cfg) != 0)
 		abort();