private void reboot() {
    final List<BLEAction> list = new ArrayList<>();

    list.add(reboot);

    final BLETask task = new BLETask(list);
    mBLEComms.queueTask(task);
  }
  private void vibrate(final long duration) {
    final List<BLEAction> list = new ArrayList<>();

    list.add(startVibrate);
    // list.add(new WaitAction(duration));
    // list.add(stopVibrate);

    final BLETask task = new BLETask(list);

    try {
      mBLEComms.queueTask(task);
    } catch (NullPointerException e) {
      Toast.makeText(getApplicationContext(), "Vibrate: MiBand not paired", Toast.LENGTH_SHORT)
          .show();
    }
  }
  private void setColor(byte r, byte g, byte b, boolean display) {
    final List<BLEAction> list = new ArrayList<>();

    list.add(
        new WriteAction(
            MiBandConstants.UUID_CHARACTERISTIC_CONTROL_POINT,
            new byte[] {14, r, g, b, display ? (byte) 1 : (byte) 0}));

    final BLETask task = new BLETask(list);

    try {
      mBLEComms.queueTask(task);
    } catch (NullPointerException e) {
      Toast.makeText(getApplicationContext(), "SetColor: MiBand not paired", Toast.LENGTH_SHORT)
          .show();
    }
  }
  private void setGoal(int goal) {
    final List<BLEAction> list = new ArrayList<>();

    list.add(
        new WriteAction(
            MiBandConstants.UUID_CHARACTERISTIC_CONTROL_POINT,
            new byte[] {(byte) 5, (byte) 0, (byte) (goal & 0xff), (byte) ((goal >>> 8) & 0xff)}));

    final BLETask task = new BLETask(list);

    try {
      mBLEComms.queueTask(task);
    } catch (NullPointerException e) {
      Toast.makeText(getApplicationContext(), "SetGoal: MiBand not paired", Toast.LENGTH_SHORT)
          .show();
    }
  }
  private synchronized void notifyBand(
      long vibrateDuration,
      int vibrateTimes,
      int flashTimes,
      int flashColour,
      int originalColour,
      long flashDuration) {
    final List<BLEAction> list = new ArrayList<>();

    final byte[] flashColours = convertRgb(flashColour);
    final byte[] originalColours = convertRgb(originalColour);

    for (int i = 1; i <= vibrateTimes; i++) {
      list.add(startVibrate);
      // list.add(new WaitAction(vibrateDuration));
      // list.add(stopVibrate);
    }
    for (int i = 1; i <= flashTimes; i++) {
      list.add(
          new WriteAction(
              MiBandConstants.UUID_CHARACTERISTIC_CONTROL_POINT,
              new byte[] {14, flashColours[0], flashColours[1], flashColours[2], (byte) 1}));
      list.add(new WaitAction(500L));
      list.add(
          new WriteAction(
              MiBandConstants.UUID_CHARACTERISTIC_CONTROL_POINT,
              new byte[] {
                14, originalColours[0], originalColours[1], originalColours[2], (byte) 0
              }));
      list.add(new WaitAction(500L));
    }

    final BLETask task = new BLETask(list);

    try {
      mBLEComms.queueTask(task);
    } catch (NullPointerException ignored) {

    }
  }