UmberHubManager/api/examples/c_cpp/BrainStem2-Cpp-BulkCapture/BrainStem2Example/main.cpp

98 lines
3.6 KiB
C++
Executable File

//
// main.cpp
// BrainStem2A2DBulkCapture
//
/////////////////////////////////////////////////////////////////////
// //
// Copyright (c) 2018 Acroname Inc. - All Rights Reserved //
// //
// This file is part of the BrainStem release. See the license.txt //
// file included with this package or go to //
// https://acroname.com/software/brainstem-development-kit //
// for full license details. //
/////////////////////////////////////////////////////////////////////
#include "BrainStem2/BrainStem-all.h"
//Constants
static const int BULK_CAPTURE_CHANNEL = 0;
static const int NUM_SAMPLES = 8000;
static const int SAMPLE_RATE = 200000;
int main(int argc, const char * argv[]) {
aErr err = aErrNone;
uint8_t captureState = bulkCaptureIdle;
printf("Creating MTMStem Object\n");
aMTMUSBStem stem;
// Connect to the hardware.
// The only difference for TCP/IP modules is to change 'USB' to 'TCP';
printf("Attempting to connect\n");
err = stem.discoverAndConnect(USB);
if (err == aErrNone) printf("Connected\n");
else { printf("Error connecting to device\n"); return 1; }
printf("\n");
printf("Configuring Bulk capture\n");
printf("Analog Channel: %d\n", BULK_CAPTURE_CHANNEL);
printf("Number of Samples: %d\n", NUM_SAMPLES);
printf("Sample Rate: %d\n", SAMPLE_RATE);
printf("\n");
err = stem.analog[BULK_CAPTURE_CHANNEL].setBulkCaptureNumberOfSamples(NUM_SAMPLES);
err = stem.analog[BULK_CAPTURE_CHANNEL].setBulkCaptureSampleRate(SAMPLE_RATE);
printf("\n");
printf("Starting bulk capture\n");
stem.analog[BULK_CAPTURE_CHANNEL].initiateBulkCapture();
//Wait for Bulk Capture to finnish.
//You can go do other stuff if you would like... Including other BrainStem functions.
//but you will need to check that it is finnished before unloading the data
do {
err = stem.analog[BULK_CAPTURE_CHANNEL].getBulkCaptureState(&captureState);
if(captureState == bulkCaptureError) {
printf("There was an Error with Bulk Capture\n");
break;
}
aTime_MSSleep(100);
} while(captureState != bulkCaptureFinished);
//Find out how many samples are in the ram slot
size_t nSize = 0;
err = stem.store[storeRAMStore].getSlotSize(0, &nSize);
if (nSize && (err == aErrNone)) {
uint8_t *rawData = new uint8_t[nSize];
uint16_t combinedValue = 0;
size_t nSizeUnloaded = 0;
printf("Unloading data from the device:\n");
err = stem.store[storeRAMStore].unloadSlot(0, nSize, rawData, &nSizeUnloaded);
// Process 8bit values 2 bytes at a time for a 16bit value (Little Endian)
// i.e.
// val[0] = XXXXXXXX = LSB's
// val[1] = YYYYYYYY = MSB's
// combinedVal = YYYYYYYY XXXXXXXX for a 16 bit value
// Repeat until all the data has been processed
// Note: ",2" increments loop counter "i" by 2
for(unsigned int x = 0; x < nSize; x+=2) {
combinedValue = 0;
combinedValue = rawData[x] + (rawData[x+1] << 8);
printf("Sample: %d, \t\tVoltage: %.3f, \tRaw: %d\n", x/2,
(combinedValue/65535.0)*3.3,
combinedValue);
}//end for
delete[] rawData;
rawData = NULL;
}//end if
printf("Disconnecting from device");
err = stem.disconnect();
return 0;
}