PicoScope 7 Software
Available on Windows, Mac and Linux
Code: Select all
/****************************************************************************
* Callback
* used by PS2000A data streaming collection calls, on receipt of data.
* used to set global flags etc checked by user routines
****************************************************************************/
void PREF4 CallBackStreaming( int16_t handle,
int32_t noOfSamples,
uint32_t startIndex,
int16_t overflow,
uint32_t triggerAt,
int16_t triggered,
int16_t autoStop,
void *pParameter)
{
int32_t channel;
int32_t digiPort;
BUFFER_INFO * bufferInfo = NULL;
if (pParameter != NULL)
{
bufferInfo = (BUFFER_INFO *) pParameter;
}
// used for streaming
g_sampleCount = noOfSamples;
g_startIndex = startIndex;
g_autoStopped = autoStop;
g_overflow = overflow;
// flag to say done reading data
g_ready = TRUE;
// flags to show if & where a trigger has occurred
g_trig = triggered;
g_trigAt = triggerAt;
if (bufferInfo != NULL && noOfSamples)
{
if (bufferInfo->mode == ANALOGUE)
{
for (channel = 0; channel < bufferInfo->unit->channelCount; channel++)
{
if (bufferInfo->unit->channelSettings[channel].enabled)
{
if (bufferInfo->appBuffers && bufferInfo->driverBuffers)
{
if (bufferInfo->appBuffers[channel * 2] && bufferInfo->driverBuffers[channel * 2])
{
memcpy_s (&bufferInfo->appBuffers[channel * 2][startIndex], noOfSamples * sizeof(int16_t),
&bufferInfo->driverBuffers[channel * 2][startIndex], noOfSamples * sizeof(int16_t));
}
if (bufferInfo->appBuffers[channel * 2 + 1] && bufferInfo->driverBuffers[channel * 2 + 1])
{
memcpy_s (&bufferInfo->appBuffers[channel * 2 + 1][startIndex], noOfSamples * sizeof(int16_t),
&bufferInfo->driverBuffers[channel * 2 + 1][startIndex], noOfSamples * sizeof(int16_t));
}
}
}
}
}
else if (bufferInfo->mode == AGGREGATED)
{
for (channel = 0; channel < bufferInfo->unit->digitalPorts; channel++)
{
if (bufferInfo->appDigBuffers && bufferInfo->driverDigBuffers)
{
if (bufferInfo->appDigBuffers[channel * 2] && bufferInfo->driverDigBuffers[channel * 2])
{
memcpy_s (&bufferInfo->appDigBuffers[channel * 2][startIndex], noOfSamples * sizeof(int16_t),
&bufferInfo->driverDigBuffers[channel * 2][startIndex], noOfSamples * sizeof(int16_t));
}
if (bufferInfo->appDigBuffers[channel * 2 + 1] && bufferInfo->driverDigBuffers[channel * 2 + 1])
{
memcpy_s (&bufferInfo->appDigBuffers[channel * 2 + 1][startIndex], noOfSamples * sizeof(int16_t),
&bufferInfo->driverDigBuffers[channel * 2 + 1][startIndex], noOfSamples * sizeof(int16_t));
}
}
}
}
else if (bufferInfo->mode == DIGITAL)
{
for (digiPort = 0; digiPort < bufferInfo->unit->digitalPorts; digiPort++)
{
if (bufferInfo->appDigBuffers && bufferInfo->driverDigBuffers)
{
if (bufferInfo->appDigBuffers[digiPort] && bufferInfo->driverDigBuffers[digiPort])
{
memcpy_s (&bufferInfo->appDigBuffers[digiPort][startIndex], noOfSamples * sizeof(int16_t),
&bufferInfo->driverDigBuffers[digiPort][startIndex], noOfSamples * sizeof(int16_t));
}
}
}
}
}
}