/*
 * Copyright (c) 2021, Erich Styger
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef __QuadCounter_H
#define __QuadCounter_H

#include "McuLib.h" /* SDK and API used */
//#include "QuadCounterconfig.h" /* configuration */
#include "McuShell.h"


#define QuadCounter_SWAP_PINS  0 /* 1: C1 and C2 are swapped */
#define QuadCounter_SWAP_PINS_AT_RUNTIME  1 /* 1: C1 and C2 are swapped at runtime, if SwapPins() method is available */

typedef uint32_t QuadCounter_QuadCntrType;

#define QuadCounter_PARSE_COMMAND_ENABLED  1  /* set to 1 if method ParseCommand() is present, 0 otherwise */

void QuadCounter_SetPosLeft(QuadCounter_QuadCntrType pos);
void QuadCounter_SetPosRight(QuadCounter_QuadCntrType pos);

void QuadCounter_SwapPinsLeft(bool swap);
void QuadCounter_SwapPinsRight(bool swap);

uint32_t QuadCounter_GetErrorsLeft(void);
uint32_t QuadCounter_GetErrorsRight(void);

void QuadCounter_EnablePullups(void);

/*
** ===================================================================
**     Method      :  SetPos (component QuadCounter)
**
**     Description :
**         Sets the position information. Can be used as well to reset
**         the position information.
**     Parameters  :
**         NAME            - DESCRIPTION
**         pos             - Position value to be set.
**     Returns     : Nothing
** ===================================================================
*/

QuadCounter_QuadCntrType QuadCounter_GetPosLeft(void);
QuadCounter_QuadCntrType QuadCounter_GetPosRight(void);
/*
** ===================================================================
**     Method      :  GetPos (component QuadCounter)
**
**     Description :
**         Returns the current position based on the encoder tracking.
**     Parameters  : None
**     Returns     :
**         ---             - position
** ===================================================================
*/

void QuadCounter_Sample(void);
/*
** ===================================================================
**     Method      :  Sample (component QuadCounter)
**
**     Description :
**         Call this method to periodically sample the signals.
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/

void QuadCounter_Deinit(void);
/*
** ===================================================================
**     Method      :  Deinit (component QuadCounter)
**
**     Description :
**         Module de-initialization method
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/

void QuadCounter_Init(void);
/*
** ===================================================================
**     Method      :  Init (component QuadCounter)
**
**     Description :
**         Module initialization method
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/

uint8_t QuadCounter_ParseCommand(const unsigned char *cmd, bool *handled, const McuShell_StdIOType *io);
/*
** ===================================================================
**     Method      :  ParseCommand (component QuadCounter)
**
**     Description :
**         Handler to process shell commands
**     Parameters  :
**         NAME            - DESCRIPTION
**         cmd             - Command string to be parsed
**       * handled         - Pointer to boolean. The handler
**                           sets this variable to TRUE if command was
**                           handled, otherwise let it untouched.
**         io              - Pointer to I/O structure
**     Returns     :
**         ---             - Error code
** ===================================================================
*/

uint8_t QuadCounter_GetValLeft(void);
uint8_t QuadCounter_GetValRight(void);
/*
** ===================================================================
**     Method      :  GetVal (component QuadCounter)
**
**     Description :
**         Returns the quadrature value (0, 1, 2 or 3)
**     Parameters  : None
**     Returns     :
**         ---             - Quadrature value (0-3)
** ===================================================================
*/

#endif
/* ifndef __QuadCounter_H */
/*!
** @}
*/
