UmberHubManager/api/examples/c_cpp/BrainStem2-Application-Notes/continuity_test.cpp

100 lines
3.3 KiB
C++
Executable File

/****************************************************************
* Filename: continuity_test.cpp
* Prepared By: James Dudley
* Date Prepared: March 5, 2018
* Date Revised: March 5, 2018
* Revision: 0.0.1
***************************************************************/
#include "BrainStem2/BrainStem-all.h"
#define CYCLE_TIME 20 // Time to pause between readings, ms
uint8_t continuity_pairs[][2] = {{0, 9}, {1, 10}, {2, 11}, {3, 12}, {4, 13}, {5, 14}};
uint8_t n_cp = 6;
int main(int argc, const char * argv[]) {
// Create BrainStem object
aMTMUSBStem stem;
// Initialize error tracker
aErr err = aErrNone;
// Discover and connect to MTM-USBStem object
// Connects to the first USB module discovered
err = stem.discoverAndConnect(USB);
if (err != aErrNone) {
printf("Error connecting to MTM-USBStem: %d\n", err);
return 0;
}
// Set DIO configurations
uint8_t idx_cp = 0;
for (idx_cp = 0; idx_cp < n_cp; idx_cp++) {
uint8_t output_dio = continuity_pairs[idx_cp][0];
uint8_t input_dio = continuity_pairs[idx_cp][1];
err = stem.digital[output_dio].setConfiguration(1);
if (err != aErrNone) {
printf("Error setting DIO%d configuration to output: %d\n", output_dio, err);
return 0;
}
err = stem.digital[input_dio].setConfiguration(5);
if (err != aErrNone) {
printf("Error setting DIO%d configuration to input with pull-down: %d\n", input_dio, err);
return 0;
}
}
// Test continuity between pairs
uint8_t continuity_array[n_cp][3];
for (idx_cp = 0; idx_cp < n_cp; idx_cp++) {
uint8_t output_dio = continuity_pairs[idx_cp][0];
uint8_t input_dio = continuity_pairs[idx_cp][1];
// Check continuity by raising the output HI (1) then LO (0) and verifying
// the corresponding input follows
uint8_t bContinuous = 1;
int8_t state = 1;
for (state = 1; state >= 0; state--) {
err = stem.digital[output_dio].setState(state);
if (err != aErrNone) {
printf("Error setting DIO%d to %d: %d\n", output_dio, state, err);
return 0;
}
aTime_MSSleep(CYCLE_TIME);
uint8_t read_state = 0;
err = stem.digital[input_dio].getState(&read_state);
if (err != aErrNone) {
printf("Error getting DIO%d state: %d\n", input_dio, err);
return 0;
}
if (state != read_state) {
bContinuous = 0;
}
}
continuity_array[idx_cp][0] = bContinuous;
continuity_array[idx_cp][1] = output_dio;
continuity_array[idx_cp][2] = input_dio;
}
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
for (idx_cp = 0; idx_cp < n_cp; idx_cp++) {
if (continuity_array[idx_cp][0] == 1) {
printf("DIO%d -- DIO%d: Continuous\n", continuity_array[idx_cp][1], continuity_array[idx_cp][2]);
} else {
printf("DIO%d -- DIO%d: Discontinuous\n", continuity_array[idx_cp][1], continuity_array[idx_cp][2]);
}
}
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
stem.disconnect();
return 0;
}