#include "CAN_FW.h"
#include "Can.h"

#define Rx_DLC	apPkt->data_len
#define Rx_A		buf[0]              
#define Rx_B		buf[1]
#define Rx_C		buf[2]
#define Rx_D		buf[3]
#define Rx_E		buf[4]
#define Rx_F		buf[5]
#define Rx_G		buf[6]
#define Rx_H		buf[7]

uint16_t bcd  (uint16_t  hexdata)
{
 uint16_t x;
 uint8_t i;

    if ( hexdata > 9999) return 0xFFFF;

     x = hexdata >> (14-3);
    hexdata <<= (2+3);
   
    for (i=0; i<11; i++)
    {
        if ((x >> 0 & 0x0F) > 4) x+=0x0003;
        if ((x >> 4 & 0x0F) > 4) x+=0x0030;
        if ((x >> 8 & 0x0F) > 4) x+=0x0300;
        if ((x >>12 & 0x0F) > 4) x+=0x3000;
        x <<= 1;
        if (hexdata & 0x8000) x++;
        hexdata <<= 1;
    }
    return x;
}
#if defined ISiSLAVE
void iSlaveTune  (TCanFwMem * vars, bool isStep)
{
 TCanPkt pkt;
 uint16_t bcdTime;

        if (isStep)
        {
            pkt.data[0] = vars->iSlave.prestep;
            pkt.data[1] = vars->iSlave.step;
        }
        else
        {
            pkt.data[0] = 0xFF;
            pkt.data[1] = vars->iSlave.step;
        }

            bcdTime = bcd (vars->iSlave.tmrHaz.Value());
            pkt.data[2] = bcdTime >> 8;                         // время вспышки в двоично-десятичном формате
            pkt.data[3] = bcdTime >> 0;

 //           pkt.data[2] = (vars->iSlave.tmrHaz.Value()) >> 8;
//            pkt.data[3] = vars->iSlave.tmrHaz.Value();

            pkt.id = 0x7dd;
            pkt.data_len = 4;
            CoreFunc->CanSend (CANch1, &pkt,  0);
}
void TestSteps  (TCanFwMem * vars)
{
        if (vars->iSlave.step != vars->iSlave.prestep)
            iSlaveTune (vars, true); 
        vars->iSlave.prestep = vars->iSlave.step;
}
void TestTimeFlash  (TCanFwMem * vars) 
{
        if (vars->iSlave.prehazlamp != vars->iSlave.hazlamp)
            iSlaveTune (vars, false);
} 
# endif
//=================================================================

void tt (uint8_t t)
{
 TCanPkt pkt;
        pkt.id = 0x7dd;
        pkt.data_len = 1;
        pkt.data[0] = t;
        CoreFunc->CanSend (CANch1, &pkt, 0);
}
void tt2 (uint8_t t)
{
 TCanPkt pkt;
        pkt.id = 0x7dd;
        pkt.data_len = 1;
        pkt.data[0] = t;
        CoreFunc->CanSend (CANch2, &pkt, 0);
}

void ttBcd (uint8_t t)
{
 TCanPkt pkt;
 uint16_t  T;

    T = bcd (t);
    pkt.id = 0x7dd;
    pkt.data_len = 2;
    pkt.data[0] = T >> 8;
    pkt.data[1] = T >> 0;
    CoreFunc->CanSend (CANch1, &pkt, 0);
}

void ttuint (uint32_t t)
{
 TCanPkt pkt;
    pkt.id = 0x7dd;
    pkt.data_len = 4;
    pkt.data[0] = t >> 24;
    pkt.data[1] = t >> 16;
    pkt.data[2] = t >> 8;
    pkt.data[3] = t >> 0;    
    CoreFunc->CanSend (CANch1, &pkt, 0);
}
//=================================================================