Files
sics/motreglist.c
koennecke 51a60375d6 - Removed -fwritable-string
SKIPPED:
	psi/dornier2.c
	psi/ecbdriv.c
	psi/el734hp.c
	psi/libpsi.a
	psi/make_gen
	psi/makefile_linux
	psi/pimotor.c
	psi/pipiezo.c
	psi/sinqhttp.c
	psi/tcpdornier.c
	psi/velodornier.c
2006-03-31 15:24:52 +00:00

123 lines
3.0 KiB
C

/*-----------------------------------------------------------------------
A couple of utility functions for handling a list of MotReg
structures . This is a helper module for the anticollider collision
control system. See anticollider.tex for more details.
copyright: see file copyright
Mark Koennecke, August 2002
-------------------------------------------------------------------------*/
#include <stdlib.h>
#include <assert.h>
#include "fortify.h"
#include "lld.h"
#include "motreglist.h"
/*-----------------------------------------------------------------------*/
int MakeMotList(){
return LLDcreate(sizeof(pMotReg));
}
/*----------------------------------------------------------------------*/
pMotReg FindMotEntry(int iList, char *name){
int iRet;
pMotReg pMot = NULL;
iRet = LLDnodePtr2First(iList);
while(iRet != 0){
LLDnodeDataTo(iList,&pMot);
if(pMot != NULL){
if(RegMotMatch(pMot,name)){
return pMot;
}
}
iRet = LLDnodePtr2Next(iList);
}
return NULL;
}
/*-----------------------------------------------------------------------*/
pMotReg FindMotFromDataStructure(int iList, void *pData){
int iRet;
pMotReg pMot = NULL;
iRet = LLDnodePtr2First(iList);
while(iRet != 0){
LLDnodeDataTo(iList,&pMot);
if(pMot != NULL){
if(pMot->motorData == pData){
return pMot;
}
}
iRet = LLDnodePtr2Next(iList);
}
return NULL;
}
/*----------------------------------------------------------------------*/
int CheckAllMotors(int iList, SConnection *pCon){
int iRet, count = 0;
pMotReg pMot = NULL;
iRet = LLDnodePtr2First(iList);
while(iRet != 0){
LLDnodeDataTo(iList,&pMot);
if(pMot != NULL){
CheckRegMot(pMot,pCon);
if(pMot->iActive){
count++;
}
}
iRet = LLDnodePtr2Next(iList);
}
return count;
}
/*----------------------------------------------------------------------*/
void StopAllMotors(int iList){
int iRet, count = 0;
pMotReg pMot = NULL;
pIDrivable pDriv;
iRet = LLDnodePtr2First(iList);
while(iRet != 0){
LLDnodeDataTo(iList,&pMot);
if(pMot != NULL){
if(pMot->iActive){
pDriv = (pIDrivable)GetDrivableInterface(pMot->motorData);
if(pDriv){
pDriv->Halt(pMot->motorData);
}
pMot->iActive = 0;
}
}
iRet = LLDnodePtr2Next(iList);
}
}
/*----------------------------------------------------------------------*/
void DeactivateAllMotors(int iList){
int iRet, count = 0;
pMotReg pMot = NULL;
pIDrivable pDriv;
iRet = LLDnodePtr2First(iList);
while(iRet != 0){
LLDnodeDataTo(iList,&pMot);
if(pMot != NULL){
pMot->iActive = 0;
}
iRet = LLDnodePtr2Next(iList);
}
}
/*----------------------------------------------------------------------*/
void KillMotList(int iList){
int iRet;
pMotReg pMot = NULL;
iRet = LLDnodePtr2First(iList);
while(iRet != 0){
LLDnodeDataTo(iList,&pMot);
if(pMot != NULL){
KillRegMot(pMot);
}
iRet = LLDnodePtr2Next(iList);
}
LLDdelete(iList);
}