ich soll ein Digital Input /Output ein Target Pc mittel das Programm Matlab aubauen,das problem ist dass ich den Code im c++ habe ,und ich soll von c++ code zu c Code umwandeln.kann jemand mir helfen
der code sieht so aus:
Code: Alles auswählen
void ReadValue(WASCO_12_S_Digital_Input* pInstance)
{
char cHelp;
switch(pInstance->PortUsed)
{
case PortAUsed:
cHelp = pInstance->Carrier->PortA_shadow = pInstance->servFunc->pReadPortA(pInstance->Carrier); // read port A
cHelp &= andMask[pInstance->BitInPort]; // separate out selected bit
if (cHelp == andMask[pInstance->BitInPort])
pInstance->Value = 1; // bit in port is used
else
pInstance->Value = 0; // bit in port is not used
break;
case PortBUsed:
cHelp = pInstance->Carrier->PortB_shadow = pInstance->servFunc->pReadPortB(pInstance->Carrier);
cHelp &= andMask[pInstance->BitInPort];
if (cHelp == andMask[pInstance->BitInPort])
pInstance->Value = 1;
else
pInstance->Value = 0;
break;
case PortCLUsed:
cHelp = pInstance->Carrier->PortC_shadow = pInstance->servFunc->pReadPortC(pInstance->Carrier);
cHelp &= andMask[pInstance->BitInPort];
if (cHelp == andMask[pInstance->BitInPort])
pInstance->Value = 1;
else
pInstance->Value = 0;
break;
case PortCHUsed:
cHelp = pInstance->Carrier->PortC_shadow = pInstance->servFunc->pReadPortC(pInstance->Carrier);
cHelp &= andMask[pInstance->BitInPort];
if (cHelp == andMask[pInstance->BitInPort])
pInstance->Value = 1;
else
pInstance->Value = 0;
break;
}
}
unsigned int BitOfPort(WASCO_12_S_Digital_Input* pInstance)
{
unsigned int cHelp;
cHelp = pInstance->Channel;
if (cHelp < 8) // channel belongs to port A
{
pInstance->PortUsed = PortAUsed;
pInstance->BitInPort = cHelp;
#ifdef _debug_print
printf("Port A used\n");
printf("Bit %i used\n", cHelp);
#endif
return 0;
}
else if (cHelp < 16) // channel belongs to port B
{
pInstance->PortUsed = PortBUsed;
cHelp -= 8;
pInstance->BitInPort = cHelp;
#ifdef _debug_print
printf("Port B used\n");
printf("Bit %i used\n", cHelp);
#endif
return 0;
}
else if (cHelp < 20) // channel belongs to port C
{
pInstance->PortUsed = PortCLUsed;
cHelp -= 16;
pInstance->BitInPort = cHelp;
#ifdef _debug_print
printf("Port C LOW used\n");
printf("Bit %i used\n", cHelp);
#endif
return 0;
}
else if (cHelp < 24) // channel belongs to port C
{
pInstance->PortUsed = PortCHUsed;
cHelp -= 16;
pInstance->BitInPort = cHelp;
#ifdef _debug_print
printf("Port C HIGH used\n");
printf("Bit %i used\n", cHelp);
#endif
return 0;
}
else
return OATsError_IOInvalidChannelNo;
}
// initialisation of an instance
// the function will be called several times
// return size of struct WASCO_12_S_Digital_Input or 0 on errors
unsigned int OATSCALLBACK WASCO_12_S_Digital_InputInitInstance(WASCO_12_S_Digital_Input* pInstance)
{
if ( pOATsService->pInitInstanceDefault(&ClassDef, &pInstance->m_Base) == 0 )
return 0;
// add instance specific initialisation
return sizeof(WASCO_12_S_Digital_Input);
}
// destruction of an instance
// the function will be called several times
// return size of struct WASCO_12_S_Digital_Input or 0 on errors
unsigned int OATSCALLBACK WASCO_12_S_Digital_InputKillInstance(WASCO_12_S_Digital_Input* pInstance)
{
// add instance specific cleanup if required
if ( pOATsService->pKillInstanceDefault(&ClassDef, &pInstance->m_Base) == 0 )
return 0;
return sizeof(WASCO_12_S_Digital_Input);
}
// precompute data before all calls of Operate
// this function often calls the Operate function or both are same
// return 0=ok, 1=error
int OATSCALLBACK WASCO_12_S_Digital_InputFirstRun(WASCO_12_S_Digital_Input* pInstance)
{
pInstance->Err = 0;
pInstance->servFunc = pInstance->Carrier->servFunc;
pInstance->Err = BitOfPort(pInstance); // detect bit and port number
if (pInstance->Err)
return 0;
pInstance->Err = pInstance->servFunc->pDefineIOMode(pInstance->Carrier, input_mode, (int)pInstance->PortUsed);
if (pInstance->Err)
return 0;
pInstance->servFunc->pCreateCSR(pInstance->Carrier);
return 0; // OK
}
// steady part of the real time operation
// this function often contains the complete functionality
// return 0=ok, 1=error
int OATSCALLBACK WASCO_12_S_Digital_InputOperate(WASCO_12_S_Digital_Input* pInstance)
{
if (pInstance->Err)
return 0;
ReadValue(pInstance);
return 0; // OK
}