diff -Naur indi/drivers/focuser/hitecastrodcfocuser.cpp indi-new/drivers/focuser/hitecastrodcfocuser.cpp --- indi/drivers/focuser/hitecastrodcfocuser.cpp 2020-03-25 11:02:13.548172682 +0000 +++ indi-new/drivers/focuser/hitecastrodcfocuser.cpp 2020-03-25 11:02:35.787900780 +0000 @@ -142,8 +142,12 @@ // IUFillNumberVector(&MaxPositionNP, MaxPositionN, 1, getDeviceName(), "MAX_POSITION", "Max position", // FOCUS_SETTINGS_TAB, IP_RW, 0, IPS_IDLE); - IUFillNumber(&SlewSpeedN[0], "Steps/sec", "", "%.f", 1, 100, 0., 50); - IUFillNumberVector(&SlewSpeedNP, SlewSpeedN, 1, getDeviceName(), "SLEW_SPEED", "Slew speed", MAIN_CONTROL_TAB, + IUFillNumber(&ISlewSpeedN[0], "In Steps/sec", "", "%.f", 1, 100, 0., 50); + IUFillNumberVector(&ISlewSpeedNP, ISlewSpeedN, 1, getDeviceName(), "IN_SLEW_SPEED", "In Slew speed", MAIN_CONTROL_TAB, + IP_RW, 0, IPS_IDLE); + + IUFillNumber(&OSlewSpeedN[0], "Out Steps/sec", "", "%.f", 1, 100, 0., 50); + IUFillNumberVector(&OSlewSpeedNP, OSlewSpeedN, 1, getDeviceName(), "OUT_SLEW_SPEED", "Out Slew speed", MAIN_CONTROL_TAB, IP_RW, 0, IPS_IDLE); // IUFillSwitch(&ReverseDirectionS[0], "ENABLED", "Reverse direction", ISS_OFF); @@ -172,13 +176,15 @@ if (isConnected()) { //defineNumber(&MaxPositionNP); - defineNumber(&SlewSpeedNP); + defineNumber(&ISlewSpeedNP); + defineNumber(&OSlewSpeedNP); //defineSwitch(&ReverseDirectionSP); } else { //deleteProperty(MaxPositionNP.name); - deleteProperty(SlewSpeedNP.name); + deleteProperty(ISlewSpeedNP.name); + deleteProperty(OSlewSpeedNP.name); //deleteProperty(ReverseDirectionSP.name); } @@ -219,16 +225,28 @@ // IDSetNumber(&MaxPositionNP, nullptr); // return true; // } - if (strcmp(name, SlewSpeedNP.name) == 0) + if (strcmp(name, ISlewSpeedNP.name) == 0) + { + if (values[0] > 100) + { + ISlewSpeedNP.s = IPS_ALERT; + return false; + } + IUUpdateNumber(&ISlewSpeedNP, values, names, n); + ISlewSpeedNP.s = IPS_OK; + IDSetNumber(&ISlewSpeedNP, nullptr); + return true; + } + if (strcmp(name, OSlewSpeedNP.name) == 0) { if (values[0] > 100) { - SlewSpeedNP.s = IPS_ALERT; + OSlewSpeedNP.s = IPS_ALERT; return false; } - IUUpdateNumber(&SlewSpeedNP, values, names, n); - SlewSpeedNP.s = IPS_OK; - IDSetNumber(&SlewSpeedNP, nullptr); + IUUpdateNumber(&OSlewSpeedNP, values, names, n); + OSlewSpeedNP.s = IPS_OK; + IDSetNumber(&OSlewSpeedNP, nullptr); return true; } } @@ -237,7 +255,7 @@ IPState HitecAstroDCFocuser::MoveRelFocuser(FocusDirection dir, uint32_t ticks) { - int rc, speed = (int)SlewSpeedN[0].value; + int rc, speed = (int)ISlewSpeedN[0].value; // int32_t iticks = ticks; unsigned char command[8] = {0}; IPState rval; @@ -250,6 +268,15 @@ return IPS_ALERT; } + if (dir == FOCUS_INWARD) + { + speed = ISlewSpeedN[0].value; + } + if (dir == FOCUS_OUTWARD) + { + speed = OSlewSpeedN[0].value; + } + // FocusRelPosNP.s = IPS_BUSY; // IDSetNumber(&FocusRelPosNP, nullptr); @@ -379,7 +406,8 @@ INDI::Focuser::saveConfigItems(fp); //IUSaveConfigNumber(fp, &MaxPositionNP); - IUSaveConfigNumber(fp, &SlewSpeedNP); + IUSaveConfigNumber(fp, &ISlewSpeedNP); + IUSaveConfigNumber(fp, &OSlewSpeedNP); //IUSaveConfigSwitch(fp, &ReverseDirectionSP); return true; diff -Naur indi/drivers/focuser/hitecastrodcfocuser.h indi-new/drivers/focuser/hitecastrodcfocuser.h --- indi/drivers/focuser/hitecastrodcfocuser.h 2020-03-25 11:02:13.548172682 +0000 +++ indi-new/drivers/focuser/hitecastrodcfocuser.h 2020-03-25 11:02:35.787900780 +0000 @@ -62,8 +62,10 @@ // INumber MaxPositionN[1]; // INumberVectorProperty MaxPositionNP; - INumber SlewSpeedN[1]; - INumberVectorProperty SlewSpeedNP; + INumber ISlewSpeedN[1]; + INumberVectorProperty ISlewSpeedNP; + INumber OSlewSpeedN[1]; + INumberVectorProperty OSlewSpeedNP; // ISwitch ReverseDirectionS[1]; // ISwitchVectorProperty ReverseDirectionSP;