#ifndef CAN_FW_H_
#define CAN_FW_H_

#include "Settings.h"
#include "Buffer.h"
#include "Periodic.h"
#include "Can.h"

enum TPeriodicTasks
{
    PELightButton,                      // Задача управления триггерной кнопкой.
    PeriodicCount,                      // количество задач
};

// структура с пользовательскими переменными
struct TCanFwMem {
    CSettings::TSettings    Settings;   // структура с настройками - должна быть всегда в начале
    CPeriodic<PeriodicCount>    PeriodicTask;

    bool        ign;                    // флаг зажигания
    bool        arm;
    bool        prearm;                 // предыдущий статус охраны автомобиля
    bool        cmf;                    // флаг "комфорт"
    bool        mirror;                 // флаг "сложить зеркала"

 struct{
        bool        hazlamp;            // состояние аварийки (любой)
        bool        seized;             // Флаг захвата кнопки аварийки
        uint8_t     step;               // Шаги функции Emergency Light Button
        TimerMs     tmr;                // Таймер сбрасывается в момент фронта/спада автомобильной (не нашей!) аварийки
        uint8_t     cnt;
        } ELight;

 struct{
        bool        multipkt;
        uint8_t     mode;
        uint8_t     pid;
        char        vin[17];
        } Diag;
};
void Wake_CAN        (TCanFwMem * vars);
void ELight_Button2  (TCanFwMem * vars);

// OBDII
void DiagRcv (TCanFwMem * vars, TCanPkt * pkt, TCanChannel channel);
void DiagReq (TCanFwMem * vars, uint8_t mode, uint8_t pid, TCanChannel channel);


#endif /* CAN_FW_H_ */
