- Adapted indenation to new agreed upon system
- Fixed bad status in poldi zug driver
This commit is contained in:
224
amordrive.c
224
amordrive.c
@ -9,29 +9,33 @@
|
||||
#include "amordrive.h"
|
||||
|
||||
/*---------------------------------------------------------------*/
|
||||
static void *AMODRIVGetInterface(void *data, int iD){
|
||||
pamorDrive self = NULL;
|
||||
static void *AMODRIVGetInterface(void *data, int iD)
|
||||
{
|
||||
pamorDrive self = NULL;
|
||||
|
||||
self = (pamorDrive)data;
|
||||
|
||||
if(iD == DRIVEID && self != NULL){
|
||||
return self->pDriv;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
return NULL;
|
||||
self = (pamorDrive) data;
|
||||
|
||||
if (iD == DRIVEID && self != NULL) {
|
||||
return self->pDriv;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------
|
||||
This routine can return either OKOK or HWFault when thing
|
||||
go wrong. However, the return value of Halt is usually ignored!
|
||||
------------------------------------------------------------------*/
|
||||
static int AMODRIVHalt(void *data) {
|
||||
pamorDrive self = NULL;
|
||||
|
||||
self = (pamorDrive)data;
|
||||
static int AMODRIVHalt(void *data)
|
||||
{
|
||||
pamorDrive self = NULL;
|
||||
|
||||
return self->mama->pDriv->Halt(self->mama);
|
||||
self = (pamorDrive) data;
|
||||
|
||||
return self->mama->pDriv->Halt(self->mama);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------
|
||||
This routine can return either 1 or 0. 1 means the position can
|
||||
be reached, 0 NOT
|
||||
@ -40,13 +44,15 @@ static int AMODRIVHalt(void *data) {
|
||||
Due to the complex nauture of the calculation: no check here
|
||||
------------------------------------------------------------------*/
|
||||
static int AMODRIVCheckLimits(void *data, float val,
|
||||
char *error, int errlen){
|
||||
pamorDrive self = NULL;
|
||||
|
||||
self = (pamorDrive)data;
|
||||
char *error, int errlen)
|
||||
{
|
||||
pamorDrive self = NULL;
|
||||
|
||||
return 1;
|
||||
self = (pamorDrive) data;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------
|
||||
This routine can return 0 when a limit problem occurred
|
||||
OKOK when the motor was successfully started
|
||||
@ -56,15 +62,17 @@ static int AMODRIVCheckLimits(void *data, float val,
|
||||
to start the motor in question
|
||||
val is the value to drive the motor too
|
||||
------------------------------------------------------------------*/
|
||||
static long AMODRIVSetValue(void *data, SConnection *pCon, float val){
|
||||
pamorDrive self = NULL;
|
||||
|
||||
self = (pamorDrive)data;
|
||||
static long AMODRIVSetValue(void *data, SConnection * pCon, float val)
|
||||
{
|
||||
pamorDrive self = NULL;
|
||||
|
||||
amorSetMotor(self->mama, self->type, val);
|
||||
self = (pamorDrive) data;
|
||||
|
||||
return 1;
|
||||
amorSetMotor(self->mama, self->type, val);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------
|
||||
Checks the status of a running motor. Possible return values
|
||||
HWBusy The motor is still running
|
||||
@ -75,96 +83,106 @@ static long AMODRIVSetValue(void *data, SConnection *pCon, float val){
|
||||
For real motors CheckStatus again shall try hard to fix any
|
||||
issues with the motor
|
||||
------------------------------------------------------------------*/
|
||||
static int AMODRIVCheckStatus(void *data, SConnection *pCon){
|
||||
pamorDrive self = NULL;
|
||||
|
||||
self = (pamorDrive)data;
|
||||
static int AMODRIVCheckStatus(void *data, SConnection * pCon)
|
||||
{
|
||||
pamorDrive self = NULL;
|
||||
|
||||
return self->mama->pDriv->CheckStatus(self->mama, pCon);
|
||||
self = (pamorDrive) data;
|
||||
|
||||
return self->mama->pDriv->CheckStatus(self->mama, pCon);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------
|
||||
GetValue is supposed to read a motor position
|
||||
On errors, -99999999.99 is returned and messages printed to pCon
|
||||
------------------------------------------------------------------*/
|
||||
static float AMODRIVGetValue(void *data, SConnection *pCon){
|
||||
pamorDrive self = NULL;
|
||||
float val = -99999999.99;
|
||||
|
||||
self = (pamorDrive)data;
|
||||
return amorGetMotor(self->mama,pCon,self->type);
|
||||
static float AMODRIVGetValue(void *data, SConnection * pCon)
|
||||
{
|
||||
pamorDrive self = NULL;
|
||||
float val = -99999999.99;
|
||||
|
||||
self = (pamorDrive) data;
|
||||
return amorGetMotor(self->mama, pCon, self->type);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------
|
||||
returns NULL on failure, a new datastrcuture else
|
||||
------------------------------------------------------------------*/
|
||||
static pamorDrive AMODRIVMakeObject(){
|
||||
pamorDrive self = NULL;
|
||||
static pamorDrive AMODRIVMakeObject()
|
||||
{
|
||||
pamorDrive self = NULL;
|
||||
|
||||
self = (pamorDrive)malloc(sizeof(amorDrive));
|
||||
if(self == NULL){
|
||||
return NULL;
|
||||
}
|
||||
memset(self,0,sizeof(amorDrive));
|
||||
self->pDes = CreateDescriptor("AmorDrive");
|
||||
self->pDriv = CreateDrivableInterface();
|
||||
if(self->pDes == NULL || self->pDriv == NULL){
|
||||
free(self);
|
||||
return NULL;
|
||||
}
|
||||
self = (pamorDrive) malloc(sizeof(amorDrive));
|
||||
if (self == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
memset(self, 0, sizeof(amorDrive));
|
||||
self->pDes = CreateDescriptor("AmorDrive");
|
||||
self->pDriv = CreateDrivableInterface();
|
||||
if (self->pDes == NULL || self->pDriv == NULL) {
|
||||
free(self);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
self->pDes->GetInterface = AMODRIVGetInterface;
|
||||
self->pDriv->Halt = AMODRIVHalt;
|
||||
self->pDriv->CheckLimits = AMODRIVCheckLimits;
|
||||
self->pDriv->SetValue = AMODRIVSetValue;
|
||||
self->pDriv->CheckStatus = AMODRIVCheckStatus;
|
||||
self->pDriv->GetValue = AMODRIVGetValue;
|
||||
self->pDes->GetInterface = AMODRIVGetInterface;
|
||||
self->pDriv->Halt = AMODRIVHalt;
|
||||
self->pDriv->CheckLimits = AMODRIVCheckLimits;
|
||||
self->pDriv->SetValue = AMODRIVSetValue;
|
||||
self->pDriv->CheckStatus = AMODRIVCheckStatus;
|
||||
self->pDriv->GetValue = AMODRIVGetValue;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------*/
|
||||
void killAmorDrive(void *data)
|
||||
{
|
||||
pamorDrive self = NULL;
|
||||
|
||||
self = (pamorDrive) data;
|
||||
if (self == NULL) {
|
||||
return;
|
||||
}
|
||||
if (self->pDes != NULL) {
|
||||
DeleteDescriptor(self->pDes);
|
||||
}
|
||||
if (self->pDriv != NULL) {
|
||||
free(self->pDriv);
|
||||
}
|
||||
free(self);
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------*/
|
||||
pamorDrive makeAmorDrive(pamorSet papa, int type)
|
||||
{
|
||||
pamorDrive self = NULL;
|
||||
|
||||
self = AMODRIVMakeObject();
|
||||
if (self == NULL) {
|
||||
return self;
|
||||
}
|
||||
/*-----------------------------------------------------------------*/
|
||||
void killAmorDrive(void *data){
|
||||
pamorDrive self = NULL;
|
||||
|
||||
self = (pamorDrive)data;
|
||||
if(self == NULL){
|
||||
return;
|
||||
}
|
||||
if(self->pDes != NULL){
|
||||
DeleteDescriptor(self->pDes);
|
||||
}
|
||||
if(self->pDriv != NULL){
|
||||
free(self->pDriv);
|
||||
}
|
||||
free(self);
|
||||
}
|
||||
/*-----------------------------------------------------------------*/
|
||||
pamorDrive makeAmorDrive(pamorSet papa, int type){
|
||||
pamorDrive self = NULL;
|
||||
|
||||
self = AMODRIVMakeObject();
|
||||
if(self == NULL){
|
||||
return self;
|
||||
}
|
||||
self->mama = papa;
|
||||
self->type = type;
|
||||
return self;
|
||||
}
|
||||
/*----------------------------------------------------------------*/
|
||||
int AmorDriveAction(SConnection *pCon, SicsInterp *pSics, void *pData,
|
||||
int argc, char *argv[]){
|
||||
pamorDrive self = NULL;
|
||||
float val;
|
||||
char pBueffel[132];
|
||||
|
||||
self = (pamorDrive)pData;
|
||||
assert(self);
|
||||
val = amorGetMotor(self->mama, pCon,self->type);
|
||||
if(val > -999999) {
|
||||
snprintf(pBueffel,131, " %s = %f", argv[0], val);
|
||||
SCWrite(pCon,pBueffel,eValue);
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
self->mama = papa;
|
||||
self->type = type;
|
||||
return self;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------*/
|
||||
int AmorDriveAction(SConnection * pCon, SicsInterp * pSics, void *pData,
|
||||
int argc, char *argv[])
|
||||
{
|
||||
pamorDrive self = NULL;
|
||||
float val;
|
||||
char pBueffel[132];
|
||||
|
||||
self = (pamorDrive) pData;
|
||||
assert(self);
|
||||
val = amorGetMotor(self->mama, pCon, self->type);
|
||||
if (val > -999999) {
|
||||
snprintf(pBueffel, 131, " %s = %f", argv[0], val);
|
||||
SCWrite(pCon, pBueffel, eValue);
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user