/* 
 * File:   crc.h
 * Author: bjones
 *
 * Created on January 29, 2024, 9:38 AM
 */

#include <stdio.h>
#include <ctype.h>

#define MAX_PUMP_SECS 500
#define MAXHOMETIME 60000

unsigned short epos4_init(void);
unsigned short calc_CRC(unsigned short ArrayLength);
unsigned short pack_payload(unsigned short ArrayLength);
unsigned short ReadObject (unsigned short index,unsigned char subindex);
unsigned short WriteObject (unsigned short index,unsigned char subindex,unsigned short val1,unsigned short val2);
unsigned short WriteObject8bit (unsigned short index,unsigned char subindex,unsigned short val1);
unsigned short CheckForMotion(void);
unsigned short CheckForHome(void);
unsigned short GetPosition(void);
unsigned short GetMotorStat(void);
unsigned short GetDigInConf(void);
unsigned short MoveCntsRelative(unsigned short target);
unsigned short Home(int ms);
void           StopMotor(void);
unsigned int   sample (void);
unsigned short WaitForMotion(int ms);
int            RunPump(unsigned short revolutions,int secs);
void           PumpOn(void);
void           PumpOff(void);
void           epos_passthru(void);

//-------------------------------------------------------------------------
#define GetOperationModeIndex 0x6061
#define GetOperationModeSubIndex 0x00
#define SetOperationModeIndex 0x6060
#define SetOperationModeSubIndex 0x00
#define GetPostitionIsIndex 0x6064
#define GetPositionIsSubIndex 0x00
#define GetDigInIndex 0x3141
#define GetDigInSubIndex 0x01
#define SetDigOutIndex 0x60FE
#define SetDigOutSubIndex 0x01
#define HomeSensPower 1

#define TargetPosIndex 0x607A
#define TargetPosSubIndex 0x00

#define Statusword 0x6041
#define Controlword 0x6040

#define MotionDir 0x3000
#define MotionDirSubIndex 0x04

#define ER 0x1001
#define EC 0x1003

