/*◄■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ DDCeCom.c ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■►*/

// <editor-fold defaultstate="collapsed" desc="Title">
/*════════════════════════════════════════════════════════════════════════════*/
/*                        © John William Darsow                               */
/* Created on January 18, 2016                                                */
/* Current Version Date: (see File Date)                                      */
/*                                                                            */
/* Communications routines for DCC Accessory Decoder                          */
/*                                                                            */
/*                                                                            */
/*  Compiled using:     MPLAB X IDE v3.20                                     */
/*                      XC8 v1.35                                             */
/*                                                                            */
/* Modifications,UpDates and ToDo:                                            */
/*                                                                            */
/*════════════════════════════════════════════════════════════════════════════*/
// </editor-fold>

/*═════════════════════════════════ INCLUDEs ═════════════════════════════════*/
#include <xc.h>
#include <stdio.h>
#include <string.h>
#include "DCCeCom.h"

/*═══════════════════════════ VARIABLE DEFINITIONS ═══════════════════════════*/
// <editor-fold defaultstate="collapsed" desc="Variable Definitions">

// FooBar
// </editor-fold>// Variable Definitions

/*═══════════════════════════ FUNCTION  DEFINITIONS ══════════════════════════*/
// <editor-fold defaultstate="collapsed" desc="Functions Definitions">

/*──────────────────────────────── Dcc Reset ─────────────────────────────────*/
extern void notifyDccReset(uInt8 hardReset)
{
   if (hardReset)
      printf("Memory has been ReSet to Factory\n>");  // respond with eeData filled
   else
      printf("Soft ReSet\n>");                        // 
}

/*───────────────────────────────── Dcc Idle ─────────────────────────────────*/
extern void notifyDccIdle(void)
{
   printf("DCC Idle; ");                        // 
}

/*──────────────────────────────── Dcc Speed ─ NOT for accessory────────────────────────────────*/
extern void notifyDccSpeed(uInt16 Addr, uInt8 Speed, uInt8 ForwardDir, uInt8 MaxSpeed)
{
}

/*────────────────────────────── Dcc Acc State ───────────────────────────────*/
// This function is called whenever a normal DCC Turnout Packet is received
extern void notifyDccAccState(uInt16 Addr, uInt8 BoardAddr, uInt8 OutputAddr, uInt8 State)
{
   printf("notifyDccAccState: %4d, %4d, %4d, %2.2X\n", Addr, BoardAddr, OutputAddr, State);
}

/*────────────────────────────── Dcc Sig State ───────────────────────────────*/
// This function is called whenever a DCC Signal Aspect Packet is received
extern void notifyDccSigState(uInt16 Addr, uInt8 OutputIndex, uInt8 State)
{
   printf("notifyDccSigState: %4d, %4d, %4d\n", Addr, OutputIndex, State) ;
}

///*───────────────────────────────── Dcc Msg ──────────────────────────────────*/
//
//#define NOTIFY_DCC_MSG       // Uncomment to print all DCC Packets in hex
//#ifdef  NOTIFY_DCC_MSG
//extern void    notifyDccMsg(DccMsg_t * Msg) {
//   printf("notifyDccMsg: ");
//   for (uInt8 i = 0; i < Msg->Size; i++) {
//      printf("%2.2x",Msg->Data[i]);
//      printf(" ");
//   }
//   printf("\n");
//}
//#endif

/*───────────────────────────────── CV Valid ─────────────────────────────────*/
extern uInt8   notifyCVValid(uInt16 CV, uInt8 Writable)
{
   return Writable;
}

/*───────────────────────────────── CV Read ──────────────────────────────────*/
extern uInt8   notifyCVRead( uInt16 CV)
{
   return 1;
}

/*───────────────────────────────── CV Write ─────────────────────────────────*/
extern uInt8   notifyCVWrite(uInt16 CV, uInt8 Value)
{
   return Value;
}

/*───────────────────────────── Is Set CV Ready ──────────────────────────────*/
extern uInt8   notifyIsSetCVReady(void)
{
   return 1;
}

/*──────────────────────────────── CV Change ─────────────────────────────────*/
extern void    notifyCVChange(uInt16 CV, uInt8 Value)
{
}

/*───────────────────────── CV Reset Factory Default ─────────────────────────*/
// Make FactoryDefaultCVIndex non-zero and equal to num CV's to be reset 
// to flag to the loop() function that a reset to Factory Defaults needs to be done
extern void    notifyCVResetFactoryDefault(void)
{
//  FactoryDefaultCVIndex = sizeof(FactoryDefaultCVs)/sizeof(CVPair_t);
}

/*────────────────────────────────── CV Ack ──────────────────────────────────*/
extern void    notifyCVAck(void)
{
   printf("notifyCVAck");         //
}

// </editor-fold>// Functions Definitions

