UmberHubManager/api/examples/c_cpp/BrainStem2-USBHub3c-Serial-.../BrainStem2Example/main.cpp

149 lines
5.6 KiB
C++
Executable File

//
// main.cpp
// BrainStem2Example
//
/////////////////////////////////////////////////////////////////////
// //
// 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 <iostream>
#include "BrainStem2/BrainStem-all.h"
int main(int argc, const char * argv[]) {
std::cout << "Creating a USBHub3c module" << std::endl;
// Create an instance of the USBHub3p
aUSBHub3c chub;
aErr err = aErrNone;
// Connect to a USBHub3c with Serial Number 0x341F6970 through
// serial port '/dev/tty.usbserial-1110' at 115200 baudrate.
// Port can be substituted with 'COM3' as an example as well
linkSpec spec;
const char* serial_port = "/dev/tty.usbserial-1110";
spec.type = SERIAL;
spec.serial_num = 0x341F6970;
spec.t.serial.baudrate = 115200;
memset(spec.t.serial.port, 0, sizeof(spec.t.serial.port));
memcpy(spec.t.serial.port, serial_port, strlen(serial_port));
// The following line replaces discoverAndConnect() from most examples, when using
// a serial port connection, the linkSpec has to be defined very explicitly
// so there is not discovery that's needed.
err = chub.connectFromSpec(spec);
if (err != aErrNone) {
std::cout << "Error "<< err <<" encountered connecting to BrainStem module" << std::endl;
return 1;
}
else { std::cout << "Connected to BrainStem module." << std::endl; }
uint8_t upstreamPort = aUSBHUB3C_NUM_USB_PORTS;
err = chub.hub.getUpstream(&upstreamPort);
if(err == aErrNone) {
std::cout << std::endl;
printf("The current upstream port is: %d\n", upstreamPort);
}
if(err == aErrNone) {
std::cout << std::endl;
std::cout << "Disabling all downstream ports." << std::endl;
for (int port = 0; port < aUSBHUB3C_NUM_USB_PORTS; port++) {
if(port == upstreamPort) {
std::cout << "Skipping upstream Port." << std::endl;
}
else if(port == aUSBHub3c::kPORT_ID_CONTROL) {
std::cout << "The Control port is always enabled" << std::endl;
}
else if(port == aUSBHub3c::kPORT_ID_POWER_C) {
std::cout << "The Power-C port is always enabled" << std::endl;
}
else {
err = chub.hub.port[port].setEnabled(false);
std::cout << "Disabling Port " << port << " Error: " << err << std::endl;
}
aTime_MSSleep(400); //Delay so the user can see it.
}
}
if(err == aErrNone) {
std::cout << std::endl;
std::cout << "Enabling all downstream ports." << std::endl;
for (int port = 0; port < aUSBHUB3C_NUM_USB_PORTS; port++) {
if(port == upstreamPort) {
std::cout << "Skipping upstream Port: " << std::endl;
}
else if(port == aUSBHub3c::kPORT_ID_CONTROL) {
std::cout << "The Control port is always enabled" << std::endl;
}
else if(port == aUSBHub3c::kPORT_ID_POWER_C) {
std::cout << "The Power-C port is always enabled" << std::endl;
}
else {
err = chub.hub.port[port].setEnabled(true);
std::cout << "Enabling Port " << port << " Error: " << err << std::endl;
}
aTime_MSSleep(400); //Delay so the user can see it.
}
}
//Voltage and Current
if(err == aErrNone) {
std::cout << std::endl;
std::cout << "Getting VBus and VConn Voltage and Current" << std::endl;
std::cout << "Note: When in PD Mode voltage is only present after successful ";
std::cout << " negotiation with a device." << std::endl;
for (int port = 0; port < aUSBHUB3C_NUM_USB_PORTS; port++) {
int32_t vBusVoltage = 0;
int32_t vBusCurrent = 0;
int32_t vConnVoltage = 0;
int32_t vConnCurrent = 0;
std::cout << std::endl;
printf("Port: %d\n", port);
err = chub.hub.port[port].getVbusVoltage(&vBusVoltage);
printf("Vbus Voltage: %.2f, Error: %d\n", vBusVoltage/1000000.0, err);
err = chub.hub.port[port].getVbusCurrent(&vBusCurrent);
printf("Vbus Current: %.2f, Error: %d\n", vBusCurrent/1000000.0, err);
if(port != aUSBHub3c::kPORT_ID_POWER_C) {
err = chub.hub.port[port].getVconnVoltage(&vConnVoltage);
printf("VConn Voltage: %.2f, Error: %d\n", vConnVoltage/1000000.0, err);
err = chub.hub.port[port].getVconnCurrent(&vConnCurrent);
printf("VConn Current: %.2f, Error: %d\n", vConnCurrent/1000000.0, err);
}
else { std::cout << "The Power-C port does not have VConn measurements." << std::endl; }
}
}
// Disconnect
err = chub.disconnect();
if (err == aErrNone) {
std::cout << std::endl;
std::cout << "Disconnected from USBHub3c." << std::endl;
}
return 0;
}