   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
-  {
+  if (channel >= 18) // channels 18 and above mean all servos
+  {
+    if (cmd == 's') // servo speed
+    {
+      for (channel = 0; channel < 18; channel++) maestro.setSpeed(channel, value);
+    }
+    else
+    if (cmd == 'a') // servo accel
+    {
+      for (channel = 0; channel < 18; channel++) maestro.setAcceleration(channel, value);
+    }
+    else
+      nak();
+    return;
+  }
+  
+  if (cmd == 'p') maestro.setTarget(channel, value); // servo position
+  else
+  if (cmd == 's') maestro.setSpeed(channel, value); // servo speed
+  else
+  if (cmd == 'a') maestro.setAcceleration(channel, value); // servo accel
+  else
+  if (cmd == 'e') sscEnable(true); // enable servo controller
+  else
+  if (cmd == 'd') sscEnable(false); // disable servo controller
+  else
     nak();
-  }
+}
+
+// enable/disable servo controller communication and power
+void sscEnable(boolean action)
+{
+  if (action)
+  {
+    digitalWrite(SERVO_PIN, HIGH);
+    sscUART(true);
+  }
+  else
+  {
+    sscUART(false);
+    digitalWrite(SERVO_PIN, LOW);
+  }
+}
+
+// enable/disable servo controller communication
+void sscUART(boolean action)
+{
+  if (action) ssc.begin(38400);
+  else ssc.end();
 }
 
 // ex: sp000500 - set servo 00 to the min position

#include <PololuMaestro.h>

#define LED_PIN 13
#define SSC_RX_PIN 2
#define SSC_TX_PIN 3

// host communication //
#define MAX_COMMAND 16

  driveEnabled = action;
}

void driveReset()
{
  driveEnable(false);
  delay(100);
  driveEnable(true);
}
  
void CheckDriveCommandTimeout()
{
  if (driveCommandTimeout == 0) return;
