98 lines
3.6 KiB
C++
Executable File
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;
|
|
}
|