|
@@ -34,6 +34,24 @@ out_t outputs[DO_NUMBER] = {
|
|
|
//
|
|
|
void do_init(void)
|
|
|
{
|
|
|
+ // Таймер для выходов в режиме PWM
|
|
|
+ di_out_pwm_tim_init();
|
|
|
+
|
|
|
+
|
|
|
+ for (int i = 0; i < DO_NUMBER; i++)
|
|
|
+ {
|
|
|
+ do_gpio_init(&outputs[i], i);
|
|
|
+
|
|
|
+ if (save_mode_get()) {
|
|
|
+ do_update(&settings.dout_save[i], i) ;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ do_update(&settings.dout[i], i) ;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+#if 0
|
|
|
output_state_bit = settings.do_bits;
|
|
|
output_mode_bit = settings.do_mode_bits;
|
|
|
output_mode_save_bit = settings.do_mode_save_bits;
|
|
@@ -57,41 +75,49 @@ void do_init(void)
|
|
|
outputs[i].pwm_period = settings.do_pwm_period[i];
|
|
|
}
|
|
|
|
|
|
- di_gpio_init(&outputs[i], i);
|
|
|
+ do_gpio_init(&outputs[i], i);
|
|
|
+
|
|
|
+ do_update(&outputs[i], i) ;
|
|
|
}
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
+
|
|
|
//
|
|
|
-void di_gpio_init(out_t *out, uint8_t index)
|
|
|
+void do_gpio_init(out_t *out, uint8_t index)
|
|
|
{
|
|
|
gpio_init_type gpio_init_struct;
|
|
|
-
|
|
|
|
|
|
- // Выход
|
|
|
- if (out->mode == 0)
|
|
|
- {
|
|
|
- gpio_default_para_init(&gpio_init_struct);
|
|
|
-
|
|
|
- gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
|
|
|
- gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
|
|
|
- gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
|
|
|
- gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
|
|
|
- gpio_init_struct.gpio_pins = out->pin;
|
|
|
- gpio_init(out->port, &gpio_init_struct);
|
|
|
- }
|
|
|
+ gpio_default_para_init(&gpio_init_struct);
|
|
|
|
|
|
- do_update(out, index) ;
|
|
|
+ gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
|
|
|
+ gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
|
|
|
+ gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
|
|
|
+ gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
|
|
|
+ gpio_init_struct.gpio_pins = out->pin;
|
|
|
+ gpio_init(out->port, &gpio_init_struct);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
// Установка состояний дискретных выходов (вкл./выкл.)
|
|
|
-void do_set_state(void)
|
|
|
+
|
|
|
+void do_set_state(bool save_mode)
|
|
|
{
|
|
|
- for (int i = 0; i < DO_NUMBER; i++)
|
|
|
- {
|
|
|
- settings.dout[i].state = (uint8_t)((settings.do_state_bits >> i) & 1);
|
|
|
+ // Обычный режим работы
|
|
|
+ if (!save_mode) {
|
|
|
+ for (int i = 0; i < DO_NUMBER; i++) {
|
|
|
+ settings.dout[i].state = (uint8_t)((settings.do_state_bits >> i) & 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // Безопасный режим работы
|
|
|
+ else {
|
|
|
+ for (int i = 0; i < DO_NUMBER; i++) {
|
|
|
+ settings.dout_save[i].state = (uint8_t)((settings.do_state_save_bits >> i) & 1);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
//
|
|
|
void do_set_common(void)
|
|
|
{
|
|
@@ -99,6 +125,7 @@ void do_set_common(void)
|
|
|
|
|
|
for (int i = 0; i < DO_NUMBER; i++)
|
|
|
{
|
|
|
+#if 0
|
|
|
//
|
|
|
if ((settings.do_bits & (1 << i)) != (output_state_bit & (1 << i))) {
|
|
|
settings.do_bits = output_state_bit;
|
|
@@ -128,12 +155,14 @@ void do_set_common(void)
|
|
|
|
|
|
if (flag)
|
|
|
do_update(&outputs[i], i);
|
|
|
+#endif
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//
|
|
|
void do_set(void)
|
|
|
{
|
|
|
+#if 0
|
|
|
if (output_state_bit == settings.do_bits)
|
|
|
return;
|
|
|
|
|
@@ -148,8 +177,27 @@ void do_set(void)
|
|
|
|
|
|
// Сохраним новое значение выходов в настройках
|
|
|
settings.do_bits = output_state_bit;
|
|
|
+#endif
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+// Установка значения на выходе
|
|
|
+void do_update(do_t *out, uint8_t i)
|
|
|
+{
|
|
|
+ // Режим ШИМ
|
|
|
+ if (out->mode) {
|
|
|
+ do_set_pwm(out->pwm_period, out->pwm_duty, i);
|
|
|
+ }
|
|
|
+ // Режим обычного выхода
|
|
|
+ else {
|
|
|
+ do_set_out(&outputs[i], out->value);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+#if 0
|
|
|
// Установка значения на выходе
|
|
|
void do_update(out_t *out, uint8_t i)
|
|
|
{
|
|
@@ -171,10 +219,13 @@ void do_update(out_t *out, uint8_t i)
|
|
|
do_set_out(out, settings.do_bits & (1 << i));
|
|
|
}
|
|
|
}
|
|
|
+#endif
|
|
|
+
|
|
|
|
|
|
//
|
|
|
void do_set_mode(void)
|
|
|
{
|
|
|
+#if 0
|
|
|
if (output_mode_bit == settings.do_mode_bits)
|
|
|
return;
|
|
|
|
|
@@ -189,6 +240,7 @@ void do_set_mode(void)
|
|
|
}
|
|
|
|
|
|
settings.do_mode_bits = output_mode_bit;
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
//
|