#include "TMCStepper.h"
#include "TMC_MACROS.h"

#define GET_REG(NS, SETTING) NS::DRV_STATUS_t r{0}; r.sr = DRV_STATUS(); return r.SETTING

uint32_t TMC2130Stepper::DRV_STATUS() { return read(DRV_STATUS_t::address); }

uint16_t TMC2130Stepper::sg_result(){ GET_REG(TMC2130_n, sg_result); 	}
bool TMC2130Stepper::fsactive()		{ GET_REG(TMC2130_n, fsactive); 	}
uint8_t TMC2130Stepper::cs_actual()	{ GET_REG(TMC2130_n, cs_actual); 	}
bool TMC2130Stepper::stallguard()	{ GET_REG(TMC2130_n, stallGuard); 	}
bool TMC2130Stepper::ot()			{ GET_REG(TMC2130_n, ot); 			}
bool TMC2130Stepper::otpw()			{ GET_REG(TMC2130_n, otpw); 		}
bool TMC2130Stepper::s2ga()			{ GET_REG(TMC2130_n, s2ga); 		}
bool TMC2130Stepper::s2gb()			{ GET_REG(TMC2130_n, s2gb); 		}
bool TMC2130Stepper::ola()			{ GET_REG(TMC2130_n, ola); 			}
bool TMC2130Stepper::olb()			{ GET_REG(TMC2130_n, olb); 			}
bool TMC2130Stepper::stst()			{ GET_REG(TMC2130_n, stst); 		}

uint32_t TMC2208Stepper::DRV_STATUS() {
	if (write_only) return 0;
	return read(TMC2208_n::DRV_STATUS_t::address);
}

bool 		TMC2208Stepper::otpw()		{ GET_REG(TMC2208_n, otpw); 		}
bool 		TMC2208Stepper::ot() 		{ GET_REG(TMC2208_n, ot); 	 		}
bool 		TMC2208Stepper::s2ga() 		{ GET_REG(TMC2208_n, s2ga); 		}
bool 		TMC2208Stepper::s2gb() 		{ GET_REG(TMC2208_n, s2gb); 		}
bool 		TMC2208Stepper::s2vsa() 	{ GET_REG(TMC2208_n, s2vsa);		}
bool 		TMC2208Stepper::s2vsb() 	{ GET_REG(TMC2208_n, s2vsb);		}
bool 		TMC2208Stepper::ola() 		{ GET_REG(TMC2208_n, ola);  		}
bool 		TMC2208Stepper::olb() 		{ GET_REG(TMC2208_n, olb);  		}
bool 		TMC2208Stepper::t120() 		{ GET_REG(TMC2208_n, t120); 		}
bool 		TMC2208Stepper::t143() 		{ GET_REG(TMC2208_n, t143); 		}
bool 		TMC2208Stepper::t150() 		{ GET_REG(TMC2208_n, t150); 		}
bool 		TMC2208Stepper::t157() 		{ GET_REG(TMC2208_n, t157); 		}
uint16_t 	TMC2208Stepper::cs_actual()	{ GET_REG(TMC2208_n, cs_actual);	}
bool 		TMC2208Stepper::stealth() 	{ GET_REG(TMC2208_n, stealth);		}
bool 		TMC2208Stepper::stst() 		{ GET_REG(TMC2208_n, stst); 		}
