This function gets the control mapping charts.
#include <iostream>
#include <dlfcn.h>
#include <vector>
#include "KinovaTypes.h"
using namespace std;
int main()
{
int result;
cout << "GetControlMapping function example" << endl;
void * commandLayer_handle;
int (*MyInitAPI)();
int (*MyCloseAPI)();
int (*MyGetControlMapping)(ControlMappingCharts &);
int (*MyStartControlAPI)();
commandLayer_handle = dlopen("Kinova.API.USBCommandLayerUbuntu.so",RTLD_NOW|RTLD_GLOBAL);
MyInitAPI = (int (*)()) dlsym(commandLayer_handle,"InitAPI");
MyCloseAPI = (int (*)()) dlsym(commandLayer_handle,"CloseAPI");
MyGetControlMapping = (int (*)(ControlMappingCharts &)) dlsym(commandLayer_handle,"GetControlMapping");
MyStartControlAPI = (int (*)()) dlsym(commandLayer_handle,"StartControlAPI");
if((MyInitAPI == NULL) || (MyCloseAPI == NULL) || (MyGetControlMapping == NULL))
{
cout << "Unable to initialize the command layer." << endl;
}
else
{
cout << "The command has been initialized correctly." << endl << endl;
cout << "Calling the method InitAPI()" << endl;
result = (*MyInitAPI)();
cout << "result of InitAPI() = " << result << endl;
(*MyStartControlAPI)();
ControlMappingCharts controlMappingCharts;
result = (*MyGetControlMapping)(controlMappingCharts);
switch(controlMappingCharts.ActualControlMapping)
{
case 0:
{
cout << "ActualControlMapping = THREE_AXIS_JOYSTICK" << endl;
break;
}
case 1:
{
cout << "ActualControlMapping = TWO_AXIS_JOYSTICK" << endl;
break;
}
case 2:
{
cout << "ActualControlMapping = API" << endl;
break;
}
default:
{
break;
}
}
int actualModeA = controlMappingCharts.Mapping[controlMappingCharts.ActualControlMapping].ActualModeA;
int actualModeB = controlMappingCharts.Mapping[controlMappingCharts.ActualControlMapping].ActualModeB;
int currentMode;
if(actualModeA >= 0)
{
cout << "We are in list A in the mode " << actualModeA << endl;
cout << "Functionality mapped with the BUTTON 1 click event of the current mode = "
<< (ControlFunctionalityTypeEnum)controlMappingCharts.Mapping[controlMappingCharts.ActualControlMapping].ModeControlsA[actualModeA].ControlButtons[1].HoldDown
<< endl;
}
else if(actualModeB >= 0)
{
cout << "We are in list B in the mode " << actualModeB << endl;
cout << "Functionality mapped with the BUTTON 1 click event of the current mode = "
<< (ControlFunctionalityTypeEnum)controlMappingCharts.Mapping[controlMappingCharts.ActualControlMapping].ModeControlsA[actualModeB].ControlButtons[1].HoldDown
<< endl;
}
else
{
cout << "No mode list found. Error" << endl;
}
cout << endl << "Calling the method CloseAPI()" << endl;
result = (*MyCloseAPI)();
cout << "result of CloseAPI() = " << result << endl;
}
return 0;
}