|  | @@ -28,460 +28,509 @@ extern SETTINGS_t sSettings;
 | 
	
		
			
				|  |  |  //Настройки SNMP
 | 
	
		
			
				|  |  |  void snmp_config_param(int8_t *buf)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -	char str[20];
 | 
	
		
			
				|  |  | -	uint8_t len = 0;
 | 
	
		
			
				|  |  | +    char str[20];
 | 
	
		
			
				|  |  | +    uint8_t len = 0;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	const int8_t * const pcInfoTableHeader = ( int8_t * ) "\r\n***********SNMP настройки Контроллера***********\r\n";
 | 
	
		
			
				|  |  | -	/* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | -	the next command in the list. */
 | 
	
		
			
				|  |  | -	strncpy( ( char * ) buf, ( const char * ) pcInfoTableHeader, strlen( ( char * ) pcInfoTableHeader ) );
 | 
	
		
			
				|  |  | +    const int8_t *const pcInfoTableHeader = ( int8_t * )
 | 
	
		
			
				|  |  | +        "\r\n***********SNMP настройки Контроллера***********\r\n";
 | 
	
		
			
				|  |  | +    /* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | +    the next command in the list. */
 | 
	
		
			
				|  |  | +    strncpy( ( char * ) buf, ( const char * ) pcInfoTableHeader, strlen( ( char * ) pcInfoTableHeader ) );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	GetManagerIp(str, &len);
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "Ceрвер 1:\t\t\t");
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    GetManagerIp(str, &len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "Ceрвер 1:\t\t\t");
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nСервер 2:\t\t\t");
 | 
	
		
			
				|  |  | -	GetManagerIp2(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nСервер 2:\t\t\t");
 | 
	
		
			
				|  |  | +    GetManagerIp2(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nСервер 3:\t\t\t");
 | 
	
		
			
				|  |  | -	GetManagerIp3(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nСервер 3:\t\t\t");
 | 
	
		
			
				|  |  | +    GetManagerIp3(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nСервер 4:\t\t\t");
 | 
	
		
			
				|  |  | -	GetManagerIp4(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nСервер 4:\t\t\t");
 | 
	
		
			
				|  |  | +    GetManagerIp4(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nСервер 5:\t\t\t");
 | 
	
		
			
				|  |  | -	GetManagerIp5(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nСервер 5:\t\t\t");
 | 
	
		
			
				|  |  | +    GetManagerIp5(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nRead community:\t\t\t");
 | 
	
		
			
				|  |  | -	GetReadCommunity(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nRead community:\t\t\t");
 | 
	
		
			
				|  |  | +    GetReadCommunity(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nWrite community:\t\t");
 | 
	
		
			
				|  |  | -	GetWriteCommunity(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nWrite community:\t\t");
 | 
	
		
			
				|  |  | +    GetWriteCommunity(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #ifndef HARDWARE_BT6709
 | 
	
		
			
				|  |  |  //Настройки сухих контактов
 | 
	
		
			
				|  |  |  void inouts_config_param(int8_t *buf)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -	char str[20];
 | 
	
		
			
				|  |  | -	char str_temp[20];
 | 
	
		
			
				|  |  | -	uint8_t len = 0;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	const int8_t * const pcInOutsTableHeader = ( int8_t * ) "\r\n*********Настройки сухих контактов Контроллера*********\r\n";
 | 
	
		
			
				|  |  | -	const int8_t * const pcDryInsTableHeader = ( int8_t * ) "Дискретные входы\r\n";
 | 
	
		
			
				|  |  | -	const int8_t * const pcDryInsTableHeader2 = ( int8_t * ) "\r\nКонтакт\t\tНормальное состояние\r\n";
 | 
	
		
			
				|  |  | -	const int8_t * const pcRelaysTableHeader = ( int8_t * ) "Релейные выходы\r\n";
 | 
	
		
			
				|  |  | -	const int8_t * const pcRelaysTableHeader2 = ( int8_t * ) "\r\nКонтакт\t\tИсточник\r\n";
 | 
	
		
			
				|  |  | -	const int8_t * const pcSharedTableHeader = ( int8_t * ) "------------+--------------------------------------------\r\n";
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/* 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 ) );
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	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 ) );
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	GetDINTypeActStr(str, &len, 0);
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "1:\t\t");
 | 
	
		
			
				|  |  | -	switch(str[0]){
 | 
	
		
			
				|  |  | -	case '0':
 | 
	
		
			
				|  |  | -		strcat(( char * ) buf, "Разомкнут\r\n");
 | 
	
		
			
				|  |  | -		break;
 | 
	
		
			
				|  |  | -	case '1':
 | 
	
		
			
				|  |  | -		strcat(( char * ) buf, "Замкнут\r\n");
 | 
	
		
			
				|  |  | -		break;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -	strncat( ( char * ) buf, ( const char * ) pcSharedTableHeader, strlen( ( char * ) pcSharedTableHeader ) );
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	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 ) );
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	for(uint8_t i = 0; i < OUTPUTS_TOTAL_COUNT; i++){
 | 
	
		
			
				|  |  | -		GetROTypeActStr(str, &len, i);
 | 
	
		
			
				|  |  | -		memset(str_temp, 0, strlen(str_temp));
 | 
	
		
			
				|  |  | -		sprintf(str_temp, "%d:\t\t", i);
 | 
	
		
			
				|  |  | -		strncat(( char * ) buf, str_temp, strlen(str_temp));
 | 
	
		
			
				|  |  | -		switch(str[0]){
 | 
	
		
			
				|  |  | -		case '0':
 | 
	
		
			
				|  |  | -			strcat(( char * ) buf, "Наличие сети\r\n");
 | 
	
		
			
				|  |  | -			break;
 | 
	
		
			
				|  |  | -		case '1':
 | 
	
		
			
				|  |  | -			strcat(( char * ) buf, "Наличие выходного напряжения\r\n");
 | 
	
		
			
				|  |  | -			break;
 | 
	
		
			
				|  |  | -		case '2':
 | 
	
		
			
				|  |  | -			strcat(( char * ) buf, "Разряд АКБ\r\n");
 | 
	
		
			
				|  |  | -			break;
 | 
	
		
			
				|  |  | -		case '3':
 | 
	
		
			
				|  |  | -			strcat(( char * ) buf, "Отключение АКБ\r\n");
 | 
	
		
			
				|  |  | -			break;
 | 
	
		
			
				|  |  | -		case '4':
 | 
	
		
			
				|  |  | -			strcat(( char * ) buf, "SNMP SET\r\n");
 | 
	
		
			
				|  |  | -			break;
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -	strncat( ( char * ) buf, ( const char * ) pcSharedTableHeader, strlen( ( char * ) pcSharedTableHeader ) );
 | 
	
		
			
				|  |  | +    char str[20];
 | 
	
		
			
				|  |  | +    char str_temp[20];
 | 
	
		
			
				|  |  | +    uint8_t len = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const int8_t *const pcInOutsTableHeader = ( int8_t * )
 | 
	
		
			
				|  |  | +        "\r\n*********Настройки сухих контактов Контроллера*********\r\n";
 | 
	
		
			
				|  |  | +    const int8_t *const pcDryInsTableHeader = ( int8_t * ) "Дискретные входы\r\n";
 | 
	
		
			
				|  |  | +    const int8_t *const pcDryInsTableHeader2 = ( int8_t * )
 | 
	
		
			
				|  |  | +        "\r\nКонтакт\t\tНормальное состояние\r\n";
 | 
	
		
			
				|  |  | +    const int8_t *const pcRelaysTableHeader = ( int8_t * ) "Релейные выходы\r\n";
 | 
	
		
			
				|  |  | +    const int8_t *const pcRelaysTableHeader2 = ( int8_t * ) "\r\nКонтакт\t\tИсточник\r\n";
 | 
	
		
			
				|  |  | +    const int8_t *const pcSharedTableHeader = ( int8_t * ) "------------+--------------------------------------------\r\n";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /* 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 ) );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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 ) );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    GetDINTypeActStr(str, &len, 0);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "1:\t\t");
 | 
	
		
			
				|  |  | +    switch (str[0]) {
 | 
	
		
			
				|  |  | +        case '0':
 | 
	
		
			
				|  |  | +            strcat(( char * ) buf, "Разомкнут\r\n");
 | 
	
		
			
				|  |  | +            break;
 | 
	
		
			
				|  |  | +        case '1':
 | 
	
		
			
				|  |  | +            strcat(( char * ) buf, "Замкнут\r\n");
 | 
	
		
			
				|  |  | +            break;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    strncat( ( char * ) buf, ( const char * ) pcSharedTableHeader, strlen( ( char * ) pcSharedTableHeader ) );
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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 ) );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    for (uint8_t i = 0; i < OUTPUTS_TOTAL_COUNT; i++) {
 | 
	
		
			
				|  |  | +        GetROTypeActStr(str, &len, i);
 | 
	
		
			
				|  |  | +        memset(str_temp, 0, strlen(str_temp));
 | 
	
		
			
				|  |  | +        sprintf(str_temp, "%d:\t\t", i);
 | 
	
		
			
				|  |  | +        strncat(( char * ) buf, str_temp, strlen(str_temp));
 | 
	
		
			
				|  |  | +        switch (str[0]) {
 | 
	
		
			
				|  |  | +            case '0':
 | 
	
		
			
				|  |  | +                strcat(( char * ) buf, "Наличие сети\r\n");
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +            case '1':
 | 
	
		
			
				|  |  | +                strcat(( char * ) buf, "Наличие выходного напряжения\r\n");
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +            case '2':
 | 
	
		
			
				|  |  | +                strcat(( char * ) buf, "Разряд АКБ\r\n");
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +            case '3':
 | 
	
		
			
				|  |  | +                strcat(( char * ) buf, "Отключение АКБ\r\n");
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +            case '4':
 | 
	
		
			
				|  |  | +                strcat(( char * ) buf, "SNMP SET\r\n");
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    strncat( ( char * ) buf, ( const char * ) pcSharedTableHeader, strlen( ( char * ) pcSharedTableHeader ) );
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  //Сетевые настройки
 | 
	
		
			
				|  |  |  void net_config_param(int8_t *buf)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -	char str[20];
 | 
	
		
			
				|  |  | -	uint8_t len = 0;
 | 
	
		
			
				|  |  | +    char str[20];
 | 
	
		
			
				|  |  | +    uint8_t len = 0;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	const int8_t * const pcInfoTableHeader = ( int8_t * ) "\r\n*********Сетевые настройки Контроллера*********\r\n";
 | 
	
		
			
				|  |  | -	/* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | -	the next command in the list. */
 | 
	
		
			
				|  |  | -	strncpy( ( char * ) buf, ( const char * ) pcInfoTableHeader, strlen( ( char * ) pcInfoTableHeader ) );
 | 
	
		
			
				|  |  | +    const int8_t *const pcInfoTableHeader = ( int8_t * )
 | 
	
		
			
				|  |  | +        "\r\n*********Сетевые настройки Контроллера*********\r\n";
 | 
	
		
			
				|  |  | +    /* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | +    the next command in the list. */
 | 
	
		
			
				|  |  | +    strncpy( ( char * ) buf, ( const char * ) pcInfoTableHeader, strlen( ( char * ) pcInfoTableHeader ) );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	GetDhcpStateStrRu(str, &len);
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "DHCP:\t\t\t\t");
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    GetDhcpStateStrRu(str, &len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "DHCP:\t\t\t\t");
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nIP адрес:\t\t\t");
 | 
	
		
			
				|  |  | -	GetIpStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nIP адрес:\t\t\t");
 | 
	
		
			
				|  |  | +    GetIpStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nАдрес шлюза:\t\t\t");
 | 
	
		
			
				|  |  | -	GetGatewayStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nАдрес шлюза:\t\t\t");
 | 
	
		
			
				|  |  | +    GetGatewayStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nАдрес маски подсети:\t\t");
 | 
	
		
			
				|  |  | -	GetMaskStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nАдрес маски подсети:\t\t");
 | 
	
		
			
				|  |  | +    GetMaskStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  //Настройки времени
 | 
	
		
			
				|  |  |  void time_config_param(int8_t *buf)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -	char str[20];
 | 
	
		
			
				|  |  | -	uint8_t len = 0;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	const int8_t * const pcTimeTableHeader = ( int8_t * ) "\r\n*********Настройки времени Контроллера*********\r\n";
 | 
	
		
			
				|  |  | -	/* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | -	the next command in the list. */
 | 
	
		
			
				|  |  | -	strncpy( ( char * ) buf, ( const char * ) pcTimeTableHeader, strlen( ( char * ) pcTimeTableHeader ) );
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	GetSntpStateStrRU(str, &len);
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "Режим установки времени:\t");
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nЧасовой пояс:\t\t\t");
 | 
	
		
			
				|  |  | -	GetSntpTimeZoneStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	if(sSettings.sSNTP.sntpEnable){
 | 
	
		
			
				|  |  | -		strcat(( char * ) buf, "\r\nIP адрес NTP сервера:\t\t");
 | 
	
		
			
				|  |  | -		GetSntpServerIpStr(str, &len);
 | 
	
		
			
				|  |  | -		strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		strcat(( char * ) buf, "\r\nПоследняя дата синхронизации:\t");
 | 
	
		
			
				|  |  | -		GetSntpLastDataStr(str, &len);
 | 
	
		
			
				|  |  | -		strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -	else{
 | 
	
		
			
				|  |  | -		GetDateStr(str, &len);
 | 
	
		
			
				|  |  | -		strcat(( char * ) buf, "\r\nДата:\t\t\t");
 | 
	
		
			
				|  |  | -		strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		strcat(( char * ) buf, "\r\nВремя:\t\t\t");
 | 
	
		
			
				|  |  | -		GetTimeStr(str, &len);
 | 
	
		
			
				|  |  | -		strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | +    char str[20];
 | 
	
		
			
				|  |  | +    uint8_t len = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const int8_t *const pcTimeTableHeader = ( int8_t * )
 | 
	
		
			
				|  |  | +        "\r\n*********Настройки времени Контроллера*********\r\n";
 | 
	
		
			
				|  |  | +    /* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | +    the next command in the list. */
 | 
	
		
			
				|  |  | +    strncpy( ( char * ) buf, ( const char * ) pcTimeTableHeader, strlen( ( char * ) pcTimeTableHeader ) );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    GetSntpStateStrRU(str, &len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "Режим установки времени:\t");
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nЧасовой пояс:\t\t\t");
 | 
	
		
			
				|  |  | +    GetSntpTimeZoneStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    if (sSettings.sSNTP.sntpEnable) {
 | 
	
		
			
				|  |  | +        strcat(( char * ) buf, "\r\nIP адрес NTP сервера:\t\t");
 | 
	
		
			
				|  |  | +        GetSntpServerIpStr(str, &len);
 | 
	
		
			
				|  |  | +        strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        strcat(( char * ) buf, "\r\nПоследняя дата синхронизации:\t");
 | 
	
		
			
				|  |  | +        GetSntpLastDataStr(str, &len);
 | 
	
		
			
				|  |  | +        strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    } else {
 | 
	
		
			
				|  |  | +        GetDateStr(str, &len);
 | 
	
		
			
				|  |  | +        strcat(( char * ) buf, "\r\nДата:\t\t\t");
 | 
	
		
			
				|  |  | +        strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        strcat(( char * ) buf, "\r\nВремя:\t\t\t");
 | 
	
		
			
				|  |  | +        GetTimeStr(str, &len);
 | 
	
		
			
				|  |  | +        strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  //Настройки АКБ
 | 
	
		
			
				|  |  |  void akb_config_param(int8_t *buf)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -	char str[20];
 | 
	
		
			
				|  |  | -	uint8_t len = 0;
 | 
	
		
			
				|  |  | +    char str[20];
 | 
	
		
			
				|  |  | +    uint8_t len = 0;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	const int8_t * const pcAKBTableHeader = ( int8_t * ) "\r\n*********Настройки аккумуляторов ИБП*********\r\n";
 | 
	
		
			
				|  |  | -	/* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | -	the next command in the list. */
 | 
	
		
			
				|  |  | -	strncpy( ( char * ) buf, ( const char * ) pcAKBTableHeader, strlen( ( char * ) pcAKBTableHeader ) );
 | 
	
		
			
				|  |  | +    const int8_t *const pcAKBTableHeader = ( int8_t * )
 | 
	
		
			
				|  |  | +        "\r\n*********Настройки аккумуляторов ИБП*********\r\n";
 | 
	
		
			
				|  |  | +    /* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | +    the next command in the list. */
 | 
	
		
			
				|  |  | +    strncpy( ( char * ) buf, ( const char * ) pcAKBTableHeader, strlen( ( char * ) pcAKBTableHeader ) );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	GetUPSVoltCellMinStr(str, &len);
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "Мин. напряжение ячейки (В):\t\t");
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    GetUPSVoltCellMinStr(str, &len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "Мин. напряжение ячейки (В):\t\t");
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nМакс. напряжение ячейки (В):\t\t");
 | 
	
		
			
				|  |  | -	GetUPSVoltCellMaxStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nМакс. напряжение ячейки (В):\t\t");
 | 
	
		
			
				|  |  | +    GetUPSVoltCellMaxStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #ifdef HARDWARE_BT6709
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	GetVoltageAKBNominalStr(str, &len);
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nНоминальное напряжение (В):\t\t");
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    GetVoltageAKBNominalStr(str, &len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nНоминальное напряжение (В):\t\t");
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nЁмкость (Ач):\t\t\t\t");
 | 
	
		
			
				|  |  | -	GetCapacityNominalAKBStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nЁмкость (Ач):\t\t\t\t");
 | 
	
		
			
				|  |  | +    GetCapacityNominalAKBStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	GetLifeTimeAKBStr(str, &len);
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nСрок службы (лет):\t\t\t");
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    GetLifeTimeAKBStr(str, &len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nСрок службы (лет):\t\t\t");
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nДата установки:\t\t\t\t");
 | 
	
		
			
				|  |  | -	GetDataSetAKBStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nДата установки:\t\t\t\t");
 | 
	
		
			
				|  |  | +    GetDataSetAKBStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	GetUPSPowerStr(str, &len);
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nПолная мощность ИБП (ВА):\t\t");
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    GetUPSPowerStr(str, &len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nПолная мощность ИБП (ВА):\t\t");
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  //Настройки Аварий
 | 
	
		
			
				|  |  |  void alarm_config_param(int8_t *buf)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -	char str[20];
 | 
	
		
			
				|  |  | -	uint8_t len = 0;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	const char *name_range_alarm[] = {
 | 
	
		
			
				|  |  | -			"Нижняя граница:\t\t\t",
 | 
	
		
			
				|  |  | -			"\r\nВерхняя граница:\t\t",
 | 
	
		
			
				|  |  | -			"\r\nГистерезис:\t\t\t",
 | 
	
		
			
				|  |  | -	};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	const int8_t * const pcAlarmTableHeader = ( int8_t * ) "\r\n*********Настройки Аварийных границ*********\r\n";
 | 
	
		
			
				|  |  | -	/* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | -	the next command in the list. */
 | 
	
		
			
				|  |  | -	strncpy( ( char * ) buf, ( const char * ) pcAlarmTableHeader, strlen( ( char * ) pcAlarmTableHeader ) );
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	const int8_t * const pcAlarmTempTableHeader = ( int8_t * ) "\r\n*************Температура (°C)************\r\n";
 | 
	
		
			
				|  |  | -	/* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | -	the next command in the list. */
 | 
	
		
			
				|  |  | -	strncat( ( char * ) buf, ( const char * ) pcAlarmTempTableHeader, strlen( ( char * ) pcAlarmTempTableHeader ) );
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	GetTemperatureAlarmLowRangeStr(str, &len);
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, name_range_alarm[0]);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, name_range_alarm[1]);
 | 
	
		
			
				|  |  | -	GetTemperatureAlarmHighRangeStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, name_range_alarm[2]);
 | 
	
		
			
				|  |  | -	GetTemperatureAlarmHisteStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	const int8_t * const pcAlarmLoadTableHeader = ( int8_t * ) "\r\n***************Нагрузка (%)**************";
 | 
	
		
			
				|  |  | -	/* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | -	the next command in the list. */
 | 
	
		
			
				|  |  | -	strncat( ( char * ) buf, ( const char * ) pcAlarmLoadTableHeader, strlen( ( char * ) pcAlarmLoadTableHeader ) );
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, name_range_alarm[1]);
 | 
	
		
			
				|  |  | -	GetLoadAlarmHighRangeStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, name_range_alarm[2]);
 | 
	
		
			
				|  |  | -	GetLoadAlarmHisteStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	const int8_t * const pcAlarmVoutTableHeader = ( int8_t * ) "\r\n*********Выходное напряжение (В)*********\r\n";
 | 
	
		
			
				|  |  | -	/* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | -	the next command in the list. */
 | 
	
		
			
				|  |  | -	strncat( ( char * ) buf, ( const char * ) pcAlarmVoutTableHeader, strlen( ( char * ) pcAlarmVoutTableHeader ) );
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	GetVACAlarmLowRangeStr(str, &len);
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, name_range_alarm[0]);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, name_range_alarm[1]);
 | 
	
		
			
				|  |  | -	GetVACAlarmHighRangeStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    char str[20];
 | 
	
		
			
				|  |  | +    uint8_t len = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const char *name_range_alarm[] = {
 | 
	
		
			
				|  |  | +        "Нижняя граница:\t\t\t",
 | 
	
		
			
				|  |  | +        "\r\nВерхняя граница:\t\t",
 | 
	
		
			
				|  |  | +        "\r\nГистерезис:\t\t\t",
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const int8_t *const pcAlarmTableHeader = ( int8_t * )
 | 
	
		
			
				|  |  | +        "\r\n*********Настройки Аварийных границ*********\r\n";
 | 
	
		
			
				|  |  | +    /* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | +    the next command in the list. */
 | 
	
		
			
				|  |  | +    strncpy( ( char * ) buf, ( const char * ) pcAlarmTableHeader, strlen( ( char * ) pcAlarmTableHeader ) );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const int8_t *const pcAlarmTempTableHeader = ( int8_t * )
 | 
	
		
			
				|  |  | +        "\r\n*************Температура (°C)************\r\n";
 | 
	
		
			
				|  |  | +    /* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | +    the next command in the list. */
 | 
	
		
			
				|  |  | +    strncat( ( char * ) buf, ( const char * ) pcAlarmTempTableHeader, strlen( ( char * ) pcAlarmTempTableHeader ) );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    GetTemperatureAlarmLowRangeStr(str, &len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, name_range_alarm[0]);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, name_range_alarm[1]);
 | 
	
		
			
				|  |  | +    GetTemperatureAlarmHighRangeStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, name_range_alarm[2]);
 | 
	
		
			
				|  |  | +    GetTemperatureAlarmHisteStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const int8_t *const pcAlarmLoadTableHeader = ( int8_t * ) "\r\n***************Нагрузка (%)**************";
 | 
	
		
			
				|  |  | +    /* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | +    the next command in the list. */
 | 
	
		
			
				|  |  | +    strncat( ( char * ) buf, ( const char * ) pcAlarmLoadTableHeader, strlen( ( char * ) pcAlarmLoadTableHeader ) );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, name_range_alarm[1]);
 | 
	
		
			
				|  |  | +    GetLoadAlarmHighRangeStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, name_range_alarm[2]);
 | 
	
		
			
				|  |  | +    GetLoadAlarmHisteStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const int8_t *const pcAlarmVoutTableHeader = ( int8_t * )
 | 
	
		
			
				|  |  | +        "\r\n*********Выходное напряжение (В)*********\r\n";
 | 
	
		
			
				|  |  | +    /* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | +    the next command in the list. */
 | 
	
		
			
				|  |  | +    strncat( ( char * ) buf, ( const char * ) pcAlarmVoutTableHeader, strlen( ( char * ) pcAlarmVoutTableHeader ) );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    GetVACAlarmLowRangeStr(str, &len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, name_range_alarm[0]);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, name_range_alarm[1]);
 | 
	
		
			
				|  |  | +    GetVACAlarmHighRangeStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, name_range_alarm[2]);
 | 
	
		
			
				|  |  | +    GetVACAlarmHisteStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, name_range_alarm[2]);
 | 
	
		
			
				|  |  | -	GetVACAlarmHisteStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +#ifdef HARDWARE_BT6709
 | 
	
		
			
				|  |  | +//Список уведомлений и их состояние
 | 
	
		
			
				|  |  | +void notification_param(int8_t *buf)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    char str[100];
 | 
	
		
			
				|  |  | +    uint8_t len = 0;
 | 
	
		
			
				|  |  | +    uint8_t i;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const int8_t *const pcNotificationTableHeader = ( int8_t * )
 | 
	
		
			
				|  |  | +        "\r\n*************Список уведомлений*******************\r\n";
 | 
	
		
			
				|  |  | +    /* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | +    the next command in the list. */
 | 
	
		
			
				|  |  | +    strncpy( ( char * ) buf, ( const char * ) pcNotificationTableHeader, strlen( ( char * ) pcNotificationTableHeader ) );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    for (i = 1; i < ALL_TRAPS; i++) {
 | 
	
		
			
				|  |  | +        sprintf(str, "%d. ", i);
 | 
	
		
			
				|  |  | +        len = strlen(str);
 | 
	
		
			
				|  |  | +		strncat(buf, str, len);
 | 
	
		
			
				|  |  | +        GetTrapLongNameStr(str, &len, i);
 | 
	
		
			
				|  |  | +        strncat(buf, str, len);
 | 
	
		
			
				|  |  | +		if ( len < 25 ) {
 | 
	
		
			
				|  |  | +			strcat(buf, "\t\t\t\t\t");
 | 
	
		
			
				|  |  | +		} else if (len > 37 && len <= 47) {
 | 
	
		
			
				|  |  | +			strcat(buf, "\t\t\t");
 | 
	
		
			
				|  |  | +		} else if (len > 47) {
 | 
	
		
			
				|  |  | +			strcat(buf, "\t\t");
 | 
	
		
			
				|  |  | +		} else {
 | 
	
		
			
				|  |  | +			strcat(buf, "\t\t\t\t");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		GetNotificationTrapsStateStr2(str, &len, i);
 | 
	
		
			
				|  |  | +        strncat(buf, str, len);
 | 
	
		
			
				|  |  | +		strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#ifdef HARDWARE_BT6709
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  //Белый список IP адресов контроллера
 | 
	
		
			
				|  |  |  void whitelist_config_param(int8_t *buf)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -	char str[20];
 | 
	
		
			
				|  |  | -	uint8_t len = 0;
 | 
	
		
			
				|  |  | -	uint8_t i;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	const char *name_range_ip[] = {
 | 
	
		
			
				|  |  | -			"IP-адрес 1:\t\t\t",
 | 
	
		
			
				|  |  | -			"\r\nIP-адрес 2:\t\t\t",
 | 
	
		
			
				|  |  | -			"\r\nIP-адрес 3:\t\t\t",
 | 
	
		
			
				|  |  | -			"\r\nIP-адрес 4:\t\t\t",
 | 
	
		
			
				|  |  | -			"\r\nIP-адрес 5:\t\t\t",
 | 
	
		
			
				|  |  | -	};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	const int8_t * const pcInfoTableHeader = ( int8_t * ) "\r\n*******Белый список IP адресов Контроллера*******\r\n";
 | 
	
		
			
				|  |  | -	/* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | -	the next command in the list. */
 | 
	
		
			
				|  |  | -	strncpy( ( char * ) buf, ( const char * ) pcInfoTableHeader, strlen( ( char * ) pcInfoTableHeader ) );
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	for(uint8_t i = 0; i < MAX_WHITE_LIST; i++){
 | 
	
		
			
				|  |  | -		GetWhiteListSTR(str, &len, i);
 | 
	
		
			
				|  |  | -		strcat(( char * ) buf, name_range_ip[i]);
 | 
	
		
			
				|  |  | -		strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | +    char str[20];
 | 
	
		
			
				|  |  | +    uint8_t len = 0;
 | 
	
		
			
				|  |  | +    uint8_t i;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const char *name_range_ip[] = {
 | 
	
		
			
				|  |  | +        "IP-адрес 1:\t\t\t",
 | 
	
		
			
				|  |  | +        "\r\nIP-адрес 2:\t\t\t",
 | 
	
		
			
				|  |  | +        "\r\nIP-адрес 3:\t\t\t",
 | 
	
		
			
				|  |  | +        "\r\nIP-адрес 4:\t\t\t",
 | 
	
		
			
				|  |  | +        "\r\nIP-адрес 5:\t\t\t",
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const int8_t *const pcInfoTableHeader = ( int8_t * )
 | 
	
		
			
				|  |  | +        "\r\n*******Белый список IP адресов Контроллера*******\r\n";
 | 
	
		
			
				|  |  | +    /* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | +    the next command in the list. */
 | 
	
		
			
				|  |  | +    strncpy( ( char * ) buf, ( const char * ) pcInfoTableHeader, strlen( ( char * ) pcInfoTableHeader ) );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    for (uint8_t i = 0; i < MAX_WHITE_LIST; i++) {
 | 
	
		
			
				|  |  | +        GetWhiteListSTR(str, &len, i);
 | 
	
		
			
				|  |  | +        strcat(( char * ) buf, name_range_ip[i]);
 | 
	
		
			
				|  |  | +        strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  //Параметры ИБП
 | 
	
		
			
				|  |  |  void ups_sensor_param(int8_t *buf)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -	char str[20];
 | 
	
		
			
				|  |  | -	uint8_t len = 0;
 | 
	
		
			
				|  |  | +    char str[20];
 | 
	
		
			
				|  |  | +    uint8_t len = 0;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	GetConnectUPSAlarmStr(str, &len);
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nСвязь с ИБП:\t\t\t\t");
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    GetConnectUPSAlarmStr(str, &len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nСвязь с ИБП:\t\t\t\t");
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	const int8_t * const pcUPSInfoTableHeader = ( int8_t * ) "\r\n\r\n***********Параметры источника питания***********\r\n";
 | 
	
		
			
				|  |  | -	/* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | -	the next command in the list. */
 | 
	
		
			
				|  |  | -	strncat( ( char * ) buf, ( const char * ) pcUPSInfoTableHeader, strlen( ( char * ) pcUPSInfoTableHeader ) );
 | 
	
		
			
				|  |  | +    const int8_t *const pcUPSInfoTableHeader = ( int8_t * )
 | 
	
		
			
				|  |  | +        "\r\n\r\n***********Параметры источника питания***********\r\n";
 | 
	
		
			
				|  |  | +    /* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | +    the next command in the list. */
 | 
	
		
			
				|  |  | +    strncat( ( char * ) buf, ( const char * ) pcUPSInfoTableHeader, strlen( ( char * ) pcUPSInfoTableHeader ) );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	GetInputVoltageStr(str, &len);
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "Входное напряжение (VAC):\t\t");
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    GetInputVoltageStr(str, &len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "Входное напряжение (VAC):\t\t");
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nВыходное напряжение (VAC):\t\t");
 | 
	
		
			
				|  |  | -	GetOutputVoltageStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nВыходное напряжение (VAC):\t\t");
 | 
	
		
			
				|  |  | +    GetOutputVoltageStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #ifdef HARDWARE_BT6709
 | 
	
		
			
				|  |  | -	GetInputCurrentStr(str, &len);
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nВходная сила тока (A):\t\t\t");
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    GetInputCurrentStr(str, &len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nВходная сила тока (A):\t\t\t");
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nВыходная сила тока (A):\t\t\t");
 | 
	
		
			
				|  |  | -	GetOutputCurrentStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nВыходная сила тока (A):\t\t\t");
 | 
	
		
			
				|  |  | +    GetOutputCurrentStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nВходная частота:\t\t\t");
 | 
	
		
			
				|  |  | -	GetInputFreqStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nВходная частота:\t\t\t");
 | 
	
		
			
				|  |  | +    GetInputFreqStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nНагрузка:\t\t\t\t");
 | 
	
		
			
				|  |  | -	GetPowerStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nНагрузка:\t\t\t\t");
 | 
	
		
			
				|  |  | +    GetPowerStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nТекущий режим:\t\t\t\t");
 | 
	
		
			
				|  |  | -	GetUPSModeStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nТекущий режим:\t\t\t\t");
 | 
	
		
			
				|  |  | +    GetUPSModeStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nСтатус:\t\t\t\t\t");
 | 
	
		
			
				|  |  | -	GetUPSAlarmStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nСтатус:\t\t\t\t\t");
 | 
	
		
			
				|  |  | +    GetUPSAlarmStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  //Параметры аккумуляторных батарей
 | 
	
		
			
				|  |  |  void ups_sensor_akb_param(int8_t *buf)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -	char str[40];
 | 
	
		
			
				|  |  | -	uint8_t len = 0;
 | 
	
		
			
				|  |  | +    char str[40];
 | 
	
		
			
				|  |  | +    uint8_t len = 0;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	const int8_t * const pcAKBInfoTableHeader = ( int8_t * ) "\r\n*********Параметры аккумуляторных батарей*********\r\n";
 | 
	
		
			
				|  |  | -	/* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | -	the next command in the list. */
 | 
	
		
			
				|  |  | -	strncpy( ( char * ) buf, ( const char * ) pcAKBInfoTableHeader, strlen( ( char * ) pcAKBInfoTableHeader ) );
 | 
	
		
			
				|  |  | +    const int8_t *const pcAKBInfoTableHeader = ( int8_t * )
 | 
	
		
			
				|  |  | +        "\r\n*********Параметры аккумуляторных батарей*********\r\n";
 | 
	
		
			
				|  |  | +    /* Return the next command help string, before moving the pointer on to
 | 
	
		
			
				|  |  | +    the next command in the list. */
 | 
	
		
			
				|  |  | +    strncpy( ( char * ) buf, ( const char * ) pcAKBInfoTableHeader, strlen( ( char * ) pcAKBInfoTableHeader ) );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	GetBatCapacityStr(str, &len);
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "Оставшаяся емкость батареи (%):\t\t");
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    GetBatCapacityStr(str, &len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "Оставшаяся емкость батареи (%):\t\t");
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nВнутренняя температура (°C):\t\t");
 | 
	
		
			
				|  |  | -	GetInternalTempStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nВнутренняя температура (°C):\t\t");
 | 
	
		
			
				|  |  | +    GetInternalTempStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nОставшееся время работы (мин):\t\t");
 | 
	
		
			
				|  |  | -	GetRuntimeStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nОставшееся время работы (мин):\t\t");
 | 
	
		
			
				|  |  | +    GetRuntimeStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #ifdef HARDWARE_BT6709
 | 
	
		
			
				|  |  | -	GetCapacityNominalAKBStr(str, &len);
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nЕмкость батареи (Ач):\t\t\t");
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    GetCapacityNominalAKBStr(str, &len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nЕмкость батареи (Ач):\t\t\t");
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nНапряжение батареи (В):\t\t\t");
 | 
	
		
			
				|  |  | -	GetVoltageAKBtStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nНапряжение батареи (В):\t\t\t");
 | 
	
		
			
				|  |  | +    GetVoltageAKBtStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nДата следующей замены:\t\t\t");
 | 
	
		
			
				|  |  | -	GetDataNextChangeAKBStrRU(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nДата следующей замены:\t\t\t");
 | 
	
		
			
				|  |  | +    GetDataNextChangeAKBStrRU(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nСтатус:\t\t\t\t\t");
 | 
	
		
			
				|  |  | -	GetAKBAlarmStr(str, &len);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nСтатус:\t\t\t\t\t");
 | 
	
		
			
				|  |  | +    GetAKBAlarmStr(str, &len);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #ifndef HARDWARE_BT6709
 | 
	
		
			
				|  |  |  //Параметры сухих контактов
 | 
	
		
			
				|  |  |  void inouts_sensor_param(int8_t *buf)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -	char str[20];
 | 
	
		
			
				|  |  | -	uint8_t len = 0;
 | 
	
		
			
				|  |  | +    char str[20];
 | 
	
		
			
				|  |  | +    uint8_t len = 0;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	const int8_t * const pcInOutsInfoTableHeader = ( int8_t * ) "\r\n************Параметры сухих контактов************\r\n";
 | 
	
		
			
				|  |  | -	/* 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 ) );
 | 
	
		
			
				|  |  | +    const int8_t *const pcInOutsInfoTableHeader = ( int8_t * )
 | 
	
		
			
				|  |  | +        "\r\n************Параметры сухих контактов************\r\n";
 | 
	
		
			
				|  |  | +    /* 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 ) );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	GetDIN0StatusStrRU(str, &len);
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "Дискретный вход:\t\t\t");
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    GetDIN0StatusStrRU(str, &len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "Дискретный вход:\t\t\t");
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nРелейный выход 1:\t\t\t");
 | 
	
		
			
				|  |  | -	GetDOUTStatusStrRU(str, &len, 0);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nРелейный выход 1:\t\t\t");
 | 
	
		
			
				|  |  | +    GetDOUTStatusStrRU(str, &len, 0);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nРелейный выход 2:\t\t\t");
 | 
	
		
			
				|  |  | -	GetDOUTStatusStrRU(str, &len, 1);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nРелейный выход 2:\t\t\t");
 | 
	
		
			
				|  |  | +    GetDOUTStatusStrRU(str, &len, 1);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\nРелейный выход 3:\t\t\t");
 | 
	
		
			
				|  |  | -	GetDOUTStatusStrRU(str, &len, 2);
 | 
	
		
			
				|  |  | -	strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\nРелейный выход 3:\t\t\t");
 | 
	
		
			
				|  |  | +    GetDOUTStatusStrRU(str, &len, 2);
 | 
	
		
			
				|  |  | +    strncat(( char * ) buf, str, len);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  | +    strcat(( char * ) buf, "\r\n");
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  #endif
 |