- Added motor driver skeleton creator

This commit is contained in:
koennecke
2006-08-16 14:16:58 +00:00
parent 5595427308
commit a7b4b4069d

177
tcl/makemodrivskel Executable file
View File

@ -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 <stdlib.h>"
puts stdout "#include <sics.h>"
puts stdout "#include <modriv.h>"
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 ""