- Added motor driver skeleton creator
This commit is contained in:
177
tcl/makemodrivskel
Executable file
177
tcl/makemodrivskel
Executable 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 ""
|
Reference in New Issue
Block a user