Forráskód Böngészése

separate inouts module

balbekova 5 éve
szülő
commit
0d515fe472

+ 4 - 2
config/board_bt6703.h

@@ -66,7 +66,8 @@ WDG_PIN(X)
 #define RTC_ENABLE                  //RTC clock
 #define LED_ENABLE                  //LED индикация
 #define BUTTON_ENABLE               //Кнопки
-#define INOUTS_ENABLE               //Входы/выходы
+#define DOUTS_ENABLE                  //Выходы
+#define DINS_ENABLE                 //Входы
 #define NET_ENABLE                  //Ethernet сеть
 #define SSL_SERVER_ENABLE           //HTTPS сервер
 #define RADIUS_SERVER_ENABLE        //RADIUS сервер
@@ -78,7 +79,8 @@ WDG_PIN(X)
 XSETTING( SNMP_t,	sSnmp, SETTINGS_SetSnmpDef, ALL_DEFAULT ) \
 XSETTING( AUTH_t,	sAuth[MAX_WEB_USERS], SETTINGS_SetServiceDef, PART_DEFAULT_2 ) \
 XSETTING( SNTP_t,	sSNTP, SETTINGS_SetSntpDef, ALL_DEFAULT ) \
-XSETTING( INOUTS_t,	sInOuts, SETTINGS_SetINOUTSDef, ALL_DEFAULT ) \
+XSETTING( RELAY_Settings_t,	sRelays[OUTPUTS_TOTAL_COUNT], SETTINGS_SetRelaysDef, ALL_DEFAULT ) \
+XSETTING( DIN_Settings_t,	sDINs[INPUTS_TOTAL_COUNT], SETTINGS_SetDINSDef, ALL_DEFAULT ) \
 XSETTING( UPS_Setting_t, UPS_Setting, SETTINGS_SetUPSSettingsDef, ALL_DEFAULT ) \
 XSETTING( ALARM_MNGR_t, sAlarmManager, SETTINGS_SetAlarmManagerDef, ALL_DEFAULT ) \
 XSETTING( RADIUS_t, sRADIUS, SETTINGS_SetRADIUSDef, PART_DEFAULT_1 ) \

+ 4 - 2
config/board_bt6707.h

@@ -79,7 +79,8 @@ WDG_PIN(X)
 #define RTC_ENABLE                  //RTC clock
 #define LED_ENABLE                  //LED индикация
 #define BUTTON_ENABLE               //Кнопки
-#define INOUTS_ENABLE               //Входы/выходы
+#define DOUTS_ENABLE                  //Выходы
+#define DINS_ENABLE                 //Входы
 #define NET_ENABLE                  //Ethernet сеть
 #define HTTP_SERVER_ENABLE          //HTTP сервер
 #define SNMP_ENABLE                 //SNMP протокол
@@ -93,7 +94,8 @@ WDG_PIN(X)
 XSETTING( SNMP_t,	sSnmp, SETTINGS_SetSnmpDef, ALL_DEFAULT ) \
 XSETTING( AUTH_t,	sAuth[MAX_WEB_USERS], SETTINGS_SetServiceDef, PART_DEFAULT_2 ) \
 XSETTING( SNTP_t,	sSNTP, SETTINGS_SetSntpDef, ALL_DEFAULT ) \
-XSETTING( INOUTS_t,	sInOuts, SETTINGS_SetINOUTSDef, ALL_DEFAULT ) \
+XSETTING( RELAY_Settings_t,	sRelays[OUTPUTS_TOTAL_COUNT], SETTINGS_SetRelaysDef, ALL_DEFAULT ) \
+XSETTING( DIN_Settings_t,	sDINs[INPUTS_TOTAL_COUNT], SETTINGS_SetDINSDef, ALL_DEFAULT ) \
 XSETTING( UPS_Setting_t, UPS_Setting, SETTINGS_SetUPSSettingsDef, ALL_DEFAULT ) \
 XSETTING( ALARM_MNGR_t, sAlarmManager, SETTINGS_SetAlarmManagerDef, ALL_DEFAULT ) \
 XSETTING( TELNET_t, sTelnet, SETTINGS_SetTelnetDef, PART_DEFAULT_1 ) \

+ 7 - 7
config/board_bt6710.h

@@ -76,7 +76,7 @@ WDG_PIN(X)
 #define RTC_ENABLE                  //RTC clock
 #define LED_ENABLE                  //LED индикация
 #define BUTTON_ENABLE               //Кнопки
-#define INOUTS_ENABLE               //Входы/выходы
+#define DINS_ENABLE                 //Дискретные входы
 #define NET_ENABLE                  //Ethernet сеть
 #define HTTP_SERVER_ENABLE           //Веб сервер
 #define SNMP_ENABLE                 //SNMP протокол
@@ -89,7 +89,7 @@ WDG_PIN(X)
 XSETTING( SNMP_t,	sSnmp, SETTINGS_SetSnmpDef, ALL_DEFAULT ) \
 XSETTING( AUTH_t,	sAuth[MAX_WEB_USERS], SETTINGS_SetServiceDef, PART_DEFAULT_2 ) \
 XSETTING( SNTP_t,	sSNTP, SETTINGS_SetSntpDef, ALL_DEFAULT ) \
-XSETTING( INOUTS_t,	sInOuts, SETTINGS_SetINOUTSDef, ALL_DEFAULT ) \
+XSETTING( DIN_Settings_t,	sDINs[INPUTS_TOTAL_COUNT], SETTINGS_SetDINSDef, ALL_DEFAULT ) \
 XSETTING( UPS_Setting_t, UPS_Setting, SETTINGS_SetUPSSettingsDef, ALL_DEFAULT ) \
 XSETTING( ALARM_MNGR_t, sAlarmManager, SETTINGS_SetAlarmManagerDef, ALL_DEFAULT ) \
 XSETTING( PORTGW_t, sPortGw, SETTINGS_SetPortGwDef, ALL_DEFAULT ) \
@@ -107,11 +107,11 @@ XSETTING( PORTGW_t, sPortGw, SETTINGS_SetPortGwDef, ALL_DEFAULT ) \
   XJSON_SETTINGS_TAG("managerIP4",         GetManagerIp4,                             SetManagerIp4) \
   XJSON_SETTINGS_TAG("managerIP5",         GetManagerIp5,                             SetManagerIp5) \
   XJSON_SETTINGS_TAG("di1",                GetDIN1TypeActStr,                          SetDIN1TypeActStr) \
-  XJSON_SETTINGS_TAG("di_name1",           GetRO0TypeActStr,                           SetRO1TypeActStr) \
-  XJSON_SETTINGS_TAG("di2",                GetDIN1TypeActStr,                           SetRO1TypeActStr) \
-  XJSON_SETTINGS_TAG("di_name2",           GetRO0TypeActStr,                           SetRO1TypeActStr) \
-  XJSON_SETTINGS_TAG("type_ts1",           GetRO0TypeActStr,                           SetRO1TypeActStr) \
-  XJSON_SETTINGS_TAG("type_ts2",           GetRO0TypeActStr,                           SetRO1TypeActStr) \
+  XJSON_SETTINGS_TAG("di_name1",           GetDIN1TypeActStr,                           SetDIN1TypeActStr) \
+  XJSON_SETTINGS_TAG("di2",                GetDIN1TypeActStr,                          SetDIN1TypeActStr) \
+  XJSON_SETTINGS_TAG("di_name2",           GetDIN1TypeActStr,                           SetDIN1TypeActStr) \
+  XJSON_SETTINGS_TAG("type_ts1",           GetDIN1TypeActStr,                           SetDIN1TypeActStr) \
+  XJSON_SETTINGS_TAG("type_ts2",           GetDIN1TypeActStr,                           SetDIN1TypeActStr) \
   XJSON_SETTINGS_TAG("ipaddr",             GetIpStr,                                  SetIPStr) \
   XJSON_SETTINGS_TAG("gw",                 GetGatewayStr,                             SetGatewayStr) \
   XJSON_SETTINGS_TAG("mask",               GetMaskStr,                                SetMaskStr) \

+ 4 - 4
modules/Ethernet/private_mib_bt6703.c

@@ -266,7 +266,7 @@ static snmp_err_t signal_set_value(struct snmp_node_instance *instance, u16_t le
             }
             break;
         case 5: /* DO1 */
-            if (sSettings.sInOuts.ro_type_source[0] == SNMP_SET) {
+            if (sSettings.sRelays[0].ro_type_source == SNMP_SET) {
                 val_string = (char *)value;
                 SetROStr(val_string, 0);
                 if (val_string[0] == 0x31) {
@@ -279,7 +279,7 @@ static snmp_err_t signal_set_value(struct snmp_node_instance *instance, u16_t le
             }
             break;
         case 6: /* DO2 */
-            if (sSettings.sInOuts.ro_type_source[1] == SNMP_SET) {
+            if (sSettings.sRelays[1].ro_type_source == SNMP_SET) {
                 val_string = (char *)value;
                 SetROStr(val_string, 1);
                 if (val_string[0] == 0x31) {
@@ -356,7 +356,7 @@ static snmp_err_t signal_set_test(struct snmp_node_instance *instance, u16_t len
                 val_string = (char *)value;
                 val_string[len] = 0;
                 if (atoi(val_string) <= 1) {
-                    if (sSettings.sInOuts.ro_type_source[0] == SNMP_SET) {
+                    if (sSettings.sRelays[0].ro_type_source == SNMP_SET) {
                         ret = SNMP_ERR_NOERROR;
                     }
                 }
@@ -367,7 +367,7 @@ static snmp_err_t signal_set_test(struct snmp_node_instance *instance, u16_t len
                 val_string = (char *)value;
                 val_string[len] = 0;
                 if (atoi(val_string) <= 1) {
-                    if (sSettings.sInOuts.ro_type_source[1] == SNMP_SET) {
+                    if (sSettings.sRelays[1].ro_type_source == SNMP_SET) {
                         ret = SNMP_ERR_NOERROR;
                     }
                 }

+ 6 - 6
modules/Ethernet/private_mib_bt6707.c

@@ -279,7 +279,7 @@ static snmp_err_t signal_set_value(struct snmp_node_instance *instance, u16_t le
             }
             break;
         case 5: /* DO1 */
-            if (sSettings.sInOuts.ro_type_source[0] == SNMP_SET) {
+            if (sSettings.sRelays[0].ro_type_source == SNMP_SET) {
                 val_string = (char *)value;
                 SetROStr(val_string, 0);
                 if (val_string[0] == 0x31) {
@@ -292,7 +292,7 @@ static snmp_err_t signal_set_value(struct snmp_node_instance *instance, u16_t le
             }
             break;
         case 6: /* DO2 */
-            if (sSettings.sInOuts.ro_type_source[1] == SNMP_SET) {
+            if (sSettings.sRelays[1].ro_type_source == SNMP_SET) {
                 val_string = (char *)value;
                 SetROStr(val_string, 1);
                 if (val_string[0] == 0x31) {
@@ -305,7 +305,7 @@ static snmp_err_t signal_set_value(struct snmp_node_instance *instance, u16_t le
             }
             break;
         case 7: /* DO2*/
-            if (sSettings.sInOuts.ro_type_source[2] == SNMP_SET) {
+            if (sSettings.sRelays[2].ro_type_source == SNMP_SET) {
                 val_string = (char *)value;
                 SetROStr(val_string, 2);
                 if (val_string[0] == 0x31) {
@@ -382,7 +382,7 @@ static snmp_err_t signal_set_test(struct snmp_node_instance *instance, u16_t len
                 val_string = (char *)value;
                 val_string[len] = 0;
                 if (atoi(val_string) <= 1) {
-                    if (sSettings.sInOuts.ro_type_source[0] == SNMP_SET) {
+                    if (sSettings.sRelays[0].ro_type_source == SNMP_SET) {
                         ret = SNMP_ERR_NOERROR;
                     }
                 }
@@ -393,7 +393,7 @@ static snmp_err_t signal_set_test(struct snmp_node_instance *instance, u16_t len
                 val_string = (char *)value;
                 val_string[len] = 0;
                 if (atoi(val_string) <= 1) {
-                    if (sSettings.sInOuts.ro_type_source[1] == SNMP_SET) {
+                    if (sSettings.sRelays[1].ro_type_source == SNMP_SET) {
                         ret = SNMP_ERR_NOERROR;
                     }
                 }
@@ -404,7 +404,7 @@ static snmp_err_t signal_set_test(struct snmp_node_instance *instance, u16_t len
                 val_string = (char *)value;
                 val_string[len] = 0;
                 if (atoi(val_string) <= 1) {
-                    if (sSettings.sInOuts.ro_type_source[2] == SNMP_SET) {
+                    if (sSettings.sRelays[2].ro_type_source == SNMP_SET) {
                         ret = SNMP_ERR_NOERROR;
                     }
                 }

+ 17 - 14
modules/cli/CLI_Commands.c

@@ -425,10 +425,13 @@ generates a table that shows how much run time each task has */
 static const CLI_Command_Definition_t prvSensorCommandDefinition = {
     ( const int8_t *const ) "sensor",  /* The command string to type. */
     ( const int8_t *const ) "\tsensor info: вывод параметров системы (выход из режима Ctrl+C далее Enter)\r\n"
-#ifdef INOUTS_ENABLE
+
+#ifdef DINS_ENABLE
 							"\tsensor 	setup DI <num> <state>: установка нормального состояния сухого контакта:\r\n"
 							"\t\t\t\t0 - разомкнутое состояние\r\n"
 							"\t\t\t\t1 - замкнутое состояние\r\n"
+#endif
+#ifdef DOUTS_ENABLE
 							"\tsensor 	setup DO <num> <issue>: установка источника срабатывания реле:\r\n"
 							"\t\t\t\t1 - Наличие сети\r\n"
 							"\t\t\t\t2 - Наличие выходного напряжения\r\n"
@@ -2167,7 +2170,7 @@ static portBASE_TYPE prvTaskConfigCommand(cli_state_t *cli_state, int8_t *pcWrit
                         strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInfoTableHeader, strlen( ( char * ) pcInfoTableHeader ) );
                         snmp_config_param(pcWriteBuffer);
                         break;
-#ifdef INOUTS_ENABLE
+#ifdef DINS_ENABLE || DOUTS_ENABLE
                     case PARAM_CONFIG_INOUTS:
                         inouts_config_param(pcWriteBuffer);
                         break;
@@ -2475,7 +2478,7 @@ static portBASE_TYPE prvTaskSensorCommand(cli_state_t *cli_state, int8_t *pcWrit
     static uint8_t config_menu = 0;
     uint8_t MAX_CONFIG_PARAM = 0;
 
-#ifdef HARDWARE_BT6707
+#ifdef DINS_ENABLE || DOUTS_ENABLE
     MAX_CONFIG_PARAM = 3;
 #else
     MAX_CONFIG_PARAM = 2;
@@ -2528,7 +2531,7 @@ static portBASE_TYPE prvTaskSensorCommand(cli_state_t *cli_state, int8_t *pcWrit
                 case 1:
                     ups_sensor_akb_param(pcWriteBuffer);
                     break;
-#ifdef INOUTS_ENABLE
+#ifdef DINS_ENABLE || DOUTS_ENABLE
                 case 2:
                     inouts_sensor_param(pcWriteBuffer);
                     break;
@@ -2547,7 +2550,7 @@ static portBASE_TYPE prvTaskSensorCommand(cli_state_t *cli_state, int8_t *pcWrit
         }
     } else {
         switch (i) {
-#ifdef HARDWARE_BT6707
+#ifdef DINS_ENABLE || DOUTS_ENABLE
             case ARG_SENSOR_SETUP:
                 if (cli_state->user_id != ADMIN) {
                     strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
@@ -2597,38 +2600,38 @@ static portBASE_TYPE prvTaskSensorCommand(cli_state_t *cli_state, int8_t *pcWrit
                         fail = 1;
                         break;
                     }
+                    fail = 1;
+#ifdef DINS_ENABLE
                     if (strncmp(str, "DI", 2) == 0) {
                         if (val != 1) {
-                            fail = 1;
                             break;
                         }
 
                         val2 = atoi(temp_str);
                         if (val2 < 0 || val2 > 1) {
-                            fail = 1;
                             break;
                         }
                         SetDINTypeActStr(temp_str, (val - 1));
                         cli_save_config(cli_state);
-
-                    } else if (strncmp(str, "DO", 2) == 0) {
+                        fail = 0;
+                    }
+#endif
+#ifdef DOUTS_ENABLE 
+                    if (strncmp(str, "DO", 2) == 0) {
                         if (val < 1 || val > 3) {
-                            fail = 1;
                             break;
                         }
 
                         val2 = atoi(temp_str);
                         if (val2 < 1 || val2 > 5) {
-                            fail = 1;
                             break;
                         }
                         SetROTypeActStr(temp_str, (val - 1));
                         cli_save_config(cli_state);
+                        fail = 0;
                     }
-                } else {
-                    fail = 1;
                 }
-
+#endif 
                 break;
 #endif
             default:

+ 1 - 1
modules/cli/CLI_Commands.h

@@ -103,7 +103,7 @@ typedef enum{
 
 typedef enum{
 	PARAM_CONFIG_SNMP = 0,
-#ifdef INOUTS_ENABLE
+#ifdef DINS_ENABLE || DOUTS_ENABLE
 	PARAM_CONFIG_INOUTS,
 #endif
 	PARAM_CONFIG_AKB,

+ 10 - 7
modules/cli/CLI_Parameters.c

@@ -69,7 +69,7 @@ void snmp_config_param(int8_t *buf)
     strcat(( char * ) buf, "\r\n");
 }
 
-#ifdef INOUTS_ENABLE
+#ifdef DINS_ENABLE || DOUTS_ENABLE
 //Настройки сухих контактов
 void inouts_config_param(int8_t *buf)
 {
@@ -90,7 +90,7 @@ void inouts_config_param(int8_t *buf)
     /* Return the next command help string, before moving the pointer on to
     the next command in the list. */
     strncpy( ( char * ) buf, ( const char * ) pcInOutsTableHeader, strlen( ( char * ) pcInOutsTableHeader ) );
-
+#ifdef DINS_ENABLE
     strncat( ( char * ) buf, ( const char * ) pcDryInsTableHeader, strlen( ( char * ) pcDryInsTableHeader ) );
     strncat( ( char * ) buf, ( const char * ) pcDryInsTableHeader2, strlen( ( char * ) pcDryInsTableHeader2 ) );
     strncat( ( char * ) buf, ( const char * ) pcSharedTableHeader, strlen( ( char * ) pcSharedTableHeader ) );
@@ -107,7 +107,8 @@ void inouts_config_param(int8_t *buf)
     }
     strncat( ( char * ) buf, ( const char * ) pcSharedTableHeader, strlen( ( char * ) pcSharedTableHeader ) );
     strcat(( char * ) buf, "\r\n");
-
+#endif
+#ifdef DOUTS_ENABLE
     strncat( ( char * ) buf, ( const char * ) pcRelaysTableHeader, strlen( ( char * ) pcRelaysTableHeader ) );
     strncat( ( char * ) buf, ( const char * ) pcRelaysTableHeader2, strlen( ( char * ) pcRelaysTableHeader2 ) );
     strncat( ( char * ) buf, ( const char * ) pcSharedTableHeader, strlen( ( char * ) pcSharedTableHeader ) );
@@ -137,6 +138,7 @@ void inouts_config_param(int8_t *buf)
         strcat(( char * ) buf, "\r\n");
     }
     strncat( ( char * ) buf, ( const char * ) pcSharedTableHeader, strlen( ( char * ) pcSharedTableHeader ) );
+#endif
 }
 #endif
 
@@ -502,7 +504,7 @@ void ups_sensor_akb_param(int8_t *buf)
     strcat(( char * ) buf, "\r\n");
 }
 
-#ifdef INOUTS_ENABLE
+#ifdef DINS_ENABLE || DOUTS_ENABLE
 //Параметры сухих контактов
 void inouts_sensor_param(int8_t *buf)
 {
@@ -514,11 +516,12 @@ void inouts_sensor_param(int8_t *buf)
     /* Return the next command help string, before moving the pointer on to
     the next command in the list. */
     strncpy( ( char * ) buf, ( const char * ) pcInOutsInfoTableHeader, strlen( ( char * ) pcInOutsInfoTableHeader ) );
-
+#ifdef DINS_ENABLE
     GetDIN0StatusStrRU(str, &len);
     strcat(( char * ) buf, "Дискретный вход:\t\t\t");
     strncat(( char * ) buf, str, len);
-
+#endif
+#ifdef DOUTS_ENABLE
     strcat(( char * ) buf, "\r\nРелейный выход 1:\t\t\t");
     GetDOUTStatusStrRU(str, &len, 0);
     strncat(( char * ) buf, str, len);
@@ -530,7 +533,7 @@ void inouts_sensor_param(int8_t *buf)
     strcat(( char * ) buf, "\r\nРелейный выход 3:\t\t\t");
     GetDOUTStatusStrRU(str, &len, 2);
     strncat(( char * ) buf, str, len);
-
+#endif
     strcat(( char * ) buf, "\r\n");
 }
 #endif

+ 2 - 2
modules/cli/CLI_Parameters.h

@@ -12,7 +12,7 @@
 //Настройки SNMP
 void snmp_config_param(int8_t *buf);
 
-#ifdef INOUTS_ENABLE
+#ifdef DINS_ENABLE || DOUTS_ENABLE
 //Настройки сухих контактов
 void inouts_config_param(int8_t *buf);
 #endif
@@ -47,7 +47,7 @@ void ups_sensor_param(int8_t *buf);
 //Параметры аккумуляторных батарей
 void ups_sensor_akb_param(int8_t *buf);
 
-#ifdef INOUTS_ENABLE
+#ifdef DINS_ENABLE || DOUTS_ENABLE
 //Параметры сухих контактов
 void inouts_sensor_param(int8_t *buf);
 #endif

+ 41 - 39
modules/d_inouts/d_inouts.c

@@ -11,23 +11,16 @@
 #ifdef PRINTF_CUSTOM
 #include "tinystdio.h"
 #endif
-#ifdef INOUTS_ENABLE
+#ifdef DINS_ENABLE
 #define INOUTS_EXPAND_AS_GPIO_GET(id, ...) 		\
 		inputs[id - DIN1] = gpio_get(id);
 
-#define OUTPUTS_EXPAND_AS_GPIO_SET(id, ...) 		\
-		gpio_set(id, outputs[id - DOUT1]);
-
 #define UPDATE_INPUTS() \
 	DI_TABLE(INOUTS_EXPAND_AS_GPIO_GET) \
 
-#define APPLY_OUTPUTS() \
-	RELAYS(OUTPUTS_EXPAND_AS_GPIO_SET)
-
-
-uint8_t  inputs[INPUTS_TOTAL_COUNT], outputs[OUTPUTS_TOTAL_COUNT];
+uint8_t  inputs[INPUTS_TOTAL_COUNT];
 /* data actuality mutexes */
-static SemaphoreHandle_t outputs_mutex, inputs_mutex;
+static SemaphoreHandle_t inputs_mutex;
 
 uint8_t get_state_din_outs(gpio_t pin) {
 	uint8_t res = 0;
@@ -35,27 +28,6 @@ uint8_t get_state_din_outs(gpio_t pin) {
 	return res;
 }
 
-void set_state_douts(gpio_t pin, uint8_t value)
-{
-	gpio_set(pin, value);
-}
-
-void d_inouts_task(void *arg) {
-	inputs_mutex  = xSemaphoreCreateMutex();
-	outputs_mutex = xSemaphoreCreateMutex();
-	while(true) {
-		if (xSemaphoreTake(inputs_mutex, 100)) {
-			UPDATE_INPUTS();
-			xSemaphoreGive(inputs_mutex);
-		}
-		if (xSemaphoreTake(outputs_mutex, 100)) {
-			APPLY_OUTPUTS();
-			xSemaphoreGive(outputs_mutex);
-		}
-		vTaskDelay(50);
-	}
-}
-
 /* 
  * get state of discrete inputs;
  ** parameters
@@ -81,7 +53,22 @@ bool get_inputs(uint8_t *inputs_p) {
 	}
 	return res;
 }
+#endif
+#ifdef DOUTS_ENABLE
+#define OUTPUTS_EXPAND_AS_GPIO_SET(id, ...) 		\
+		gpio_set(id, outputs[id - DOUT1]);
+
+#define APPLY_OUTPUTS() \
+	RELAYS(OUTPUTS_EXPAND_AS_GPIO_SET)
 
+uint8_t  outputs[OUTPUTS_TOTAL_COUNT];
+/* data actuality mutexes */
+static SemaphoreHandle_t outputs_mutex;
+
+void set_state_douts(gpio_t pin, uint8_t value)
+{
+	gpio_set(pin, value);
+}
 
 /* 
  * set outputs to a given state;
@@ -108,15 +95,30 @@ bool set_outputs(uint8_t *outputs_p) {
 	}
 	return res;
 }
-
-/* passed */
-void d_inouts_test(void *arg) {
-	uint8_t tmp[INPUTS_TOTAL_COUNT] = {0};
-	while (true) {
-		if (get_inputs(tmp))
-			set_outputs(tmp);
+#endif
+#ifdef DINS_ENABLE | DOUTS_ENABLE
+void d_inouts_task(void *arg) {
+#ifdef DINS_ENABLE
+	inputs_mutex  = xSemaphoreCreateMutex();
+#endif
+#ifdef DOUTS_ENABLE
+	outputs_mutex = xSemaphoreCreateMutex();
+#endif
+	while(true) {
+#ifdef DINS_ENABLE
+		if (xSemaphoreTake(inputs_mutex, 100)) {
+			UPDATE_INPUTS();
+			xSemaphoreGive(inputs_mutex);
+		}
+#endif
+#ifdef DOUTS_ENABLE
+		if (xSemaphoreTake(outputs_mutex, 100)) {
+			APPLY_OUTPUTS();
+			xSemaphoreGive(outputs_mutex);
+		}
+#endif
 		vTaskDelay(50);
 	}
 }
-	
 #endif
+

+ 13 - 9
modules/d_inouts/d_inouts.h

@@ -3,29 +3,33 @@
 #include <stdbool.h>
 #include <stdint.h>
 #include <stdlib.h>
-#ifdef INOUTS_ENABLE
-#define INOUTS_EXPAND_AS_ENUM(name, ...) name ## _,
-
 
+#define INOUTS_EXPAND_AS_ENUM(name, ...) name ## _,
 
+#ifdef DINS_ENABLE
 enum inputs_e {
 	DI_TABLE(INOUTS_EXPAND_AS_ENUM)
 	INPUTS_TOTAL_COUNT
 };
 
+extern uint8_t inputs[INPUTS_TOTAL_COUNT];
+
+bool get_inputs(uint8_t *inputs_p); 
+uint8_t get_state_din_outs(gpio_t pin);
+#endif
+#ifdef DOUTS_ENABLE
 enum outputs_e {
 	RELAYS(INOUTS_EXPAND_AS_ENUM)
 	OUTPUTS_TOTAL_COUNT
 };
 
-extern uint8_t  inputs[INPUTS_TOTAL_COUNT], outputs[OUTPUTS_TOTAL_COUNT];
-void  d_inouts_task(void *arg);
-void  d_inouts_test(void *arg);
+extern uint8_t outputs[OUTPUTS_TOTAL_COUNT];
 
-bool get_inputs(uint8_t *inputs_p); 
 bool set_outputs(uint8_t *outputs_p);
-
-uint8_t get_state_din_outs(gpio_t pin);
 void set_state_douts(gpio_t pin, uint8_t value);
+#endif
+#ifdef DINS_ENABLE || DOUTS_ENABLE
+void  d_inouts_task(void *arg);
+
 #endif
 #endif /* D_INOUTS_H */

+ 17 - 16
modules/parameters.c

@@ -495,16 +495,15 @@ void GetSntpLastDataStr(char *str, uint8_t *len)
     *len = strlen(str);
 }
 
-#ifdef INOUTS_ENABLE
 // ************************************************************************** //
 //                             Параметры реле/сухих контактов
-
+#ifdef DINS_ENABLE
 /**
   * @brief  Тип действий при срабатывание сухих контактов
   */
 void GetDINTypeActStr(char *str, uint8_t *len, uint8_t num)
 {
-    sprintf(str, "%d", sSettings.sInOuts.din_type_act[num]);
+    sprintf(str, "%d", sSettings.sDINs[num].din_type_act);
     *len = strlen(str);
 }
 
@@ -513,7 +512,7 @@ void GetDINTypeActStr(char *str, uint8_t *len, uint8_t num)
   */
 void GetDIN1TypeActStr(char *str, uint8_t *len)
 {
-    sprintf(str, "%d", sSettings.sInOuts.din_type_act[DIN1]);
+    sprintf(str, "%d", sSettings.sDINs[DIN1].din_type_act);
     *len = strlen(str);
 }
 
@@ -547,13 +546,14 @@ void GetDIN0StatusStrRU(char *str, uint8_t *len)
     }
     *len = strlen(str);
 }
-
+#endif
+#ifdef DOUTS_ENABLE
 /**
   * @brief  Источник срабатывания реле
   */
 void GetROTypeActStr(char *str, uint8_t *len, uint8_t num)
 {
-    sprintf(str, "%d", sSettings.sInOuts.ro_type_source[num]);
+    sprintf(str, "%d", sSettings.sRelays[num].ro_type_source);
     *len = strlen(str);
 }
 
@@ -562,7 +562,7 @@ void GetROTypeActStr(char *str, uint8_t *len, uint8_t num)
   */
 void GetRO0TypeActStr(char *str, uint8_t *len)
 {
-    sprintf(str, "%d", sSettings.sInOuts.ro_type_source[DOUT1]);
+    sprintf(str, "%d", sSettings.sRelays[DOUT1].ro_type_source);
     *len = strlen(str);
 }
 
@@ -571,7 +571,7 @@ void GetRO0TypeActStr(char *str, uint8_t *len)
   */
 void GetRO1TypeActStr(char *str, uint8_t *len)
 {
-    sprintf(str, "%d", sSettings.sInOuts.ro_type_source[DOUT2]);
+    sprintf(str, "%d", sSettings.sRelays[DOUT2].ro_type_source);
     *len = strlen(str);
 }
 
@@ -581,7 +581,7 @@ void GetRO1TypeActStr(char *str, uint8_t *len)
   */
 void GetRO2TypeActStr(char *str, uint8_t *len)
 {
-    sprintf(str, "%d", sSettings.sInOuts.ro_type_source[DOUT3]);
+    sprintf(str, "%d", sSettings.sRelays[DOUT3].ro_type_source);
     *len = strlen(str);
 }
 #endif
@@ -2262,16 +2262,16 @@ void SetSntpTimeZoneStr(char *str)
     sSettings.sSNTP.timeZone = newUtc; // atof(str);
     //TM_RTC_Correction(sSettings.sSNTP.timeZone);
 }
-#ifdef INOUTS_ENABLE
+
 // ************************************************************************** //
 //                             Параметры реле/сухих контактов
-
+#ifdef DINS_ENABLE
 /**
   * @brief  Тип действий при срабатывание сухих контактов
   */
 void SetDINTypeActStr(char *str, uint8_t num)
 {
-    sSettings.sInOuts.din_type_act[num] = atoi(str);
+    sSettings.sDINs[num].din_type_act = atoi(str);
 }
 
 /**
@@ -2281,7 +2281,8 @@ void SetDIN1TypeActStr(char *str)
 {
     SetDINTypeActStr(str, 0);
 }
-
+#endif
+#ifdef DOUTS_ENABLE
 /**
   * @brief  Источник срабатывания реле
   */
@@ -2289,11 +2290,11 @@ void SetROTypeActStr(char *str, uint8_t num)
 {
     static uint8_t OldROtype_Sourse[2] = {0};
 
-    OldROtype_Sourse[num] = sSettings.sInOuts.ro_type_source[num];
+    OldROtype_Sourse[num] = sSettings.sRelays[num].ro_type_source;
 
-    sSettings.sInOuts.ro_type_source[num] = atoi(str);
+    sSettings.sRelays[num].ro_type_source = atoi(str);
 
-    if (OldROtype_Sourse[num] != sSettings.sInOuts.ro_type_source[num]) {
+    if (OldROtype_Sourse[num] != sSettings.sRelays[num].ro_type_source) {
         SetROInt(0, num);
     }
 }

+ 6 - 5
modules/parameters.h

@@ -439,10 +439,9 @@ void GetAuthEnableStateStr(char *str, uint8_t *len);
 
 #endif
 
-#ifdef INOUTS_ENABLE
 // ************************************************************************** //
 //                             Параметры реле/сухих контактов
-
+#ifdef DINS_ENABLE
 /**
   * @brief  Тип действий при срабатывание сухих контактов
   */
@@ -467,7 +466,8 @@ void GetDIN0StatusStr(char *str, uint8_t *len);
   * @brief  Состояние сухого контакта
   */
 void GetDIN0StatusStrRU(char *str, uint8_t *len);
-
+#endif
+#ifdef DOUTS_ENABLE
 /**
   * @brief  Источник срабатывания реле
   */
@@ -977,10 +977,9 @@ void SetSntpServerIpStr(char *str);
   */
 void SetSntpTimeZoneStr(char *str);
 
-#ifdef INOUTS_ENABLE
 // ************************************************************************** //
 //                             Параметры реле/сухих контактов
-
+#ifdef DINS_ENABLE
 /**
   * @brief  Тип действий при срабатывание сухих контактов
   */
@@ -990,7 +989,9 @@ void SetDINTypeActStr(char *str, uint8_t num);
   * @brief  Тип действий при срабатывание сухих контактов
   */
 void SetDIN1TypeActStr(char *str);
+#endif
 
+#ifdef DOUTS_ENABLE
 /**
   * @brief  Источник срабатывания реле
   */

+ 21 - 10
modules/settings_api.h

@@ -235,11 +235,20 @@ typedef enum
   */
 typedef enum
 {
-	DI_DISCONN = 0,
+    DI_DISCONN = 0,
     DI_CONN,
     DI_MAX_ACT
 } din_type_act_t;
 
+/**
+  * @brief  Настройки сухих контактов.
+  */
+typedef struct
+{
+    char name[21];
+    din_type_act_t din_type_act;
+} DIN_Settings_t;
+
 /**
   * @brief  Настройки диапазона уровней Аварий.
   */
@@ -283,16 +292,13 @@ typedef struct
 	uint8_t type_ups;
 } UPS_Setting_t;
 
-#ifdef INOUTS_ENABLE
 /**
-  * @brief  Настройки входов/выходов.
-  */
+  * @brief  Настройки реле.
+  */ 
 typedef struct
 {
-	ro_type_source_t ro_type_source[OUTPUTS_TOTAL_COUNT];
-	din_type_act_t din_type_act[INPUTS_TOTAL_COUNT];
-} INOUTS_t;
-#endif
+	ro_type_source_t ro_type_source;
+} RELAY_Settings_t;
 
 /**
   * @brief  Параметры RADIUS
@@ -452,9 +458,14 @@ void SETTINGS_SetFlagsDef(void);
 void SETTINGS_SetSntpDef(void);
 
 /**
-  * @brief  Установить параметры настроек сухих контактов / реле по умолчанию
+  * @brief  Установить параметры настроек сухих контактов по умолчанию
+  */
+void SETTINGS_SetDINSDef(void);
+
+/**
+  * @brief  Установить параметры настроек реле по умолчанию
   */
-void SETTINGS_SetINOUTSDef(void);
+void SETTINGS_SetRelaysDef(void);
 
 /**
   * @brief  Установить значение настроек прозрачного порта по умолчанию

+ 14 - 6
modules/settings_api_bt6703.c

@@ -152,16 +152,24 @@ void SETTINGS_SetSntpDef(void)
 }
 
 /**
-  * @brief  Установить параметры настроек сухих контактов / реле по умолчанию
+  * @brief  Установить параметры настроек реле по умолчанию
   */
-void SETTINGS_SetINOUTSDef(void)
+void SETTINGS_SetRelaysDef(void)
 {
-	sSettings.sInOuts.ro_type_source[0] = CRITICAL;
-	sSettings.sInOuts.ro_type_source[1] = SNMP_SET;
-
-	sSettings.sInOuts.din_type_act[0] = DI_CONN;
+	sSettings.sRelays[0].ro_type_source = CRITICAL;
+	sSettings.sRelays[1].ro_type_source = SNMP_SET;
 }
 
+/**
+  * @brief  Установить параметры настроек сухих контактов по умолчанию
+  */
+void SETTINGS_SetDINSDef(void)
+{
+	for(uint8_t i = 0; i < INPUTS_TOTAL_COUNT; i ++) {
+    sSettings.sDINs[i].din_type_act = DI_CONN;
+    memset(sSettings.sDINs[i].name, 0, sizeof(sSettings.sDINs[i].name));
+    sprintf( sSettings.sDINs[i].name, "Вход%d", (i + 1));
+  }
 /**
   * @brief  Установить параметры RADIUS по умолчанию
   */

+ 16 - 6
modules/settings_api_bt6707.c

@@ -155,15 +155,25 @@ void SETTINGS_SetSntpDef(void)
 }
 
 /**
-  * @brief  Установить параметры настроек сухих контактов / реле по умолчанию
+  * @brief  Установить параметры настроек реле по умолчанию
   */
-void SETTINGS_SetINOUTSDef(void)
+void SETTINGS_SetRelaysDef(void)
 {
-	sSettings.sInOuts.ro_type_source[0] = AC_PRESENT;
-	sSettings.sInOuts.ro_type_source[1] = DC_PRESENT;
-	sSettings.sInOuts.ro_type_source[2] = CHARGE_AKB;
+  sSettings.sRelays[0].ro_type_source = AC_PRESENT;
+	sSettings.sRelays[1].ro_type_source = DC_PRESENT;
+	sSettings.sRelays[2].ro_type_source = CHARGE_AKB;
+}
 
-	sSettings.sInOuts.din_type_act[0] = DI_CONN;
+/**
+  * @brief  Установить параметры настроек сухих контактов по умолчанию
+  */
+void SETTINGS_SetDINSDef(void)
+{
+  for(uint8_t i = 0; i < INPUTS_TOTAL_COUNT; i ++) {
+    sSettings.sDINs[i].din_type_act = DI_CONN;
+    memset(sSettings.sDINs[i].name, 0, sizeof(sSettings.sDINs[i].name));
+    sprintf( sSettings.sDINs[i].name, "Вход%d", (i + 1));
+  }
 }
 
 /**

+ 10 - 2
modules/settings_api_bt6709.c

@@ -152,9 +152,17 @@ void SETTINGS_SetSntpDef(void)
 }
 
 /**
-  * @brief  Установить параметры настроек сухих контактов / реле по умолчанию
+  * @brief  Установить параметры настроек реле по умолчанию
   */
-void SETTINGS_SetINOUTSDef(void)
+void SETTINGS_SetRelaysDef(void)
+{
+
+}
+
+/**
+  * @brief  Установить параметры настроек сухих контактов по умолчанию
+  */
+void SETTINGS_SetDINSDef(void)
 {
 
 }

+ 15 - 6
modules/settings_api_bt6710.c

@@ -155,14 +155,15 @@ void SETTINGS_SetSntpDef(void)
 }
 
 /**
-  * @brief  Установить параметры настроек сухих контактов / реле по умолчанию
+  * @brief  Установить параметры настроек сухих контактов по умолчанию
   */
-void SETTINGS_SetINOUTSDef(void)
+void SETTINGS_SetDINSDef(void)
 {
-    sSettings.sInOuts.ro_type_source[0] = CRITICAL;
-    sSettings.sInOuts.ro_type_source[1] = SNMP_SET;
-
-    sSettings.sInOuts.din_type_act[0] = DI_CONN;
+  for(uint8_t i = 0; i < INPUTS_TOTAL_COUNT; i ++) {
+    sSettings.sDINs[i].din_type_act = DI_CONN;
+    memset(sSettings.sDINs[i].name, 0, sizeof(sSettings.sDINs[i].name));
+    sprintf( sSettings.sDINs[i].name, "Вход%d", (i + 1));
+  }
 }
 
 /**
@@ -183,6 +184,14 @@ void SETTINGS_SetPortGwDef(void)
     sSettings.sPortGw.quota = 60;
 }
 
+/**
+  * @brief  Установить параметры настроек реле по умолчанию
+  */
+void SETTINGS_SetRelaysDef(void)
+{
+
+}
+
 /**
   * @brief  Установить параметры RADIUS по умолчанию
   */

+ 18 - 7
service_hw/Commands/bt_6701_commands.c

@@ -93,14 +93,15 @@ void Test_U232(void)
     printf("U232 OK\r\n");
     TEST_SetTest(TEST_WAIT);
 }
-#ifdef INOUTS_ENABLE
+
+#ifdef HARDWARE_BT6703 || HARDWARE_BT6707
 /**
   * @brief  
   */
 void Test_DRY(void)
 {
     uint8_t inputState;
-#if defined HARDWARE_BT6707
+#if defined HARDWARE_BT6707 
     uint8_t start_state = 0;
     uint8_t end_state = 1;
     set_state_douts(DOUT1, 1);
@@ -200,9 +201,15 @@ void vTest_DEF(void *params)
         if (timeout++ > BUTTON_TIMEOUT) {
             timeout = 0;
             DefCounter = 0;
-            LED_Off(LED_INIT_R);
-			LED_Off(LED_MAJOR_R);
-			LED_Off(LED_MINOR_R);
+#ifdef LED_INIT_ERR
+            LED_Off(LED_INIT_ERR);
+#endif
+#ifdef LED_ALARM
+			LED_Off(LED_ALARM);
+#endif
+#ifdef LED_RED_MINOR
+			LED_Off(LED_RED_MINOR);
+#endif
             printf("DEF FAIL\r\n");
             TEST_SetTest(TEST_WAIT);
             ifTest_DEF = false;
@@ -243,8 +250,12 @@ void vTest_SET(void *params)
         if (timeout_set++ > BUTTON_TIMEOUT) {
             timeout_set = 0;
             SetCounter = 0;
-            LED_Off(LED_INIT_G);
-			LED_Off(LED_MINOR_G);
+#ifdef LED_INIT_OK
+            LED_Off(LED_INIT_OK);
+#endif
+#ifdef LED_GREEN_MINOR
+			LED_Off(LED_GREEN_MINOR);
+#endif
             printf("SET FAIL\r\n");
             TEST_SetTest(TEST_WAIT);
             ifTest_SET = false;

+ 1 - 1
service_hw/Commands/commands_api.c

@@ -137,7 +137,7 @@ void vTestCommands(void *params)
             case TEST_U232 :
                 Test_U232();
             break;
-#ifdef INOUTS_ENABLE
+#ifdef HARDWARE_BT6703 || HARDWARE_BT6707
             case TEST_DRY :
                 Test_DRY();
             break;

+ 1 - 1
service_hw/Commands/commands_api.h

@@ -50,7 +50,7 @@ typedef enum
 void TestProcessing(void);
 
 void Test_U232U485(void);
-#ifdef INOUTS_ENABLE
+#ifdef HARDWARE_BT6703 || HARDWARE_BT6707
 void Test_DRY(void);
 #endif
 void Test_U232F(void);