Fixed some troubles
This commit is contained in:
47
main.c
47
main.c
@@ -202,6 +202,7 @@ static mcc_errcodes_t init(conf_t *c){
|
||||
if(!Xmodel || !Ymodel || !openMount()) return MCC_E_FAILED;
|
||||
return MCC_E_OK;
|
||||
}
|
||||
DBG("Try to open mount device");
|
||||
if(!Conf.MountDevPath || Conf.MountDevSpeed < MOUNT_BAUDRATE_MIN){
|
||||
DBG("Define mount device path and speed");
|
||||
ret = MCC_E_BADFORMAT;
|
||||
@@ -209,33 +210,53 @@ static mcc_errcodes_t init(conf_t *c){
|
||||
DBG("Can't open %s with speed %d", Conf.MountDevPath, Conf.MountDevSpeed);
|
||||
ret = MCC_E_MOUNTDEV;
|
||||
}
|
||||
if(Conf.SepEncoder){
|
||||
if(!Conf.EncoderDevPath && !Conf.EncoderXDevPath){
|
||||
DBG("Define encoder device path");
|
||||
ret = MCC_E_BADFORMAT;
|
||||
}else if(!openEncoder()){
|
||||
DBG("Can't open encoder device");
|
||||
ret = MCC_E_ENCODERDEV;
|
||||
}
|
||||
}
|
||||
// TODO: read hardware configuration on init
|
||||
if(Conf.EncoderSpeedInterval < Conf.EncoderReqInterval * MCC_CONF_MIN_SPEEDC || Conf.EncoderSpeedInterval > MCC_CONF_MAX_SPEEDINT){
|
||||
DBG("Wrong speed interval");
|
||||
ret = MCC_E_BADFORMAT;
|
||||
}
|
||||
if(!SSrawcmd(CMD_EXITACM, NULL)) ret = MCC_E_FAILED;
|
||||
if(ret != MCC_E_OK) return ret;
|
||||
DBG("Exit ACM, exit manual mode");
|
||||
SSrawcmd(CMD_EXITACM, NULL);
|
||||
SStextcmd(CMD_AUTOX, NULL);
|
||||
SStextcmd(CMD_AUTOY, NULL);
|
||||
// read HW config to update constants
|
||||
hardware_configuration_t HW;
|
||||
if(MCC_E_OK != get_hwconf(&HW)) return MCC_E_FAILED;
|
||||
DBG("Read hardware configuration");
|
||||
ret = MCC_E_FAILED;
|
||||
for(int i = 0; i < MAX_ERR_CTR; ++i){
|
||||
DBG("TRY %d..", i);
|
||||
ret = get_hwconf(&HW);
|
||||
if(ret == MCC_E_OK) break;
|
||||
}
|
||||
if(MCC_E_OK != ret) return ret;
|
||||
// make a pause for actual encoder's values
|
||||
DBG("Check encoders");
|
||||
if(Conf.SepEncoder){
|
||||
if(!Conf.EncoderDevPath && !Conf.EncoderXDevPath){
|
||||
DBG("Define encoder device path");
|
||||
ret = MCC_E_BADFORMAT;
|
||||
}else{
|
||||
ret = MCC_E_ENCODERDEV;
|
||||
for(int i = 0; i < MAX_ERR_CTR; ++i){
|
||||
if(openEncoder()){
|
||||
ret = MCC_E_OK;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(MCC_E_OK != ret) return ret;
|
||||
double t0 = timefromstart();
|
||||
while(timefromstart() - t0 < Conf.EncoderReqInterval) usleep(1000);
|
||||
DBG("Wait for first encoders' measurement");
|
||||
while(timefromstart() - t0 < Conf.EncoderReqInterval * 15.) usleep(1000);
|
||||
DBG("Update motor position");
|
||||
mcc_errcodes_t e = updateMotorPos();
|
||||
// and refresh data after updating
|
||||
DBG("Wait for next mount reading");
|
||||
t0 = timefromstart();
|
||||
while(timefromstart() - t0 < Conf.MountReqInterval * 3.) usleep(1000);
|
||||
while(timefromstart() - t0 < Conf.MountReqInterval * 5.) usleep(1000);
|
||||
DBG("ALL READY!");
|
||||
return e;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user