/********************************** (C) COPYRIGHT *******************************
* File Name          : main.c
* Author             : WCH
* Version            : V1.0.0
* Date               : 2022/08/20
* Description        : Main program body.
*********************************************************************************
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
* Attention: This software (modified or not) and binary are used for 
* microcontroller manufactured by Nanjing Qinheng Microelectronics.
*******************************************************************************/

/* @Note
 * UDisk Example:
 * This program provides examples of UDisk.Supports external SPI Flash and internal
 * Flash, selected by STORAGE_MEDIUM at SW_UDISK.h.
 *  */

#include "ch32v30x_usbfs_device.h"
#include "debug.h"
#include "Internal_Flash.h"
#include "spiflash.h"
#include "SW_UDISK.h"


/*********************************************************************
 * @fn      main
 *
 * @brief   Main program.
 *
 * @return  none
 */
int main(void)
{
    SystemCoreClockUpdate( );
    Delay_Init( );
    USART_Printf_Init( 115200 );

    printf( "SystemClk:%d\r\n",SystemCoreClock );
    printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
    printf( "This program is a Simulate UDisk\r\n" );

    Delay_Ms(10);
#if (STORAGE_MEDIUM == MEDIUM_SPI_FLASH)
    printf( "USBD UDisk Demo\r\nStorage Medium: SPI FLASH \r\n" );
    /* SPI flash init */
    CH32V_SPI_Init();
    /* FLASH ID check */
    spiflash_init( );
#elif (STORAGE_MEDIUM == MEDIUM_INTERAL_FLASH)
    printf( "USBD UDisk Demo\r\nStorage Medium: INTERNAL FLASH \r\n" );
    Flash_Sector_Count = IFLASH_UDISK_SIZE  / DEF_UDISK_SECTOR_SIZE;
    Flash_Sector_Size = DEF_UDISK_SECTOR_SIZE;
#endif

    /* Enable Udisk */
    Udisk_Capability =  spi_flash_size / flah_sector_size;
    Udisk_Status |= DEF_UDISK_EN_FLAG;

    /* USBOTG_FS device init */
    USBFS_RCC_Init( );
    USBFS_Device_Init( ENABLE );
    PRINT( "mcu is OK!Start:%s,%s\n", __DATE__, __TIME__ );
    while(1)
    {
        ;
    }
}
