From a7b4b4069d5d52286023f5158a5fd345fed15696 Mon Sep 17 00:00:00 2001 From: koennecke Date: Wed, 16 Aug 2006 14:16:58 +0000 Subject: [PATCH] - Added motor driver skeleton creator --- tcl/makemodrivskel | 177 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100755 tcl/makemodrivskel diff --git a/tcl/makemodrivskel b/tcl/makemodrivskel new file mode 100755 index 00000000..b5c14321 --- /dev/null +++ b/tcl/makemodrivskel @@ -0,0 +1,177 @@ +#!/usr/bin/tclsh +#------------------------------------------------------------------------------ +# Make the skeleton for a motor driver +# +# copyright: see file COPYRIGHT +# +# Mark Koennecke, July 2006 +#------------------------------------------------------------------------------ +if { [llength $argv] < 1} { + puts stdout "Usage:\n\tmakemodrivskel prefix" + exit 1 +} + +set prefix [lindex $argv 0] +#----------------------------------------------------------------------------- +proc stdCast {} { + global prefix + puts stdout " ${prefix}MotorDriver *self = NULL;" + puts stdout " " + puts stdout " self = (${prefix}MotorDriver *)data;" +} + +#----------------- output datastructure +puts stdout "#include " +puts stdout "#include " +puts stdout "#include " +puts stdout "typedef struct __${prefix}MoDriv{" +puts stdout " /* general motor driver interface " +puts stdout " fields. REQUIRED!" +puts stdout " */" +puts stdout " float fUpper; /* upper limit */" +puts stdout " float fLower; /* lower limit */" +puts stdout " char *name;" +puts stdout " int (*GetPosition)(void *self, float *fPos);" +puts stdout " int (*RunTo)(void *self,float fNewVal);" +puts stdout " int (*GetStatus)(void *self);" +puts stdout " void (*GetError)(void *self, int *iCode, char *buffer, int iBufLen);" +puts stdout " int (*TryAndFixIt)(void *self, int iError,float fNew);" +puts stdout " int (*Halt)(void *self);" +puts stdout " int (*GetDriverPar)(void *self, char *name, " +puts stdout " float *value);" +puts stdout " int (*SetDriverPar)(void *self,SConnection *pCon," +puts stdout " char *name, float newValue);" +puts stdout " void (*ListDriverPar)(void *self, char *motorName," +puts stdout " SConnection *pCon);" +puts stdout " void (*KillPrivate)(void *self);" +puts stdout " /* your drivers private fields follow below */" +puts stdout " } ${prefix}MotorDriver;" +puts stdout " " + + +puts stdout "/*================================================================" +puts stdout " GetPos returns OKOK on success, HWFault on failure " +puts stdout "------------------------------------------------------------------*/" +puts stdout "static int ${prefix}GetPos(void *data, float *fPos){" +stdCast +puts stdout " return OKOK;" +puts stdout "}" + +puts stdout "/*----------------------------------------------------------------" +puts stdout " RunTo starts the motor running. Returns OKOK on success, HWfault" +puts stdout " on Errors" +puts stdout "------------------------------------------------------------------*/" +puts stdout "static int ${prefix}RunTo(void *data, float newValue){" +stdCast +puts stdout " return OKOK;" +puts stdout "}" + +puts stdout "/*-----------------------------------------------------------------" +puts stdout " CheckStatus queries the sattus of a running motor. Possible return" +puts stdout " values can be:" +puts stdout " HWBusy : motor still running" +puts stdout " HWFault : motor error detected" +puts stdout " HWPosFault : motor finished, but position not reached" +puts stdout " HWIdle : motor finished OK" +puts stdout " HWWarn : motor issued warning" +puts stdout "--------------------------------------------------------------------*/" +puts stdout "static int ${prefix}CheckStatus(void *data){" +stdCast +puts stdout " return HWIdle;" +puts stdout "}" + +puts stdout "/*------------------------------------------------------------------" +puts stdout " GetError gets more information about error which occurred" +puts stdout " *iCode is an integer error code to be used in TryFixIt as indicator" +puts stdout " buffer is a buffer for a text description of the problem" +puts stdout " iBufLen is the length of buffer" +puts stdout "--------------------------------------------------------------------*/" +puts stdout "static void ${prefix}GetError(void *data, int *iCode, char *buffer," +puts stdout " int iBufLen){" +stdCast +puts stdout "}" + +puts stdout "/*------------------------------------------------------------------" +puts stdout " TryAndFixIt tries everything which is possible in software to fix " +puts stdout " a problem. iError is the error code from GetError, newValue is " +puts stdout " the target value for the motor" +puts stdout " Possible retrun values are:" +puts stdout " MOTOK : everything fixed" +puts stdout " MOTREDO : try again " +puts stdout " MOTFAIL : cannot fix this" +puts stdout "--------------------------------------------------------------------*/" +puts stdout "static int ${prefix}FixIt(void *data, int iError, float newValue){" +stdCast +puts stdout " return MOTFAIL;" +puts stdout "}" + +puts stdout "/*-------------------------------------------------------------------" +puts stdout " Halt tries to stop the motor. Halt errors are ignored" +puts stdout "---------------------------------------------------------------------*/" +puts stdout "static int ${prefix}Halt(void *data){" +stdCast +puts stdout " return 1;" +puts stdout "}" + +puts stdout "/*--------------------------------------------------------------------" +puts stdout " GetDriverPar retrieves the value of a driver parameter." +puts stdout " Name is the name of the parameter, fValue the value when found." +puts stdout " Returns 0 on success, 0 else" +puts stdout "-----------------------------------------------------------------------*/" +puts stdout "static int ${prefix}GetDriverPar(void *data, char *name, float *value){" +stdCast +puts stdout " return 0;" +puts stdout "}" + +puts stdout "/*----------------------------------------------------------------------" +puts stdout " SetDriverPar sets a driver parameter. Returns 0 on failure, 1 on " +puts stdout " success. Name is the parameter name, pCon the connection to report" +puts stdout " errors too, value the new value" +puts stdout "------------------------------------------------------------------------*/" +puts stdout "static int ${prefix}SetDriverPar(void *data, SConnection *pCon," +puts stdout " char *name, float value){" +stdCast +puts stdout " return 0;" +puts stdout "}" + +puts stdout "/*-----------------------------------------------------------------------" +puts stdout " ListDriverPar lists the names and values of driver parameters to " +puts stdout " pCon. Motorname is the name of the motor ro prefix to the listing." +puts stdout "-------------------------------------------------------------------------*/" +puts stdout "static void ${prefix}ListDriverPar(void *data, char *motorname, " +puts stdout " SConnection *pCon){" +stdCast +puts stdout "}" + +puts stdout "/*-----------------------------------------------------------------------" +puts stdout " KillPrivate has the task to delete possibly dynamically allocated " +puts stdout " memory in the private part of the driver structure" +puts stdout "------------------------------------------------------------------------*/" +puts stdout "static void ${prefix}KillPrivate(void *data){" +stdCast +puts stdout "}" + +puts stdout "/*=======================================================================*/" +puts stdout "MotorDriver *${prefix}MakeMotorDriver(void) {" +puts stdout " ${prefix}MotorDriver *pNew = NULL;" +puts stdout "" +puts stdout " pNew = malloc(sizeof(${prefix}MotorDriver));" +puts stdout " if(pNew == NULL){" +puts stdout " return NULL;" +puts stdout " }" +puts stdout " memset(pNew,0,sizeof(${prefix}MotorDriver));" +puts stdout " " +puts stdout " pNew->GetPosition = ${prefix}GetPos;" +puts stdout " pNew->RunTo = ${prefix}RunTo;" +puts stdout " pNew->Halt = ${prefix}Halt;" +puts stdout " pNew->GetStatus = ${prefix}CheckStatus;" +puts stdout " pNew->GetError = ${prefix}GetError;" +puts stdout " pNew->TryAndFixIt = ${prefix}FixIt;" +puts stdout " pNew->GetDriverPar = ${prefix}GetDriverPar;" +puts stdout " pNew->SetDriverPar = ${prefix}SetDriverPar;" +puts stdout " pNew->ListDriverPar = ${prefix}ListDriverPar;" +puts stdout " pNew->KillPrivate = ${prefix}KillPrivate;" +puts stdout " " +puts stdout " return (MotorDriver *)pNew;" +puts stdout "}" +puts stdout ""