Bläddra i källkod

Merge pull request #6201 from thinkyhead/rc_fix_broken_ubl

Fix broken auto#.g, some other regressions
Scott Lahteine 8 år sedan
förälder
incheckning
a7aa70e79a

+ 13
- 10
Marlin/G26_Mesh_Validation_Tool.cpp Visa fil

36
   #include "UBL.h"
36
   #include "UBL.h"
37
   #include "ultralcd.h"
37
   #include "ultralcd.h"
38
 
38
 
39
-  #define EXTRUSION_MULTIPLIER 1.0    // This is too much clutter for the main Configuration.h file  But
40
-  #define RETRACTION_MULTIPLIER 1.0   // some user have expressed an interest in being able to customize
41
-  #define NOZZLE 0.3                  // these numbers for their printer so they don't need to type all
42
-  #define FILAMENT 1.75               // the options every time they do a Mesh Validation Print.
39
+  #define EXTRUSION_MULTIPLIER 1.0
40
+  #define RETRACTION_MULTIPLIER 1.0
41
+  #define NOZZLE 0.3
42
+  #define FILAMENT 1.75
43
   #define LAYER_HEIGHT 0.2
43
   #define LAYER_HEIGHT 0.2
44
-  #define PRIME_LENGTH 10.0           // So, we put these number in an easy to find and change place.
44
+  #define PRIME_LENGTH 10.0
45
   #define BED_TEMP 60.0
45
   #define BED_TEMP 60.0
46
   #define HOTEND_TEMP 205.0
46
   #define HOTEND_TEMP 205.0
47
   #define OOZE_AMOUNT 0.3
47
   #define OOZE_AMOUNT 0.3
48
 
48
 
49
   #define SIZE_OF_INTERSECTION_CIRCLES 5
49
   #define SIZE_OF_INTERSECTION_CIRCLES 5
50
-  #define SIZE_OF_CROSSHAIRS 3 // crosshairs inside the circle.  This number should be
51
-                               // less than SIZE_OR_INTERSECTION_CIRCLES
50
+  #define SIZE_OF_CROSSHAIRS 3
51
+
52
+  #if SIZE_OF_CROSSHAIRS >= SIZE_OF_INTERSECTION_CIRCLES
53
+    #error "SIZE_OF_CROSSHAIRS must be less than SIZE_OF_INTERSECTION_CIRCLES."
54
+  #endif
52
 
55
 
53
   /**
56
   /**
54
-   *   Roxy's G26 Mesh Validation Tool
57
+   *   G26 Mesh Validation Tool
55
    *
58
    *
56
-   *   G26 Is a Mesh Validation Tool intended to provide support for the Marlin Unified Bed Leveling System.
59
+   *   G26 is a Mesh Validation Tool intended to provide support for the Marlin Unified Bed Leveling System.
57
    *   In order to fully utilize and benefit from the Marlin Unified Bed Leveling System an accurate Mesh must
60
    *   In order to fully utilize and benefit from the Marlin Unified Bed Leveling System an accurate Mesh must
58
    *   be defined.  G29 is designed to allow the user to quickly validate the correctness of her Mesh.  It will
61
    *   be defined.  G29 is designed to allow the user to quickly validate the correctness of her Mesh.  It will
59
    *   first heat the bed and nozzle. It will then print lines and circles along the Mesh Cell boundaries and
62
    *   first heat the bed and nozzle. It will then print lines and circles along the Mesh Cell boundaries and
118
   //#if ENABLED(ULTRA_LCD)
121
   //#if ENABLED(ULTRA_LCD)
119
     extern char lcd_status_message[];
122
     extern char lcd_status_message[];
120
   //#endif
123
   //#endif
121
-  extern float destination[];
124
+  extern float destination[XYZE];
122
   extern void set_destination_to_current();
125
   extern void set_destination_to_current();
123
   extern void set_current_to_destination();
126
   extern void set_current_to_destination();
124
   extern float code_value_float();
127
   extern float code_value_float();

+ 2
- 2
Marlin/Marlin.h Visa fil

243
 inline bool IsRunning() { return  Running; }
243
 inline bool IsRunning() { return  Running; }
244
 inline bool IsStopped() { return !Running; }
244
 inline bool IsStopped() { return !Running; }
245
 
245
 
246
-bool enqueue_and_echo_command(const char* cmd, bool say_ok=false); //put a single ASCII command at the end of the current buffer or return false when it is full
247
-void enqueue_and_echo_commands_P(const char* cmd); //put one or many ASCII commands at the end of the current buffer, read from flash
246
+bool enqueue_and_echo_command(const char* cmd, bool say_ok=false); // Add a single command to the end of the buffer. Return false on failure.
247
+void enqueue_and_echo_commands_P(const char * const cmd);          // Set one or more commands to be prioritized over the next Serial/SD command.
248
 void clear_command_queue();
248
 void clear_command_queue();
249
 
249
 
250
 extern millis_t previous_cmd_ms;
250
 extern millis_t previous_cmd_ms;

+ 1
- 34
Marlin/Marlin_main.cpp Visa fil

796
 }
796
 }
797
 
797
 
798
 /**
798
 /**
799
- * Shove a command in RAM to the front of the main command queue.
800
- * Return true if the command is successfully added.
801
- */
802
-inline bool _shovecommand(const char* cmd, bool say_ok=false) {
803
-  if (*cmd == ';' || commands_in_queue >= BUFSIZE) return false;
804
-  cmd_queue_index_r = (cmd_queue_index_r + BUFSIZE - 1) % BUFSIZE; // Index of the previous slot
805
-  commands_in_queue++;
806
-  strcpy(command_queue[cmd_queue_index_r], cmd);
807
-  send_ok[cmd_queue_index_r] = say_ok;
808
-  return true;
809
-}
810
-
811
-/**
812
- * Shove a command to the front of the queue with Serial Echo
813
- * Return true if the command is successfully added.
814
- */
815
-bool shove_and_echo_command(const char* cmd, bool say_ok=false) {
816
-  if (_shovecommand(cmd, say_ok)) {
817
-    echo_command(cmd);
818
-    return true;
819
-  }
820
-  return false;
821
-}
822
-
823
-/**
824
- * Shove a command onto the front of the queue,
825
- * and don't return until successful.
826
- */
827
-void shove_and_echo_command_now(const char* cmd) {
828
-  while (!shove_and_echo_command(cmd)) idle();
829
-}
830
-
831
-/**
832
  * Inject the next "immediate" command, when possible, onto the front of the queue.
799
  * Inject the next "immediate" command, when possible, onto the front of the queue.
833
  * Return true if any immediate commands remain to inject.
800
  * Return true if any immediate commands remain to inject.
834
  */
801
  */
840
     cmd[sizeof(cmd) - 1] = '\0';
807
     cmd[sizeof(cmd) - 1] = '\0';
841
     while ((c = cmd[i]) && c != '\n') i++; // find the end of this gcode command
808
     while ((c = cmd[i]) && c != '\n') i++; // find the end of this gcode command
842
     cmd[i] = '\0';
809
     cmd[i] = '\0';
843
-    if (shove_and_echo_command(cmd))       // success?
810
+    if (enqueue_and_echo_command(cmd))     // success?
844
       injected_commands_P = c ? injected_commands_P + i + 1 : NULL; // next command or done
811
       injected_commands_P = c ? injected_commands_P + i + 1 : NULL; // next command or done
845
   }
812
   }
846
   return (injected_commands_P != NULL);    // return whether any more remain
813
   return (injected_commands_P != NULL);    // return whether any more remain

+ 2
- 0
Marlin/SanityCheck.h Visa fil

150
   #error "ABL_GRID_POINTS is now ABL_GRID_MAX_POINTS_X and ABL_GRID_MAX_POINTS_Y. Please update your configuration."
150
   #error "ABL_GRID_POINTS is now ABL_GRID_MAX_POINTS_X and ABL_GRID_MAX_POINTS_Y. Please update your configuration."
151
 #elif defined(ABL_GRID_POINTS_X) || defined(ABL_GRID_POINTS_Y)
151
 #elif defined(ABL_GRID_POINTS_X) || defined(ABL_GRID_POINTS_Y)
152
   #error "ABL_GRID_POINTS_[XY] is now ABL_GRID_MAX_POINTS_[XY]. Please update your configuration."
152
   #error "ABL_GRID_POINTS_[XY] is now ABL_GRID_MAX_POINTS_[XY]. Please update your configuration."
153
+#elif defined(UBL_MESH_EDIT_ENABLED)
154
+  #error "UBL_MESH_EDIT_ENABLED is now UBL_G26_MESH_EDITING. Please update your configuration."
153
 #elif defined(BEEPER)
155
 #elif defined(BEEPER)
154
   #error "BEEPER is now BEEPER_PIN. Please update your pins definitions."
156
   #error "BEEPER is now BEEPER_PIN. Please update your pins definitions."
155
 #elif defined(SDCARDDETECT)
157
 #elif defined(SDCARDDETECT)

+ 3
- 3
Marlin/UBL_G29.cpp Visa fil

22
 
22
 
23
 #include "MarlinConfig.h"
23
 #include "MarlinConfig.h"
24
 
24
 
25
-#if ENABLED(AUTO_BED_LEVELING_UBL) && ENABLED(UBL_G26_MESH_EDITING)
25
+#if ENABLED(AUTO_BED_LEVELING_UBL)
26
   //#include "vector_3.h"
26
   //#include "vector_3.h"
27
   //#include "qr_solve.h"
27
   //#include "qr_solve.h"
28
 
28
 
1048
 
1048
 
1049
     /*
1049
     /*
1050
     if (code_seen('M')) {     // Check if a map type was specified
1050
     if (code_seen('M')) {     // Check if a map type was specified
1051
-      map_type = code_has_value() ? code_value_int() : 0; 
1051
+      map_type = code_has_value() ? code_value_int() : 0;
1052
       if (!WITHIN(map_type, 0, 1)) {
1052
       if (!WITHIN(map_type, 0, 1)) {
1053
         SERIAL_PROTOCOLLNPGM("Invalid map type.\n");
1053
         SERIAL_PROTOCOLLNPGM("Invalid map type.\n");
1054
         return UBL_ERR;
1054
         return UBL_ERR;
1371
       do_blocking_move_to_xy(LOGICAL_X_POSITION(rawx), LOGICAL_Y_POSITION(rawy));
1371
       do_blocking_move_to_xy(LOGICAL_X_POSITION(rawx), LOGICAL_Y_POSITION(rawy));
1372
 
1372
 
1373
       float new_z = ubl.z_values[location.x_index][location.y_index];
1373
       float new_z = ubl.z_values[location.x_index][location.y_index];
1374
-      
1374
+
1375
       round_off = (int32_t)(new_z * 1000.0);    // we chop off the last digits just to be clean. We are rounding to the
1375
       round_off = (int32_t)(new_z * 1000.0);    // we chop off the last digits just to be clean. We are rounding to the
1376
       new_z = float(round_off) / 1000.0;
1376
       new_z = float(round_off) / 1000.0;
1377
 
1377
 

+ 1
- 1
Marlin/example_configurations/Cartesio/Configuration_adv.h Visa fil

1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1035
 
1035
 
1036
 /**
1036
 /**
1037
- * Add M43 command for pins info and testing
1037
+ * Add M43, M44 and M45 commands for pins info and testing
1038
  */
1038
  */
1039
 //#define PINS_DEBUGGING
1039
 //#define PINS_DEBUGGING
1040
 
1040
 

+ 1
- 1
Marlin/example_configurations/Felix/Configuration_adv.h Visa fil

1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1035
 
1035
 
1036
 /**
1036
 /**
1037
- * Add M43 command for pins info and testing
1037
+ * Add M43, M44 and M45 commands for pins info and testing
1038
  */
1038
  */
1039
 //#define PINS_DEBUGGING
1039
 //#define PINS_DEBUGGING
1040
 
1040
 

+ 1
- 1
Marlin/example_configurations/Hephestos/Configuration_adv.h Visa fil

1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1035
 
1035
 
1036
 /**
1036
 /**
1037
- * Add M43 command for pins info and testing
1037
+ * Add M43, M44 and M45 commands for pins info and testing
1038
  */
1038
  */
1039
 //#define PINS_DEBUGGING
1039
 //#define PINS_DEBUGGING
1040
 
1040
 

+ 1
- 1
Marlin/example_configurations/Hephestos_2/Configuration_adv.h Visa fil

1017
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1017
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1018
 
1018
 
1019
 /**
1019
 /**
1020
- * Add M43 command for pins info and testing
1020
+ * Add M43, M44 and M45 commands for pins info and testing
1021
  */
1021
  */
1022
 //#define PINS_DEBUGGING
1022
 //#define PINS_DEBUGGING
1023
 
1023
 

+ 1
- 1
Marlin/example_configurations/K8200/Configuration_adv.h Visa fil

1047
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1047
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1048
 
1048
 
1049
 /**
1049
 /**
1050
- * Add M43 command for pins info and testing
1050
+ * Add M43, M44 and M45 commands for pins info and testing
1051
  */
1051
  */
1052
 //#define PINS_DEBUGGING
1052
 //#define PINS_DEBUGGING
1053
 
1053
 

+ 1
- 1
Marlin/example_configurations/K8400/Configuration_adv.h Visa fil

1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1035
 
1035
 
1036
 /**
1036
 /**
1037
- * Add M43 command for pins info and testing
1037
+ * Add M43, M44 and M45 commands for pins info and testing
1038
  */
1038
  */
1039
 //#define PINS_DEBUGGING
1039
 //#define PINS_DEBUGGING
1040
 
1040
 

+ 1
- 1
Marlin/example_configurations/RigidBot/Configuration_adv.h Visa fil

1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1035
 
1035
 
1036
 /**
1036
 /**
1037
- * Add M43 command for pins info and testing
1037
+ * Add M43, M44 and M45 commands for pins info and testing
1038
  */
1038
  */
1039
 //#define PINS_DEBUGGING
1039
 //#define PINS_DEBUGGING
1040
 
1040
 

+ 1
- 1
Marlin/example_configurations/SCARA/Configuration_adv.h Visa fil

1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1035
 
1035
 
1036
 /**
1036
 /**
1037
- * Add M43 command for pins info and testing
1037
+ * Add M43, M44 and M45 commands for pins info and testing
1038
  */
1038
  */
1039
 //#define PINS_DEBUGGING
1039
 //#define PINS_DEBUGGING
1040
 
1040
 

+ 1
- 1
Marlin/example_configurations/TAZ4/Configuration_adv.h Visa fil

1042
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1042
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1043
 
1043
 
1044
 /**
1044
 /**
1045
- * Add M43 command for pins info and testing
1045
+ * Add M43, M44 and M45 commands for pins info and testing
1046
  */
1046
  */
1047
 //#define PINS_DEBUGGING
1047
 //#define PINS_DEBUGGING
1048
 
1048
 

+ 1
- 1
Marlin/example_configurations/TinyBoy2/Configuration.h Visa fil

918
   #define UBL_PROBE_PT_2_Y 20
918
   #define UBL_PROBE_PT_2_Y 20
919
   #define UBL_PROBE_PT_3_X 180
919
   #define UBL_PROBE_PT_3_X 180
920
   #define UBL_PROBE_PT_3_Y 20
920
   #define UBL_PROBE_PT_3_Y 20
921
-  #define UBL_MESH_EDIT_ENABLED     // Enable G26 mesh editing
921
+  #define UBL_G26_MESH_EDITING     // Enable G26 mesh editing
922
 
922
 
923
 #elif ENABLED(MESH_BED_LEVELING)
923
 #elif ENABLED(MESH_BED_LEVELING)
924
 
924
 

+ 1
- 1
Marlin/example_configurations/WITBOX/Configuration_adv.h Visa fil

1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1035
 
1035
 
1036
 /**
1036
 /**
1037
- * Add M43 command for pins info and testing
1037
+ * Add M43, M44 and M45 commands for pins info and testing
1038
  */
1038
  */
1039
 //#define PINS_DEBUGGING
1039
 //#define PINS_DEBUGGING
1040
 
1040
 

+ 1
- 1
Marlin/example_configurations/delta/flsun_kossel_mini/Configuration_adv.h Visa fil

1039
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1039
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1040
 
1040
 
1041
 /**
1041
 /**
1042
- * Add M43 command for pins info and testing
1042
+ * Add M43, M44 and M45 commands for pins info and testing
1043
  */
1043
  */
1044
 //#define PINS_DEBUGGING
1044
 //#define PINS_DEBUGGING
1045
 
1045
 

+ 1
- 1
Marlin/example_configurations/delta/generic/Configuration_adv.h Visa fil

1036
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1036
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1037
 
1037
 
1038
 /**
1038
 /**
1039
- * Add M43 command for pins info and testing
1039
+ * Add M43, M44 and M45 commands for pins info and testing
1040
  */
1040
  */
1041
 //#define PINS_DEBUGGING
1041
 //#define PINS_DEBUGGING
1042
 
1042
 

+ 1
- 1
Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h Visa fil

1036
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1036
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1037
 
1037
 
1038
 /**
1038
 /**
1039
- * Add M43 command for pins info and testing
1039
+ * Add M43, M44 and M45 commands for pins info and testing
1040
  */
1040
  */
1041
 //#define PINS_DEBUGGING
1041
 //#define PINS_DEBUGGING
1042
 
1042
 

+ 1
- 1
Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h Visa fil

1041
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1041
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1042
 
1042
 
1043
 /**
1043
 /**
1044
- * Add M43 command for pins info and testing
1044
+ * Add M43, M44 and M45 commands for pins info and testing
1045
  */
1045
  */
1046
 //#define PINS_DEBUGGING
1046
 //#define PINS_DEBUGGING
1047
 
1047
 

+ 1
- 1
Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h Visa fil

1036
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1036
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1037
 
1037
 
1038
 /**
1038
 /**
1039
- * Add M43 command for pins info and testing
1039
+ * Add M43, M44 and M45 commands for pins info and testing
1040
  */
1040
  */
1041
 //#define PINS_DEBUGGING
1041
 //#define PINS_DEBUGGING
1042
 
1042
 

+ 1
- 1
Marlin/example_configurations/makibox/Configuration_adv.h Visa fil

1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1035
 
1035
 
1036
 /**
1036
 /**
1037
- * Add M43 command for pins info and testing
1037
+ * Add M43, M44 and M45 commands for pins info and testing
1038
  */
1038
  */
1039
 //#define PINS_DEBUGGING
1039
 //#define PINS_DEBUGGING
1040
 
1040
 

+ 1
- 1
Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h Visa fil

1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1034
 #define I2C_SLAVE_ADDRESS  0 // Set a value from 8 to 127 to act as a slave
1035
 
1035
 
1036
 /**
1036
 /**
1037
- * Add M43 command for pins info and testing
1037
+ * Add M43, M44 and M45 commands for pins info and testing
1038
  */
1038
  */
1039
 //#define PINS_DEBUGGING
1039
 //#define PINS_DEBUGGING
1040
 
1040
 

+ 9
- 8
Marlin/planner.cpp Visa fil

1141
 
1141
 
1142
     // Limit acceleration per axis
1142
     // Limit acceleration per axis
1143
     if (block->step_event_count <= cutoff_long) {
1143
     if (block->step_event_count <= cutoff_long) {
1144
-      LIMIT_ACCEL_LONG(X_AXIS,0);
1145
-      LIMIT_ACCEL_LONG(Y_AXIS,0);
1146
-      LIMIT_ACCEL_LONG(Z_AXIS,0);
1147
-      LIMIT_ACCEL_LONG(E_AXIS,ACCEL_IDX);
1144
+      LIMIT_ACCEL_LONG(X_AXIS, 0);
1145
+      LIMIT_ACCEL_LONG(Y_AXIS, 0);
1146
+      LIMIT_ACCEL_LONG(Z_AXIS, 0);
1147
+      LIMIT_ACCEL_LONG(E_AXIS, ACCEL_IDX);
1148
     }
1148
     }
1149
     else {
1149
     else {
1150
-      LIMIT_ACCEL_FLOAT(X_AXIS,0);
1151
-      LIMIT_ACCEL_FLOAT(Y_AXIS,0);
1152
-      LIMIT_ACCEL_FLOAT(Z_AXIS,0);
1153
-      LIMIT_ACCEL_FLOAT(E_AXIS,ACCEL_IDX);
1150
+      LIMIT_ACCEL_FLOAT(X_AXIS, 0);
1151
+      LIMIT_ACCEL_FLOAT(Y_AXIS, 0);
1152
+      LIMIT_ACCEL_FLOAT(Z_AXIS, 0);
1153
+      LIMIT_ACCEL_FLOAT(E_AXIS, ACCEL_IDX);
1154
     }
1154
     }
1155
   }
1155
   }
1156
   block->acceleration_steps_per_s2 = accel;
1156
   block->acceleration_steps_per_s2 = accel;
1256
         v_exit *= v_factor;
1256
         v_exit *= v_factor;
1257
         v_entry *= v_factor;
1257
         v_entry *= v_factor;
1258
       }
1258
       }
1259
+
1259
       // Calculate jerk depending on whether the axis is coasting in the same direction or reversing.
1260
       // Calculate jerk depending on whether the axis is coasting in the same direction or reversing.
1260
       const float jerk = (v_exit > v_entry)
1261
       const float jerk = (v_exit > v_entry)
1261
           ? //                                  coasting             axis reversal
1262
           ? //                                  coasting             axis reversal

Laddar…
Avbryt
Spara