#include "usbapp/usb_application_led.h"
#include "usb/usb_bridge.h"
#include "usb/usb_config.h"
#include "usbd_vendor.h"
#include "core/csect.h"
#include "core/config.h"
#include "app/nfm/nfm_base.h"
#include "app/led/led.h"

#define  PROTO_REQ_SET_LED_MODE     0x2A   // Переключить режим отображения диода
#define  PROTO_REQ_SET_LED_OFF      0x2B   // Выключить диод  
#define  PROTO_REQ_SET_WARMUP       0x2C   // включить процедуру прогрева

#define  PROTO_REQ_MASK_LED_GRN     0x01   // включить зеленый цвет
#define  PROTO_REQ_MASK_LED_RED     0x02   // включить красный цвет

#define  PROTO_REQ_WIDX_WRMP_ON     0x0D   // включить процедуру прогрева
#define  PROTO_REQ_WIDX_WRMP_OFF    0x0E   // выключить процедуру прогрева

static int8_t fLedAppInit();
static int8_t fLedAppDeInit();
static void   fLedAppReset();
static bool   fLedAppSetup( const tUSBSetupPacket_t * pSetup, bool bFirstStage, bool success );
static size_t fLedAppControlRx( const tUSBSetupPacket_t * pSetup, sUSBTransfer_t * tx, size_t idx, size_t bytesRemaining );
static size_t fLedAppControlTx( const tUSBSetupPacket_t * pSetup, sUSBTransfer_t * rx, size_t idx, size_t bytesRemaining );

const sUSBAppEntry_Control_t usbapplication_ACM_planarproto_led = {

     .fUsbInit     = fLedAppInit,
     .fUsbDeInit   = fLedAppDeInit,
     .fUsbSetup    = fLedAppSetup,
     .fUsbCtlEpRx  = fLedAppControlRx,
     .fUsbCtlEpTx  = fLedAppControlTx,
     .fResetEvent  = fLedAppReset,
};

//-----------------------------------------------------
// &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&&

static int8_t fLedAppInit()
{
    return 0;
}

// &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ----

static int8_t fLedAppDeInit()
{
    return 0;
}

// &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ----

static void fLedAppReset()
{

}

// &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ----

static bool fLedAppSetup( const tUSBSetupPacket_t * pSetup, bool bFirstStage, bool success )
{
    switch ( pSetup->bRequest )
    {
        case PROTO_REQ_SET_LED_MODE:
        {
             switch(pSetup->wIndex)
             {
                case LED1:
                {
                    return true;
                }
                break;
                case LED2:
                {
//                    LEDHandle.harmup_stop();
//                    LEDHandle.SetMode(eLedMode_Idle);
//                    ledRed(red);
//                    ledGreen(green);
                    return true;
                }
                break;
             }
        }
        break;
        
        case PROTO_REQ_SET_LED_OFF:
        {
            switch(pSetup->wIndex)
            {
                case LED1:
                {
//                    led28Green(false);
//                    led28Red(false);
                    return true;
                }
                break;
                case LED2:
                {
                    LEDHandle.harmup_stop();
                    LEDHandle.SetMode(eLedMode_Idle);
                    ledRed(false);
                    ledGreen(false);
                    return true;
                }
                break;
            }
        }
        break;
        
        case PROTO_REQ_SET_WARMUP:
        {
             switch(pSetup->wValue)
             {
                case PROTO_REQ_WIDX_WRMP_ON:
                {
                    LEDHandle.harmup_stop();
                    LEDHandle.SetMode(eLedMode_Normal);
                    LEDHandle.harmup_init();
                    return true;
                }
                break;
                case PROTO_REQ_WIDX_WRMP_OFF:
                {
                    LEDHandle.harmup_stop();
                    LEDHandle.SetMode(eLedMode_Normal);
                    LEDHandle.harmup_stop();
                    return true;
                }
                break;
             }
        }
        break;
    }

    return false;
}

// &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ----

static size_t fLedAppControlRx( const tUSBSetupPacket_t * pSetup, sUSBTransfer_t * rx, size_t idx, size_t bytesRemaining )
{
    return 0;
}

// &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ---- &&&& ----

static size_t fLedAppControlTx( const tUSBSetupPacket_t * pSetup, sUSBTransfer_t * tx, size_t idx, size_t bytesRemaining )
{
    return 0;
}

