From 4a7cfeb34ffde47e45cba9a3a4ef3125cf61256a Mon Sep 17 00:00:00 2001 From: Bruce Luckcuck Date: Sat, 6 Jul 2019 08:02:32 -0400 Subject: [PATCH] Expose camera control button resistance values Allows fine tuning of the voltage divider resistance values for each button to account for slight variances amongst cameras. Also allows manual configuration for non-standard cameras. Resistance values are in 100ohm steps. --- src/main/cli/settings.c | 1 + src/main/drivers/camera_control.c | 9 ++++++--- src/main/drivers/camera_control.h | 1 + 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/cli/settings.c b/src/main/cli/settings.c index 358f9d0e95..f4f57055c6 100644 --- a/src/main/cli/settings.c +++ b/src/main/cli/settings.c @@ -1395,6 +1395,7 @@ const clivalue_t valueTable[] = { { "camera_control_ref_voltage", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 200, 400 }, PG_CAMERA_CONTROL_CONFIG, offsetof(cameraControlConfig_t, refVoltage) }, { "camera_control_key_delay", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 100, 500 }, PG_CAMERA_CONTROL_CONFIG, offsetof(cameraControlConfig_t, keyDelayMs) }, { "camera_control_internal_resistance", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 10, 1000 }, PG_CAMERA_CONTROL_CONFIG, offsetof(cameraControlConfig_t, internalResistance) }, + { "camera_control_button_resistance", VAR_UINT16 | MASTER_VALUE | MODE_ARRAY, .config.array.length = CAMERA_CONTROL_KEYS_COUNT, PG_CAMERA_CONTROL_CONFIG, offsetof(cameraControlConfig_t, buttonResistanceValues) }, { "camera_control_inverted", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_CAMERA_CONTROL_CONFIG, offsetof(cameraControlConfig_t, inverted) }, #endif diff --git a/src/main/drivers/camera_control.c b/src/main/drivers/camera_control.c index d627484db0..88f2150f3a 100644 --- a/src/main/drivers/camera_control.c +++ b/src/main/drivers/camera_control.c @@ -69,6 +69,11 @@ void pgResetFn_cameraControlConfig(cameraControlConfig_t *cameraControlConfig) cameraControlConfig->internalResistance = 470; cameraControlConfig->ioTag = timerioTagGetByUsage(TIM_USE_CAMERA_CONTROL, 0); cameraControlConfig->inverted = 0; // Output is inverted externally + cameraControlConfig->buttonResistanceValues[CAMERA_CONTROL_KEY_ENTER] = 450; + cameraControlConfig->buttonResistanceValues[CAMERA_CONTROL_KEY_LEFT] = 270; + cameraControlConfig->buttonResistanceValues[CAMERA_CONTROL_KEY_UP] = 150; + cameraControlConfig->buttonResistanceValues[CAMERA_CONTROL_KEY_RIGHT] = 68; + cameraControlConfig->buttonResistanceValues[CAMERA_CONTROL_KEY_DOWN] = 0; } static struct { @@ -184,11 +189,9 @@ void cameraControlProcess(uint32_t currentTimeUs) } } -static const int buttonResistanceValues[] = { 45000, 27000, 15000, 6810, 0 }; - static float calculateKeyPressVoltage(const cameraControlKey_e key) { - const int buttonResistance = buttonResistanceValues[key]; + const int buttonResistance = cameraControlConfig()->buttonResistanceValues[key] * 100; return 1.0e-2f * cameraControlConfig()->refVoltage * buttonResistance / (100 * cameraControlConfig()->internalResistance + buttonResistance); } diff --git a/src/main/drivers/camera_control.h b/src/main/drivers/camera_control.h index 988fd4e5a4..320f6352b8 100644 --- a/src/main/drivers/camera_control.h +++ b/src/main/drivers/camera_control.h @@ -49,6 +49,7 @@ typedef struct cameraControlConfig_s { ioTag_t ioTag; uint8_t inverted; + uint16_t buttonResistanceValues[CAMERA_CONTROL_KEYS_COUNT]; // resistance in 100ohm steps } cameraControlConfig_t; PG_DECLARE(cameraControlConfig_t, cameraControlConfig);