// Copyright 2014 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <getopt.h>
#include <stdio.h>

#include "label_detect.h"

int verbose = 0;

/* detector's name and function. detect_func() returns true if the feature is
 * detected. */
struct detector {
  char *name;
  bool (*detect_func)(void);
};

struct detector detectors[] = {
  { "hw_jpeg_acc_dec", detect_jpeg_acc_dec },
  { "hw_jpeg_acc_enc", detect_jpeg_acc_enc },
  { "hw_video_acc_h264", detect_video_acc_h264 },
  { "hw_video_acc_vp8", detect_video_acc_vp8 },
  { "hw_video_acc_vp9", detect_video_acc_vp9 },
  { "hw_video_acc_vp9_2", detect_video_acc_vp9_2 },
  { "hw_video_acc_enc_h264", detect_video_acc_enc_h264 },
  { "hw_video_acc_enc_vp8", detect_video_acc_enc_vp8 },
  { "hw_video_acc_enc_vp9", detect_video_acc_enc_vp9 },
  { "webcam", detect_webcam },
  { "4k_video_h264", detect_4k_device_h264},
  { "4k_video_vp8", detect_4k_device_vp8},
  { "4k_video_vp9", detect_4k_device_vp9},
  { NULL, NULL }
};

int main(int argc, char *argv[]) {
  int i;
  int opt;

  while ((opt = getopt(argc, argv, "vh")) != -1) {
    switch (opt) {
      case 'v':
        verbose = 1;
        break;
      case 'h':
        printf("Usage: %s [-vh]\n", argv[0]);
        return 0;
    }
  }

  for (i = 0; detectors[i].name; i++) {
    TRACE("Detecting [%s]\n", detectors[i].name);
    if (detectors[i].detect_func()) {
      printf("Detected label: %s\n", detectors[i].name);
    }
    TRACE("\n");
  }

  TRACE("Detect via table look up\n");
  detect_label_by_board_name();
  return 0;
}
