// LEDCOMMatlab.cpp : Implementierung von CLEDCOMMatlab #include "stdafx.h" #include "LEDCOMMatlab.h" // CLEDCOMMatlab STDMETHODIMP CLEDCOMMatlab::OpenDevice(/*[out]*/VARIANT *result) { SAFEARRAYBOUND rgb[]={1,0}; result->vt = VT_ARRAY | VT_R8; result->parray = SafeArrayCreate(VT_R8,1,rgb); double *rgelems; SafeArrayAccessData(result->parray,(void**)&rgelems); pLED = new CLED(); *rgelems = pLED->OpenDevice(); SafeArrayUnaccessData(result->parray); return S_OK; } STDMETHODIMP CLEDCOMMatlab::CloseDevice(/*[out]*/VARIANT *result) { SAFEARRAYBOUND rgb[]={1,0}; result->vt = VT_ARRAY | VT_R8; result->parray = SafeArrayCreate(VT_R8,1,rgb); double *rgelems; SafeArrayAccessData(result->parray,(void**)&rgelems); *rgelems = pLED->CloseDevice(); SafeArrayUnaccessData(result->parray); return S_OK; } STDMETHODIMP CLEDCOMMatlab::StartMeasure(/*[out]*/VARIANT *result) { SAFEARRAYBOUND rgb[]={1,0}; result->vt = VT_ARRAY | VT_R8; result->parray = SafeArrayCreate(VT_R8,1,rgb); double *rgelems; SafeArrayAccessData(result->parray,(void**)&rgelems); *rgelems = pLED->StartMeasure(); SafeArrayUnaccessData(result->parray); return S_OK; } STDMETHODIMP CLEDCOMMatlab::StopMeasure(/*[out]*/VARIANT *result) { SAFEARRAYBOUND rgb[]={1,0}; result->vt = VT_ARRAY | VT_R8; result->parray = SafeArrayCreate(VT_R8,1,rgb); double *rgelems; SafeArrayAccessData(result->parray,(void**)&rgelems); *rgelems = pLED->StopMeasure(); SafeArrayUnaccessData(result->parray); return S_OK; } STDMETHODIMP CLEDCOMMatlab::ReadData(/*[out]*/VARIANT *buf1,/*[out]*/VARIANT *buf2,/*[out]*/VARIANT *result) { unsigned short v1[80]; unsigned short v2[80]; SAFEARRAYBOUND rgbResult[]={1,0}; result->vt = VT_ARRAY | VT_R8; result->parray = SafeArrayCreate(VT_R8,1,rgbResult); SAFEARRAYBOUND rgbBuf1[]={80,0}; buf1->vt = VT_ARRAY | VT_R8; buf1->parray = SafeArrayCreate(VT_R8,1,rgbBuf1); SAFEARRAYBOUND rgbBuf2[]={80,0}; buf2->vt = VT_ARRAY | VT_R8; buf2->parray = SafeArrayCreate(VT_R8,1,rgbBuf2); double *rgelemsResult; double *rgelemsBuf1; double *rgelemsBuf2; SafeArrayAccessData(result->parray,(void**)&rgelemsResult); SafeArrayAccessData(buf1->parray,(void**)&rgelemsBuf1); SafeArrayAccessData(buf2->parray,(void**)&rgelemsBuf2); *rgelemsResult = pLED->ReadData(v1,v2); for(int i=0;i<80;i++) rgelemsBuf1[i]=v1[i]; for(int i=0;i<80;i++) rgelemsBuf2[i]=v2[i]; SafeArrayUnaccessData(result->parray); SafeArrayUnaccessData(buf1->parray); SafeArrayUnaccessData(buf2->parray); return S_OK; } STDMETHODIMP CLEDCOMMatlab::SetIntegrationTime(/*[in]*/VARIANT time,/*[out]*/VARIANT *result) { SAFEARRAYBOUND rgbResult[]={1,0}; result->vt = VT_ARRAY | VT_R8; result->parray = SafeArrayCreate(VT_R8,1,rgbResult); SAFEARRAYBOUND rgbTime[]={1,0}; time.vt = VT_ARRAY | VT_R8; time.parray = SafeArrayCreate(VT_R8,1,rgbTime); double *rgelemsResult; SafeArrayAccessData(result->parray,(void**)&rgelemsResult); *rgelemsResult = pLED->SetIntegrationTime((WORD)time.dblVal); SafeArrayUnaccessData(result->parray); return S_OK; }