|
@@ -1373,12 +1373,18 @@ async function initializeAngularHomingConfig() {
|
|
|
|
|
|
|
|
const angularHomingToggle = document.getElementById('angularHomingToggle');
|
|
const angularHomingToggle = document.getElementById('angularHomingToggle');
|
|
|
const angularHomingInfo = document.getElementById('angularHomingInfo');
|
|
const angularHomingInfo = document.getElementById('angularHomingInfo');
|
|
|
|
|
+ const gpioSelectionContainer = document.getElementById('gpioSelectionContainer');
|
|
|
|
|
+ const gpioInput = document.getElementById('gpioInput');
|
|
|
|
|
+ const invertStateContainer = document.getElementById('invertStateContainer');
|
|
|
|
|
+ const invertStateToggle = document.getElementById('invertStateToggle');
|
|
|
const angularOffsetContainer = document.getElementById('angularOffsetContainer');
|
|
const angularOffsetContainer = document.getElementById('angularOffsetContainer');
|
|
|
const angularOffsetInput = document.getElementById('angularOffsetInput');
|
|
const angularOffsetInput = document.getElementById('angularOffsetInput');
|
|
|
const saveHomingConfigButton = document.getElementById('saveHomingConfig');
|
|
const saveHomingConfigButton = document.getElementById('saveHomingConfig');
|
|
|
|
|
|
|
|
// Check if elements exist
|
|
// Check if elements exist
|
|
|
- if (!angularHomingToggle || !angularHomingInfo || !saveHomingConfigButton || !angularOffsetContainer || !angularOffsetInput) {
|
|
|
|
|
|
|
+ if (!angularHomingToggle || !angularHomingInfo || !saveHomingConfigButton ||
|
|
|
|
|
+ !gpioSelectionContainer || !gpioInput || !invertStateContainer ||
|
|
|
|
|
+ !invertStateToggle || !angularOffsetContainer || !angularOffsetInput) {
|
|
|
logMessage('Angular Homing elements not found, skipping initialization', LOG_TYPE.WARNING);
|
|
logMessage('Angular Homing elements not found, skipping initialization', LOG_TYPE.WARNING);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
@@ -1391,23 +1397,38 @@ async function initializeAngularHomingConfig() {
|
|
|
const data = await response.json();
|
|
const data = await response.json();
|
|
|
|
|
|
|
|
angularHomingToggle.checked = data.angular_homing_enabled || false;
|
|
angularHomingToggle.checked = data.angular_homing_enabled || false;
|
|
|
|
|
+ gpioInput.value = data.angular_homing_gpio_pin || 18;
|
|
|
|
|
+ invertStateToggle.checked = data.angular_homing_invert_state || false;
|
|
|
angularOffsetInput.value = data.angular_homing_offset_degrees || 0;
|
|
angularOffsetInput.value = data.angular_homing_offset_degrees || 0;
|
|
|
|
|
|
|
|
if (data.angular_homing_enabled) {
|
|
if (data.angular_homing_enabled) {
|
|
|
angularHomingInfo.style.display = 'block';
|
|
angularHomingInfo.style.display = 'block';
|
|
|
|
|
+ gpioSelectionContainer.style.display = 'block';
|
|
|
|
|
+ invertStateContainer.style.display = 'block';
|
|
|
angularOffsetContainer.style.display = 'block';
|
|
angularOffsetContainer.style.display = 'block';
|
|
|
}
|
|
}
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
logMessage(`Error loading angular homing settings: ${error.message}`, LOG_TYPE.ERROR);
|
|
logMessage(`Error loading angular homing settings: ${error.message}`, LOG_TYPE.ERROR);
|
|
|
// Initialize with defaults if load fails
|
|
// Initialize with defaults if load fails
|
|
|
angularHomingToggle.checked = false;
|
|
angularHomingToggle.checked = false;
|
|
|
|
|
+ gpioInput.value = 18;
|
|
|
|
|
+ invertStateToggle.checked = false;
|
|
|
angularOffsetInput.value = 0;
|
|
angularOffsetInput.value = 0;
|
|
|
angularHomingInfo.style.display = 'none';
|
|
angularHomingInfo.style.display = 'none';
|
|
|
|
|
+ gpioSelectionContainer.style.display = 'none';
|
|
|
|
|
+ invertStateContainer.style.display = 'none';
|
|
|
angularOffsetContainer.style.display = 'none';
|
|
angularOffsetContainer.style.display = 'none';
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Function to save settings
|
|
// Function to save settings
|
|
|
async function saveAngularHomingSettings() {
|
|
async function saveAngularHomingSettings() {
|
|
|
|
|
+ // Validate GPIO pin
|
|
|
|
|
+ const gpioPin = parseInt(gpioInput.value);
|
|
|
|
|
+ if (isNaN(gpioPin) || gpioPin < 2 || gpioPin > 27) {
|
|
|
|
|
+ showStatusMessage('GPIO pin must be between 2 and 27', 'error');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// Update button UI to show loading state
|
|
// Update button UI to show loading state
|
|
|
const originalButtonHTML = saveHomingConfigButton.innerHTML;
|
|
const originalButtonHTML = saveHomingConfigButton.innerHTML;
|
|
|
saveHomingConfigButton.disabled = true;
|
|
saveHomingConfigButton.disabled = true;
|
|
@@ -1419,6 +1440,8 @@ async function initializeAngularHomingConfig() {
|
|
|
headers: { 'Content-Type': 'application/json' },
|
|
headers: { 'Content-Type': 'application/json' },
|
|
|
body: JSON.stringify({
|
|
body: JSON.stringify({
|
|
|
angular_homing_enabled: angularHomingToggle.checked,
|
|
angular_homing_enabled: angularHomingToggle.checked,
|
|
|
|
|
+ angular_homing_gpio_pin: gpioPin,
|
|
|
|
|
+ angular_homing_invert_state: invertStateToggle.checked,
|
|
|
angular_homing_offset_degrees: parseFloat(angularOffsetInput.value) || 0
|
|
angular_homing_offset_degrees: parseFloat(angularOffsetInput.value) || 0
|
|
|
})
|
|
})
|
|
|
});
|
|
});
|
|
@@ -1452,6 +1475,8 @@ async function initializeAngularHomingConfig() {
|
|
|
logMessage(`Angular homing toggle changed: ${angularHomingToggle.checked}`, LOG_TYPE.INFO);
|
|
logMessage(`Angular homing toggle changed: ${angularHomingToggle.checked}`, LOG_TYPE.INFO);
|
|
|
const isEnabled = angularHomingToggle.checked;
|
|
const isEnabled = angularHomingToggle.checked;
|
|
|
angularHomingInfo.style.display = isEnabled ? 'block' : 'none';
|
|
angularHomingInfo.style.display = isEnabled ? 'block' : 'none';
|
|
|
|
|
+ gpioSelectionContainer.style.display = isEnabled ? 'block' : 'none';
|
|
|
|
|
+ invertStateContainer.style.display = isEnabled ? 'block' : 'none';
|
|
|
angularOffsetContainer.style.display = isEnabled ? 'block' : 'none';
|
|
angularOffsetContainer.style.display = isEnabled ? 'block' : 'none';
|
|
|
logMessage(`Info display set to: ${angularHomingInfo.style.display}`, LOG_TYPE.INFO);
|
|
logMessage(`Info display set to: ${angularHomingInfo.style.display}`, LOG_TYPE.INFO);
|
|
|
});
|
|
});
|