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 358f9d0e9..f4f57055c 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 d627484db..88f2150f3 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 988fd4e5a..320f6352b 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); -- 2.11.4.GIT