소스 검색

spheroncd: Simple turbo support.
Also some unused code for latched button handling.

Ambroz Bizjak 11 년 전
부모
커밋
038439d32a
1개의 변경된 파일25개의 추가작업 그리고 17개의 파일을 삭제
  1. 25 17
      ncd/examples/sphero/spheroncd.ncd

+ 25 - 17
ncd/examples/sphero/spheroncd.ncd

@@ -9,10 +9,13 @@ process main {
     var("/run/current-system/sw/bin/python2.7") python;
     
     value([]) joy_positions;
+    joy_positions->insert("BTN_TRIGGER", "0");
     Foreach (joy_axis_ranges As axis_name: range) {
-        joy_positions->insert(axis_name, @num_divide(range, "2"));
+        joy_positions->insert(@concat("ABS_", axis_name), @num_divide(range, "2"));
     };
     
+    value(["BTN_THUMB": @false]) joy_latch_buttons;
+    
     blocker(@true) joy_event_signal;
     
     compile_search(" ") search_space;
@@ -31,22 +34,24 @@ template _spheroncd_joystick_events {
     
     sys.evdev(global.joy_dev) joy_event;
     
-    value(joy_event.code) code;
-    code->substr("0", "4") code_check;
-    If (@val_different(code_check, "ABS_")) {
+    global.joy_positions->try_get(joy_event.code) positions_entry;
+    If (positions_entry.exists) {
+        global.joy_positions->replace(joy_event.code, joy_event.value);
+        global.joy_event_signal->up();
         joy_event->nextevent();
     };
-    code->substr("4") axis_name;
     
-    global.joy_positions->try_get(axis_name) positions_entry;
-    If (@not(positions_entry.exists)) {
+    global.joy_latch_buttons->try_get(joy_event.code) buttons_entry;
+    If (buttons_entry.exists) {
+        If (@val_equal(joy_event.value, "0")) {
+            joy_event->nextevent();
+        };
+        println(joy_event.code);
+        global.joy_latch_buttons->replace(joy_event.code, @true);
+        global.joy_event_signal->up();
         joy_event->nextevent();
     };
     
-    global.joy_positions->replace(axis_name, joy_event.value);
-    
-    global.joy_event_signal->up();
-    
     joy_event->nextevent();
 }
 
@@ -141,10 +146,10 @@ template _spheroncd_roll_task {
     backtrack_point() again;
     
     global.joy_event_signal->down();
-    value(global.joy_positions) joy_positions;
     
-    joy_positions->get("X") pos_x;
-    joy_positions->get("Y") pos_y;
+    global.joy_positions->get("ABS_X") pos_x;
+    global.joy_positions->get("ABS_Y") pos_y;
+    global.joy_positions->get("BTN_TRIGGER") turbo;
     global.joy_axis_ranges->get("X") max_x;
     global.joy_axis_ranges->get("Y") max_y;
     
@@ -153,9 +158,12 @@ template _spheroncd_roll_task {
     global.search_space->explode(calc_op.response) resp_fields;
     value(resp_fields) resp_fields;
     
-    resp_fields->get("0") heading;
-    resp_fields->get("1") speed;
-    call(@_spheroncd_roll, {^dev, speed, heading, "1"});
+    resp_fields->get("0") calc_heading;
+    resp_fields->get("1") calc_speed;
+    
+    var(@if(@num_greater(turbo, "0"), "255", calc_speed)) speed;
+    
+    call(@_spheroncd_roll, {^dev, speed, calc_heading, "1"});
     
     sleep(global.max_roll_interval);