docs: private void doStep(boolean forward) {
  
          // increment or decrement sequence
          if(forward)
              sequenceIndex++;
          else
              sequenceIndex--;
  
          // check sequence bounds; rollover if needed
          if(sequenceIndex >= stepSequence.length)
              sequenceIndex = 0;
          else if(sequenceIndex < 0)
              sequenceIndex = (stepSequence.length - 1);
  
          // start cycling GPIO pins to move the motor forward or reverse
          for(int pinIndex = 0; pinIndex < pins.length; pinIndex++) {
              // apply step sequence
              double nib = Math.pow(2, pinIndex);
              if((stepSequence[sequenceIndex] & (int)nib) > 0)
                  pins[pinIndex].setState(onState);
              else
                  pins[pinIndex].setState(offState);
          }
          try {
              Thread.sleep(stepIntervalMilliseconds, stepIntervalNanoseconds);
          }
          catch (InterruptedException e) {}
      }