mirror of https://github.com/ArduPilot/ardupilot
100 lines
3.2 KiB
C++
100 lines
3.2 KiB
C++
|
#include <stdio.h>
|
||
|
#include <iostream>
|
||
|
#include <cstring>
|
||
|
#include "CX-GBXXXCtrl.h"
|
||
|
|
||
|
const char* this_app_str = "xacti-config";
|
||
|
|
||
|
// display help
|
||
|
void display_help()
|
||
|
{
|
||
|
printf("Usage: sudo %s option [value]\n", this_app_str);
|
||
|
printf(" --dronecan\tenable (value=1) or disable (value=0) dronecan parsing\n");
|
||
|
printf(" --format\tformat SD card\n");
|
||
|
printf(" --help\t\tdisplay usage\n");
|
||
|
printf(" --irpalette\t\tIR pallete (0:white hot, 1:black hot, 2:rainbow, 3:rainHC, 4:ironbow, 5:lava, 6:arctic, 7:glowbow, 8:graded fire, 9:hottest)\n");
|
||
|
printf(" --msc\t\tchange to mass storage class mode (for downloading from SD card)\n");
|
||
|
}
|
||
|
|
||
|
int main(int argc, char **argv)
|
||
|
{
|
||
|
// display help
|
||
|
if ((argc <= 1) || ((argc >= 2) && (strcmp(argv[1], "--help") == 0))) {
|
||
|
display_help();
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// open camera
|
||
|
CX_GBXXXCtrl camera_ctrl;
|
||
|
if (!camera_ctrl.Open(NULL)) {
|
||
|
printf("%s: failed to open camera\n", this_app_str);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
// args_ok set to true when command line processed correctly
|
||
|
bool args_ok = false;
|
||
|
bool ret_ok = true;
|
||
|
|
||
|
// enable DroneCAN
|
||
|
if ((argc >= 3) && (strcmp(argv[1], "--dronecan") == 0)) {
|
||
|
args_ok = true;
|
||
|
uint8_t enable = (strcmp(argv[2], "1") == 0);
|
||
|
ret_ok = camera_ctrl.SetCameraCtrl(0x07, 0x1e, &enable, sizeof(enable));
|
||
|
const char* enable_or_disable_str = enable ? "enable" : "disable";
|
||
|
if (ret_ok) {
|
||
|
printf("%s: %s DroneCAN\n", this_app_str, enable_or_disable_str);
|
||
|
} else {
|
||
|
printf("%s: failed to %s DroneCAN\n", this_app_str, enable_or_disable_str);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// format SD card
|
||
|
if ((argc >= 2) && (strcmp(argv[1], "--format") == 0)) {
|
||
|
args_ok = true;
|
||
|
uint8_t format_sd = 0;
|
||
|
ret_ok = camera_ctrl.SetCameraCtrl(0x07, 0x15, &format_sd, sizeof(format_sd));
|
||
|
if (ret_ok) {
|
||
|
printf("%s: formatted SD card\n", this_app_str);
|
||
|
} else {
|
||
|
printf("%s: failed format SD card\n", this_app_str);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// IR palette
|
||
|
if ((argc >= 3) && (strcmp(argv[1], "--irpalette") == 0)) {
|
||
|
args_ok = true;
|
||
|
int palette_int = 0;
|
||
|
sscanf(argv[2], "%d", &palette_int);
|
||
|
uint8_t palette_uint8 = (uint8_t)palette_int;
|
||
|
ret_ok = camera_ctrl.SetCameraCtrl(0x07, 0x19, &palette_uint8, sizeof(palette_uint8));
|
||
|
if (ret_ok) {
|
||
|
printf("%s: IR palette set to %d\n", this_app_str, (int)palette_uint8);
|
||
|
} else {
|
||
|
printf("%s: failed to set IR palette to %d\n", this_app_str, (int)palette_uint8);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// change to Mass Storage Mode to allow downloading of images and videos
|
||
|
if ((argc >= 2) && (strcmp(argv[1], "--msc") == 0)) {
|
||
|
args_ok = true;
|
||
|
uint8_t msc_mode = 1;
|
||
|
ret_ok = camera_ctrl.SetCameraCtrl(0x06, 0x07, &msc_mode, sizeof(msc_mode));
|
||
|
if (ret_ok) {
|
||
|
printf("%s: changed to mass storage mode\n", this_app_str);
|
||
|
} else {
|
||
|
printf("%s: failed to change to mass storage mode\n", this_app_str);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// close camera
|
||
|
camera_ctrl.Close();
|
||
|
|
||
|
// display help if args could not be processed
|
||
|
if (!args_ok) {
|
||
|
display_help();
|
||
|
}
|
||
|
|
||
|
// return 0 if OK, 1 if not OK
|
||
|
return ret_ok ? 0 : 1;
|
||
|
}
|