 
 //=======================================
 
-// ex: sp00110 - set servo 00 to the minimum position
-// ex: sp15470 - set servo 15 to the maximum position
-void servo()
-{
-  uint8_t n;
-  uint16_t pulse;
-  
+// ex: sp002000 - set servo 00 to the min position
+// ex: sp159999 - set servo 15 to the max position
+void servo_maestro()
+{
+  uint8_t channel;
+  uint16_t value;
   cmd = buf[1];
+  channel = bctoi(2, 2);
+  value = bctoi16(4, 4);
+  
+  if (cmd == 'p') // servo position
+  {
+    if (channel < 18) maestro.setTarget(channel, value); else err();
+  }
+  if (cmd == 's') // servo speed
+  {
+    if (channel < 18) maestro.setSpeed(channel, value); else err();
+  }
+  if (cmd == 'a') // servo accel
+  {
+    if (channel < 18) maestro.setAcceleration(channel, value); else err();
+  }
+  else
+  {
+    nak();
+  }
+}
+
+// ex: sp000500 - set servo 00 to the min position
+// ex: sp152500 - set servo 15 to the max position
+void servo_ssc32()
+{
+  uint8_t channel;
+  uint16_t pos, time;
+  cmd = buf[1];
   
   if (cmd == 'p') // servo pulse
   {
-    n = bctoi(2, 2);
-    pulse = bctoi16(4, 3);
-    if (n > 15) err();
-    else pwm.setPWM(n, 0, pulse);
+    channel = bctoi(2, 2);
+    pos = bctoi16(4, 4);
+    time = bctoi16(8, 4);
+    if (channel > 31) err();
+    else
+    {
+      ssc.print("#");
+      ssc.print(channel);
+      ssc.print("P");
+      ssc.print(pos);
+      if (time > 0) { ssc.print("T"); ssc.print(time); }
+      ssc.println("");
+    }
   }
   else
   {

unsigned long driveCommandTimeout = 60000;

// servos
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

// propulsion vars
#define MOTOR_COUNTER_START 3000

//=======================================

// 'drive' command. both motors in one command
// ex: DD127127 - full forward
// ex: DD064064 - stop
// ex: DD000000 - full backward
void drive()
{
  cmd = buf[1];
