/** Creates a new AG_CONEXController object. * \param[in] portName The name of the asyn port that will be created for this driver * \param[in] serialPortName The name of the drvAsynSerialPort that was created previously to connect to the CONEX controller * \param[in] numAxes The number of axes that this controller supports * \param[in] movingPollPeriod The time between polls when any axis is moving * \param[in] idlePollPeriod The time between polls when no axis is moving */ AG_CONEXController::AG_CONEXController(const char *portName, const char *serialPortName, int controllerID, double movingPollPeriod, double idlePollPeriod) : asynMotorController(portName, 1, NUM_AG_CONEX_PARAMS, 0, // No additional interfaces beyond those in base class 0, // No additional callback interfaces beyond those in base class ASYN_CANBLOCK | ASYN_MULTIDEVICE, 1, // autoconnect 0, 0), // Default priority and stack size controllerID_(controllerID) { asynStatus status; static const char *functionName = "AG_CONEXController::AG_CONEXController"; /* Connect to CONEX controller */ status = pasynOctetSyncIO->connect(serialPortName, 0, &pasynUserController_, NULL); if (status) { asynPrint(pasynUserSelf, ASYN_TRACE_ERROR, "%s: cannot connect to CONEX controller\n", functionName); return; } // Flush any characters that controller has, read firmware version sprintf(outString_, "%dVE", controllerID_); status = writeReadController(); if (status) { asynPrint(pasynUserSelf, ASYN_TRACE_ERROR, "%s: cannot read version information from AG_CONEX controller\n", functionName); return; } strcpy(controllerVersion_, &inString_[4]); // Create the axis object new AG_CONEXAxis(this); startPoller(movingPollPeriod, idlePollPeriod, 2); }
/** Writes a string to the C300 controller and reads the response. * Calls writeReadController() with default locations of the input and output strings * and default timeout. */ asynStatus C300Controller::writeReadController() { size_t nread; return writeReadController(outString_, inString_, sizeof(inString_), &nread, C300_TIMEOUT); }