//----------------------------------------------------
/**
	\file		ctk/hw/stepper_msm01.h
	\ingroup	other
	\ingroup	ctk

	\brief		Knihovna budice krokoveho motoru MSM01
				<<< MSVC >>>
			
	\author		ConTeK s.r.o., Petr Cermak
	\version	01.01
	\date		02.03.2011
*/
//----------------------------------------------------
#ifndef _STEPPER_MSM01_H_
#define _STEPPER_MSM01_H_

#include <stepper.h>
#include <iolib.h>


//----------------------------------------------------
//!	Stavy budice krokoveho motoru MSM01

typedef enum _MSM01_STATE {
	SS_OVER = 0x00,
	SS_SHORT_SUPPLY = 0x01,
	SS_SHORT_GND = 0x02,
	SS_OK = 0x03
} MSM01_STATE;


//----------------------------------------------------
//!	 Typy počtu kroků MSM01

typedef enum _MSM01_STEP 
{
	MSM01_STEP4 = 4,
	MSM01_STEP16 = 16
} MSM01_STEP;


//----------------------------------------------------
//!	Kontext krokoveho motoru

typedef struct _STEPPERHW_CTX {
	STEPPER_CTX				Parent;			    //!< Rodic
	
	volatile MSM01_STATE	Status;			//!< Stav motoru
	
	ioaddr_t			StepAddr;           //!< Adresa výstupu pro krokování
  ioaddr_t			DirAddr;            //!< Adresa výstupu pro řízení smeru krokování
	ioaddr_t			EnableAddr;         //!< Adresa výstupu pro řízení povolení krokování
	ioaddr_t			MicAddr;      

	int8_t				MotorCmdAddr;       

	STEPPER_DIR		ActDir;             //!< Aktuální směr krokování
	MSM01_STEP		ActStepCount;       //!< Aktuální počet kroků
	
	bool_t				LastStep;           //!< Poslední hodnota kroku

	
	volatile bool_t		flRunning;		//!< Je nainicializovan
} STEPPERHW_CTX;

//----------------------------------------------------
/** 
	/brief	HW inicializace krokoveho motoru
	/param _ctx           Kontex stepperu
	/param _motorCmdAddr  Adresa výstupu, kam je pripojen výstup ovlánání motoru
	/param _stepAddrAddr  Adresa výstupu, kam je připojeno vysílání kroků motoru
	/param _dirAddr       Adresa výstupu, kam je připojeno řízení směru krokování
	/param _enableAddr    Adresa výstupu, kam je připojen povolovací pin MSM
	/param _micAddr       
	/param _step          Počet mikrokroků do kroku
	
	/return TRUE          Inicializace proběhla v pořádku
          FALSE         Inicializace neproběhla v pořádku
*/
//----------------------------------------------------

bool_t StepperHwInitialize(STEPPERHW_CTX * _ctx, int8_t _motorCmdAddr, ioaddr_t _stepAddr, ioaddr_t _dirAddr, ioaddr_t _enableAddr, ioaddr_t _micAddr, MSM01_STEP _step);

//----------------------------------------------------
/** 
	/brief	HW finalizace krokoveho motoru
	/param _ctx           Kontex stepperu
*/
//----------------------------------------------------

void StepperHwFinalize(STEPPERHW_CTX * _ctx);

#endif /*_STEPPER_MSM01_H_*/
