/******************************************************************************
* File Name: main.c
*
* Description: This is the source code for the PSoC 4 MSC Capacitance
* Signals streaming into DeepCraft.
*
* Related Document: See README.md 
*
*******************************************************************************
* Copyright 2021-2023, Cypress Semiconductor Corporation (an Infineon company) or
* an affiliate of Cypress Semiconductor Corporation.  All rights reserved.
*
* This software, including source code, documentation and related
* materials ("Software") is owned by Cypress Semiconductor Corporation
* or one of its affiliates ("Cypress") and is protected by and subject to
* worldwide patent protection (United States and foreign),
* United States copyright laws and international treaty provisions.
* Therefore, you may use this Software only as provided in the license
* agreement accompanying the software package from which you
* obtained this Software ("EULA").
* If no EULA applies, Cypress hereby grants you a personal, non-exclusive,
* non-transferable license to copy, modify, and compile the Software
* source code solely for use in connection with Cypress's
* integrated circuit products.  Any reproduction, modification, translation,
* compilation, or representation of this Software except as specified
* above is prohibited without the express written permission of Cypress.
*
* Disclaimer: THIS SOFTWARE IS PROVIDED AS-IS, WITH NO WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, NONINFRINGEMENT, IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Cypress
* reserves the right to make changes to the Software without notice. Cypress
* does not assume any liability arising out of the application or use of the
* Software or any product or circuit described in the Software. Cypress does
* not authorize its products for use in any products where a malfunction or
* failure of the Cypress product may reasonably be expected to result in
* significant property damage, injury or death ("High Risk Product"). By
* including Cypress's product in a High Risk Product, the manufacturer
* of such system or application assumes all risk of such use and in doing
* so agrees to indemnify Cypress against all liability.
*******************************************************************************/

/*******************************************************************************
 * Include header files
 ******************************************************************************/
#include "protocol/protocol.h"
#include "uartd.h"
#include "build.h"
#include "common.h"
#include "board.h"
#include "dev_capsense.h"

/*******************************************************************************
* Macros
*******************************************************************************/

/*******************************************************************************
* Global Variables
*******************************************************************************/

/*******************************************************************************
* Function Prototypes
*******************************************************************************/

/*******************************************************************************
* Function Name: main
********************************************************************************
* Summary:
*  System entrance point. This function performs
*  - initial setup of device
*  - initialize CapSense
*  - initialize tuner communication
*  - scan touch input continuously
*
* Return:
*  int
*
*******************************************************************************/
int main(void)
{
	board_init_system();

    /* Firmware version */
    protocol_Version firmware_version = {
        .major = 1,
        .minor = 2,
        .build = BUILD_DATE,
        .revision = BUILD_TIME
    };

    /* Serial UUID */
    uint8_t* serial = board_get_serial_uuid();    

    /* Create a protocol instance containing the name of the board, serial/UUID (to identify the individual board),
     and a firmware version to identify the version. All this information can be displayed in Studio. */
    protocol_t* protocol = protocol_create("PSOC 4 AI CapSense (CY8KIT-041S-MAX)", serial, firmware_version);

    /* Add reset function that can be triggered from Studio to reset the board through the UI. */
    protocol->board_reset = board_reset;

    if(!dev_capsense_register(protocol))
    {
        halt_error(LED_CODE_SENSOR_CAPSENSE_ERROR);
    }

    uartd_t* uart = uartd_create(protocol);
	if (uart == NULL)
	{
		halt_error(LED_CODE_UART_ERROR);
	}

	for (;;)
	{
		 protocol_process_request(protocol, &uart->istream, &uart->ostream);
	}
}

/* [] END OF FILE */
