- Made the HRPT temperature log lmd200 work
- Added a special el734hp which scales with 1000 for SANSLI - Added another error to the magnet driver: magnet broken
This commit is contained in:
@ -141,6 +141,7 @@ static int takeControl(pDornier pDorn){
|
|||||||
}
|
}
|
||||||
pDorn->lastStatus = DStatus;
|
pDorn->lastStatus = DStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
*fPos = pDorn->lastStatus.cur_rpm;
|
*fPos = pDorn->lastStatus.cur_rpm;
|
||||||
pDorn->fLastRPM = pDorn->lastStatus.cur_rpm;
|
pDorn->fLastRPM = pDorn->lastStatus.cur_rpm;
|
||||||
return 1;
|
return 1;
|
||||||
|
25
el734hp.c
25
el734hp.c
@ -675,6 +675,31 @@ MotorDriver *CreateEL734HP(SConnection *pCon, int argc, char *argv[]){
|
|||||||
SCWrite(pCon,pError,eError);
|
SCWrite(pCon,pError,eError);
|
||||||
return (MotorDriver *)pNew;
|
return (MotorDriver *)pNew;
|
||||||
}
|
}
|
||||||
|
/*================ a 1000 scaled motor for SANSLI =================*/
|
||||||
|
static int EL734TRun(void *pData,float fValue){
|
||||||
|
return EL734Run(pData, fValue*1000);
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------------*/
|
||||||
|
static int EL734TGetPos(void *pData, float *fPos){
|
||||||
|
int status;
|
||||||
|
status = EL734GetPos(pData, fPos);
|
||||||
|
*fPos /= 1000;
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
/*-------------------------------------------------------------------*/
|
||||||
|
MotorDriver *CreateEL734HPT(SConnection *pCon, int argc,
|
||||||
|
char *argv[]){
|
||||||
|
MotorDriver *pDriv = NULL;
|
||||||
|
pDriv = CreateEL734HP(pCon,argc,argv);
|
||||||
|
if(pDriv != NULL){
|
||||||
|
pDriv->GetPosition = EL734TGetPos;
|
||||||
|
pDriv->RunTo = EL734TRun;
|
||||||
|
pDriv->fLower /= 1000.;
|
||||||
|
pDriv->fUpper /= 1000.;
|
||||||
|
}
|
||||||
|
return pDriv;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
25
el755driv.c
25
el755driv.c
@ -23,6 +23,9 @@
|
|||||||
#include "hardsup/el755_errcodes.h"
|
#include "hardsup/el755_errcodes.h"
|
||||||
#include "hardsup/sinq_prototypes.h"
|
#include "hardsup/sinq_prototypes.h"
|
||||||
|
|
||||||
|
#define CAPSIZED -8090
|
||||||
|
|
||||||
|
#define ABS(x) (x < 0 ? -(x) : (x))
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
void *pData;
|
void *pData;
|
||||||
@ -31,6 +34,7 @@
|
|||||||
int iChannel;
|
int iChannel;
|
||||||
int iIndex;
|
int iIndex;
|
||||||
int iLastError;
|
int iLastError;
|
||||||
|
int iCapCount;
|
||||||
} EL755Driv, *pEL755Driv;
|
} EL755Driv, *pEL755Driv;
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
@ -49,6 +53,22 @@
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* This here is a check for the condition when the current breaks down.
|
||||||
|
* This situation is characterized by the fSoll being something and the
|
||||||
|
* fPos being 0.
|
||||||
|
*/
|
||||||
|
if(ABS(*fPos) < .1 && ABS(fSoll) > .1 ){
|
||||||
|
pMe->iCapCount++;
|
||||||
|
if(pMe->iCapCount > 3){
|
||||||
|
pMe->iLastError = CAPSIZED;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pMe->iCapCount = 0;
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
@ -62,6 +82,7 @@
|
|||||||
assert(pMe);
|
assert(pMe);
|
||||||
|
|
||||||
iRet = EL755_SetCurrent(&(pMe->pData),fVal);
|
iRet = EL755_SetCurrent(&(pMe->pData),fVal);
|
||||||
|
pMe->iCapCount = 0;
|
||||||
if(iRet != 1)
|
if(iRet != 1)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
@ -84,6 +105,9 @@
|
|||||||
EL755_ErrInfo(&pPtr,iCode,&i1,&i2);
|
EL755_ErrInfo(&pPtr,iCode,&i1,&i2);
|
||||||
switch(*iCode)
|
switch(*iCode)
|
||||||
{
|
{
|
||||||
|
case CAPSIZED:
|
||||||
|
strncpy(error,"Powersupply has capsized, try lower current", iErrLen);
|
||||||
|
break;
|
||||||
case EL755__TURNED_OFF:
|
case EL755__TURNED_OFF:
|
||||||
strncpy(error,"EL755__TURNED_OF",iErrLen);
|
strncpy(error,"EL755__TURNED_OF",iErrLen);
|
||||||
break;
|
break;
|
||||||
@ -215,6 +239,7 @@
|
|||||||
|
|
||||||
switch(iError)
|
switch(iError)
|
||||||
{
|
{
|
||||||
|
case CAPSIZED:
|
||||||
case EL755__TURNED_OFF:
|
case EL755__TURNED_OFF:
|
||||||
case EL755__TOO_MANY:
|
case EL755__TOO_MANY:
|
||||||
case EL755__TOO_LARGE:
|
case EL755__TOO_LARGE:
|
||||||
|
96
lmd200.c
96
lmd200.c
@ -54,15 +54,21 @@
|
|||||||
}
|
}
|
||||||
free(priv);
|
free(priv);
|
||||||
}
|
}
|
||||||
/*--------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
static void doAlarm(pSICSOBJ self, char *lineBuffer){
|
static void setAlarm(pSICSOBJ self, char *text){
|
||||||
hdbValue alarmVal;
|
hdbValue alarmVal;
|
||||||
pHdb node = NULL;
|
pHdb node = NULL;
|
||||||
|
|
||||||
alarmVal = MakeHdbText(lineBuffer);
|
alarmVal = MakeHdbText(text);
|
||||||
node = GetHipadabaNode(self->objectNode,"alarm");
|
node = GetHipadabaNode(self->objectNode,"alarm");
|
||||||
assert(node != NULL);
|
assert(node != NULL);
|
||||||
UpdateHipadabaPar(node,alarmVal, NULL);
|
UpdateHipadabaPar(node,alarmVal, NULL);
|
||||||
|
ReleaseHdbValue(&alarmVal);
|
||||||
|
}
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
static void doAlarm(pSICSOBJ self, char *lineBuffer){
|
||||||
|
|
||||||
|
setAlarm(self,lineBuffer);
|
||||||
WriteToCommandLog("CERCA>> ", lineBuffer);
|
WriteToCommandLog("CERCA>> ", lineBuffer);
|
||||||
ServerWriteGlobal(lineBuffer,eError);
|
ServerWriteGlobal(lineBuffer,eError);
|
||||||
}
|
}
|
||||||
@ -79,6 +85,7 @@ static void storeData(pSICSOBJ self, int start, char *lineBuffer){
|
|||||||
* throw first away
|
* throw first away
|
||||||
*/
|
*/
|
||||||
pPtr = stptok(lineBuffer,number,80," ");
|
pPtr = stptok(lineBuffer,number,80," ");
|
||||||
|
pPtr = trim(pPtr);
|
||||||
pPtr = stptok(pPtr,number,80," ");
|
pPtr = stptok(pPtr,number,80," ");
|
||||||
while(pPtr != NULL){
|
while(pPtr != NULL){
|
||||||
if(strstr(number,"noinp") != NULL){
|
if(strstr(number,"noinp") != NULL){
|
||||||
@ -89,46 +96,76 @@ static void storeData(pSICSOBJ self, int start, char *lineBuffer){
|
|||||||
if(pKomma != NULL){
|
if(pKomma != NULL){
|
||||||
*pKomma = '.';
|
*pKomma = '.';
|
||||||
}
|
}
|
||||||
|
pKomma = strchr(number,'(');
|
||||||
|
if(pKomma != NULL){
|
||||||
|
*pKomma = ' ';
|
||||||
|
}
|
||||||
|
pKomma = strchr(number,')');
|
||||||
|
if(pKomma != NULL){
|
||||||
|
*pKomma = ' ';
|
||||||
|
}
|
||||||
node->value.v.floatArray[start] = atof(trim(number));
|
node->value.v.floatArray[start] = atof(trim(number));
|
||||||
start++;
|
start++;
|
||||||
}
|
}
|
||||||
|
pPtr = trim(pPtr);
|
||||||
pPtr = stptok(pPtr,number,80," ");
|
pPtr = stptok(pPtr,number,80," ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
static int countTokens(char *lineBuffer){
|
static int countTokens(char *lineBuffer){
|
||||||
int count = 0;
|
int count = 0;
|
||||||
char myBuffer[BUFLEN];
|
char myBuffer[BUFLEN], token[60];
|
||||||
char *pPtr = NULL;
|
char *pPtr = NULL;
|
||||||
|
|
||||||
|
|
||||||
memset(myBuffer,0,BUFLEN);
|
memset(myBuffer,0,BUFLEN);
|
||||||
strcpy(myBuffer, lineBuffer);
|
strcpy(myBuffer, lineBuffer);
|
||||||
pPtr = myBuffer;
|
pPtr = myBuffer;
|
||||||
|
pPtr = stptok(pPtr,token, 60," \r\n");
|
||||||
while(pPtr != NULL){
|
while(pPtr != NULL){
|
||||||
count++;
|
count++;
|
||||||
pPtr = strtok(pPtr," ");
|
pPtr = trim(pPtr);
|
||||||
|
pPtr = stptok(pPtr,token,60," \r\n");
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
static void interpretLine(pSICSOBJ self, pLMD200 priv){
|
static void interpretLine(pSICSOBJ self, pLMD200 priv){
|
||||||
|
pHdb node = NULL;
|
||||||
|
|
||||||
switch(priv->state){
|
switch(priv->state){
|
||||||
case IDLE:
|
case IDLE:
|
||||||
if(countTokens(priv->lineBuffer) == 2){
|
if(strstr(priv->lineBuffer, "Alarm") != NULL){
|
||||||
priv->state = WAITDATA1;
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
doAlarm(self, priv->lineBuffer);
|
doAlarm(self, priv->lineBuffer);
|
||||||
return;
|
return;
|
||||||
|
} else if(strstr(priv->lineBuffer,"Pre") != NULL){
|
||||||
|
setAlarm(self,priv->lineBuffer);
|
||||||
|
} else {
|
||||||
|
priv->state = WAITDATA1;
|
||||||
|
setAlarm(self,"I do not feel very alarmed");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WAITDATA1:
|
case WAITDATA1:
|
||||||
|
if(strstr(priv->lineBuffer,"...0") == NULL){
|
||||||
|
/* this data is out of order, recover...*/
|
||||||
|
priv->state == IDLE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
storeData(self, 0, priv->lineBuffer);
|
storeData(self, 0, priv->lineBuffer);
|
||||||
priv->state = WAITDATA2;
|
priv->state = WAITDATA2;
|
||||||
break;
|
break;
|
||||||
case WAITDATA2:
|
case WAITDATA2:
|
||||||
|
if(strstr(priv->lineBuffer,"...0") == NULL){
|
||||||
|
/* this data is out of order, recover...*/
|
||||||
|
priv->state == IDLE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
storeData(self, 8, priv->lineBuffer);
|
storeData(self, 8, priv->lineBuffer);
|
||||||
priv->state = IDLE;
|
priv->state = IDLE;
|
||||||
|
node = GetHipadabaNode(self->objectNode,"data");
|
||||||
|
assert(node != NULL);
|
||||||
|
NotifyHipadabaPar(node,NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -139,23 +176,22 @@ static void interpretLine(pSICSOBJ self, pLMD200 priv){
|
|||||||
static int LMD200Callback(void *context, int mode){
|
static int LMD200Callback(void *context, int mode){
|
||||||
pSICSOBJ self = (pSICSOBJ)context;
|
pSICSOBJ self = (pSICSOBJ)context;
|
||||||
pLMD200 priv = NULL;
|
pLMD200 priv = NULL;
|
||||||
char buffer[512], *pPtr = NULL;
|
char buffer[512], *pPtr = NULL, line[132];
|
||||||
|
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
priv = (pLMD200)self->pPrivate;
|
priv = (pLMD200)self->pPrivate;
|
||||||
if(mode == nwatch_read){
|
if(mode == nwatch_read){
|
||||||
memset(buffer,0,512);
|
memset(buffer,0,512);
|
||||||
|
memset(line,0,132);
|
||||||
NETRead(priv->pSock, buffer, 512, 0);
|
NETRead(priv->pSock, buffer, 512, 0);
|
||||||
pPtr = strchr(buffer,'\n');
|
pPtr = stptok(buffer,line,132,"\r");
|
||||||
if(pPtr != NULL){
|
while(pPtr != NULL){
|
||||||
*pPtr = '\0';
|
if(strlen(line) > 3){
|
||||||
strncat(priv->lineBuffer,buffer,BUFLEN);
|
strncpy(priv->lineBuffer,line,BUFLEN);
|
||||||
interpretLine(self, priv);
|
interpretLine(self, priv);
|
||||||
priv->lineBuffer[0] = '\0';
|
priv->lineBuffer[0] = '\0';
|
||||||
pPtr++;
|
}
|
||||||
strncpy(priv->lineBuffer,pPtr,BUFLEN);
|
pPtr = stptok(pPtr,line,132,"\r");
|
||||||
} else {
|
|
||||||
strncat(priv->lineBuffer,buffer,BUFLEN);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
@ -166,17 +202,18 @@ int MakeLMD200(SConnection *pCon, SicsInterp *pSics, void *pData,
|
|||||||
pSICSOBJ self = NULL;
|
pSICSOBJ self = NULL;
|
||||||
pLMD200 priv = NULL;
|
pLMD200 priv = NULL;
|
||||||
hdbValue dataValue, textValue;
|
hdbValue dataValue, textValue;
|
||||||
|
int status;
|
||||||
|
|
||||||
if(argc < 5){
|
if(argc < 4){
|
||||||
SCWrite(pCon,
|
SCWrite(pCon,
|
||||||
"ERROR: require name class host and port parameter for initialization",
|
"ERROR: require name host and port parameters for initialization",
|
||||||
eError);
|
eError);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
priv = (pLMD200)malloc(sizeof(LMD200));
|
priv = (pLMD200)malloc(sizeof(LMD200));
|
||||||
memset(priv,0,sizeof(LMD200));
|
memset(priv,0,sizeof(LMD200));
|
||||||
strncpy(priv->host,argv[3], 256);
|
strncpy(priv->host,argv[2], 256);
|
||||||
priv->port = atoi(argv[4]);
|
priv->port = atoi(argv[3]);
|
||||||
priv->pSock = NETConnect(priv->host,priv->port);
|
priv->pSock = NETConnect(priv->host,priv->port);
|
||||||
if(priv->pSock == NULL){
|
if(priv->pSock == NULL){
|
||||||
SCWrite(pCon,"ERROR: failed to connect to LMD200",eError);
|
SCWrite(pCon,"ERROR: failed to connect to LMD200",eError);
|
||||||
@ -184,7 +221,7 @@ int MakeLMD200(SConnection *pCon, SicsInterp *pSics, void *pData,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
self = SetupSICSOBJ(pCon,pSics, pData,argc, argv);
|
self = MakeSICSOBJv(argv[1],"LMD400",HIPNONE, 0);
|
||||||
if(self == NULL || priv == NULL){
|
if(self == NULL || priv == NULL){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -198,5 +235,18 @@ int MakeLMD200(SConnection *pCon, SicsInterp *pSics, void *pData,
|
|||||||
ReleaseHdbValue(&textValue);
|
ReleaseHdbValue(&textValue);
|
||||||
NetWatchRegisterCallback(&priv->watchContext, priv->pSock->sockid,
|
NetWatchRegisterCallback(&priv->watchContext, priv->pSock->sockid,
|
||||||
LMD200Callback, self);
|
LMD200Callback, self);
|
||||||
|
|
||||||
|
status = AddCommand(pSics,
|
||||||
|
argv[1],
|
||||||
|
InterInvokeSICSOBJ,
|
||||||
|
KillSICSOBJ,
|
||||||
|
self);
|
||||||
|
if(status != 1){
|
||||||
|
KillSICSOBJ(self);
|
||||||
|
SCPrintf(pCon,eError,"ERROR: failed create duplicate command %s", argv[1]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
2
make_gen
2
make_gen
@ -22,7 +22,7 @@ OBJ=psi.o buffer.o ruli.o dmc.o nxsans.o nextrics.o sps.o pimotor.o \
|
|||||||
$(MZOBJ) amordrive.o amorset.o tcpdornier.o sinqhttp.o\
|
$(MZOBJ) amordrive.o amorset.o tcpdornier.o sinqhttp.o\
|
||||||
dgrambroadcast.o sinq.o tabledrive.o tcpdocho.o julcho.o \
|
dgrambroadcast.o sinq.o tabledrive.o tcpdocho.o julcho.o \
|
||||||
ritastorage.o poldizug.o audinelib.o delcam.o el737hpdrivsps.o \
|
ritastorage.o poldizug.o audinelib.o delcam.o el737hpdrivsps.o \
|
||||||
rebin.o sanslirebin.o lmd200.o
|
rebin.o sanslirebin.o lmd200.o slsvme.o
|
||||||
|
|
||||||
.SECONDARY.: sanslirebin.c
|
.SECONDARY.: sanslirebin.c
|
||||||
|
|
||||||
|
21
psi.c
21
psi.c
@ -174,6 +174,7 @@ static void RemovePsiCommands(SicsInterp *pSics){
|
|||||||
MotorDriver *CreateEL734(SConnection *pCon, int argc, char *argv[]);
|
MotorDriver *CreateEL734(SConnection *pCon, int argc, char *argv[]);
|
||||||
MotorDriver *CreateEL734DC(SConnection *pCon, int argc, char *argv[]);
|
MotorDriver *CreateEL734DC(SConnection *pCon, int argc, char *argv[]);
|
||||||
MotorDriver *CreateEL734HP(SConnection *pCon, int argc, char *argv[]);
|
MotorDriver *CreateEL734HP(SConnection *pCon, int argc, char *argv[]);
|
||||||
|
MotorDriver *CreateEL734HPT(SConnection *pCon, int argc, char *argv[]);
|
||||||
MotorDriver *MakePiPiezo(Tcl_Interp *pTcl,char *pArray);
|
MotorDriver *MakePiPiezo(Tcl_Interp *pTcl,char *pArray);
|
||||||
/*-------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------*/
|
||||||
static pMotor CreatePsiMotor(SConnection *pCon, int argc, char *argv[]){
|
static pMotor CreatePsiMotor(SConnection *pCon, int argc, char *argv[]){
|
||||||
@ -220,6 +221,18 @@ static pMotor CreatePsiMotor(SConnection *pCon, int argc, char *argv[]){
|
|||||||
SCWrite(pCon,pBueffel,eError);
|
SCWrite(pCon,pBueffel,eError);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
} else if(strcmp(argv[1],"el734hpt") == 0){
|
||||||
|
pDriver = (MotorDriver *)CreateEL734HPT(pCon,argc-2,&argv[2]);
|
||||||
|
if(!pDriver){
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
/* create the motor */
|
||||||
|
pNew = MotorInit("EL734HPT",argv[0],pDriver);
|
||||||
|
if(!pNew){
|
||||||
|
sprintf(pBueffel,"Failure to create motor %s",argv[1]);
|
||||||
|
SCWrite(pCon,pBueffel,eError);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
} else if(strcmp(argv[1],"el734dc") == 0){
|
} else if(strcmp(argv[1],"el734dc") == 0){
|
||||||
pDriver = (MotorDriver *)CreateEL734DC(pCon,argc-2,&argv[2]);
|
pDriver = (MotorDriver *)CreateEL734DC(pCon,argc-2,&argv[2]);
|
||||||
if(!pDriver){
|
if(!pDriver){
|
||||||
@ -417,7 +430,7 @@ static void ConfigureController(char *name, pEVControl pNew,
|
|||||||
}
|
}
|
||||||
/*-------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------*/
|
||||||
extern pEVDriver CreateSLSDriv(int argc, char *argv[]);
|
extern pEVDriver CreateSLSDriv(int argc, char *argv[]);
|
||||||
|
extern pEVDriver CreateSLSVMEDriv(int argc, char *argv[]);
|
||||||
/*------------------------------------------------------------------*/
|
/*------------------------------------------------------------------*/
|
||||||
|
|
||||||
static pEVControl InstallPsiEnvironmentController(SicsInterp *pSics,
|
static pEVControl InstallPsiEnvironmentController(SicsInterp *pSics,
|
||||||
@ -506,6 +519,12 @@ static pEVControl InstallPsiEnvironmentController(SicsInterp *pSics,
|
|||||||
if(pDriv != NULL){
|
if(pDriv != NULL){
|
||||||
pNew = CreateEVController(pDriv,argv[2],&status);
|
pNew = CreateEVController(pDriv,argv[2],&status);
|
||||||
}
|
}
|
||||||
|
} else if(strcmp(argv[3],"vme-dsp") == 0) {
|
||||||
|
checkError = 1;
|
||||||
|
pDriv = CreateSLSVMEDriv(argc-4,&argv[4]);
|
||||||
|
if(pDriv != NULL){
|
||||||
|
pNew = CreateEVController(pDriv,argv[2],&status);
|
||||||
|
}
|
||||||
} else if(strcmp(argv[3],"el755") == 0){
|
} else if(strcmp(argv[3],"el755") == 0){
|
||||||
checkError = 1;
|
checkError = 1;
|
||||||
pDriv = CreateEL755Driv(argc-4,&argv[4]);
|
pDriv = CreateEL755Driv(argc-4,&argv[4]);
|
||||||
|
Reference in New Issue
Block a user