/* main.c */

#include "main.h"

/* SD card open/close utility functions */
#include "util.h"

#if !BSPCFG_ENABLE_IO_SUBSYSTEM
#error This application requires BSPCFG_ENABLE_IO_SUBSYSTEM defined \
    non-zero in user_config.h. Please recompile BSP with this option.
#endif

#ifndef BSP_DEFAULT_IO_CHANNEL_DEFINED
#error This application requires BSP_DEFAULT_IO_CHANNEL to be not NULL. \
    Please set corresponding BSPCFG_ENABLE_TTYx to non-zero in \
    user_config.h and recompile BSP with this option.
#endif


TASK_TEMPLATE_STRUCT MQX_template_list[] = 
{ 
/*  Task number, Entry point, Stack, Pri, String, Auto? */
   {MAIN_TASK,   Main_task,   20000,  9,   "main", MQX_AUTO_START_TASK},
   {0,           0,           0,     0,   0,      0,                 }
};

/*TASK*-----------------------------------------------------
* 
* Task Name    : Main_task
* Comments     :
*    This task opens the SD card device and runs the 
*    CTaoCrypt test functions located in test.c.
*
*END*-----------------------------------------------------*/

#if defined BSP_SDCARD_ESDHC_CHANNEL
    #if ! BSPCFG_ENABLE_ESDHC
        #error This application requires BSPCFG_ENABLE_ESDHC defined \
            non-zero in user_config.h. Please recompile libraries with \
            this option.
    #endif

#elif defined BSP_SDCARD_SDHC_CHANNEL
    #if ! BSPCFG_ENABLE_SDHC
        #error This application requires BSPCFG_ENABLE_SDHC defined \
            non-zero in user_config.h. Please recompile libraries with \
            this option.
    #endif
#endif

#if defined (BSP_SDCARD_SPI_CHANNEL)
    #define SDCARD_COM_CHANNEL BSP_SDCARD_SPI_CHANNEL
#elif defined (BSP_SDCARD_ESDHC_CHANNEL)
    #define SDCARD_COM_CHANNEL BSP_SDCARD_ESDHC_CHANNEL
#elif defined (BSP_SDCARD_SDHC_CHANNEL)
    #define SDCARD_COM_CHANNEL BSP_SDCARD_SDHC_CHANNEL
#else
    #error "SDCARD low level communication device not defined!"
#endif

/* func_args from test.h */
typedef struct func_args {
    int    argc;
    char** argv;
    int    return_code;
} func_args;

void Main_task(uint_32 initial_data)
{	
	int          ret = 0;
	func_args    args;
	_mqx_int     error_code, bytes;
	_mqx_uint	 sz;
	char         filesystem_name[] = "a:";
	char         partman_name[] = "pm:";
	MQX_FILE_PTR com_handle, sdcard_handle, filesystem_handle, partman_handle;
	MQX_FILE_PTR cert_file = NULL;
    const char*  fileName = "a:\certs\\client-key.der";
		
	ret = sdcard_open(&com_handle, &sdcard_handle, &partman_handle, 
					  &filesystem_handle, partman_name, filesystem_name);
	
	if (ret != 0) {
		printf("error: sdcard_open(), ret = %d\n", ret);
		_mqx_exit(1);
	}
	printf("SD card installed to %s\n", filesystem_name);
	
	ctaocrypt_test(&args);
	
	ret = sdcard_close(&sdcard_handle, &partman_handle, 
					   &filesystem_handle, partman_name, filesystem_name);
	
	if (ret != 0) {
		printf("error: sdcard_close(), ret = %d\n", ret);
		_mqx_exit(1);
	}
	printf("SD card uninstalled.\n");
	
   _mqx_exit(0);
}

/* EOF */
