#include "UDS_2FService_Main.h"
#include "GUI.h"

/**
  *2F服务函数入口
  *@param A_TA_type 收到数据的地址
  *@param A_Length 收到数据的长度
  *@param A_Data 收到数据的数据
  */
 _2FDID3F80 LEDContrl;
 uint8_t DiagVSpeedValue[2] = {0, 0};
 uint8_t DiagESpeedValue[2] = {0, 0};
 uint8_t DiagBackLight = 0;
 uint8_t DiagLCD = 0;
 uint8_t DiagBuzzer = 0;
void UDS_Service_2F_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t A_Data[])
{
    uint8_t NRC = positiveResponse;
    setDiagMSG(A_TA_type, A_Length, A_Data);
    if(NRC == positiveResponse)
    {
        NRC = UDS_2FService_NRC11();                                            /*2F服务是否支持功能寻址*/
    }
    if(NRC == positiveResponse)
    {
        NRC = UDS_2FService_NRC7F();                                            /*2F服务会话是否支持验证*/
    }
    if(NRC == positiveResponse)
    {
        NRC = UDS_2FService_NRC33();                                            /*2F服务解锁等级验证*/
    }
    if(NRC == positiveResponse)
    {
        NRC = UDS_2FService_NRC13_MinLengthCheck();                             /*2F服务最小长度验证*/
    }
    if(NRC == positiveResponse)
    {
        NRC = UDS_2FService_NRC31();                                            /*2F服务超出请求范围验证*/
    }
    if(NRC == positiveResponse)
    {
        NRC = UDS_2FService_NRC13_TotalLengthCheck();                           /*2F服务总长度长度验证*/
    }
    if(NRC == positiveResponse)
    {
        NRC = UDS_2FService_NRC22();                                            /*2F服务条件验证*/
    }
    if(NRC == positiveResponse)
    {
        UDS_2FService_DID();                                                    /*2F服务DID判断*/
    }
    clearDiagMSG();                                                             /*清除诊断信息*/
}

/**
  *2F服务子功能
  */
void UDS_2FService_DID(void)
{
    switch(getDID(DiagMSG.msgData.DidDetail.DID_H, DiagMSG.msgData.DidDetail.DID_L))/*2F服务DID判断*/
    {
        case 0x3F80:
            UDS_2FService_DID_3F80( );
        break;
        case 0x3F81:
            UDS_2FService_DID_3F81( );
        break;
        case 0x3F82:
            UDS_2FService_DID_3F82( );
        break;
        case 0x3F83:
            UDS_2FService_DID_3F83( );
        break;
        case 0x3F84:
            UDS_2FService_DID_3F84( );
        break;
        case 0x3F85:
            UDS_2FService_DID_3F85( );
        break;
        default:
        break;
    }
}

/**
  *2F服务DID3F80
  *LED
  */
void UDS_2FService_DID_3F80(void)
{
    uint8_t len = 0;
    //BuzzerTest(DiagMSG.msgData.DidDetail.Data[0], DiagMSG.msgData.DidDetail.Data[1]);
    Set_DIAG_TelltalesCtrlsts(DiagMSG.msgData.DidDetail.Data[0]);

    if(DiagMSG.msgData.DidDetail.Data[0] == 0)
    {
        len = 3;
    }
    else
    {
        LEDContrl.Data[0] = DiagMSG.msgData.DidDetail.Data[1];
        LEDContrl.Data[1] = DiagMSG.msgData.DidDetail.Data[2];
        LEDContrl.Data[2] = DiagMSG.msgData.DidDetail.Data[3];
        LEDContrl.Data[3] = DiagMSG.msgData.DidDetail.Data[4];
        len = 7;
    }
    UDS_Service_Response(0x2Fu, POSITIVE_RSP, DIAG_ID_Tx, 3u, DiagMSG.msgData.Data);    
}

/**
  *2F服务DID3F81
  *Vehicle_Speed
  */
void UDS_2FService_DID_3F81(void)
{
    uint8_t len = 0;
    //BuzzerTest(DiagMSG.msgData.DidDetail.Data[0], DiagMSG.msgData.DidDetail.Data[1]);
    Set_DIAG_Vehicle_Speedsts(DiagMSG.msgData.DidDetail.Data[0]);
    if(DiagMSG.msgData.DidDetail.Data[0] == 0)
    {
        len = 3;
    }
    else
    {
        DiagVSpeedValue[0] = DiagMSG.msgData.DidDetail.Data[1];
        DiagVSpeedValue[1] = DiagMSG.msgData.DidDetail.Data[2];
        len = 5;
    }
    UDS_Service_Response(0x2Fu, POSITIVE_RSP, DIAG_ID_Tx, 3u, DiagMSG.msgData.Data);    
}

/**
  *2F服务DID3F82
  *Engine_Speed
  */
void UDS_2FService_DID_3F82(void)
{
    uint8_t len = 0;
    Set_DIAG_Engine_Speedsts(DiagMSG.msgData.DidDetail.Data[0]);
    //BuzzerTest(DiagMSG.msgData.DidDetail.Data[0], DiagMSG.msgData.DidDetail.Data[1]);
    if(DiagMSG.msgData.DidDetail.Data[0] == 0)
    {
        len = 3;
    }
    else
    {
        DiagESpeedValue[0] = DiagMSG.msgData.DidDetail.Data[1];
        DiagESpeedValue[1] = DiagMSG.msgData.DidDetail.Data[2];
        len = 5;
    }
    UDS_Service_Response(0x2Fu, POSITIVE_RSP, DIAG_ID_Tx, 3u, DiagMSG.msgData.Data);    
}

/**
  *2F服务DID3F83
  *BACKLIGHT
  */
void UDS_2FService_DID_3F83(void)
{
    uint8_t len = 0;
    //BuzzerTest(DiagMSG.msgData.DidDetail.Data[0], DiagMSG.msgData.DidDetail.Data[1]);
    Set_DIAG_BACKLIGHTsts(DiagMSG.msgData.DidDetail.Data[0]);
    if(DiagMSG.msgData.DidDetail.Data[0] == 0)
    {
        len = 3;
    }
    else
    {
        DiagBackLight = DiagMSG.msgData.DidDetail.Data[1];
        len = 4;
    }
    UDS_Service_Response(0x2Fu, POSITIVE_RSP, DIAG_ID_Tx, 3u, DiagMSG.msgData.Data);    
}

/**
  *2F服务DID3F84
  *LCD
  */
void UDS_2FService_DID_3F84(void)
{
    uint8_t len = 0;
    Display_Diag_Ctrl(DiagMSG.msgData.DidDetail.Data[0], DiagMSG.msgData.DidDetail.Data[1]);
    //Set_DIAG_LCDsts(DiagMSG.msgData.DidDetail.Data[0]);
    //BuzzerTest(DiagMSG.msgData.DidDetail.Data[0], DiagMSG.msgData.DidDetail.Data[1]);
    if(DiagMSG.msgData.DidDetail.Data[0] == 0)
    {
        len = 3;
    }
    else
    {
        //DiagLCD = DiagMSG.msgData.DidDetail.Data[1];
        len = 4;
    }
    UDS_Service_Response(0x2Fu, POSITIVE_RSP, DIAG_ID_Tx, 3u, DiagMSG.msgData.Data);    
}

/**
  *2F服务DID3F84
  *BUZZER
  */
void UDS_2FService_DID_3F85(void)
{
    uint8_t len = 0;
    Sound_Diag_Ctrl(DiagMSG.msgData.DidDetail.Data[0], DiagMSG.msgData.DidDetail.Data[1]);
    if(DiagMSG.msgData.DidDetail.Data[0] == 0)
    {
        len = 3;
    }
    else
    {
        DiagBuzzer = DiagMSG.msgData.DidDetail.Data[1];
        len = 4;
    }
    UDS_Service_Response(0x2Fu, POSITIVE_RSP, DIAG_ID_Tx, 3u, DiagMSG.msgData.Data);    
}