Page 1 of 1
Missing CAN_SetRcvEvent() equivalent in PCAN-BasicAPI
Posted: Thu 8. Feb 2018, 13:17
by Fojtik
I did not find any equivalent of function CAN_SetRcvEvent() in PCAN-Basic API.
The registered event could improve performance of code a lot.
Without such event, the code will need to pool CAN_Read very frequently. And it could drop overall performance.
Code: Select all
result = WaitForMultipleObjects(2,hh,FALSE,15);
if(result == WAIT_OBJECT_0+1) goto CONTINUE; //look to a PopMsgFromQueue() (continue will check while(), goto skips it)
if(result==WAIT_OBJECT_0 || result==WAIT_TIMEOUT)
{
Res = CAN_Read(&peakMsg);
Re: Missing CAN_SetRcvEvent() equivalent in PCAN-BasicAPI
Posted: Thu 8. Feb 2018, 13:58
by K.Wagner
Fojtik wrote: did not find any equivalent of function CAN_SetRcvEvent()
are you sure you have tried to search for it?
did you read the *.chm help file?

- TPCANParameter page
- RcvEvent1.PNG (37.71 KiB) Viewed 8843 times
or at least the introduction of it?

- Help Introduction - Reading with events
- RcvEvent0.PNG (47.09 KiB) Viewed 8843 times
did you check the example code?
Code: Select all
// Sets the handle of the Receive-Event.
//
stsResult = m_objPCANBasic->SetValue(m_PcanHandle, PCAN_RECEIVE_EVENT ,&m_hEvent, sizeof(m_hEvent));
// If it fails, a error message is shown
//
if (stsResult != PCAN_ERROR_OK)
{
::MessageBox(NULL, GetFormatedError(stsResult), "Error!",MB_ICONERROR);
m_Terminated = true;
return 1;
}
// While this mode is selected
//
while(!m_Terminated)
{
//Wait for CAN Data...
result = WaitForSingleObject(m_hEvent, 1);
if (result == WAIT_OBJECT_0)
ReadMessages();
}
did you tried to run any of the examples? there is even an exe within the PCAN-Basic package... double click and you can see it

- Executable file within the PCAN-Basic package
- RcvEvent4.PNG (16.81 KiB) Viewed 8843 times
or maybe the dedicated PDF Help file for parameters:

- PDF help file
- RcvEvent3.PNG (74.29 KiB) Viewed 8843 times
check again... maybe you can find it now....
Re: Missing CAN_SetRcvEvent() equivalent in PCAN-BasicAPI
Posted: Thu 8. Feb 2018, 15:03
by Fojtik
K.Wagner wrote:are you sure you have tried to search for it?
Excuse me. I attempted to rewrite program written in PCAN-Light to PCAN-basic.
Code: Select all
///////////////////////////////////////////////////////////////////////////////
// CAN_SetRcvEvent()
// This function is used to set the Event for the Event Handler
//
// Possible Errors: ILLCLIENT ILLPARAMTYPE ILLPARAMVAL NOVXD
//
DWORD __stdcall CAN_SetRcvEvent(HANDLE hEvent);
I have searched for any function that has a HANDLE as parameter.
Code: Select all
/// <summary>
/// Configures or sets a PCAN Channel value
/// </summary>
/// <remarks>Parameters can be present or not according with the kind
/// of Hardware (PCAN Channel) being used. If a parameter is not available,
/// a PCAN_ERROR_ILLPARAMTYPE error will be returned</remarks>
/// <param name="Channel">"The handle of a PCAN Channel"</param>
/// <param name="Parameter">"The TPCANParameter parameter to set"</param>
/// <param name="Buffer">"Buffer with the value to be set"</param>
/// <param name="BufferLength">"Size in bytes of the buffer"</param>
/// <returns>"A TPCANStatus error code"</returns>
TPCANStatus __stdcall CAN_SetValue(
TPCANHandle Channel,
TPCANParameter Parameter,
void* Buffer,
DWORD BufferLength);
And I forget to
CAN_SetValue. Thank you again.
I still do not know whether PCAN-BASIC
http://www.peak-system.com/forum/viewto ... 120&t=2511 is faster than PCAN-LIGHT. May be that it does not matter which API is used.
Re: Missing CAN_SetRcvEvent() equivalent in PCAN-BasicAPI
Posted: Thu 8. Feb 2018, 15:23
by M.Maidhof
Hi,
there is no difference in speed between the different APIs, it is just a question of how you program your application!
regards
Michael