#include <stdio.h>
#include "defs.h"
#include "cpld.h"

// The CPLD version number
static int cpld_version;

// =============================================================
// Param definitions for OSD
// =============================================================


static param_t params[] = {
   {          -1,          NULL,          NULL, 0,   0, 1 }
};

// =============================================================
// Public methods
// =============================================================

static void cpld_init(int version) {
   cpld_version = version;
}

static int cpld_get_version() {
   return cpld_version;
}

static void cpld_calibrate(capture_info_t *capinfo, int elk) {
}

static void cpld_set_mode(int mode) {
}

static void cpld_set_vsync_psync(int state) {
}

static int cpld_analyse(int selected_sync_state, int analyse) {
   return SYNC_BIT_COMPOSITE_SYNC;
}

static void cpld_update_capture_info(capture_info_t *capinfo) {
}

static param_t *cpld_get_params() {
   return params;
}

static int cpld_get_value(int num) {
   return 0;
}

static const char *cpld_get_value_string(int num) {
   return NULL;
}

static void cpld_set_value(int num, int value) {
}

static int cpld_show_cal_summary(int line) {
    return line;
}

static void cpld_show_cal_details(int line) {
}

static void cpld_show_cal_raw(int line) {
}

static int cpld_old_firmware_support() {
    return 0;
}

static int cpld_get_divider() {
    return 8;
}

static int cpld_get_delay() {
    return 0;
}

static int cpld_get_sync_edge() {
    return 0;
}

static int cpld_frontend_info() {
    return 0;
}
static void cpld_set_frontend(int value)
{
}

cpld_t cpld_null_atom = {
   .name = "Atom",
   .nameBBC = "Atom",
   .nameRGB = "Atom",
   .nameYUV = "Atom",
   .nameprefix = "Atom",
   .nameBBCprefix = "Atom",
   .nameRGBprefix = "Atom",
   .nameYUVprefix = "Atom",
   .default_profile = "Acorn/Acorn_Atom",
   .init = cpld_init,
   .get_version = cpld_get_version,
   .calibrate = cpld_calibrate,
   .set_mode = cpld_set_mode,
   .set_vsync_psync = cpld_set_vsync_psync,
   .analyse = cpld_analyse,
   .old_firmware_support = cpld_old_firmware_support,
   .frontend_info = cpld_frontend_info,
   .set_frontend = cpld_set_frontend,
   .get_divider = cpld_get_divider,
   .get_delay = cpld_get_delay,
   .get_sync_edge = cpld_get_sync_edge,
   .update_capture_info = cpld_update_capture_info,
   .get_params = cpld_get_params,
   .get_value = cpld_get_value,
   .get_value_string = cpld_get_value_string,
   .set_value = cpld_set_value,
   .show_cal_summary = cpld_show_cal_summary,
   .show_cal_details = cpld_show_cal_details,
   .show_cal_raw = cpld_show_cal_raw
};

cpld_t cpld_null_3bit = {
   .name = "3-12_BIT_BBC",
   .nameBBC = "3-12_BIT_BBC",
   .nameRGB = "3-12_BIT_BBC",
   .nameYUV = "3-12_BIT_BBC",
   .nameprefix = "BBC",
   .nameBBCprefix = "BBC",
   .nameRGBprefix = "BBC",
   .nameYUVprefix = "BBC",
   .default_profile = "Acorn/BBC_Micro",
   .init = cpld_init,
   .get_version = cpld_get_version,
   .calibrate = cpld_calibrate,
   .set_mode = cpld_set_mode,
   .set_vsync_psync = cpld_set_vsync_psync,
   .analyse = cpld_analyse,
   .old_firmware_support = cpld_old_firmware_support,
   .frontend_info = cpld_frontend_info,
   .set_frontend = cpld_set_frontend,
   .get_divider = cpld_get_divider,
   .get_delay = cpld_get_delay,
   .get_sync_edge = cpld_get_sync_edge,
   .update_capture_info = cpld_update_capture_info,
   .get_params = cpld_get_params,
   .get_value = cpld_get_value,
   .get_value_string = cpld_get_value_string,
   .set_value = cpld_set_value,
   .show_cal_summary = cpld_show_cal_summary,
   .show_cal_details = cpld_show_cal_details,
   .show_cal_raw = cpld_show_cal_raw
};

cpld_t cpld_null_6bit = {
   .name = "3-12_BIT_BBC",
   .nameBBC = "3-12_BIT_BBC",
   .nameRGB = "6-12_BIT_RGB",
   .nameYUV = "6-12_BIT_YUV",
   .nameprefix = "BBC",
   .nameBBCprefix = "BBC",
   .nameRGBprefix = "RGB",
   .nameYUVprefix = "YUV",
   .default_profile = "Acorn/BBC_Micro",
   .init = cpld_init,
   .get_version = cpld_get_version,
   .calibrate = cpld_calibrate,
   .set_mode = cpld_set_mode,
   .set_vsync_psync = cpld_set_vsync_psync,
   .analyse = cpld_analyse,
   .old_firmware_support = cpld_old_firmware_support,
   .frontend_info = cpld_frontend_info,
   .set_frontend = cpld_set_frontend,
   .get_divider = cpld_get_divider,
   .get_delay = cpld_get_delay,
   .get_sync_edge = cpld_get_sync_edge,
   .update_capture_info = cpld_update_capture_info,
   .get_params = cpld_get_params,
   .get_value = cpld_get_value,
   .get_value_string = cpld_get_value_string,
   .set_value = cpld_set_value,
   .show_cal_summary = cpld_show_cal_summary,
   .show_cal_details = cpld_show_cal_details,
   .show_cal_raw = cpld_show_cal_raw
};

cpld_t cpld_null_simple = {
   .name = "Simple",
   .nameBBC = "Simple",
   .nameRGB = "Simple",
   .nameYUV = "Simple",
   .nameprefix = "Simple",
   .nameBBCprefix = "Simple",
   .nameRGBprefix = "Simple",
   .nameYUVprefix = "Simple",
   .default_profile = "Commodore/Amiga",
   .init = cpld_init,
   .get_version = cpld_get_version,
   .calibrate = cpld_calibrate,
   .set_mode = cpld_set_mode,
   .set_vsync_psync = cpld_set_vsync_psync,
   .analyse = cpld_analyse,
   .old_firmware_support = cpld_old_firmware_support,
   .frontend_info = cpld_frontend_info,
   .set_frontend = cpld_set_frontend,
   .get_divider = cpld_get_divider,
   .get_delay = cpld_get_delay,
   .get_sync_edge = cpld_get_sync_edge,
   .update_capture_info = cpld_update_capture_info,
   .get_params = cpld_get_params,
   .get_value = cpld_get_value,
   .get_value_string = cpld_get_value_string,
   .set_value = cpld_set_value,
   .show_cal_summary = cpld_show_cal_summary,
   .show_cal_details = cpld_show_cal_details,
   .show_cal_raw = cpld_show_cal_raw
};

cpld_t cpld_null = {
   .name = "3-12_BIT_BBC",
   .nameBBC = "3-12_BIT_BBC",
   .nameRGB = "3-12_BIT_BBC",
   .nameYUV = "3-12_BIT_BBC",
   .nameprefix = "BBC",
   .nameBBCprefix = "BBC",
   .nameRGBprefix = "BBC",
   .nameYUVprefix = "BBC",
   .default_profile = "Acorn/BBC_Micro",
   .init = cpld_init,
   .get_version = cpld_get_version,
   .calibrate = cpld_calibrate,
   .set_mode = cpld_set_mode,
   .set_vsync_psync = cpld_set_vsync_psync,
   .analyse = cpld_analyse,
   .old_firmware_support = cpld_old_firmware_support,
   .frontend_info = cpld_frontend_info,
   .set_frontend = cpld_set_frontend,
   .get_divider = cpld_get_divider,
   .get_delay = cpld_get_delay,
   .get_sync_edge = cpld_get_sync_edge,
   .update_capture_info = cpld_update_capture_info,
   .get_params = cpld_get_params,
   .get_value = cpld_get_value,
   .get_value_string = cpld_get_value_string,
   .set_value = cpld_set_value,
   .show_cal_summary = cpld_show_cal_summary,
   .show_cal_details = cpld_show_cal_details,
   .show_cal_raw = cpld_show_cal_raw
};
