kinect/codes/Azure-Kinect-Sensor-SDK/tests/TestUtil/Main.cpp

137 lines
2.9 KiB
C++

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
//************************ Includes *****************************
#include "Capture.h"
#include "Cli.h"
#include "Example.h"
#include <k4a/k4a.h>
#include "UsbCmd.h"
#include "k4aCmd.h"
#include <k4ainternal/logging.h>
#include "Main.h"
//**************Symbolic Constant Macros (defines) *************
#define MAX_SUPPORTED_DEVICES 4
//************************ Typedefs *****************************
//************ Declarations (Statics and globals) ***************
static k4a_device_t k4a_handle[MAX_SUPPORTED_DEVICES];
static uint8_t opened_count = 0;
extern "C" {
// dynlib includes the logger
char K4A_ENV_VAR_LOG_TO_A_FILE[] = K4A_ENABLE_LOG_TO_A_FILE;
}
//******************* Function Prototypes ***********************
//*********************** Functions *****************************
/**
* Initialize the K4A library and set up global data
*
*/
void open_k4a(void)
{
uint32_t device_count;
// Determine how many devices are available
device_count = k4a_device_get_installed_count();
if (device_count > MAX_SUPPORTED_DEVICES)
{
device_count = MAX_SUPPORTED_DEVICES;
printf("Warning, number of attached devices exceed %d. Some devices will not be accessible\n",
MAX_SUPPORTED_DEVICES);
}
for (uint8_t i = 0; i < device_count; i++)
{
if (k4a_device_open(i, &k4a_handle[opened_count]) == K4A_RESULT_SUCCEEDED)
{
opened_count++;
}
else
{
printf("Device %d could not be opened\n", i);
}
}
}
/**
* Shutdown K4A library
*
*/
void close_k4a(void)
{
for (uint8_t i = 0; i < opened_count; i++)
{
if (k4a_handle[i] != NULL)
{
k4a_device_close(k4a_handle[i]);
k4a_handle[i] = NULL;
}
}
opened_count = 0;
}
/**
* Get K4A handled based on index
*
* @return
* k4a_device_t handle to K4A device
* NULL handle could not be found
*
*/
k4a_device_t get_k4a_handle(uint32_t index)
{
if (index < opened_count)
{
return k4a_handle[index];
}
else
{
return NULL;
}
}
/**
* Main entry point
*
* @param Argc Number of variables handed in
*
* @param Argv Pointer to variable array
*
* @return
* CLI_SUCCESS Everything executed correctly
* CLI_ERROR Error occurred while handling the command
*
*/
int main(int Argc, char **Argv)
{
int status;
// Initialize the K4A library
open_k4a();
// Initialize CLI Modules. For each functional test file, add an initialization routine
ExampleInit();
// K4A SDK commands
k4a_cmd_init();
// USB Command module
usb_cmd_init();
// Capture related commands
capture_init();
// process command
status = CliExecute(Argc - 1, &Argv[1]);
// close the K4A library
close_k4a();
return status;
}