   1               		.file	"relay.c"
   2               		.arch at90can128
   3               	__SREG__ = 0x3f
   4               	__SP_H__ = 0x3e
   5               	__SP_L__ = 0x3d
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
 127               	.global	relayThresholdsSetHighThreshold
 129               	relayThresholdsSetHighThreshold:
   1:relay.c       **** /*
   2:relay.c       ****  * relay.c
   3:relay.c       ****  *
   4:relay.c       ****  *  Created on: Jul 16, 2010
   5:relay.c       ****  *      Author: zumbruch
   6:relay.c       ****  */
   7:relay.c       **** 
   8:relay.c       **** #include <stdint.h>
   9:relay.c       **** #include <stdio.h>
  10:relay.c       **** #include <string.h>
  11:relay.c       **** #include <math.h>
  12:relay.c       **** #include <stdlib.h>
  13:relay.c       **** #include <util/delay.h>
  14:relay.c       **** #include <avr/pgmspace.h>
  15:relay.c       **** 
  16:relay.c       **** #include "api.h"
  17:relay.c       **** #include "api_define.h"
  18:relay.c       **** #include "api_global.h"
  19:relay.c       **** #include "adc.h"
  20:relay.c       **** #include "one_wire_temperature.h"
  21:relay.c       **** 
  22:relay.c       **** #include "relay.h"
  23:relay.c       **** 
  24:relay.c       **** static const char relayThresholdCommandKeyword00[] PROGMEM = "current_state";
  25:relay.c       **** static const char relayThresholdCommandKeyword01[] PROGMEM = "current_value";
  26:relay.c       **** static const char relayThresholdCommandKeyword02[] PROGMEM = "thr_high";
  27:relay.c       **** static const char relayThresholdCommandKeyword03[] PROGMEM = "thr_low";
  28:relay.c       **** static const char relayThresholdCommandKeyword04[] PROGMEM = "enable";
  29:relay.c       **** static const char relayThresholdCommandKeyword05[] PROGMEM = "input_channel";
  30:relay.c       **** static const char relayThresholdCommandKeyword06[] PROGMEM = "output_pin";
  31:relay.c       **** static const char relayThresholdCommandKeyword07[] PROGMEM = "led_pin";
  32:relay.c       **** static const char relayThresholdCommandKeyword08[] PROGMEM = "report_state_enable";
  33:relay.c       **** static const char relayThresholdCommandKeyword09[] PROGMEM = "relay";
  34:relay.c       **** static const char relayThresholdCommandKeyword10[] PROGMEM = "thresholds";
  35:relay.c       **** static const char relayThresholdCommandKeyword11[] PROGMEM = "status";
  36:relay.c       **** static const char relayThresholdCommandKeyword12[] PROGMEM = "outOfBounds_transit_lock";
  37:relay.c       **** static const char relayThresholdCommandKeyword13[] PROGMEM = "in_bounds_polarity";
  38:relay.c       **** static const char relayThresholdCommandKeyword14[] PROGMEM = "out_of_bounds_polarity";
  39:relay.c       **** static const char relayThresholdCommandKeyword15[] PROGMEM = "invert_polarity_logic";
  40:relay.c       **** static const char relayThresholdCommandKeyword16[] PROGMEM = "extern_inBounds_polarity";
  41:relay.c       **** static const char relayThresholdCommandKeyword17[] PROGMEM = "extern_inBounds_pin_pos";
  42:relay.c       **** static const char relayThresholdCommandKeyword18[] PROGMEM = "extern_inBounds_port";
  43:relay.c       **** static const char relayThresholdCommandKeyword19[] PROGMEM = "polarity";
  44:relay.c       **** static const char relayThresholdCommandKeyword20[] PROGMEM = "polarity_reinit";
  45:relay.c       **** 
  46:relay.c       **** const char* relayThresholdCommandKeywords[] PROGMEM = {
  47:relay.c       ****          relayThresholdCommandKeyword00,
  48:relay.c       ****          relayThresholdCommandKeyword01,
  49:relay.c       ****          relayThresholdCommandKeyword02,
  50:relay.c       ****          relayThresholdCommandKeyword03,
  51:relay.c       ****          relayThresholdCommandKeyword04,
  52:relay.c       ****          relayThresholdCommandKeyword05,
  53:relay.c       ****          relayThresholdCommandKeyword06,
  54:relay.c       ****          relayThresholdCommandKeyword07,
  55:relay.c       ****          relayThresholdCommandKeyword08,
  56:relay.c       ****          relayThresholdCommandKeyword09,
  57:relay.c       ****          relayThresholdCommandKeyword10,
  58:relay.c       ****          relayThresholdCommandKeyword11,
  59:relay.c       ****          relayThresholdCommandKeyword12,
  60:relay.c       ****          relayThresholdCommandKeyword13,
  61:relay.c       ****          relayThresholdCommandKeyword14,
  62:relay.c       ****          relayThresholdCommandKeyword15,
  63:relay.c       ****          relayThresholdCommandKeyword16,
  64:relay.c       ****          relayThresholdCommandKeyword17,
  65:relay.c       ****          relayThresholdCommandKeyword18,
  66:relay.c       ****          relayThresholdCommandKeyword19,
  67:relay.c       ****          relayThresholdCommandKeyword20
  68:relay.c       **** };
  69:relay.c       **** 
  70:relay.c       **** static const char relayThresholdStateString00[] PROGMEM = "IDLE";
  71:relay.c       **** static const char relayThresholdStateString01[] PROGMEM = "BELOW_LOW_THRESHOLD";
  72:relay.c       **** static const char relayThresholdStateString02[] PROGMEM = "INBETWEEN";
  73:relay.c       **** static const char relayThresholdStateString03[] PROGMEM = "ABOVE_HIGH_THRESHOLD";
  74:relay.c       **** static const char relayThresholdStateString04[] PROGMEM = "UNDEFINED";
  75:relay.c       **** 
  76:relay.c       **** const char* relayThresholdStateStrings[] PROGMEM = {
  77:relay.c       ****          relayThresholdStateString00,
  78:relay.c       ****          relayThresholdStateString01,
  79:relay.c       ****          relayThresholdStateString02,
  80:relay.c       ****          relayThresholdStateString03,
  81:relay.c       ****          relayThresholdStateString04
  82:relay.c       **** };
  83:relay.c       **** 
  84:relay.c       **** void relayThreshold(struct uartStruct *ptr_uartStruct)
  85:relay.c       **** {
  86:relay.c       ****    uint8_t index = 0;
  87:relay.c       **** 
  88:relay.c       ****    switch(ptr_uartStruct->number_of_arguments/* arguments of argument */)
  89:relay.c       ****    {
  90:relay.c       ****       case 0:
  91:relay.c       ****          /* show all */
  92:relay.c       ****          for (index = 0; index < relayThresholdCommandKeyNumber_MAXIMUM_NUMBER; index ++)
  93:relay.c       ****          {
  94:relay.c       ****             ptr_uartStruct->number_of_arguments = 1;
  95:relay.c       ****             relayThresholdMiscSubCommands(ptr_uartStruct, index);
  96:relay.c       ****             ptr_uartStruct->number_of_arguments = 0;
  97:relay.c       ****          }
  98:relay.c       ****          break;
  99:relay.c       ****       default: /* else */
 100:relay.c       ****          relayThresholdMiscSubCommands(ptr_uartStruct, -1);
 101:relay.c       ****          break;
 102:relay.c       ****    }
 103:relay.c       **** }
 104:relay.c       **** 
 105:relay.c       **** void relayThresholdMiscSubCommands( struct uartStruct *ptr_uartStruct, int16_t index )
 106:relay.c       **** {
 107:relay.c       ****    uint32_t status = 0;
 108:relay.c       ****    uint32_t value = 0;
 109:relay.c       **** 
 110:relay.c       **** 
 111:relay.c       ****    if ( index < 0 )
 112:relay.c       ****    {
 113:relay.c       ****       index = 0;
 114:relay.c       ****       // find matching command keyword
 115:relay.c       ****       while ( index < relayThresholdCommandKeyNumber_MAXIMUM_NUMBER )
 116:relay.c       ****       {
 117:relay.c       ****          if ( 0 == strncmp_P(setParameter[1], (const char*) ( pgm_read_word( &(relayThresholdComman
 118:relay.c       ****          {
 119:relay.c       ****             break;
 120:relay.c       ****          }
 121:relay.c       ****          index++;
 122:relay.c       ****       }
 123:relay.c       ****    }
 124:relay.c       **** 
 125:relay.c       ****    /* TODO: relayThresholdMiscSubCommandsChooseFunction(ptr_uartStruct, index)*/
 126:relay.c       ****    switch ( ptr_uartStruct->number_of_arguments - 1 /* arguments of argument */)
 127:relay.c       ****    {
 128:relay.c       ****       case 0:
 129:relay.c       ****          /* printout status*/
 130:relay.c       **** 
 131:relay.c       ****          /* generate message */
 132:relay.c       ****          createExtendedSubCommandReceiveResponseHeader(ptr_uartStruct, commandKeyNumber_RLTH, index
 133:relay.c       ****          switch ( index )
 134:relay.c       ****          {
 135:relay.c       ****             case relayThresholdCommandKeyNumber_CURRENT_VALUE:
 136:relay.c       ****                value = relayThresholdsGetCurrentValue();
 137:relay.c       ****                snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s0x%x"), uart_message_string
 138:relay.c       ****                break;
 139:relay.c       ****             case relayThresholdCommandKeyNumber_CURRENT_STATE:
 140:relay.c       ****                value = relayThresholdsGetCurrentState();
 141:relay.c       ****                snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s%i %s"), uart_message_strin
 142:relay.c       ****                strncat_P(uart_message_string, (const char*) ( pgm_read_word( &(relayThresholdStateS
 143:relay.c       ****                break;
 144:relay.c       ****             case relayThresholdCommandKeyNumber_THR_HIGH:
 145:relay.c       ****                value = relayThresholdsGetHighThreshold();
 146:relay.c       ****                snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s0x%x"), uart_message_string
 147:relay.c       ****                strncat_P(uart_message_string, ( FALSE != relayThresholds_valid[relayThreshold_HIGH]
 148:relay.c       ****                break;
 149:relay.c       ****             case relayThresholdCommandKeyNumber_THR_LOW:
 150:relay.c       ****                value = relayThresholdsGetLowThreshold();
 151:relay.c       ****                snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s0x%x"), uart_message_string
 152:relay.c       ****                strncat_P(uart_message_string, ( FALSE != relayThresholds_valid[relayThreshold_LOW] 
 153:relay.c       ****                break;
 154:relay.c       ****             case relayThresholdCommandKeyNumber_ENABLE:
 155:relay.c       ****                value = relayThresholdsGetEnableFlag();
 156:relay.c       ****                strncat_P(uart_message_string, ( FALSE != value ) ? PSTR("TRUE") : PSTR("FALSE"), BU
 157:relay.c       ****                break;
 158:relay.c       ****             case relayThresholdCommandKeyNumber_REPORT_STATE_ENABLE:
 159:relay.c       ****                value = relayThresholdsGetReportStateEnableFlag();
 160:relay.c       ****                strncat_P(uart_message_string, ( FALSE != value ) ? PSTR("TRUE") : PSTR("FALSE"), BU
 161:relay.c       ****                break;
 162:relay.c       ****             case relayThresholdCommandKeyNumber_INPUT_CHANNEL:
 163:relay.c       ****                value = relayThresholdsGetInputChannel();
 164:relay.c       ****                snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s%x"), uart_message_string, 
 165:relay.c       ****                break;
 166:relay.c       ****             case relayThresholdCommandKeyNumber_OUTPUT_PIN:
 167:relay.c       ****                value = relayThresholdsGetOutputPin();
 168:relay.c       ****                snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s%x"), uart_message_string, 
 169:relay.c       ****                break;
 170:relay.c       ****             case relayThresholdCommandKeyNumber_LED_PIN:
 171:relay.c       ****                value = relayThresholdsGetLedPin();
 172:relay.c       ****                snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s%x"), uart_message_string, 
 173:relay.c       ****                break;
 174:relay.c       ****             case relayThresholdCommandKeyNumber_RELAY_VALUE:
 175:relay.c       ****                value = relayThresholdsGetRelayValue();
 176:relay.c       ****                snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s%x"), uart_message_string, 
 177:relay.c       ****                break;
 178:relay.c       ****             case relayThresholdCommandKeyNumber_OUT_OF_BOUNDS_TRANSIT_LOCK:
 179:relay.c       ****                value = relayThresholdsGetOutOfBoundsTransitLockFlag();
 180:relay.c       ****                strncat_P(uart_message_string, ( FALSE != value ) ? PSTR("TRUE") : PSTR("FALSE"), BU
 181:relay.c       ****                break;
 182:relay.c       ****             case relayThresholdCommandKeyNumber_IN_BOUNDS_POLARITY:
 183:relay.c       ****                value = relayThresholdsGetInBoundsPolarity();
 184:relay.c       ****                strncat_P(uart_message_string, ( FALSE != value ) ? PSTR("TRUE") : PSTR("FALSE"), BU
 185:relay.c       ****                break;
 186:relay.c       ****             case relayThresholdCommandKeyNumber_OUT_OF_BOUNDS_POLARITY:
 187:relay.c       ****                value = relayThresholdsGetOutOfBoundsPolarity();
 188:relay.c       ****                strncat_P(uart_message_string, ( FALSE != value ) ? PSTR("TRUE") : PSTR("FALSE"), BU
 189:relay.c       ****                break;
 190:relay.c       ****             case relayThresholdCommandKeyNumber_INVERT_POLARITY_LOGIC:
 191:relay.c       ****                value = relayThresholdsGetInvertPolarityFlag();
 192:relay.c       ****                strncat_P(uart_message_string, ( FALSE != value ) ? PSTR("TRUE") : PSTR("FALSE"), BU
 193:relay.c       ****                break;
 194:relay.c       ****             case relayThresholdCommandKeyNumber_EXTERNAL_IN_BOUNDS_POLARITY:
 195:relay.c       ****                value = relayThresholdsGetExternalPolarity();
 196:relay.c       ****                strncat_P(uart_message_string, ( FALSE != value ) ? PSTR("TRUE") : PSTR("FALSE"), BU
 197:relay.c       ****                break;
 198:relay.c       ****             case relayThresholdCommandKeyNumber_EXTERNAL_IN_BOUNDS_PIN_POS:
 199:relay.c       ****                value = relayThresholdsGetExternalPolarityPinPos();
 200:relay.c       ****                snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s%x"), uart_message_string, 
 201:relay.c       ****                break;
 202:relay.c       ****             case relayThresholdCommandKeyNumber_EXTERNAL_IN_BOUNDS_PORT:
 203:relay.c       ****                value = relayThresholdsGetExternalPolarityPort();
 204:relay.c       ****                snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s%x"), uart_message_string, 
 205:relay.c       ****                break;
 206:relay.c       ****             case relayThresholdCommandKeyNumber_STATUS:
 207:relay.c       ****                {
 208:relay.c       ****                   value = relayThresholdsGetCurrentState();
 209:relay.c       ****                   snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s%i %s"), uart_message_st
 210:relay.c       ****                   strncat_P(uart_message_string, (const char*) ( pgm_read_word( &(relayThresholdSta
 211:relay.c       ****                   value = relayThresholdsGetCurrentValue();
 212:relay.c       ****                   snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s val:0x%x"), uart_messag
 213:relay.c       ****                   value = relayThresholdsGetLowThreshold();
 214:relay.c       ****                   snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s low:0x%x"), uart_messag
 215:relay.c       ****                   value = relayThresholdsGetHighThreshold();
 216:relay.c       ****                   snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s high:0x%x"), uart_messa
 217:relay.c       ****                   value = relayThresholdsGetRelayValue();
 218:relay.c       ****                   snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s relay:%x"), uart_messag
 219:relay.c       ****                   value = relayThresholdsGetInputChannel();
 220:relay.c       ****                   snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s in:%x"), uart_message_s
 221:relay.c       ****                   value = relayThresholdsGetOutputPin();
 222:relay.c       ****                   snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s out:%x"), uart_message_
 223:relay.c       ****                   value = relayThresholdsGetLedPin();
 224:relay.c       ****                   snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s led:%x"), uart_message_
 225:relay.c       ****                   value = relayThresholdsGetEnableFlag();
 226:relay.c       ****                   strncat_P(uart_message_string, PSTR(" enable:"), BUFFER_SIZE - 1);
 227:relay.c       ****                   strncat_P(uart_message_string, ( FALSE != value ) ? PSTR("TRUE") : PSTR("FALSE"),
 228:relay.c       ****                   value = relayThresholdsGetOutOfBoundsTransitLockFlag();
 229:relay.c       ****                   strncat_P(uart_message_string, PSTR(" 0t_lock:"), BUFFER_SIZE - 1);
 230:relay.c       ****                   strncat_P(uart_message_string, ( FALSE != value ) ? PSTR("TRUE") : PSTR("FALSE"),
 231:relay.c       ****                }
 232:relay.c       ****                break;
 233:relay.c       ****             case relayThresholdCommandKeyNumber_POLARITY:
 234:relay.c       ****             {
 235:relay.c       ****                   value = relayThresholdsGetInBoundsPolarity();
 236:relay.c       ****                   strncat_P(uart_message_string, PSTR("inBounds:"), BUFFER_SIZE - 1);
 237:relay.c       ****                   strncat_P(uart_message_string, ( FALSE != value ) ? PSTR("TRUE") : PSTR("FALSE"),
 238:relay.c       ****                   value = relayThresholdsGetOutOfBoundsPolarity();
 239:relay.c       ****                   strncat_P(uart_message_string, PSTR(" OfBounds:"), BUFFER_SIZE - 1);
 240:relay.c       ****                   strncat_P(uart_message_string, ( FALSE != value ) ? PSTR("TRUE") : PSTR("FALSE"),
 241:relay.c       ****                   value = relayThresholdsGetInvertPolarityFlag();
 242:relay.c       ****                   strncat_P(uart_message_string, PSTR(" invert:"), BUFFER_SIZE - 1);
 243:relay.c       ****                   strncat_P(uart_message_string, ( FALSE != value ) ? PSTR("TRUE") : PSTR("FALSE"),
 244:relay.c       ****                   value = relayThresholdsGetExternalPolarity();
 245:relay.c       ****                   strncat_P(uart_message_string, PSTR(" ext:"), BUFFER_SIZE - 1);
 246:relay.c       ****                   strncat_P(uart_message_string, ( FALSE != value ) ? PSTR("TRUE") : PSTR("FALSE"),
 247:relay.c       ****                   value = relayThresholdsGetExternalPolarityPinPos();
 248:relay.c       ****                   snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s ext_pos:%x"), uart_mess
 249:relay.c       ****                   value = relayThresholdsGetExternalPolarityPort();
 250:relay.c       ****                   snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s ext_port:%x"), uart_mes
 251:relay.c       ****                   break;
 252:relay.c       ****                }
 253:relay.c       ****             break;
 254:relay.c       ****             case relayThresholdCommandKeyNumber_POLARITY_REINIT:
 255:relay.c       ****                relayThresholdInBoundPolarityInit();
 256:relay.c       ****                break;
 257:relay.c       ****             case relayThresholdCommandKeyNumber_THRESHOLDS:
 258:relay.c       ****             {
 259:relay.c       ****                value = relayThresholdsGetLowThreshold();
 260:relay.c       ****                snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%slow:0x%x"), uart_message_st
 261:relay.c       ****                value = relayThresholdsGetHighThreshold();
 262:relay.c       ****                snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("%s high:0x%x"), uart_message_
 263:relay.c       ****                value = relayThresholdsGetRelayValue();
 264:relay.c       ****                break;
 265:relay.c       ****             }
 266:relay.c       ****             default:
 267:relay.c       ****                clearString(uart_message_string, BUFFER_SIZE);
 268:relay.c       ****                CommunicationError(ERRA, -1, TRUE, PSTR("invalid command argument"), -1);
 269:relay.c       ****                return;
 270:relay.c       ****                break;
 271:relay.c       ****          }
 272:relay.c       **** 
 273:relay.c       ****          /*send the data*/
 274:relay.c       ****          UART0_Send_Message_String(uart_message_string, BUFFER_SIZE - 1);
 275:relay.c       ****          /*clear strings*/
 276:relay.c       ****          clearString(uart_message_string, BUFFER_SIZE);
 277:relay.c       ****          break;
 278:relay.c       ****       case 1:
 279:relay.c       ****          /* set status*/
 280:relay.c       **** 
 281:relay.c       ****          /* T,F,t,f : T(RUE)/F(ALSE) */
 282:relay.c       ****          if ( 0 == strcmp_P(setParameter[2], PSTR("TRUE")) || 0 == strcmp_P(setParameter[2], PSTR("
 283:relay.c       ****          {
 284:relay.c       ****             value = TRUE;
 285:relay.c       ****          }
 286:relay.c       ****          else if ( 0 == strcmp_P(setParameter[2], PSTR("FALSE")) || 0 == strcmp_P(setParameter[2], 
 287:relay.c       ****          {
 288:relay.c       ****             value = FALSE;
 289:relay.c       ****          }
 290:relay.c       ****          /* or expecting numeric hex value, beware of the order since _F_ALSE has numeric hex lengt
 291:relay.c       ****          else if ( 0 < getNumericLength(setParameter[2], MAX_LENGTH_PARAMETER) )
 292:relay.c       ****          {
 293:relay.c       ****             value = strtoul(setParameter[2], &ptr_setParameter[2], 16);
 294:relay.c       ****          }
 295:relay.c       ****          else
 296:relay.c       ****          {
 297:relay.c       ****             CommunicationError(ERRA, -1, TRUE, PSTR("invalid command argument"), -1);
 298:relay.c       ****             return;
 299:relay.c       ****          }
 300:relay.c       **** 
 301:relay.c       ****          switch ( index )
 302:relay.c       ****          {
 303:relay.c       ****             case relayThresholdCommandKeyNumber_THR_HIGH:
 304:relay.c       ****                status = relayThresholdsSetHighThreshold(value & 0xFFFF);
 305:relay.c       ****                break;
 306:relay.c       ****             case relayThresholdCommandKeyNumber_THR_LOW:
 307:relay.c       ****                status = relayThresholdsSetLowThreshold(value & 0xFFFF);
 308:relay.c       ****                break;
 309:relay.c       ****             case relayThresholdCommandKeyNumber_ENABLE:
 310:relay.c       ****                status = relayThresholdsSetEnableFlag(0 != value);
 311:relay.c       ****                break;
 312:relay.c       ****             case relayThresholdCommandKeyNumber_OUT_OF_BOUNDS_TRANSIT_LOCK:
 313:relay.c       ****                status = relayThresholdsSetOutOfBoundsTransitLockFlag(0 != value);
 314:relay.c       ****                break;
 315:relay.c       ****             case relayThresholdCommandKeyNumber_INPUT_CHANNEL:
 316:relay.c       ****                status = relayThresholdsSetInputChannel(value & 0xFF);
 317:relay.c       ****                break;
 318:relay.c       ****             case relayThresholdCommandKeyNumber_OUTPUT_PIN:
 319:relay.c       ****                status = relayThresholdsSetOutputPin(value & 0xFF);
 320:relay.c       ****                break;
 321:relay.c       ****             case relayThresholdCommandKeyNumber_LED_PIN:
 322:relay.c       ****                status = relayThresholdsSetLedPin(value & 0xFF);
 323:relay.c       ****                break;
 324:relay.c       ****             case relayThresholdCommandKeyNumber_REPORT_STATE_ENABLE:
 325:relay.c       ****                status = relayThresholdsSetReportCurrentStatusEnableFlag(value & 0xF);
 326:relay.c       ****                break;
 327:relay.c       ****             case relayThresholdCommandKeyNumber_RELAY_VALUE:
 328:relay.c       ****                status = relayThresholdsSetRelayValue(value);
 329:relay.c       ****                break;
 330:relay.c       ****             case relayThresholdCommandKeyNumber_INVERT_POLARITY_LOGIC:
 331:relay.c       ****                status = relayThresholdsSetInvertPolarityFlag(value);
 332:relay.c       ****                break;
 333:relay.c       ****             case relayThresholdCommandKeyNumber_EXTERNAL_IN_BOUNDS_PIN_POS:
 334:relay.c       ****                status = relayThresholdsSetExternalPolarityPinPos(value);
 335:relay.c       ****                break;
 336:relay.c       ****             case relayThresholdCommandKeyNumber_EXTERNAL_IN_BOUNDS_PORT:
 337:relay.c       ****                status = relayThresholdsSetExternalPolarityPinPos(value);
 338:relay.c       ****                break;
 339:relay.c       ****             default:
 340:relay.c       ****                CommunicationError(ERRA, -1, TRUE, PSTR("invalid command argument"), -1);
 341:relay.c       ****                return;
 342:relay.c       ****                break;
 343:relay.c       ****          }
 344:relay.c       **** 
 345:relay.c       ****          /*recursive call to show change*/
 346:relay.c       ****          if ( 0 == status )
 347:relay.c       ****          {
 348:relay.c       ****             ptr_uartStruct->number_of_arguments = 1;
 349:relay.c       ****             relayThresholdMiscSubCommands(ptr_uartStruct, index);
 350:relay.c       ****             ptr_uartStruct->number_of_arguments = 2;
 351:relay.c       **** 
 352:relay.c       ****             switch ( index )
 353:relay.c       ****             {
 354:relay.c       ****                case relayThresholdCommandKeyNumber_ENABLE:
 355:relay.c       ****                   if ( value )
 356:relay.c       ****                   {
 357:relay.c       ****                      status = relayThresholdInit();
 358:relay.c       ****                   }
 359:relay.c       ****                   break;
 360:relay.c       ****                default:
 361:relay.c       ****                   break;
 362:relay.c       ****             }
 363:relay.c       ****          }
 364:relay.c       ****          break;
 365:relay.c       ****       default:
 366:relay.c       ****          general_errorCode = CommunicationError(ERRG, -1001, TRUE, PSTR("invalid number of argument
 367:relay.c       ****          break;
 368:relay.c       ****    }
 369:relay.c       **** 
 370:relay.c       ****    return;
 371:relay.c       **** }
 372:relay.c       **** 
 373:relay.c       **** void relayThresholdsReportCurrentStatus(void)
 374:relay.c       **** {
 375:relay.c       ****    int nargs = ptr_uartStruct->number_of_arguments;
 376:relay.c       ****    ptr_uartStruct->number_of_arguments = 1;
 377:relay.c       ****    relayThresholdMiscSubCommands(ptr_uartStruct, relayThresholdCommandKeyNumber_STATUS);
 378:relay.c       ****    ptr_uartStruct->number_of_arguments = nargs;
 379:relay.c       **** }
 380:relay.c       **** 
 381:relay.c       **** uint8_t relayThresholdInBoundPolarityInit(void)
 382:relay.c       **** {
 383:relay.c       ****    /* PORT F, pin "relayThresholdsExternalPolarityPinPos" determines whether relay is TRUE/FALSE wh
 384:relay.c       ****    /* which is per default set to HIGH/TRUE/1 */
 385:relay.c       ****    switch(relayThresholdsExternalPolarityPort)
 386:relay.c       ****    {
 387:relay.c       ****       case 0xA:
 388:relay.c       ****          relayThresholdsExternalPolarity = (PORTA >> (relayThresholdsExternalPolarityPinPos -1) ) &
 389:relay.c       ****          break;
 390:relay.c       ****       case 0xB:
 391:relay.c       ****          relayThresholdsExternalPolarity = (PORTB >> (relayThresholdsExternalPolarityPinPos -1) ) &
 392:relay.c       ****          break;
 393:relay.c       ****       case 0xC:
 394:relay.c       ****          relayThresholdsExternalPolarity = (PORTC >> (relayThresholdsExternalPolarityPinPos -1) ) &
 395:relay.c       ****          break;
 396:relay.c       ****       case 0xD:
 397:relay.c       ****          relayThresholdsExternalPolarity = (PORTD >> (relayThresholdsExternalPolarityPinPos -1) ) &
 398:relay.c       ****          break;
 399:relay.c       ****       case 0xE:
 400:relay.c       ****          relayThresholdsExternalPolarity = (PORTE >> (relayThresholdsExternalPolarityPinPos -1) ) &
 401:relay.c       ****          break;
 402:relay.c       ****       case 0xF:
 403:relay.c       ****          relayThresholdsExternalPolarity = (PORTF >> (relayThresholdsExternalPolarityPinPos -1) ) &
 404:relay.c       ****          break;
 405:relay.c       ****       default:
 406:relay.c       ****          general_errorCode = CommunicationError(ERRG, -1001, TRUE, PSTR("'RLTH invalid input port f
 407:relay.c       ****          break;
 408:relay.c       ****          return 0xFF;
 409:relay.c       ****    }
 410:relay.c       ****    relayThresholdsInBoundsPolarity = ( 0x1 == relayThresholdsExternalPolarity );
 411:relay.c       ****    relayThresholdsOutOfBoundsPolarity = ( 0x1 != relayThresholdsExternalPolarity );
 412:relay.c       ****    if (FALSE != relayThresholdInvertPolarity_flag)
 413:relay.c       ****    {
 414:relay.c       ****       relayThresholdsInBoundsPolarity    = 0x1 & (~relayThresholdsInBoundsPolarity);
 415:relay.c       ****       relayThresholdsOutOfBoundsPolarity = 0x1 & (~relayThresholdsOutOfBoundsPolarity);
 416:relay.c       ****    }
 417:relay.c       ****    return relayThresholdsExternalPolarity;
 418:relay.c       **** }
 419:relay.c       **** 
 420:relay.c       **** uint8_t relayThresholdInit(void)
 421:relay.c       **** {
 422:relay.c       ****    if ( eventDebug <= debug && ( ( debugMask >> debugRELAY ) & 1 ) )
 423:relay.c       ****    {
 424:relay.c       ****       snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("DEBUG (%4i, %s) Init"), __LINE__, __FI
 425:relay.c       ****       UART0_Send_Message_String(NULL,0);
 426:relay.c       ****    }
 427:relay.c       **** 
 428:relay.c       ****    /* check prerequisites */
 429:relay.c       ****    if ( FALSE == relayThresholds_valid[relayThreshold_LOW] ||
 430:relay.c       ****         FALSE == relayThresholds_valid[relayThreshold_HIGH] )
 431:relay.c       ****    {
 432:relay.c       ****       return FALSE;
 433:relay.c       ****    }
 434:relay.c       **** 
 435:relay.c       ****    /* get current ADC value */
 436:relay.c       ****    uint32_t currentValue = 0xFFFFFFFF;
 437:relay.c       ****    currentValue = relayThresholdsGetCurrentValue(); // returns value + error information on top (16
 438:relay.c       **** 
 439:relay.c       ****    if ( 0 != (currentValue >> 16))
 440:relay.c       ****    {
 441:relay.c       ****       // error
 442:relay.c       ****       return FALSE;
 443:relay.c       ****    }
 444:relay.c       ****    else
 445:relay.c       ****    {
 446:relay.c       ****       // to be sure, remove back packer info;
 447:relay.c       ****       currentValue = (currentValue & 0xFFFF);
 448:relay.c       ****    }
 449:relay.c       **** 
 450:relay.c       ****    /* checks passed */
 451:relay.c       **** 
 452:relay.c       **** 
 453:relay.c       ****    if ( currentValue < relayThresholdLow )
 454:relay.c       ****    {
 455:relay.c       ****       relayThresholdCurrentState = relayThresholdState_BELOW_LOW_THRESHOLD;
 456:relay.c       ****       relayThresholdRelaySetValue = relayThresholdsOutOfBoundsPolarity;
 457:relay.c       ****    }
 458:relay.c       ****    else if ( currentValue > relayThresholdHigh )
 459:relay.c       ****    {
 460:relay.c       ****       relayThresholdCurrentState = relayThresholdState_ABOVE_HIGH_THRESHOLD;
 461:relay.c       ****       relayThresholdRelaySetValue = relayThresholdsOutOfBoundsPolarity;
 462:relay.c       ****    }
 463:relay.c       ****    else
 464:relay.c       ****    {
 465:relay.c       ****       relayThresholdCurrentState = relayThresholdState_INBETWEEN;
 466:relay.c       ****       relayThresholdRelaySetValue = relayThresholdsInBoundsPolarity;
 467:relay.c       ****    }
 468:relay.c       **** 
 469:relay.c       ****    if (FALSE != relayThresholdEnable_flag)
 470:relay.c       ****    {
 471:relay.c       ****       relayThresholdsSetRelayValue(relayThresholdRelaySetValue); /*turns on/off relay*/
 472:relay.c       ****    }
 473:relay.c       **** 
 474:relay.c       ****    if (FALSE != relayThresholdReportCurrentStatusEnable_flag)
 475:relay.c       ****    {
 476:relay.c       ****       PORTA = PORTA | ( ( 0x1 << relayThresholdLedPin ) ); // turn on lamp
 477:relay.c       ****       /* report current state and value */
 478:relay.c       ****       relayThresholdsReportCurrentStatus();
 479:relay.c       ****    }
 480:relay.c       **** 
 481:relay.c       ****    return TRUE;
 482:relay.c       **** }
 483:relay.c       **** 
 484:relay.c       **** void relayThresholdDetermineStateAndTriggerRelay(void)
 485:relay.c       **** {
 486:relay.c       ****    uint32_t currentValue = 0xFFFFFFFF;
 487:relay.c       ****    uint8_t report = FALSE;
 488:relay.c       ****    uint8_t relayThresholdOutOfBoundsTransitLockSetValue_flag = FALSE;
 489:relay.c       ****    currentValue = relayThresholdsGetCurrentValue(); // returns value + error information on top (16
 490:relay.c       **** 
 491:relay.c       ****    if ( 0 != (currentValue >> 16))
 492:relay.c       ****    {
 493:relay.c       ****       // error
 494:relay.c       ****       return;
 495:relay.c       ****    }
 496:relay.c       ****    else
 497:relay.c       ****    {
 498:relay.c       ****       // to be sure, remove back packer info;
 499:relay.c       ****       currentValue = (currentValue & 0xFFFF);
 500:relay.c       ****    }
 501:relay.c       **** 
 502:relay.c       ****    /* checks passed */
 503:relay.c       **** 
 504:relay.c       ****    if ( eventDebug <= debug && ( ( debugMask >> debugRELAY ) & 1 ) )
 505:relay.c       ****       {
 506:relay.c       ****           snprintf_P(uart_message_string, BUFFER_SIZE - 1, PSTR("DEBUG (%4i, %s) Determine..."), __
 507:relay.c       ****           UART0_Send_Message_String(NULL,0);
 508:relay.c       ****       }
 509:relay.c       **** 
 510:relay.c       ****    report  = FALSE;
 511:relay.c       ****    switch ( relayThresholdCurrentState )
 512:relay.c       ****    {
 513:relay.c       ****       case relayThresholdState_IDLE:
 514:relay.c       ****          {
 515:relay.c       ****             if ( currentValue > relayThresholdHigh )
 516:relay.c       ****             {
 517:relay.c       ****                /*turn off relays*/
 518:relay.c       ****                relayThresholdRelaySetValue = relayThresholdsOutOfBoundsPolarity;
 519:relay.c       ****                relayThresholdCurrentState = relayThresholdState_ABOVE_HIGH_THRESHOLD;
 520:relay.c       ****                if (FALSE != relayThresholdReportCurrentStatusEnable_flag) {report = TRUE;}
 521:relay.c       ****             }
 522:relay.c       ****             if ( currentValue < relayThresholdLow )
 523:relay.c       ****             {
 524:relay.c       ****                /*turn off relays*/
 525:relay.c       ****                relayThresholdRelaySetValue = relayThresholdsOutOfBoundsPolarity;
 526:relay.c       ****                relayThresholdCurrentState = relayThresholdState_BELOW_LOW_THRESHOLD;
 527:relay.c       ****                if (FALSE != relayThresholdReportCurrentStatusEnable_flag) {report = TRUE;}
 528:relay.c       ****             }
 529:relay.c       ****             else if ( currentValue > relayThresholdLow + 2  && currentValue < relayThresholdHigh -2
 530:relay.c       ****             {
 531:relay.c       ****                /*turn on relays*/
 532:relay.c       ****                relayThresholdRelaySetValue = relayThresholdsInBoundsPolarity;
 533:relay.c       ****                relayThresholdCurrentState = relayThresholdState_INBETWEEN;
 534:relay.c       ****                if (FALSE != relayThresholdReportCurrentStatusEnable_flag) {report = TRUE;}
 535:relay.c       ****             }
 536:relay.c       ****          }
 537:relay.c       ****          break;
 538:relay.c       ****       case relayThresholdState_INBETWEEN:
 539:relay.c       ****          {
 540:relay.c       ****             if ( currentValue > relayThresholdHigh )
 541:relay.c       ****             {
 542:relay.c       ****                /*turn off relays*/
 543:relay.c       ****                relayThresholdRelaySetValue = relayThresholdsOutOfBoundsPolarity;
 544:relay.c       ****                relayThresholdCurrentState = relayThresholdState_ABOVE_HIGH_THRESHOLD;
 545:relay.c       ****                if (FALSE != relayThresholdOutOfBoundsTransitLock_flag) { relayThresholdOutOfBoundsT
 546:relay.c       ****                if (FALSE != relayThresholdReportCurrentStatusEnable_flag) {report = TRUE;}
 547:relay.c       ****             }
 548:relay.c       ****             if ( currentValue < relayThresholdLow )
 549:relay.c       ****             {
 550:relay.c       ****                /*turn off relays*/
 551:relay.c       ****                relayThresholdRelaySetValue = relayThresholdsOutOfBoundsPolarity;
 552:relay.c       ****                relayThresholdCurrentState = relayThresholdState_BELOW_LOW_THRESHOLD;
 553:relay.c       ****                if (FALSE != relayThresholdOutOfBoundsTransitLock_flag) { relayThresholdOutOfBoundsT
 554:relay.c       ****                if (FALSE != relayThresholdReportCurrentStatusEnable_flag) {report = TRUE;}
 555:relay.c       ****             }
 556:relay.c       ****          }
 557:relay.c       ****          break;
 558:relay.c       ****       case relayThresholdState_BELOW_LOW_THRESHOLD:
 559:relay.c       ****          {
 560:relay.c       ****             _delay_ms(100);
 561:relay.c       ****             _delay_ms(100);
 562:relay.c       ****             PINA = ( 0x1 << relayThresholdLedPin ); // toggle LED
 563:relay.c       **** 
 564:relay.c       ****             if ( currentValue > relayThresholdHigh )
 565:relay.c       ****             {
 566:relay.c       ****                relayThresholdRelaySetValue = relayThresholdsOutOfBoundsPolarity;
 567:relay.c       ****                relayThresholdCurrentState = relayThresholdState_ABOVE_HIGH_THRESHOLD;
 568:relay.c       ****                if (FALSE != relayThresholdReportCurrentStatusEnable_flag) {report = TRUE;}
 569:relay.c       ****             }
 570:relay.c       ****             else if ( currentValue > relayThresholdLow + 2 )
 571:relay.c       ****             {
 572:relay.c       ****                /*turn on relays*/
 573:relay.c       ****                relayThresholdRelaySetValue = relayThresholdsInBoundsPolarity;
 574:relay.c       ****                relayThresholdCurrentState = relayThresholdState_INBETWEEN;
 575:relay.c       ****                if (FALSE != relayThresholdReportCurrentStatusEnable_flag) {report = TRUE;}
 576:relay.c       ****             }
 577:relay.c       ****          }
 578:relay.c       ****          break;
 579:relay.c       ****       case relayThresholdState_ABOVE_HIGH_THRESHOLD:
 580:relay.c       ****          {
 581:relay.c       ****             _delay_ms(100);
 582:relay.c       ****             _delay_ms(100);
 583:relay.c       ****             PINA = ( 0x1 << relayThresholdLedPin ); // toggle LED
 584:relay.c       **** 
 585:relay.c       ****             if ( currentValue < relayThresholdLow )
 586:relay.c       ****             {
 587:relay.c       ****                relayThresholdRelaySetValue = relayThresholdsOutOfBoundsPolarity;
 588:relay.c       ****                relayThresholdCurrentState = relayThresholdState_BELOW_LOW_THRESHOLD;
 589:relay.c       ****                if (FALSE != relayThresholdReportCurrentStatusEnable_flag) {report = TRUE;}
 590:relay.c       ****             }
 591:relay.c       ****             else if ( currentValue < relayThresholdHigh - 2 )
 592:relay.c       ****             {
 593:relay.c       ****                /* turn on relays and lamp*/
 594:relay.c       ****                relayThresholdRelaySetValue = relayThresholdsInBoundsPolarity;
 595:relay.c       ****                relayThresholdCurrentState = relayThresholdState_INBETWEEN;
 596:relay.c       ****                if (FALSE != relayThresholdReportCurrentStatusEnable_flag) {report = TRUE;}
 597:relay.c       ****             }
 598:relay.c       ****          }
 599:relay.c       ****          break;
 600:relay.c       ****       default:
 601:relay.c       ****          {
 602:relay.c       ****             relayThresholdCurrentState = relayThresholdState_UNDEFINED;
 603:relay.c       ****             if (FALSE != relayThresholdReportCurrentStatusEnable_flag) {report = TRUE;}
 604:relay.c       ****          }
 605:relay.c       ****          break;
 606:relay.c       ****    }
 607:relay.c       **** 
 608:relay.c       **** 
 609:relay.c       ****    /* physically set relay value */
 610:relay.c       ****    if (FALSE != relayThresholdEnable_flag)
 611:relay.c       ****    {
 612:relay.c       ****       if ( relayThresholdRelaySetValue != relayThresholdRelayValue )
 613:relay.c       ****       {
 614:relay.c       ****          relayThresholdsSetRelayValue(relayThresholdRelaySetValue); /*turns on/off relay*/
 615:relay.c       ****       }
 616:relay.c       ****       if (FALSE != relayThresholdOutOfBoundsTransitLockSetValue_flag)
 617:relay.c       ****       {
 618:relay.c       ****          relayThresholdsSetEnableFlag(FALSE);
 619:relay.c       ****       }
 620:relay.c       ****    }
 621:relay.c       **** 
 622:relay.c       **** 
 623:relay.c       ****    if (FALSE != report)
 624:relay.c       ****    {
 625:relay.c       ****       /* report current state and value */
 626:relay.c       ****       relayThresholdsReportCurrentStatus();
 627:relay.c       ****    }
 628:relay.c       **** }
 629:relay.c       **** 
 630:relay.c       **** uint8_t relayThresholdsSetHighThreshold(uint16_t value)
 631:relay.c       **** {
 131               	.LM0:
 132               	/* prologue: frame size=0 */
 133               	/* prologue end (size=0) */
 632:relay.c       ****    uint8_t status = 0;
 633:relay.c       **** 
 634:relay.c       ****    relayThresholdHigh = value;
 135               	.LM1:
 136 0000 9093 0000 		sts (relayThresholdHigh)+1,r25
 137 0004 8093 0000 		sts relayThresholdHigh,r24
 635:relay.c       **** 
 636:relay.c       ****    relayThresholds_valid[relayThreshold_HIGH] = TRUE;
 139               	.LM2:
 140 0008 81E0      		ldi r24,lo8(1)
 141 000a 8093 0000 		sts relayThresholds_valid+1,r24
 637:relay.c       **** 
 638:relay.c       ****    return status;
 639:relay.c       **** }
 143               	.LM3:
 144 000e 80E0      		ldi r24,lo8(0)
 145 0010 90E0      		ldi r25,hi8(0)
 146               	/* epilogue: frame size=0 */
 147 0012 0895      		ret
 148               	/* epilogue end (size=1) */
 149               	/* function relayThresholdsSetHighThreshold size 10 (9) */
 151               	.Lscope0:
 154               	.global	relayThresholdsSetLowThreshold
 156               	relayThresholdsSetLowThreshold:
 640:relay.c       **** 
 641:relay.c       **** uint8_t relayThresholdsSetLowThreshold(uint16_t value)
 642:relay.c       **** {
 158               	.LM4:
 159               	/* prologue: frame size=0 */
 160               	/* prologue end (size=0) */
 643:relay.c       ****    uint8_t status = 0;
 644:relay.c       **** 
 645:relay.c       ****    relayThresholdLow = value;
 162               	.LM5:
 163 0014 9093 0000 		sts (relayThresholdLow)+1,r25
 164 0018 8093 0000 		sts relayThresholdLow,r24
 646:relay.c       **** 
 647:relay.c       ****    relayThresholds_valid[relayThreshold_LOW] = TRUE;
 166               	.LM6:
 167 001c 81E0      		ldi r24,lo8(1)
 168 001e 8093 0000 		sts relayThresholds_valid,r24
 648:relay.c       **** 
 649:relay.c       ****    return status;
 650:relay.c       **** }
 170               	.LM7:
 171 0022 80E0      		ldi r24,lo8(0)
 172 0024 90E0      		ldi r25,hi8(0)
 173               	/* epilogue: frame size=0 */
 174 0026 0895      		ret
 175               	/* epilogue end (size=1) */
 176               	/* function relayThresholdsSetLowThreshold size 10 (9) */
 178               	.Lscope1:
 181               	.global	relayThresholdsSetEnableFlag
 183               	relayThresholdsSetEnableFlag:
 651:relay.c       **** 
 652:relay.c       **** uint8_t relayThresholdsSetEnableFlag(uint8_t value)
 653:relay.c       **** {
 185               	.LM8:
 186               	/* prologue: frame size=0 */
 187               	/* prologue end (size=0) */
 654:relay.c       ****    uint8_t status = 0;
 655:relay.c       **** 
 656:relay.c       ****    relayThresholdEnable_flag = ( 0 != value);
 189               	.LM9:
 190 0028 8111      		cpse r24,__zero_reg__
 192               	.LM10:
 193 002a 81E0      		ldi r24,lo8(1)
 194               	.L6:
 195 002c 8093 0000 		sts relayThresholdEnable_flag,r24
 657:relay.c       **** 
 658:relay.c       ****    if ( FALSE == relayThresholdEnable_flag)
 197               	.LM11:
 198 0030 8091 0000 		lds r24,relayThresholdEnable_flag
 199 0034 8823      		tst r24
 200 0036 01F4      		brne .L7
 659:relay.c       ****    {
 660:relay.c       ****       relayThresholdCurrentState = relayThresholdState_IDLE;
 202               	.LM12:
 203 0038 1092 0000 		sts relayThresholdCurrentState,__zero_reg__
 661:relay.c       ****       PORTA = PORTA & ( ~( 0x1 << relayThresholdLedPin ) ); // turn off lamp
 205               	.LM13:
 206 003c 82B1      		in r24,34-0x20
 207 003e 9091 0000 		lds r25,relayThresholdLedPin
 208 0042 21E0      		ldi r18,lo8(1)
 209 0044 30E0      		ldi r19,hi8(1)
 210 0046 00C0      		rjmp 2f
 211 0048 220F      	1:	lsl r18
 212 004a 331F      		rol r19
 213 004c 9A95      	2:	dec r25
 214 004e 02F4      		brpl 1b
 215 0050 2095      		com r18
 216 0052 8223      		and r24,r18
 217 0054 82B9      		out 34-0x20,r24
 218 0056 00C0      		rjmp .L9
 219               	.L7:
 662:relay.c       ****    }
 663:relay.c       ****    else
 664:relay.c       ****    {
 665:relay.c       ****       PORTA = PORTA | ( ( 0x1 << relayThresholdLedPin ) ); // turn on lamp
 221               	.LM14:
 222 0058 82B1      		in r24,34-0x20
 223 005a 9091 0000 		lds r25,relayThresholdLedPin
 224 005e 21E0      		ldi r18,lo8(1)
 225 0060 30E0      		ldi r19,hi8(1)
 226 0062 00C0      		rjmp 2f
 227 0064 220F      	1:	lsl r18
 228 0066 331F      		rol r19
 229 0068 9A95      	2:	dec r25
 230 006a 02F4      		brpl 1b
 231 006c 822B      		or r24,r18
 232 006e 82B9      		out 34-0x20,r24
 233               	.L9:
 666:relay.c       ****    }
 667:relay.c       **** 
 668:relay.c       ****    return status;
 669:relay.c       **** }
 235               	.LM15:
 236 0070 80E0      		ldi r24,lo8(0)
 237 0072 90E0      		ldi r25,hi8(0)
 238               	/* epilogue: frame size=0 */
 239 0074 0895      		ret
 240               	/* epilogue end (size=1) */
 241               	/* function relayThresholdsSetEnableFlag size 42 (41) */
 243               	.Lscope2:
 245               	.global	relayThresholdsGetInvertPolarityFlag
 247               	relayThresholdsGetInvertPolarityFlag:
 670:relay.c       **** 
 671:relay.c       **** uint8_t relayThresholdsSetReportCurrentStatusEnableFlag(uint8_t value)
 672:relay.c       **** {
 673:relay.c       ****    uint8_t status = 0;
 674:relay.c       **** 
 675:relay.c       ****    relayThresholdReportCurrentStatusEnable_flag = ( 0 != value);
 676:relay.c       **** 
 677:relay.c       ****    if ( FALSE != relayThresholdReportCurrentStatusEnable_flag)
 678:relay.c       ****    {
 679:relay.c       ****       relayThresholdsReportCurrentStatus();
 680:relay.c       ****    }
 681:relay.c       **** 
 682:relay.c       ****    return status;
 683:relay.c       **** }
 684:relay.c       **** 
 685:relay.c       **** uint8_t relayThresholdsSetOutOfBoundsTransitLockFlag(uint8_t value)
 686:relay.c       **** {
 687:relay.c       ****    uint8_t status = 0;
 688:relay.c       **** 
 689:relay.c       ****    relayThresholdOutOfBoundsTransitLock_flag = ( 0 != value);
 690:relay.c       **** 
 691:relay.c       ****    if ( FALSE != relayThresholdReportCurrentStatusEnable_flag)
 692:relay.c       ****    {
 693:relay.c       ****       relayThresholdsReportCurrentStatus();
 694:relay.c       ****    }
 695:relay.c       **** 
 696:relay.c       ****    return status;
 697:relay.c       **** }
 698:relay.c       **** 
 699:relay.c       **** uint8_t relayThresholdsSetInvertPolarityFlag(uint8_t value)
 700:relay.c       **** {
 701:relay.c       ****    uint8_t status = 0;
 702:relay.c       **** 
 703:relay.c       ****    relayThresholdInvertPolarity_flag = ( 0 != value);
 704:relay.c       **** 
 705:relay.c       ****    /* reinit*/
 706:relay.c       ****    relayThresholdInBoundPolarityInit();
 707:relay.c       **** 
 708:relay.c       ****    if ( FALSE != relayThresholdReportCurrentStatusEnable_flag)
 709:relay.c       ****    {
 710:relay.c       ****       relayThresholdsReportCurrentStatus();
 711:relay.c       ****    }
 712:relay.c       **** 
 713:relay.c       ****    return status;
 714:relay.c       **** }
 715:relay.c       **** 
 716:relay.c       **** uint8_t relayThresholdsSetRelayValue(uint8_t value)
 717:relay.c       **** {
 718:relay.c       ****    uint8_t status = 0;
 719:relay.c       ****    uint8_t setValue = 0;
 720:relay.c       ****    setValue = ( 0 != value);
 721:relay.c       ****    if (relayThresholdRelayValue != setValue)
 722:relay.c       ****    {
 723:relay.c       ****       if (TRUE == setValue)
 724:relay.c       ****       {
 725:relay.c       ****          PORTA |= ( 0x1 << relayThresholdOutputPin ) ;
 726:relay.c       ****       }
 727:relay.c       ****       else
 728:relay.c       ****       {
 729:relay.c       ****          PORTA &= ( ~( 0x1 << relayThresholdOutputPin) );
 730:relay.c       ****       }
 731:relay.c       ****       relayThresholdRelayValue = setValue;
 732:relay.c       ****       if (FALSE != relayThresholdReportCurrentStatusEnable_flag)
 733:relay.c       ****       {
 734:relay.c       ****          relayThresholdsReportCurrentStatus();
 735:relay.c       ****       }
 736:relay.c       ****    }
 737:relay.c       **** 
 738:relay.c       ****    return status;
 739:relay.c       **** }
 740:relay.c       **** 
 741:relay.c       **** uint8_t relayThresholdsSetRelaySetValue(uint8_t value)
 742:relay.c       **** {
 743:relay.c       ****    uint8_t status = 0;
 744:relay.c       ****    uint8_t setValue = 0;
 745:relay.c       ****    setValue = ( 0 != value);
 746:relay.c       ****    if (relayThresholdRelaySetValue != setValue)
 747:relay.c       ****    {
 748:relay.c       ****       relayThresholdRelaySetValue = setValue;
 749:relay.c       ****       if (FALSE != relayThresholdReportCurrentStatusEnable_flag)
 750:relay.c       ****       {
 751:relay.c       ****          relayThresholdsReportCurrentStatus();
 752:relay.c       ****       }
 753:relay.c       ****    }
 754:relay.c       **** 
 755:relay.c       ****    return status;
 756:relay.c       **** }
 757:relay.c       **** 
 758:relay.c       **** uint8_t relayThresholdsSetInputChannel(uint8_t value)
 759:relay.c       **** {
 760:relay.c       ****    uint8_t status = 0;
 761:relay.c       ****    if ( value <= 7)
 762:relay.c       ****    {
 763:relay.c       ****       relayThresholdInputChannel = value;
 764:relay.c       ****    }
 765:relay.c       ****    else
 766:relay.c       ****    {
 767:relay.c       ****       CommunicationError(ERRA, -1, TRUE, PSTR("invalid command argument"), -1);
 768:relay.c       ****       status = 1;
 769:relay.c       ****    }
 770:relay.c       ****    return status;
 771:relay.c       **** }
 772:relay.c       **** 
 773:relay.c       **** uint8_t relayThresholdsSetOutputPin(uint8_t value)
 774:relay.c       **** {
 775:relay.c       ****    uint8_t status = 0;
 776:relay.c       ****    if ( value <= 7)
 777:relay.c       ****    {
 778:relay.c       ****       relayThresholdOutputPin = value;
 779:relay.c       ****    }
 780:relay.c       ****    else
 781:relay.c       ****    {
 782:relay.c       ****       CommunicationError(ERRA, -1, TRUE, PSTR("invalid command argument"), -1);
 783:relay.c       ****       status = 1;
 784:relay.c       ****    }
 785:relay.c       ****    return status;
 786:relay.c       **** }
 787:relay.c       **** 
 788:relay.c       **** uint8_t relayThresholdsSetLedPin(uint8_t value)
 789:relay.c       **** {
 790:relay.c       ****    uint8_t status = 0;
 791:relay.c       ****    if ( value <= 7)
 792:relay.c       ****    {
 793:relay.c       ****       relayThresholdLedPin = value;
 794:relay.c       ****    }
 795:relay.c       ****    else
 796:relay.c       ****    {
 797:relay.c       ****       CommunicationError(ERRA, -1, TRUE, PSTR("invalid command argument"), -1);
 798:relay.c       ****       status = 1;
 799:relay.c       ****    }
 800:relay.c       ****    return status;
 801:relay.c       **** }
 802:relay.c       **** 
 803:relay.c       **** uint8_t relayThresholdsSetExternalPolarityPinPos(uint8_t value)
 804:relay.c       **** {
 805:relay.c       ****    uint8_t status = 0;
 806:relay.c       **** 
 807:relay.c       ****    if ( 1 > value || 8 < value )
 808:relay.c       ****    {
 809:relay.c       ****       snprintf_P(message, BUFFER_SIZE - 1,
 810:relay.c       ****                  PSTR("value out of bounds [1,8]"), value);
 811:relay.c       ****       CommunicationError(ERRG, -100, TRUE, NULL,
 812:relay.c       ****                          COMMUNICATION_ERROR_USE_GLOBAL_MESSAGE_STRING_INDEX_THRESHOLD - 100 );
 813:relay.c       **** 
 814:relay.c       ****       return 1;
 815:relay.c       ****    }
 816:relay.c       **** 
 817:relay.c       ****    relayThresholdsExternalPolarityPinPos = value;
 818:relay.c       **** 
 819:relay.c       ****    /* reinit*/
 820:relay.c       ****    relayThresholdInBoundPolarityInit();
 821:relay.c       **** 
 822:relay.c       ****    if ( FALSE != relayThresholdReportCurrentStatusEnable_flag)
 823:relay.c       ****    {
 824:relay.c       ****       relayThresholdsReportCurrentStatus();
 825:relay.c       ****    }
 826:relay.c       **** 
 827:relay.c       ****    return status;
 828:relay.c       **** }
 829:relay.c       **** 
 830:relay.c       **** uint8_t relayThresholdsSetExternalPolarityPort(uint8_t value)
 831:relay.c       **** {
 832:relay.c       ****    uint8_t status = 0;
 833:relay.c       **** 
 834:relay.c       ****    if ( 0xA > value || 0xF < value )
 835:relay.c       ****    {
 836:relay.c       ****       snprintf_P(message, BUFFER_SIZE - 1,
 837:relay.c       ****                  PSTR("value out of bounds [A,F]"), value);
 838:relay.c       ****       CommunicationError(ERRG, -100, TRUE, NULL,
 839:relay.c       ****                          COMMUNICATION_ERROR_USE_GLOBAL_MESSAGE_STRING_INDEX_THRESHOLD - 100 );
 840:relay.c       **** 
 841:relay.c       ****       return 1;
 842:relay.c       ****    }
 843:relay.c       **** 
 844:relay.c       ****    relayThresholdsExternalPolarityPort = value;
 845:relay.c       **** 
 846:relay.c       ****    /* reinit*/
 847:relay.c       ****    relayThresholdInBoundPolarityInit();
 848:relay.c       **** 
 849:relay.c       ****    if ( FALSE != relayThresholdReportCurrentStatusEnable_flag)
 850:relay.c       ****    {
 851:relay.c       ****       relayThresholdsReportCurrentStatus();
 852:relay.c       ****    }
 853:relay.c       **** 
 854:relay.c       ****    return status;
 855:relay.c       **** }
 856:relay.c       **** 
 857:relay.c       **** uint8_t relayThresholdsGetInvertPolarityFlag(void)
 858:relay.c       **** {
 249               	.LM16:
 250               	/* prologue: frame size=0 */
 251               	/* prologue end (size=0) */
 859:relay.c       ****    return relayThresholdInvertPolarity_flag;
 253               	.LM17:
 254 0076 8091 0000 		lds r24,relayThresholdInvertPolarity_flag
 860:relay.c       **** }
 256               	.LM18:
 257 007a 9927      		clr r25
 258               	/* epilogue: frame size=0 */
 259 007c 0895      		ret
 260               	/* epilogue end (size=1) */
 261               	/* function relayThresholdsGetInvertPolarityFlag size 4 (3) */
 263               	.Lscope3:
 265               	.global	relayThresholdsGetHighThreshold
 267               	relayThresholdsGetHighThreshold:
 861:relay.c       **** 
 862:relay.c       **** uint16_t relayThresholdsGetHighThreshold(void)
 863:relay.c       **** {
 269               	.LM19:
 270               	/* prologue: frame size=0 */
 271               	/* prologue end (size=0) */
 864:relay.c       ****    return relayThresholdHigh;
 273               	.LM20:
 274 007e 8091 0000 		lds r24,relayThresholdHigh
 275 0082 9091 0000 		lds r25,(relayThresholdHigh)+1
 276               	/* epilogue: frame size=0 */
 277 0086 0895      		ret
 278               	/* epilogue end (size=1) */
 279               	/* function relayThresholdsGetHighThreshold size 5 (4) */
 281               	.Lscope4:
 283               	.global	relayThresholdsGetLowThreshold
 285               	relayThresholdsGetLowThreshold:
 865:relay.c       **** }
 866:relay.c       **** 
 867:relay.c       **** uint16_t relayThresholdsGetLowThreshold(void)
 868:relay.c       **** {
 287               	.LM21:
 288               	/* prologue: frame size=0 */
 289               	/* prologue end (size=0) */
 869:relay.c       ****    return relayThresholdLow;
 291               	.LM22:
 292 0088 8091 0000 		lds r24,relayThresholdLow
 293 008c 9091 0000 		lds r25,(relayThresholdLow)+1
 294               	/* epilogue: frame size=0 */
 295 0090 0895      		ret
 296               	/* epilogue end (size=1) */
 297               	/* function relayThresholdsGetLowThreshold size 5 (4) */
 299               	.Lscope5:
 301               	.global	relayThresholdsGetEnableFlag
 303               	relayThresholdsGetEnableFlag:
 870:relay.c       **** }
 871:relay.c       **** 
 872:relay.c       **** uint8_t relayThresholdsGetEnableFlag(void)
 873:relay.c       **** {
 305               	.LM23:
 306               	/* prologue: frame size=0 */
 307               	/* prologue end (size=0) */
 874:relay.c       ****    return relayThresholdEnable_flag;
 309               	.LM24:
 310 0092 8091 0000 		lds r24,relayThresholdEnable_flag
 875:relay.c       **** }
 312               	.LM25:
 313 0096 9927      		clr r25
 314               	/* epilogue: frame size=0 */
 315 0098 0895      		ret
 316               	/* epilogue end (size=1) */
 317               	/* function relayThresholdsGetEnableFlag size 4 (3) */
 319               	.Lscope6:
 321               	.global	relayThresholdsGetOutOfBoundsTransitLockFlag
 323               	relayThresholdsGetOutOfBoundsTransitLockFlag:
 876:relay.c       **** 
 877:relay.c       **** uint8_t relayThresholdsGetOutOfBoundsTransitLockFlag(void)
 878:relay.c       **** {
 325               	.LM26:
 326               	/* prologue: frame size=0 */
 327               	/* prologue end (size=0) */
 879:relay.c       ****    return relayThresholdOutOfBoundsTransitLock_flag;
 329               	.LM27:
 330 009a 8091 0000 		lds r24,relayThresholdOutOfBoundsTransitLock_flag
 880:relay.c       **** }
 332               	.LM28:
 333 009e 9927      		clr r25
 334               	/* epilogue: frame size=0 */
 335 00a0 0895      		ret
 336               	/* epilogue end (size=1) */
 337               	/* function relayThresholdsGetOutOfBoundsTransitLockFlag size 4 (3) */
 339               	.Lscope7:
 341               	.global	relayThresholdsGetReportStateEnableFlag
 343               	relayThresholdsGetReportStateEnableFlag:
 881:relay.c       **** 
 882:relay.c       **** uint8_t relayThresholdsGetReportStateEnableFlag(void)
 883:relay.c       **** {
 345               	.LM29:
 346               	/* prologue: frame size=0 */
 347               	/* prologue end (size=0) */
 884:relay.c       ****    return relayThresholdReportCurrentStatusEnable_flag;
 349               	.LM30:
 350 00a2 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 885:relay.c       **** }
 352               	.LM31:
 353 00a6 9927      		clr r25
 354               	/* epilogue: frame size=0 */
 355 00a8 0895      		ret
 356               	/* epilogue end (size=1) */
 357               	/* function relayThresholdsGetReportStateEnableFlag size 4 (3) */
 359               	.Lscope8:
 361               	.global	relayThresholdsGetInBoundsPolarity
 363               	relayThresholdsGetInBoundsPolarity:
 886:relay.c       **** 
 887:relay.c       **** uint8_t relayThresholdsGetInBoundsPolarity(void)
 888:relay.c       **** {
 365               	.LM32:
 366               	/* prologue: frame size=0 */
 367               	/* prologue end (size=0) */
 889:relay.c       ****    return (relayThresholdsInBoundsPolarity != FALSE);
 369               	.LM33:
 370 00aa 8091 0000 		lds r24,relayThresholdsInBoundsPolarity
 371 00ae 20E0      		ldi r18,lo8(0)
 372 00b0 30E0      		ldi r19,hi8(0)
 373 00b2 8823      		tst r24
 374 00b4 01F0      		breq .L25
 376               	.LM34:
 377 00b6 21E0      		ldi r18,lo8(1)
 378 00b8 30E0      		ldi r19,hi8(1)
 379               	.L25:
 890:relay.c       **** }
 381               	.LM35:
 382 00ba C901      		movw r24,r18
 383               	/* epilogue: frame size=0 */
 384 00bc 0895      		ret
 385               	/* epilogue end (size=1) */
 386               	/* function relayThresholdsGetInBoundsPolarity size 10 (9) */
 388               	.Lscope9:
 390               	.global	relayThresholdsGetOutOfBoundsPolarity
 392               	relayThresholdsGetOutOfBoundsPolarity:
 891:relay.c       **** 
 892:relay.c       **** uint8_t relayThresholdsGetOutOfBoundsPolarity(void)
 893:relay.c       **** {
 394               	.LM36:
 395               	/* prologue: frame size=0 */
 396               	/* prologue end (size=0) */
 894:relay.c       ****    return (relayThresholdsOutOfBoundsPolarity != FALSE);
 398               	.LM37:
 399 00be 8091 0000 		lds r24,relayThresholdsOutOfBoundsPolarity
 400 00c2 20E0      		ldi r18,lo8(0)
 401 00c4 30E0      		ldi r19,hi8(0)
 402 00c6 8823      		tst r24
 403 00c8 01F0      		breq .L28
 405               	.LM38:
 406 00ca 21E0      		ldi r18,lo8(1)
 407 00cc 30E0      		ldi r19,hi8(1)
 408               	.L28:
 895:relay.c       **** }
 410               	.LM39:
 411 00ce C901      		movw r24,r18
 412               	/* epilogue: frame size=0 */
 413 00d0 0895      		ret
 414               	/* epilogue end (size=1) */
 415               	/* function relayThresholdsGetOutOfBoundsPolarity size 10 (9) */
 417               	.Lscope10:
 419               	.global	relayThresholdsGetExternalPolarityPinPos
 421               	relayThresholdsGetExternalPolarityPinPos:
 896:relay.c       **** 
 897:relay.c       **** uint8_t relayThresholdsGetExternalPolarityPinPos(void)
 898:relay.c       **** {
 423               	.LM40:
 424               	/* prologue: frame size=0 */
 425               	/* prologue end (size=0) */
 899:relay.c       ****    return relayThresholdsExternalPolarityPinPos;
 427               	.LM41:
 428 00d2 8091 0000 		lds r24,relayThresholdsExternalPolarityPinPos
 900:relay.c       **** }
 430               	.LM42:
 431 00d6 9927      		clr r25
 432               	/* epilogue: frame size=0 */
 433 00d8 0895      		ret
 434               	/* epilogue end (size=1) */
 435               	/* function relayThresholdsGetExternalPolarityPinPos size 4 (3) */
 437               	.Lscope11:
 439               	.global	relayThresholdsGetExternalPolarityPort
 441               	relayThresholdsGetExternalPolarityPort:
 901:relay.c       **** 
 902:relay.c       **** uint8_t relayThresholdsGetExternalPolarityPort(void)
 903:relay.c       **** {
 443               	.LM43:
 444               	/* prologue: frame size=0 */
 445               	/* prologue end (size=0) */
 904:relay.c       ****    return relayThresholdsExternalPolarityPort;
 447               	.LM44:
 448 00da 8091 0000 		lds r24,relayThresholdsExternalPolarityPort
 905:relay.c       **** }
 450               	.LM45:
 451 00de 9927      		clr r25
 452               	/* epilogue: frame size=0 */
 453 00e0 0895      		ret
 454               	/* epilogue end (size=1) */
 455               	/* function relayThresholdsGetExternalPolarityPort size 4 (3) */
 457               	.Lscope12:
 459               	.global	relayThresholdsGetExternalPolarity
 461               	relayThresholdsGetExternalPolarity:
 906:relay.c       **** 
 907:relay.c       **** uint8_t relayThresholdsGetExternalPolarity(void)
 908:relay.c       **** {
 463               	.LM46:
 464               	/* prologue: frame size=0 */
 465               	/* prologue end (size=0) */
 909:relay.c       ****    return (relayThresholdsExternalPolarity != FALSE);
 467               	.LM47:
 468 00e2 8091 0000 		lds r24,relayThresholdsExternalPolarity
 469 00e6 20E0      		ldi r18,lo8(0)
 470 00e8 30E0      		ldi r19,hi8(0)
 471 00ea 8823      		tst r24
 472 00ec 01F0      		breq .L35
 474               	.LM48:
 475 00ee 21E0      		ldi r18,lo8(1)
 476 00f0 30E0      		ldi r19,hi8(1)
 477               	.L35:
 910:relay.c       **** }
 479               	.LM49:
 480 00f2 C901      		movw r24,r18
 481               	/* epilogue: frame size=0 */
 482 00f4 0895      		ret
 483               	/* epilogue end (size=1) */
 484               	/* function relayThresholdsGetExternalPolarity size 10 (9) */
 486               	.Lscope13:
 488               	.global	relayThresholdsGetInputChannel
 490               	relayThresholdsGetInputChannel:
 911:relay.c       **** 
 912:relay.c       **** uint8_t relayThresholdsGetInputChannel(void)
 913:relay.c       **** {
 492               	.LM50:
 493               	/* prologue: frame size=0 */
 494               	/* prologue end (size=0) */
 914:relay.c       ****    return relayThresholdInputChannel;
 496               	.LM51:
 497 00f6 8091 0000 		lds r24,relayThresholdInputChannel
 915:relay.c       **** }
 499               	.LM52:
 500 00fa 9927      		clr r25
 501               	/* epilogue: frame size=0 */
 502 00fc 0895      		ret
 503               	/* epilogue end (size=1) */
 504               	/* function relayThresholdsGetInputChannel size 4 (3) */
 506               	.Lscope14:
 508               	.global	relayThresholdsGetOutputPin
 510               	relayThresholdsGetOutputPin:
 916:relay.c       **** 
 917:relay.c       **** uint8_t relayThresholdsGetOutputPin(void)
 918:relay.c       **** {
 512               	.LM53:
 513               	/* prologue: frame size=0 */
 514               	/* prologue end (size=0) */
 919:relay.c       ****    return relayThresholdOutputPin;
 516               	.LM54:
 517 00fe 8091 0000 		lds r24,relayThresholdOutputPin
 920:relay.c       **** }
 519               	.LM55:
 520 0102 9927      		clr r25
 521               	/* epilogue: frame size=0 */
 522 0104 0895      		ret
 523               	/* epilogue end (size=1) */
 524               	/* function relayThresholdsGetOutputPin size 4 (3) */
 526               	.Lscope15:
 528               	.global	relayThresholdsGetLedPin
 530               	relayThresholdsGetLedPin:
 921:relay.c       **** 
 922:relay.c       **** uint8_t relayThresholdsGetLedPin(void)
 923:relay.c       **** {
 532               	.LM56:
 533               	/* prologue: frame size=0 */
 534               	/* prologue end (size=0) */
 924:relay.c       ****    return relayThresholdLedPin;
 536               	.LM57:
 537 0106 8091 0000 		lds r24,relayThresholdLedPin
 925:relay.c       **** }
 539               	.LM58:
 540 010a 9927      		clr r25
 541               	/* epilogue: frame size=0 */
 542 010c 0895      		ret
 543               	/* epilogue end (size=1) */
 544               	/* function relayThresholdsGetLedPin size 4 (3) */
 546               	.Lscope16:
 548               	.global	relayThresholdsGetCurrentState
 550               	relayThresholdsGetCurrentState:
 926:relay.c       **** 
 927:relay.c       **** uint8_t relayThresholdsGetCurrentState(void)
 928:relay.c       **** {
 552               	.LM59:
 553               	/* prologue: frame size=0 */
 554               	/* prologue end (size=0) */
 929:relay.c       ****    return relayThresholdCurrentState;
 556               	.LM60:
 557 010e 8091 0000 		lds r24,relayThresholdCurrentState
 930:relay.c       **** }
 559               	.LM61:
 560 0112 9927      		clr r25
 561               	/* epilogue: frame size=0 */
 562 0114 0895      		ret
 563               	/* epilogue end (size=1) */
 564               	/* function relayThresholdsGetCurrentState size 4 (3) */
 566               	.Lscope17:
 568               	.global	relayThresholdsGetRelayValue
 570               	relayThresholdsGetRelayValue:
 931:relay.c       **** 
 932:relay.c       **** uint32_t relayThresholdsGetCurrentValue(void)
 933:relay.c       **** 
 934:relay.c       **** {
 935:relay.c       ****    uint8_t status = eNoError;
 936:relay.c       **** 
 937:relay.c       ****    /*pressure is checked only for channel 0*/
 938:relay.c       ****    status = atmelReadSingleADCChannelVoltage(relayThresholdInputChannel);
 939:relay.c       **** 
 940:relay.c       ****    /* set global status*/
 941:relay.c       ****    switch (relayThresholdInputChannel)
 942:relay.c       ****    {
 943:relay.c       ****       case 0:
 944:relay.c       ****          res0 = status;
 945:relay.c       ****          break;
 946:relay.c       ****       case 1:
 947:relay.c       ****          res1 = status;
 948:relay.c       ****          break;
 949:relay.c       ****       case 2:
 950:relay.c       ****          res2 = status;
 951:relay.c       ****          break;
 952:relay.c       ****       case 3:
 953:relay.c       ****          res3 = status;
 954:relay.c       ****          break;
 955:relay.c       ****       case 4:
 956:relay.c       ****          res4 = status;
 957:relay.c       ****          break;
 958:relay.c       ****       case 5:
 959:relay.c       ****          res5 = status;
 960:relay.c       ****          break;
 961:relay.c       ****       case 6:
 962:relay.c       ****          res6 = status;
 963:relay.c       ****          break;
 964:relay.c       ****       case 7:
 965:relay.c       ****          res7 = status;
 966:relay.c       ****          break;
 967:relay.c       ****       default:
 968:relay.c       ****          snprintf_P(message, BUFFER_SIZE - 1,
 969:relay.c       ****                     PSTR("error accessing ADC wrong channel: %i"), ptr_uartStruct->Uart_Message_ID)
 970:relay.c       ****          CommunicationError(ERRG, -100, TRUE, NULL,
 971:relay.c       ****                             COMMUNICATION_ERROR_USE_GLOBAL_MESSAGE_STRING_INDEX_THRESHOLD - 100 );
 972:relay.c       ****          return 0x2L << 16;
 973:relay.c       ****          break;
 974:relay.c       ****    }
 975:relay.c       **** 
 976:relay.c       ****    /* check status return*/
 977:relay.c       ****    if ( status != eNoError )
 978:relay.c       ****    {
 979:relay.c       ****       snprintf_P(message, BUFFER_SIZE - 1,
 980:relay.c       ****                  PSTR("error accessing ADC channel %i"), ptr_uartStruct->Uart_Message_ID);
 981:relay.c       ****       CommunicationError(ERRG, -100, TRUE, PSTR("error accessing ADCs"),
 982:relay.c       ****                          COMMUNICATION_ERROR_USE_GLOBAL_MESSAGE_STRING_INDEX_THRESHOLD - 100 );
 983:relay.c       **** 
 984:relay.c       ****       return 0x1L << 16;
 985:relay.c       ****    }
 986:relay.c       **** 
 987:relay.c       ****    return Voltages[relayThresholdInputChannel];
 988:relay.c       **** }
 989:relay.c       **** 
 990:relay.c       **** uint8_t relayThresholdsGetRelayValue(void)
 991:relay.c       **** {
 572               	.LM62:
 573               	/* prologue: frame size=0 */
 574               	/* prologue end (size=0) */
 992:relay.c       ****    return relayThresholdRelayValue;
 576               	.LM63:
 577 0116 8091 0000 		lds r24,relayThresholdRelayValue
 993:relay.c       **** }
 579               	.LM64:
 580 011a 9927      		clr r25
 581               	/* epilogue: frame size=0 */
 582 011c 0895      		ret
 583               	/* epilogue end (size=1) */
 584               	/* function relayThresholdsGetRelayValue size 4 (3) */
 586               	.Lscope18:
 588               	.global	relayThresholdsGetRelaySetValue
 590               	relayThresholdsGetRelaySetValue:
 994:relay.c       **** 
 995:relay.c       **** uint8_t relayThresholdsGetRelaySetValue(void)
 996:relay.c       **** {
 592               	.LM65:
 593               	/* prologue: frame size=0 */
 594               	/* prologue end (size=0) */
 997:relay.c       ****    return relayThresholdRelaySetValue;
 596               	.LM66:
 597 011e 8091 0000 		lds r24,relayThresholdRelaySetValue
 998:relay.c       **** }
 599               	.LM67:
 600 0122 9927      		clr r25
 601               	/* epilogue: frame size=0 */
 602 0124 0895      		ret
 603               	/* epilogue end (size=1) */
 604               	/* function relayThresholdsGetRelaySetValue size 4 (3) */
 606               	.Lscope19:
 608               	.global	relayThresholdsGetCurrentValue
 610               	relayThresholdsGetCurrentValue:
 612               	.LM68:
 613               	/* prologue: frame size=0 */
 614 0126 0F93      		push r16
 615 0128 1F93      		push r17
 616               	/* prologue end (size=2) */
 618               	.LM69:
 619 012a 8091 0000 		lds r24,relayThresholdInputChannel
 620 012e 9927      		clr r25
 621 0130 0E94 0000 		call atmelReadSingleADCChannelVoltage
 623               	.LM70:
 624 0134 9091 0000 		lds r25,relayThresholdInputChannel
 625 0138 9330      		cpi r25,lo8(3)
 626 013a 01F4      		brne .+2
 627 013c 00C0      		rjmp .L54
 629               	.LM71:
 630 013e 9430      		cpi r25,lo8(4)
 631 0140 00F0      		brlo .L67
 632 0142 9530      		cpi r25,lo8(5)
 633 0144 01F4      		brne .+2
 634 0146 00C0      		rjmp .L56
 635 0148 9530      		cpi r25,lo8(5)
 636 014a 00F4      		brsh .+2
 637 014c 00C0      		rjmp .L55
 638 014e 9630      		cpi r25,lo8(6)
 639 0150 01F4      		brne .+2
 640 0152 00C0      		rjmp .L57
 641 0154 9730      		cpi r25,lo8(7)
 642 0156 01F4      		brne .+2
 643 0158 00C0      		rjmp .L68
 645               	.LM72:
 646 015a E091 0000 		lds r30,ptr_uartStruct
 647 015e F091 0000 		lds r31,(ptr_uartStruct)+1
 648 0162 8081      		ld r24,Z
 649 0164 9181      		ldd r25,Z+1
 650 0166 A281      		ldd r26,Z+2
 651 0168 B381      		ldd r27,Z+3
 652 016a BF93      		push r27
 653 016c AF93      		push r26
 654 016e 9F93      		push r25
 655 0170 8F93      		push r24
 657               	.LM73:
 658 0172 80E0      		ldi r24,lo8(__c.3282)
 659 0174 90E0      		ldi r25,hi8(__c.3282)
 660 0176 9F93      		push r25
 661 0178 8F93      		push r24
 662 017a 8EE7      		ldi r24,lo8(126)
 663 017c 90E0      		ldi r25,hi8(126)
 664 017e 9F93      		push r25
 665 0180 8F93      		push r24
 666 0182 80E0      		ldi r24,lo8(message)
 667 0184 90E0      		ldi r25,hi8(message)
 668 0186 9F93      		push r25
 669 0188 8F93      		push r24
 670 018a 0E94 0000 		call snprintf_P
 672               	.LM74:
 673 018e 04EB      		ldi r16,lo8(-1100)
 674 0190 1BEF      		ldi r17,hi8(-1100)
 675 0192 20E0      		ldi r18,lo8(0)
 676 0194 30E0      		ldi r19,hi8(0)
 677 0196 41E0      		ldi r20,lo8(1)
 678 0198 6CE9      		ldi r22,lo8(-100)
 679 019a 7FEF      		ldi r23,hi8(-100)
 680 019c 80E0      		ldi r24,lo8(0)
 681 019e 0E94 0000 		call CommunicationError
 682 01a2 60E0      		ldi r22,lo8(131072)
 683 01a4 70E0      		ldi r23,hi8(131072)
 684 01a6 82E0      		ldi r24,hlo8(131072)
 685 01a8 90E0      		ldi r25,hhi8(131072)
 687               	.LM75:
 688 01aa 2DB7      		in r18,__SP_L__
 689 01ac 3EB7      		in r19,__SP_H__
 690 01ae 265F      		subi r18,lo8(-(10))
 691 01b0 3F4F      		sbci r19,hi8(-(10))
 692 01b2 0FB6      		in __tmp_reg__,__SREG__
 693 01b4 F894      		cli
 694 01b6 3EBF      		out __SP_H__,r19
 695 01b8 0FBE      		out __SREG__,__tmp_reg__
 696 01ba 2DBF      		out __SP_L__,r18
 697 01bc 00C0      		rjmp .L61
 698               	.L67:
 700               	.LM76:
 701 01be 9130      		cpi r25,lo8(1)
 702 01c0 01F4      		brne .+2
 703 01c2 00C0      		rjmp .L52
 704 01c4 9230      		cpi r25,lo8(2)
 705 01c6 00F0      		brlo .L69
 707               	.LM77:
 708 01c8 8093 0000 		sts res2,r24
 709 01cc 00C0      		rjmp .L60
 710               	.L54:
 712               	.LM78:
 713 01ce 8093 0000 		sts res3,r24
 714               	.L60:
 716               	.LM79:
 717 01d2 8823      		tst r24
 718 01d4 01F0      		breq .L62
 720               	.LM80:
 721 01d6 E091 0000 		lds r30,ptr_uartStruct
 722 01da F091 0000 		lds r31,(ptr_uartStruct)+1
 723 01de 8081      		ld r24,Z
 724 01e0 9181      		ldd r25,Z+1
 725 01e2 A281      		ldd r26,Z+2
 726 01e4 B381      		ldd r27,Z+3
 727 01e6 BF93      		push r27
 728 01e8 AF93      		push r26
 729 01ea 9F93      		push r25
 730 01ec 8F93      		push r24
 732               	.LM81:
 733 01ee 80E0      		ldi r24,lo8(__c.3284)
 734 01f0 90E0      		ldi r25,hi8(__c.3284)
 735 01f2 9F93      		push r25
 736 01f4 8F93      		push r24
 737 01f6 8EE7      		ldi r24,lo8(126)
 738 01f8 90E0      		ldi r25,hi8(126)
 739 01fa 9F93      		push r25
 740 01fc 8F93      		push r24
 741 01fe 80E0      		ldi r24,lo8(message)
 742 0200 90E0      		ldi r25,hi8(message)
 743 0202 9F93      		push r25
 744 0204 8F93      		push r24
 745 0206 0E94 0000 		call snprintf_P
 747               	.LM82:
 748 020a 04EB      		ldi r16,lo8(-1100)
 749 020c 1BEF      		ldi r17,hi8(-1100)
 750 020e 20E0      		ldi r18,lo8(__c.3286)
 751 0210 30E0      		ldi r19,hi8(__c.3286)
 752 0212 41E0      		ldi r20,lo8(1)
 753 0214 6CE9      		ldi r22,lo8(-100)
 754 0216 7FEF      		ldi r23,hi8(-100)
 755 0218 80E0      		ldi r24,lo8(0)
 756 021a 0E94 0000 		call CommunicationError
 757 021e 60E0      		ldi r22,lo8(65536)
 758 0220 70E0      		ldi r23,hi8(65536)
 759 0222 81E0      		ldi r24,hlo8(65536)
 760 0224 90E0      		ldi r25,hhi8(65536)
 762               	.LM83:
 763 0226 2DB7      		in r18,__SP_L__
 764 0228 3EB7      		in r19,__SP_H__
 765 022a 265F      		subi r18,lo8(-(10))
 766 022c 3F4F      		sbci r19,hi8(-(10))
 767 022e 0FB6      		in __tmp_reg__,__SREG__
 768 0230 F894      		cli
 769 0232 3EBF      		out __SP_H__,r19
 770 0234 0FBE      		out __SREG__,__tmp_reg__
 771 0236 2DBF      		out __SP_L__,r18
 772 0238 00C0      		rjmp .L61
 773               	.L55:
 775               	.LM84:
 776 023a 8093 0000 		sts res4,r24
 777 023e 00C0      		rjmp .L60
 778               	.L69:
 780               	.LM85:
 781 0240 8093 0000 		sts res0,r24
 782 0244 00C0      		rjmp .L60
 783               	.L56:
 785               	.LM86:
 786 0246 8093 0000 		sts res5,r24
 787 024a 00C0      		rjmp .L60
 788               	.L52:
 790               	.LM87:
 791 024c 8093 0000 		sts res1,r24
 792 0250 00C0      		rjmp .L60
 793               	.L62:
 795               	.LM88:
 796 0252 E091 0000 		lds r30,relayThresholdInputChannel
 797 0256 FF27      		clr r31
 798 0258 EE0F      		lsl r30
 799 025a FF1F      		rol r31
 800 025c E050      		subi r30,lo8(-(Voltages))
 801 025e F040      		sbci r31,hi8(-(Voltages))
 802 0260 8081      		ld r24,Z
 803 0262 9181      		ldd r25,Z+1
 804 0264 9C01      		movw r18,r24
 805 0266 B901      		movw r22,r18
 806 0268 8827      		clr r24
 807 026a 9927      		clr r25
 808 026c 00C0      		rjmp .L61
 809               	.L57:
 811               	.LM89:
 812 026e 8093 0000 		sts res6,r24
 813 0272 00C0      		rjmp .L60
 814               	.L68:
 816               	.LM90:
 817 0274 8093 0000 		sts res7,r24
 818 0278 00C0      		rjmp .L60
 819               	.L61:
 820               	/* epilogue: frame size=0 */
 821 027a 1F91      		pop r17
 822 027c 0F91      		pop r16
 823 027e 0895      		ret
 824               	/* epilogue end (size=3) */
 825               	/* function relayThresholdsGetCurrentValue size 173 (168) */
 827               	.Lscope20:
 830               	.global	relayThresholdsSetLedPin
 832               	relayThresholdsSetLedPin:
 834               	.LM91:
 835               	/* prologue: frame size=0 */
 836 0280 0F93      		push r16
 837 0282 1F93      		push r17
 838               	/* prologue end (size=2) */
 840               	.LM92:
 841 0284 8830      		cpi r24,lo8(8)
 842 0286 00F4      		brsh .L71
 844               	.LM93:
 845 0288 8093 0000 		sts relayThresholdLedPin,r24
 846 028c 80E0      		ldi r24,lo8(0)
 847 028e 90E0      		ldi r25,hi8(0)
 848 0290 00C0      		rjmp .L73
 849               	.L71:
 851               	.LM94:
 852 0292 0FEF      		ldi r16,lo8(-1)
 853 0294 1FEF      		ldi r17,hi8(-1)
 854 0296 20E0      		ldi r18,lo8(__c.3172)
 855 0298 30E0      		ldi r19,hi8(__c.3172)
 856 029a 41E0      		ldi r20,lo8(1)
 857 029c 6FEF      		ldi r22,lo8(-1)
 858 029e 7FEF      		ldi r23,hi8(-1)
 859 02a0 81E0      		ldi r24,lo8(1)
 860 02a2 0E94 0000 		call CommunicationError
 861 02a6 81E0      		ldi r24,lo8(1)
 862 02a8 90E0      		ldi r25,hi8(1)
 863               	.L73:
 864               	/* epilogue: frame size=0 */
 865 02aa 1F91      		pop r17
 866 02ac 0F91      		pop r16
 867 02ae 0895      		ret
 868               	/* epilogue end (size=3) */
 869               	/* function relayThresholdsSetLedPin size 24 (19) */
 871               	.Lscope21:
 874               	.global	relayThresholdsSetOutputPin
 876               	relayThresholdsSetOutputPin:
 878               	.LM95:
 879               	/* prologue: frame size=0 */
 880 02b0 0F93      		push r16
 881 02b2 1F93      		push r17
 882               	/* prologue end (size=2) */
 884               	.LM96:
 885 02b4 8830      		cpi r24,lo8(8)
 886 02b6 00F4      		brsh .L76
 888               	.LM97:
 889 02b8 8093 0000 		sts relayThresholdOutputPin,r24
 890 02bc 80E0      		ldi r24,lo8(0)
 891 02be 90E0      		ldi r25,hi8(0)
 892 02c0 00C0      		rjmp .L78
 893               	.L76:
 895               	.LM98:
 896 02c2 0FEF      		ldi r16,lo8(-1)
 897 02c4 1FEF      		ldi r17,hi8(-1)
 898 02c6 20E0      		ldi r18,lo8(__c.3165)
 899 02c8 30E0      		ldi r19,hi8(__c.3165)
 900 02ca 41E0      		ldi r20,lo8(1)
 901 02cc 6FEF      		ldi r22,lo8(-1)
 902 02ce 7FEF      		ldi r23,hi8(-1)
 903 02d0 81E0      		ldi r24,lo8(1)
 904 02d2 0E94 0000 		call CommunicationError
 905 02d6 81E0      		ldi r24,lo8(1)
 906 02d8 90E0      		ldi r25,hi8(1)
 907               	.L78:
 908               	/* epilogue: frame size=0 */
 909 02da 1F91      		pop r17
 910 02dc 0F91      		pop r16
 911 02de 0895      		ret
 912               	/* epilogue end (size=3) */
 913               	/* function relayThresholdsSetOutputPin size 24 (19) */
 915               	.Lscope22:
 918               	.global	relayThresholdsSetInputChannel
 920               	relayThresholdsSetInputChannel:
 922               	.LM99:
 923               	/* prologue: frame size=0 */
 924 02e0 0F93      		push r16
 925 02e2 1F93      		push r17
 926               	/* prologue end (size=2) */
 928               	.LM100:
 929 02e4 8830      		cpi r24,lo8(8)
 930 02e6 00F4      		brsh .L81
 932               	.LM101:
 933 02e8 8093 0000 		sts relayThresholdInputChannel,r24
 934 02ec 80E0      		ldi r24,lo8(0)
 935 02ee 90E0      		ldi r25,hi8(0)
 936 02f0 00C0      		rjmp .L83
 937               	.L81:
 939               	.LM102:
 940 02f2 0FEF      		ldi r16,lo8(-1)
 941 02f4 1FEF      		ldi r17,hi8(-1)
 942 02f6 20E0      		ldi r18,lo8(__c.3158)
 943 02f8 30E0      		ldi r19,hi8(__c.3158)
 944 02fa 41E0      		ldi r20,lo8(1)
 945 02fc 6FEF      		ldi r22,lo8(-1)
 946 02fe 7FEF      		ldi r23,hi8(-1)
 947 0300 81E0      		ldi r24,lo8(1)
 948 0302 0E94 0000 		call CommunicationError
 949 0306 81E0      		ldi r24,lo8(1)
 950 0308 90E0      		ldi r25,hi8(1)
 951               	.L83:
 952               	/* epilogue: frame size=0 */
 953 030a 1F91      		pop r17
 954 030c 0F91      		pop r16
 955 030e 0895      		ret
 956               	/* epilogue end (size=3) */
 957               	/* function relayThresholdsSetInputChannel size 24 (19) */
 959               	.Lscope23:
 961               	.global	relayThresholdInBoundPolarityInit
 963               	relayThresholdInBoundPolarityInit:
 965               	.LM103:
 966               	/* prologue: frame size=0 */
 967 0310 0F93      		push r16
 968 0312 1F93      		push r17
 969               	/* prologue end (size=2) */
 971               	.LM104:
 972 0314 8091 0000 		lds r24,relayThresholdsExternalPolarityPort
 973 0318 8C30      		cpi r24,lo8(12)
 974 031a 01F0      		breq .L89
 976               	.LM105:
 977 031c 8D30      		cpi r24,lo8(13)
 978 031e 00F0      		brlo .L101
 979 0320 8E30      		cpi r24,lo8(14)
 980 0322 01F4      		brne .+2
 981 0324 00C0      		rjmp .L91
 982 0326 8E30      		cpi r24,lo8(14)
 983 0328 00F0      		brlo .+2
 984 032a 00C0      		rjmp .L102
 986               	.LM106:
 987 032c 8BB1      		in r24,43-0x20
 988 032e 00C0      		rjmp .L100
 989               	.L101:
 991               	.LM107:
 992 0330 8A30      		cpi r24,lo8(10)
 993 0332 01F4      		brne .+2
 994 0334 00C0      		rjmp .L87
 995 0336 8B30      		cpi r24,lo8(11)
 996 0338 01F4      		brne .+2
 997 033a 00C0      		rjmp .L103
 998               	.L86:
 1000               	.LM108:
 1001 033c 05E6      		ldi r16,lo8(101)
 1002 033e 10E0      		ldi r17,hi8(101)
 1003 0340 20E0      		ldi r18,lo8(__c.2864)
 1004 0342 30E0      		ldi r19,hi8(__c.2864)
 1005 0344 41E0      		ldi r20,lo8(1)
 1006 0346 67E1      		ldi r22,lo8(-1001)
 1007 0348 7CEF      		ldi r23,hi8(-1001)
 1008 034a 80E0      		ldi r24,lo8(0)
 1009 034c 0E94 0000 		call CommunicationError
 1010 0350 8093 0000 		sts general_errorCode,r24
 1011               	.L94:
 1013               	.LM109:
 1014 0354 8091 0000 		lds r24,relayThresholdsExternalPolarity
 1015 0358 90E0      		ldi r25,lo8(0)
 1016 035a 8130      		cpi r24,lo8(1)
 1017 035c 01F0      		breq .L104
 1018               	.L95:
 1019 035e 9093 0000 		sts relayThresholdsInBoundsPolarity,r25
 1021               	.LM110:
 1022 0362 8091 0000 		lds r24,relayThresholdsExternalPolarity
 1023 0366 90E0      		ldi r25,lo8(0)
 1024 0368 8130      		cpi r24,lo8(1)
 1025 036a 01F0      		breq .L96
 1026 036c 91E0      		ldi r25,lo8(1)
 1027               	.L96:
 1028 036e 9093 0000 		sts relayThresholdsOutOfBoundsPolarity,r25
 1030               	.LM111:
 1031 0372 8091 0000 		lds r24,relayThresholdInvertPolarity_flag
 1032 0376 8823      		tst r24
 1033 0378 01F0      		breq .L97
 1035               	.LM112:
 1036 037a 8091 0000 		lds r24,relayThresholdsInBoundsPolarity
 1037 037e 8095      		com r24
 1038 0380 8170      		andi r24,lo8(1)
 1039 0382 8093 0000 		sts relayThresholdsInBoundsPolarity,r24
 1041               	.LM113:
 1042 0386 8091 0000 		lds r24,relayThresholdsOutOfBoundsPolarity
 1043 038a 8095      		com r24
 1044 038c 8170      		andi r24,lo8(1)
 1045 038e 8093 0000 		sts relayThresholdsOutOfBoundsPolarity,r24
 1046 0392 00C0      		rjmp .L97
 1047               	.L104:
 1049               	.LM114:
 1050 0394 91E0      		ldi r25,lo8(1)
 1051 0396 00C0      		rjmp .L95
 1052               	.L89:
 1054               	.LM115:
 1055 0398 88B1      		in r24,40-0x20
 1056               	.L100:
 1058               	.LM116:
 1059 039a 2091 0000 		lds r18,relayThresholdsExternalPolarityPinPos
 1060 039e 9927      		clr r25
 1061 03a0 3327      		clr r19
 1062 03a2 2150      		subi r18,lo8(-(-1))
 1063 03a4 3040      		sbci r19,hi8(-(-1))
 1064 03a6 00C0      		rjmp 2f
 1065 03a8 9595      	1:	asr r25
 1066 03aa 8795      		ror r24
 1067 03ac 2A95      	2:	dec r18
 1068 03ae 02F4      		brpl 1b
 1069 03b0 8170      		andi r24,lo8(1)
 1070 03b2 8093 0000 		sts relayThresholdsExternalPolarity,r24
 1071 03b6 00C0      		rjmp .L94
 1072               	.L102:
 1074               	.LM117:
 1075 03b8 8F30      		cpi r24,lo8(15)
 1076 03ba 01F0      		breq .+2
 1077 03bc 00C0      		rjmp .L86
 1079               	.LM118:
 1080 03be 81B3      		in r24,49-0x20
 1081 03c0 00C0      		rjmp .L100
 1082               	.L103:
 1084               	.LM119:
 1085 03c2 85B1      		in r24,37-0x20
 1086 03c4 00C0      		rjmp .L100
 1087               	.L91:
 1089               	.LM120:
 1090 03c6 8EB1      		in r24,46-0x20
 1091 03c8 00C0      		rjmp .L100
 1092               	.L87:
 1094               	.LM121:
 1095 03ca 82B1      		in r24,34-0x20
 1096 03cc 00C0      		rjmp .L100
 1097               	.L97:
 1099               	.LM122:
 1100 03ce 8091 0000 		lds r24,relayThresholdsExternalPolarity
 1102               	.LM123:
 1103 03d2 9927      		clr r25
 1104               	/* epilogue: frame size=0 */
 1105 03d4 1F91      		pop r17
 1106 03d6 0F91      		pop r16
 1107 03d8 0895      		ret
 1108               	/* epilogue end (size=3) */
 1109               	/* function relayThresholdInBoundPolarityInit size 102 (97) */
 1111               	.Lscope24:
 1115               	.global	relayThresholdMiscSubCommands
 1117               	relayThresholdMiscSubCommands:
 1119               	.LM124:
 1120               	/* prologue: frame size=0 */
 1121 03da AF92      		push r10
 1122 03dc BF92      		push r11
 1123 03de CF92      		push r12
 1124 03e0 DF92      		push r13
 1125 03e2 EF92      		push r14
 1126 03e4 FF92      		push r15
 1127 03e6 0F93      		push r16
 1128 03e8 1F93      		push r17
 1129 03ea CF93      		push r28
 1130 03ec DF93      		push r29
 1131               	/* prologue end (size=10) */
 1132 03ee 7C01      		movw r14,r24
 1133 03f0 EB01      		movw r28,r22
 1135               	.LM125:
 1136 03f2 77FD      		sbrc r23,7
 1137 03f4 00C0      		rjmp .L220
 1138               	.L106:
 1140               	.LM126:
 1141 03f6 F701      		movw r30,r14
 1142 03f8 838D      		ldd r24,Z+27
 1143 03fa 9927      		clr r25
 1144 03fc 87FD      		sbrc r24,7
 1145 03fe 9095      		com r25
 1146 0400 0197      		sbiw r24,1
 1147 0402 01F0      		breq .L111
 1148 0404 0197      		sbiw r24,1
 1149 0406 01F4      		brne .+2
 1150 0408 00C0      		rjmp .L221
 1152               	.LM127:
 1153 040a 05E6      		ldi r16,lo8(101)
 1154 040c 10E0      		ldi r17,hi8(101)
 1155 040e 20E0      		ldi r18,lo8(__c.2738)
 1156 0410 30E0      		ldi r19,hi8(__c.2738)
 1157 0412 41E0      		ldi r20,lo8(1)
 1158 0414 67E1      		ldi r22,lo8(-1001)
 1159 0416 7CEF      		ldi r23,hi8(-1001)
 1160 0418 80E0      		ldi r24,lo8(0)
 1161 041a 0E94 0000 		call CommunicationError
 1162 041e 8093 0000 		sts general_errorCode,r24
 1163 0422 00C0      		rjmp .L214
 1164               	.L111:
 1166               	.LM128:
 1167 0424 20E0      		ldi r18,lo8(relayThresholdCommandKeywords)
 1168 0426 30E0      		ldi r19,hi8(relayThresholdCommandKeywords)
 1169 0428 4C2F      		mov r20,r28
 1170 042a 68E2      		ldi r22,lo8(40)
 1171 042c C701      		movw r24,r14
 1172 042e 0E94 0000 		call createExtendedSubCommandReceiveResponseHeader
 1174               	.LM129:
 1175 0432 FE01      		movw r30,r28
 1176 0434 E531      		cpi r30,21
 1177 0436 F105      		cpc r31,__zero_reg__
 1178 0438 00F0      		brlo .L222
 1180               	.LM130:
 1181 043a 6FE7      		ldi r22,lo8(127)
 1182 043c 70E0      		ldi r23,hi8(127)
 1183 043e 80E0      		ldi r24,lo8(uart_message_string)
 1184 0440 90E0      		ldi r25,hi8(uart_message_string)
 1185 0442 0E94 0000 		call clearString
 1187               	.LM131:
 1188 0446 0FEF      		ldi r16,lo8(-1)
 1189 0448 1FEF      		ldi r17,hi8(-1)
 1190 044a 20E0      		ldi r18,lo8(__c.2704)
 1191 044c 30E0      		ldi r19,hi8(__c.2704)
 1192 044e 41E0      		ldi r20,lo8(1)
 1193 0450 6FEF      		ldi r22,lo8(-1)
 1194 0452 7FEF      		ldi r23,hi8(-1)
 1195 0454 81E0      		ldi r24,lo8(1)
 1196 0456 0E94 0000 		call CommunicationError
 1197 045a 00C0      		rjmp .L214
 1198               	.L222:
 1200               	.LM132:
 1201 045c E050      		subi r30,lo8(-(gs(.L135)))
 1202 045e F040      		sbci r31,hi8(-(gs(.L135)))
 1203 0460 EE0F      		lsl r30
 1204 0462 FF1F      		rol r31
 1205 0464 0590      		lpm __tmp_reg__,Z+
 1206 0466 F491      		lpm r31,Z
 1207 0468 E02D      		mov r30,__tmp_reg__
 1208 046a 0994      		ijmp
 1209               		.data
 1210               		.section .progmem.gcc_sw_table, "a", @progbits
 1211               		.p2align 1
 1212               	.L135:
 1213               		.data
 1214               		.section .progmem.gcc_sw_table, "a", @progbits
 1215               		.p2align 1
 1216 0000 0000      		.word gs(.L114)
 1217 0002 0000      		.word gs(.L115)
 1218 0004 0000      		.word gs(.L116)
 1219 0006 0000      		.word gs(.L117)
 1220 0008 0000      		.word gs(.L118)
 1221 000a 0000      		.word gs(.L119)
 1222 000c 0000      		.word gs(.L120)
 1223 000e 0000      		.word gs(.L121)
 1224 0010 0000      		.word gs(.L122)
 1225 0012 0000      		.word gs(.L123)
 1226 0014 0000      		.word gs(.L124)
 1227 0016 0000      		.word gs(.L125)
 1228 0018 0000      		.word gs(.L126)
 1229 001a 0000      		.word gs(.L127)
 1230 001c 0000      		.word gs(.L128)
 1231 001e 0000      		.word gs(.L129)
 1232 0020 0000      		.word gs(.L130)
 1233 0022 0000      		.word gs(.L131)
 1234 0024 0000      		.word gs(.L132)
 1235 0026 0000      		.word gs(.L133)
 1236 0028 0000      		.word gs(.L134)
 1237               		.text
 1238               	.L220:
 1240               	.LM133:
 1241 046c 00E0      		ldi r16,lo8(relayThresholdCommandKeywords)
 1242 046e 10E0      		ldi r17,hi8(relayThresholdCommandKeywords)
 1243 0470 C0E0      		ldi r28,lo8(0)
 1244 0472 D0E0      		ldi r29,hi8(0)
 1245               	.L108:
 1246               	.LBB6:
 1248               	.LM134:
 1249 0474 F801      		movw r30,r16
 1250               	/* #APP */
 1251 0476 C895      		lpm
 1252 0478 602D      		mov r22, r0
 1253 047a 3196      		adiw r30, 1
 1254 047c C895      		lpm
 1255 047e 702D      		mov r23, r0
 1256               		
 1257               	/* #NOAPP */
 1258               	.LBE6:
 1259 0480 49E1      		ldi r20,lo8(25)
 1260 0482 50E0      		ldi r21,hi8(25)
 1261 0484 80E0      		ldi r24,lo8(setParameter+25)
 1262 0486 90E0      		ldi r25,hi8(setParameter+25)
 1263 0488 0E94 0000 		call strncmp_P
 1264 048c 892B      		or r24,r25
 1265 048e 01F4      		brne .+2
 1266 0490 00C0      		rjmp .L106
 1268               	.LM135:
 1269 0492 2196      		adiw r28,1
 1270 0494 0E5F      		subi r16,lo8(-(2))
 1271 0496 1F4F      		sbci r17,hi8(-(2))
 1273               	.LM136:
 1274 0498 C531      		cpi r28,21
 1275 049a D105      		cpc r29,__zero_reg__
 1276 049c 01F4      		brne .L108
 1277 049e 00C0      		rjmp .L106
 1278               	.L221:
 1280               	.LM137:
 1281 04a0 60E0      		ldi r22,lo8(__c.2708)
 1282 04a2 70E0      		ldi r23,hi8(__c.2708)
 1283 04a4 80E0      		ldi r24,lo8(setParameter+50)
 1284 04a6 90E0      		ldi r25,hi8(setParameter+50)
 1285 04a8 0E94 0000 		call strcmp_P
 1286 04ac 892B      		or r24,r25
 1287 04ae 01F0      		breq .+2
 1288 04b0 00C0      		rjmp .L223
 1289               	.L183:
 1291               	.LM138:
 1292 04b2 91E0      		ldi r25,lo8(1)
 1293 04b4 A92E      		mov r10,r25
 1294 04b6 B12C      		mov r11,__zero_reg__
 1295 04b8 C12C      		mov r12,__zero_reg__
 1296 04ba D12C      		mov r13,__zero_reg__
 1297               	.L191:
 1299               	.LM139:
 1300 04bc C730      		cpi r28,7
 1301 04be D105      		cpc r29,__zero_reg__
 1302 04c0 01F4      		brne .+2
 1303 04c2 00C0      		rjmp .L198
 1304 04c4 C830      		cpi r28,8
 1305 04c6 D105      		cpc r29,__zero_reg__
 1306 04c8 04F4      		brge .L205
 1307 04ca C430      		cpi r28,4
 1308 04cc D105      		cpc r29,__zero_reg__
 1309 04ce 01F4      		brne .+2
 1310 04d0 00C0      		rjmp .L195
 1311 04d2 C530      		cpi r28,5
 1312 04d4 D105      		cpc r29,__zero_reg__
 1313 04d6 04F0      		brlt .+2
 1314 04d8 00C0      		rjmp .L206
 1315 04da C230      		cpi r28,2
 1316 04dc D105      		cpc r29,__zero_reg__
 1317 04de 01F4      		brne .+2
 1318 04e0 00C0      		rjmp .L193
 1319 04e2 C330      		cpi r28,3
 1320 04e4 D105      		cpc r29,__zero_reg__
 1321 04e6 01F4      		brne .L192
 1323               	.LM140:
 1324 04e8 C501      		movw r24,r10
 1325 04ea 0E94 0000 		call relayThresholdsSetLowThreshold
 1326 04ee 9927      		clr r25
 1327 04f0 AA27      		clr r26
 1328 04f2 BB27      		clr r27
 1329               	.L208:
 1331               	.LM141:
 1332 04f4 0097      		sbiw r24,0
 1333 04f6 A105      		cpc r26,__zero_reg__
 1334 04f8 B105      		cpc r27,__zero_reg__
 1335 04fa 01F0      		breq .+2
 1336 04fc 00C0      		rjmp .L214
 1338               	.LM142:
 1339 04fe 81E0      		ldi r24,lo8(1)
 1340 0500 F701      		movw r30,r14
 1341 0502 838F      		std Z+27,r24
 1343               	.LM143:
 1344 0504 BE01      		movw r22,r28
 1345 0506 C701      		movw r24,r14
 1346 0508 0E94 0000 		call relayThresholdMiscSubCommands
 1348               	.LM144:
 1349 050c 82E0      		ldi r24,lo8(2)
 1350 050e F701      		movw r30,r14
 1351 0510 838F      		std Z+27,r24
 1353               	.LM145:
 1354 0512 2497      		sbiw r28,4
 1355 0514 01F0      		breq .+2
 1356 0516 00C0      		rjmp .L214
 1358               	.LM146:
 1359 0518 A114      		cp r10,__zero_reg__
 1360 051a B104      		cpc r11,__zero_reg__
 1361 051c C104      		cpc r12,__zero_reg__
 1362 051e D104      		cpc r13,__zero_reg__
 1363 0520 01F4      		brne .+2
 1364 0522 00C0      		rjmp .L214
 1366               	.LM147:
 1367 0524 0E94 0000 		call relayThresholdInit
 1368 0528 00C0      		rjmp .L214
 1369               	.L205:
 1371               	.LM148:
 1372 052a CC30      		cpi r28,12
 1373 052c D105      		cpc r29,__zero_reg__
 1374 052e 01F0      		breq .L201
 1375 0530 CD30      		cpi r28,13
 1376 0532 D105      		cpc r29,__zero_reg__
 1377 0534 04F0      		brlt .+2
 1378 0536 00C0      		rjmp .L207
 1379 0538 C830      		cpi r28,8
 1380 053a D105      		cpc r29,__zero_reg__
 1381 053c 01F4      		brne .+2
 1382 053e 00C0      		rjmp .L199
 1383 0540 C930      		cpi r28,9
 1384 0542 D105      		cpc r29,__zero_reg__
 1385 0544 01F4      		brne .+2
 1386 0546 00C0      		rjmp .L224
 1387               	.L192:
 1389               	.LM149:
 1390 0548 0FEF      		ldi r16,lo8(-1)
 1391 054a 1FEF      		ldi r17,hi8(-1)
 1392 054c 20E0      		ldi r18,lo8(__c.2732)
 1393 054e 30E0      		ldi r19,hi8(__c.2732)
 1394 0550 41E0      		ldi r20,lo8(1)
 1395 0552 6FEF      		ldi r22,lo8(-1)
 1396 0554 7FEF      		ldi r23,hi8(-1)
 1397 0556 81E0      		ldi r24,lo8(1)
 1398 0558 0E94 0000 		call CommunicationError
 1399 055c 00C0      		rjmp .L214
 1400               	.L201:
 1402               	.LM150:
 1403 055e 80E0      		ldi r24,lo8(0)
 1404 0560 A114      		cp r10,__zero_reg__
 1405 0562 B104      		cpc r11,__zero_reg__
 1406 0564 C104      		cpc r12,__zero_reg__
 1407 0566 D104      		cpc r13,__zero_reg__
 1408 0568 01F0      		breq .L210
 1409 056a 81E0      		ldi r24,lo8(1)
 1410               	.L210:
 1411 056c 0E94 0000 		call relayThresholdsSetOutOfBoundsTransitLockFlag
 1412 0570 9927      		clr r25
 1413 0572 AA27      		clr r26
 1414 0574 BB27      		clr r27
 1415 0576 00C0      		rjmp .L208
 1416               	.L195:
 1418               	.LM151:
 1419 0578 80E0      		ldi r24,lo8(0)
 1420 057a A114      		cp r10,__zero_reg__
 1421 057c B104      		cpc r11,__zero_reg__
 1422 057e C104      		cpc r12,__zero_reg__
 1423 0580 D104      		cpc r13,__zero_reg__
 1424 0582 01F0      		breq .L209
 1425 0584 81E0      		ldi r24,lo8(1)
 1426               	.L209:
 1427 0586 0E94 0000 		call relayThresholdsSetEnableFlag
 1428 058a 9927      		clr r25
 1429 058c AA27      		clr r26
 1430 058e BB27      		clr r27
 1431 0590 00C0      		rjmp .L208
 1432               	.L133:
 1434               	.LM152:
 1435 0592 0E94 0000 		call relayThresholdsGetInBoundsPolarity
 1436 0596 182F      		mov r17,r24
 1438               	.LM153:
 1439 0598 C0E0      		ldi r28,lo8(uart_message_string)
 1440 059a D0E0      		ldi r29,hi8(uart_message_string)
 1441 059c 4EE7      		ldi r20,lo8(126)
 1442 059e 50E0      		ldi r21,hi8(126)
 1443 05a0 60E0      		ldi r22,lo8(__c.2669)
 1444 05a2 70E0      		ldi r23,hi8(__c.2669)
 1445 05a4 CE01      		movw r24,r28
 1446 05a6 0E94 0000 		call strncat_P
 1448               	.LM154:
 1449 05aa 1123      		tst r17
 1450 05ac 01F4      		brne .+2
 1451 05ae 00C0      		rjmp .L170
 1452 05b0 60E0      		ldi r22,lo8(__c.2671)
 1453 05b2 70E0      		ldi r23,hi8(__c.2671)
 1454               	.L172:
 1455 05b4 4EE7      		ldi r20,lo8(126)
 1456 05b6 50E0      		ldi r21,hi8(126)
 1457 05b8 80E0      		ldi r24,lo8(uart_message_string)
 1458 05ba 90E0      		ldi r25,hi8(uart_message_string)
 1459 05bc 0E94 0000 		call strncat_P
 1461               	.LM155:
 1462 05c0 0E94 0000 		call relayThresholdsGetOutOfBoundsPolarity
 1463 05c4 182F      		mov r17,r24
 1465               	.LM156:
 1466 05c6 4EE7      		ldi r20,lo8(126)
 1467 05c8 50E0      		ldi r21,hi8(126)
 1468 05ca 60E0      		ldi r22,lo8(__c.2675)
 1469 05cc 70E0      		ldi r23,hi8(__c.2675)
 1470 05ce 80E0      		ldi r24,lo8(uart_message_string)
 1471 05d0 90E0      		ldi r25,hi8(uart_message_string)
 1472 05d2 0E94 0000 		call strncat_P
 1474               	.LM157:
 1475 05d6 1123      		tst r17
 1476 05d8 01F4      		brne .+2
 1477 05da 00C0      		rjmp .L173
 1478 05dc 60E0      		ldi r22,lo8(__c.2677)
 1479 05de 70E0      		ldi r23,hi8(__c.2677)
 1480               	.L175:
 1481 05e0 4EE7      		ldi r20,lo8(126)
 1482 05e2 50E0      		ldi r21,hi8(126)
 1483 05e4 80E0      		ldi r24,lo8(uart_message_string)
 1484 05e6 90E0      		ldi r25,hi8(uart_message_string)
 1485 05e8 0E94 0000 		call strncat_P
 1487               	.LM158:
 1488 05ec 0E94 0000 		call relayThresholdsGetInvertPolarityFlag
 1489 05f0 182F      		mov r17,r24
 1491               	.LM159:
 1492 05f2 4EE7      		ldi r20,lo8(126)
 1493 05f4 50E0      		ldi r21,hi8(126)
 1494 05f6 60E0      		ldi r22,lo8(__c.2681)
 1495 05f8 70E0      		ldi r23,hi8(__c.2681)
 1496 05fa 80E0      		ldi r24,lo8(uart_message_string)
 1497 05fc 90E0      		ldi r25,hi8(uart_message_string)
 1498 05fe 0E94 0000 		call strncat_P
 1500               	.LM160:
 1501 0602 1123      		tst r17
 1502 0604 01F4      		brne .+2
 1503 0606 00C0      		rjmp .L176
 1504 0608 60E0      		ldi r22,lo8(__c.2683)
 1505 060a 70E0      		ldi r23,hi8(__c.2683)
 1506               	.L178:
 1507 060c 4EE7      		ldi r20,lo8(126)
 1508 060e 50E0      		ldi r21,hi8(126)
 1509 0610 80E0      		ldi r24,lo8(uart_message_string)
 1510 0612 90E0      		ldi r25,hi8(uart_message_string)
 1511 0614 0E94 0000 		call strncat_P
 1513               	.LM161:
 1514 0618 0E94 0000 		call relayThresholdsGetExternalPolarity
 1515 061c 182F      		mov r17,r24
 1517               	.LM162:
 1518 061e 4EE7      		ldi r20,lo8(126)
 1519 0620 50E0      		ldi r21,hi8(126)
 1520 0622 60E0      		ldi r22,lo8(__c.2687)
 1521 0624 70E0      		ldi r23,hi8(__c.2687)
 1522 0626 80E0      		ldi r24,lo8(uart_message_string)
 1523 0628 90E0      		ldi r25,hi8(uart_message_string)
 1524 062a 0E94 0000 		call strncat_P
 1526               	.LM163:
 1527 062e 1123      		tst r17
 1528 0630 01F4      		brne .+2
 1529 0632 00C0      		rjmp .L179
 1530 0634 60E0      		ldi r22,lo8(__c.2689)
 1531 0636 70E0      		ldi r23,hi8(__c.2689)
 1532               	.L181:
 1533 0638 4EE7      		ldi r20,lo8(126)
 1534 063a 50E0      		ldi r21,hi8(126)
 1535 063c 80E0      		ldi r24,lo8(uart_message_string)
 1536 063e 90E0      		ldi r25,hi8(uart_message_string)
 1537 0640 0E94 0000 		call strncat_P
 1539               	.LM164:
 1540 0644 0E94 0000 		call relayThresholdsGetExternalPolarityPinPos
 1542               	.LM165:
 1543 0648 9927      		clr r25
 1544 064a AA27      		clr r26
 1545 064c BB27      		clr r27
 1546 064e BF93      		push r27
 1547 0650 AF93      		push r26
 1548 0652 9F93      		push r25
 1549 0654 8F93      		push r24
 1550 0656 DF93      		push r29
 1551 0658 CF93      		push r28
 1552 065a 80E0      		ldi r24,lo8(__c.2693)
 1553 065c 90E0      		ldi r25,hi8(__c.2693)
 1554 065e 9F93      		push r25
 1555 0660 8F93      		push r24
 1556 0662 0EE7      		ldi r16,lo8(126)
 1557 0664 10E0      		ldi r17,hi8(126)
 1558 0666 1F93      		push r17
 1559 0668 0F93      		push r16
 1560 066a DF93      		push r29
 1561 066c CF93      		push r28
 1562 066e 0E94 0000 		call snprintf_P
 1564               	.LM166:
 1565 0672 0E94 0000 		call relayThresholdsGetExternalPolarityPort
 1567               	.LM167:
 1568 0676 9927      		clr r25
 1569 0678 AA27      		clr r26
 1570 067a BB27      		clr r27
 1571 067c BF93      		push r27
 1572 067e AF93      		push r26
 1573 0680 9F93      		push r25
 1574 0682 8F93      		push r24
 1575 0684 DF93      		push r29
 1576 0686 CF93      		push r28
 1577 0688 80E0      		ldi r24,lo8(__c.2695)
 1578 068a 90E0      		ldi r25,hi8(__c.2695)
 1579 068c 9F93      		push r25
 1580 068e 8F93      		push r24
 1581 0690 1F93      		push r17
 1582 0692 0F93      		push r16
 1583 0694 DF93      		push r29
 1584 0696 CF93      		push r28
 1585 0698 0E94 0000 		call snprintf_P
 1587               	.LM168:
 1588 069c 2DB7      		in r18,__SP_L__
 1589 069e 3EB7      		in r19,__SP_H__
 1590 06a0 285E      		subi r18,lo8(-(24))
 1591 06a2 3F4F      		sbci r19,hi8(-(24))
 1592 06a4 0FB6      		in __tmp_reg__,__SREG__
 1593 06a6 F894      		cli
 1594 06a8 3EBF      		out __SP_H__,r19
 1595 06aa 0FBE      		out __SREG__,__tmp_reg__
 1596 06ac 2DBF      		out __SP_L__,r18
 1597               	.L136:
 1599               	.LM169:
 1600 06ae 6EE7      		ldi r22,lo8(126)
 1601 06b0 70E0      		ldi r23,hi8(126)
 1602 06b2 80E0      		ldi r24,lo8(uart_message_string)
 1603 06b4 90E0      		ldi r25,hi8(uart_message_string)
 1604 06b6 0E94 0000 		call UART0_Send_Message_String
 1606               	.LM170:
 1607 06ba 6FE7      		ldi r22,lo8(127)
 1608 06bc 70E0      		ldi r23,hi8(127)
 1609 06be 80E0      		ldi r24,lo8(uart_message_string)
 1610 06c0 90E0      		ldi r25,hi8(uart_message_string)
 1611 06c2 0E94 0000 		call clearString
 1612 06c6 00C0      		rjmp .L214
 1613               	.L132:
 1615               	.LM171:
 1616 06c8 0E94 0000 		call relayThresholdsGetExternalPolarityPort
 1618               	.LM172:
 1619 06cc 9927      		clr r25
 1620 06ce AA27      		clr r26
 1621 06d0 BB27      		clr r27
 1622 06d2 BF93      		push r27
 1623 06d4 AF93      		push r26
 1624 06d6 9F93      		push r25
 1625 06d8 8F93      		push r24
 1626 06da C0E0      		ldi r28,lo8(uart_message_string)
 1627 06dc D0E0      		ldi r29,hi8(uart_message_string)
 1628 06de DF93      		push r29
 1629 06e0 CF93      		push r28
 1630 06e2 80E0      		ldi r24,lo8(__c.2634)
 1631 06e4 90E0      		ldi r25,hi8(__c.2634)
 1632               	.L217:
 1634               	.LM173:
 1635 06e6 9F93      		push r25
 1636 06e8 8F93      		push r24
 1637 06ea 8EE7      		ldi r24,lo8(126)
 1638 06ec 90E0      		ldi r25,hi8(126)
 1639 06ee 9F93      		push r25
 1640 06f0 8F93      		push r24
 1641 06f2 DF93      		push r29
 1642 06f4 CF93      		push r28
 1643 06f6 0E94 0000 		call snprintf_P
 1645               	.LM174:
 1646 06fa 2DB7      		in r18,__SP_L__
 1647 06fc 3EB7      		in r19,__SP_H__
 1648 06fe 245F      		subi r18,lo8(-(12))
 1649 0700 3F4F      		sbci r19,hi8(-(12))
 1650 0702 0FB6      		in __tmp_reg__,__SREG__
 1651 0704 F894      		cli
 1652 0706 3EBF      		out __SP_H__,r19
 1653 0708 0FBE      		out __SREG__,__tmp_reg__
 1654 070a 2DBF      		out __SP_L__,r18
 1655 070c 00C0      		rjmp .L136
 1656               	.L131:
 1658               	.LM175:
 1659 070e 0E94 0000 		call relayThresholdsGetExternalPolarityPinPos
 1661               	.LM176:
 1662 0712 9927      		clr r25
 1663 0714 AA27      		clr r26
 1664 0716 BB27      		clr r27
 1665 0718 BF93      		push r27
 1666 071a AF93      		push r26
 1667 071c 9F93      		push r25
 1668 071e 8F93      		push r24
 1669 0720 C0E0      		ldi r28,lo8(uart_message_string)
 1670 0722 D0E0      		ldi r29,hi8(uart_message_string)
 1671 0724 DF93      		push r29
 1672 0726 CF93      		push r28
 1673 0728 80E0      		ldi r24,lo8(__c.2631)
 1674 072a 90E0      		ldi r25,hi8(__c.2631)
 1675               	.L219:
 1676 072c 9F93      		push r25
 1677 072e 8F93      		push r24
 1678 0730 8EE7      		ldi r24,lo8(126)
 1679 0732 90E0      		ldi r25,hi8(126)
 1680 0734 9F93      		push r25
 1681 0736 8F93      		push r24
 1682 0738 DF93      		push r29
 1683 073a CF93      		push r28
 1684 073c 0E94 0000 		call snprintf_P
 1686               	.LM177:
 1687 0740 EDB7      		in r30,__SP_L__
 1688 0742 FEB7      		in r31,__SP_H__
 1689 0744 3C96      		adiw r30,12
 1690 0746 0FB6      		in __tmp_reg__,__SREG__
 1691 0748 F894      		cli
 1692 074a FEBF      		out __SP_H__,r31
 1693 074c 0FBE      		out __SREG__,__tmp_reg__
 1694 074e EDBF      		out __SP_L__,r30
 1695 0750 00C0      		rjmp .L136
 1696               	.L130:
 1698               	.LM178:
 1699 0752 0E94 0000 		call relayThresholdsGetExternalPolarity
 1701               	.LM179:
 1702 0756 8823      		tst r24
 1703 0758 01F4      		brne .+2
 1704 075a 00C0      		rjmp .L161
 1705 075c 60E0      		ldi r22,lo8(__c.2626)
 1706 075e 70E0      		ldi r23,hi8(__c.2626)
 1707               	.L169:
 1709               	.LM180:
 1710 0760 4EE7      		ldi r20,lo8(126)
 1711 0762 50E0      		ldi r21,hi8(126)
 1712 0764 80E0      		ldi r24,lo8(uart_message_string)
 1713 0766 90E0      		ldi r25,hi8(uart_message_string)
 1714 0768 0E94 0000 		call strncat_P
 1715 076c 00C0      		rjmp .L136
 1716               	.L129:
 1718               	.LM181:
 1719 076e 0E94 0000 		call relayThresholdsGetInvertPolarityFlag
 1721               	.LM182:
 1722 0772 8823      		tst r24
 1723 0774 01F4      		brne .+2
 1724 0776 00C0      		rjmp .L158
 1725 0778 60E0      		ldi r22,lo8(__c.2621)
 1726 077a 70E0      		ldi r23,hi8(__c.2621)
 1727 077c 00C0      		rjmp .L169
 1728               	.L127:
 1730               	.LM183:
 1731 077e 0E94 0000 		call relayThresholdsGetInBoundsPolarity
 1733               	.LM184:
 1734 0782 8823      		tst r24
 1735 0784 01F4      		brne .+2
 1736 0786 00C0      		rjmp .L152
 1737 0788 60E0      		ldi r22,lo8(__c.2611)
 1738 078a 70E0      		ldi r23,hi8(__c.2611)
 1739 078c 00C0      		rjmp .L169
 1740               	.L128:
 1742               	.LM185:
 1743 078e 0E94 0000 		call relayThresholdsGetOutOfBoundsPolarity
 1745               	.LM186:
 1746 0792 8823      		tst r24
 1747 0794 01F4      		brne .+2
 1748 0796 00C0      		rjmp .L155
 1749 0798 60E0      		ldi r22,lo8(__c.2616)
 1750 079a 70E0      		ldi r23,hi8(__c.2616)
 1751 079c 00C0      		rjmp .L169
 1752               	.L126:
 1754               	.LM187:
 1755 079e 0E94 0000 		call relayThresholdsGetOutOfBoundsTransitLockFlag
 1757               	.LM188:
 1758 07a2 8823      		tst r24
 1759 07a4 01F4      		brne .+2
 1760 07a6 00C0      		rjmp .L149
 1761 07a8 60E0      		ldi r22,lo8(__c.2606)
 1762 07aa 70E0      		ldi r23,hi8(__c.2606)
 1763 07ac 00C0      		rjmp .L169
 1764               	.L134:
 1766               	.LM189:
 1767 07ae 0E94 0000 		call relayThresholdInBoundPolarityInit
 1768 07b2 00C0      		rjmp .L136
 1769               	.L125:
 1771               	.LM190:
 1772 07b4 0E94 0000 		call relayThresholdsGetCurrentState
 1773 07b8 E82E      		mov r14,r24
 1774 07ba FF24      		clr r15
 1775 07bc 0027      		clr r16
 1776 07be 1127      		clr r17
 1778               	.LM191:
 1779 07c0 1F93      		push r17
 1780 07c2 0F93      		push r16
 1781 07c4 FF92      		push r15
 1782 07c6 EF92      		push r14
 1783 07c8 C0E0      		ldi r28,lo8(uart_message_string)
 1784 07ca D0E0      		ldi r29,hi8(uart_message_string)
 1785 07cc DF93      		push r29
 1786 07ce CF93      		push r28
 1787 07d0 80E0      		ldi r24,lo8(__c.2637)
 1788 07d2 90E0      		ldi r25,hi8(__c.2637)
 1789 07d4 9F93      		push r25
 1790 07d6 8F93      		push r24
 1791 07d8 3EE7      		ldi r19,lo8(126)
 1792 07da C32E      		mov r12,r19
 1793 07dc D12C      		mov r13,__zero_reg__
 1794 07de DF92      		push r13
 1795 07e0 CF92      		push r12
 1796 07e2 DF93      		push r29
 1797 07e4 CF93      		push r28
 1798 07e6 0E94 0000 		call snprintf_P
 1799               	.LBB7:
 1801               	.LM192:
 1802 07ea EE0C      		lsl r14
 1803 07ec FF1C      		rol r15
 1804 07ee 80E0      		ldi r24,lo8(relayThresholdStateStrings)
 1805 07f0 90E0      		ldi r25,hi8(relayThresholdStateStrings)
 1806 07f2 E80E      		add r14,r24
 1807 07f4 F91E      		adc r15,r25
 1808 07f6 F701      		movw r30,r14
 1809               	/* #APP */
 1810 07f8 C895      		lpm
 1811 07fa 602D      		mov r22, r0
 1812 07fc 3196      		adiw r30, 1
 1813 07fe C895      		lpm
 1814 0800 702D      		mov r23, r0
 1815               		
 1816               	/* #NOAPP */
 1817               	.LBE7:
 1818 0802 4EE7      		ldi r20,lo8(126)
 1819 0804 50E0      		ldi r21,hi8(126)
 1820 0806 CE01      		movw r24,r28
 1821 0808 0E94 0000 		call strncat_P
 1823               	.LM193:
 1824 080c 0E94 0000 		call relayThresholdsGetCurrentValue
 1826               	.LM194:
 1827 0810 9F93      		push r25
 1828 0812 8F93      		push r24
 1829 0814 7F93      		push r23
 1830 0816 6F93      		push r22
 1831 0818 DF93      		push r29
 1832 081a CF93      		push r28
 1833 081c 80E0      		ldi r24,lo8(__c.2642)
 1834 081e 90E0      		ldi r25,hi8(__c.2642)
 1835 0820 9F93      		push r25
 1836 0822 8F93      		push r24
 1837 0824 DF92      		push r13
 1838 0826 CF92      		push r12
 1839 0828 DF93      		push r29
 1840 082a CF93      		push r28
 1841 082c 0E94 0000 		call snprintf_P
 1843               	.LM195:
 1844 0830 0E94 0000 		call relayThresholdsGetLowThreshold
 1846               	.LM196:
 1847 0834 AA27      		clr r26
 1848 0836 BB27      		clr r27
 1849 0838 BF93      		push r27
 1850 083a AF93      		push r26
 1851 083c 9F93      		push r25
 1852 083e 8F93      		push r24
 1853 0840 DF93      		push r29
 1854 0842 CF93      		push r28
 1855 0844 80E0      		ldi r24,lo8(__c.2644)
 1856 0846 90E0      		ldi r25,hi8(__c.2644)
 1857 0848 9F93      		push r25
 1858 084a 8F93      		push r24
 1859 084c DF92      		push r13
 1860 084e CF92      		push r12
 1861 0850 DF93      		push r29
 1862 0852 CF93      		push r28
 1863 0854 0E94 0000 		call snprintf_P
 1865               	.LM197:
 1866 0858 2DB7      		in r18,__SP_L__
 1867 085a 3EB7      		in r19,__SP_H__
 1868 085c 2C5D      		subi r18,lo8(-(36))
 1869 085e 3F4F      		sbci r19,hi8(-(36))
 1870 0860 0FB6      		in __tmp_reg__,__SREG__
 1871 0862 F894      		cli
 1872 0864 3EBF      		out __SP_H__,r19
 1873 0866 0FBE      		out __SREG__,__tmp_reg__
 1874 0868 2DBF      		out __SP_L__,r18
 1875 086a 0E94 0000 		call relayThresholdsGetHighThreshold
 1877               	.LM198:
 1878 086e AA27      		clr r26
 1879 0870 BB27      		clr r27
 1880 0872 BF93      		push r27
 1881 0874 AF93      		push r26
 1882 0876 9F93      		push r25
 1883 0878 8F93      		push r24
 1884 087a DF93      		push r29
 1885 087c CF93      		push r28
 1886 087e 80E0      		ldi r24,lo8(__c.2646)
 1887 0880 90E0      		ldi r25,hi8(__c.2646)
 1888 0882 9F93      		push r25
 1889 0884 8F93      		push r24
 1890 0886 DF92      		push r13
 1891 0888 CF92      		push r12
 1892 088a DF93      		push r29
 1893 088c CF93      		push r28
 1894 088e 0E94 0000 		call snprintf_P
 1896               	.LM199:
 1897 0892 0E94 0000 		call relayThresholdsGetRelayValue
 1899               	.LM200:
 1900 0896 9927      		clr r25
 1901 0898 AA27      		clr r26
 1902 089a BB27      		clr r27
 1903 089c BF93      		push r27
 1904 089e AF93      		push r26
 1905 08a0 9F93      		push r25
 1906 08a2 8F93      		push r24
 1907 08a4 DF93      		push r29
 1908 08a6 CF93      		push r28
 1909 08a8 80E0      		ldi r24,lo8(__c.2648)
 1910 08aa 90E0      		ldi r25,hi8(__c.2648)
 1911 08ac 9F93      		push r25
 1912 08ae 8F93      		push r24
 1913 08b0 DF92      		push r13
 1914 08b2 CF92      		push r12
 1915 08b4 DF93      		push r29
 1916 08b6 CF93      		push r28
 1917 08b8 0E94 0000 		call snprintf_P
 1919               	.LM201:
 1920 08bc 0E94 0000 		call relayThresholdsGetInputChannel
 1922               	.LM202:
 1923 08c0 9927      		clr r25
 1924 08c2 AA27      		clr r26
 1925 08c4 BB27      		clr r27
 1926 08c6 BF93      		push r27
 1927 08c8 AF93      		push r26
 1928 08ca 9F93      		push r25
 1929 08cc 8F93      		push r24
 1930 08ce DF93      		push r29
 1931 08d0 CF93      		push r28
 1932 08d2 80E0      		ldi r24,lo8(__c.2650)
 1933 08d4 90E0      		ldi r25,hi8(__c.2650)
 1934 08d6 9F93      		push r25
 1935 08d8 8F93      		push r24
 1936 08da DF92      		push r13
 1937 08dc CF92      		push r12
 1938 08de DF93      		push r29
 1939 08e0 CF93      		push r28
 1940 08e2 0E94 0000 		call snprintf_P
 1942               	.LM203:
 1943 08e6 8DB7      		in r24,__SP_L__
 1944 08e8 9EB7      		in r25,__SP_H__
 1945 08ea 8496      		adiw r24,36
 1946 08ec 0FB6      		in __tmp_reg__,__SREG__
 1947 08ee F894      		cli
 1948 08f0 9EBF      		out __SP_H__,r25
 1949 08f2 0FBE      		out __SREG__,__tmp_reg__
 1950 08f4 8DBF      		out __SP_L__,r24
 1951 08f6 0E94 0000 		call relayThresholdsGetOutputPin
 1953               	.LM204:
 1954 08fa 9927      		clr r25
 1955 08fc AA27      		clr r26
 1956 08fe BB27      		clr r27
 1957 0900 BF93      		push r27
 1958 0902 AF93      		push r26
 1959 0904 9F93      		push r25
 1960 0906 8F93      		push r24
 1961 0908 DF93      		push r29
 1962 090a CF93      		push r28
 1963 090c 80E0      		ldi r24,lo8(__c.2652)
 1964 090e 90E0      		ldi r25,hi8(__c.2652)
 1965 0910 9F93      		push r25
 1966 0912 8F93      		push r24
 1967 0914 DF92      		push r13
 1968 0916 CF92      		push r12
 1969 0918 DF93      		push r29
 1970 091a CF93      		push r28
 1971 091c 0E94 0000 		call snprintf_P
 1973               	.LM205:
 1974 0920 0E94 0000 		call relayThresholdsGetLedPin
 1976               	.LM206:
 1977 0924 9927      		clr r25
 1978 0926 AA27      		clr r26
 1979 0928 BB27      		clr r27
 1980 092a BF93      		push r27
 1981 092c AF93      		push r26
 1982 092e 9F93      		push r25
 1983 0930 8F93      		push r24
 1984 0932 DF93      		push r29
 1985 0934 CF93      		push r28
 1986 0936 80E0      		ldi r24,lo8(__c.2654)
 1987 0938 90E0      		ldi r25,hi8(__c.2654)
 1988 093a 9F93      		push r25
 1989 093c 8F93      		push r24
 1990 093e DF92      		push r13
 1991 0940 CF92      		push r12
 1992 0942 DF93      		push r29
 1993 0944 CF93      		push r28
 1994 0946 0E94 0000 		call snprintf_P
 1996               	.LM207:
 1997 094a 0E94 0000 		call relayThresholdsGetEnableFlag
 1998 094e 182F      		mov r17,r24
 2000               	.LM208:
 2001 0950 4EE7      		ldi r20,lo8(126)
 2002 0952 50E0      		ldi r21,hi8(126)
 2003 0954 60E0      		ldi r22,lo8(__c.2656)
 2004 0956 70E0      		ldi r23,hi8(__c.2656)
 2005 0958 CE01      		movw r24,r28
 2006 095a 0E94 0000 		call strncat_P
 2008               	.LM209:
 2009 095e EDB7      		in r30,__SP_L__
 2010 0960 FEB7      		in r31,__SP_H__
 2011 0962 7896      		adiw r30,24
 2012 0964 0FB6      		in __tmp_reg__,__SREG__
 2013 0966 F894      		cli
 2014 0968 FEBF      		out __SP_H__,r31
 2015 096a 0FBE      		out __SREG__,__tmp_reg__
 2016 096c EDBF      		out __SP_L__,r30
 2017 096e 1123      		tst r17
 2018 0970 01F4      		brne .+2
 2019 0972 00C0      		rjmp .L164
 2020 0974 60E0      		ldi r22,lo8(__c.2658)
 2021 0976 70E0      		ldi r23,hi8(__c.2658)
 2022               	.L166:
 2023 0978 4EE7      		ldi r20,lo8(126)
 2024 097a 50E0      		ldi r21,hi8(126)
 2025 097c 80E0      		ldi r24,lo8(uart_message_string)
 2026 097e 90E0      		ldi r25,hi8(uart_message_string)
 2027 0980 0E94 0000 		call strncat_P
 2029               	.LM210:
 2030 0984 0E94 0000 		call relayThresholdsGetOutOfBoundsTransitLockFlag
 2031 0988 182F      		mov r17,r24
 2033               	.LM211:
 2034 098a 4EE7      		ldi r20,lo8(126)
 2035 098c 50E0      		ldi r21,hi8(126)
 2036 098e 60E0      		ldi r22,lo8(__c.2662)
 2037 0990 70E0      		ldi r23,hi8(__c.2662)
 2038 0992 80E0      		ldi r24,lo8(uart_message_string)
 2039 0994 90E0      		ldi r25,hi8(uart_message_string)
 2040 0996 0E94 0000 		call strncat_P
 2042               	.LM212:
 2043 099a 1123      		tst r17
 2044 099c 01F4      		brne .+2
 2045 099e 00C0      		rjmp .L167
 2046 09a0 60E0      		ldi r22,lo8(__c.2664)
 2047 09a2 70E0      		ldi r23,hi8(__c.2664)
 2048 09a4 00C0      		rjmp .L169
 2049               	.L124:
 2051               	.LM213:
 2052 09a6 0E94 0000 		call relayThresholdsGetLowThreshold
 2054               	.LM214:
 2055 09aa AA27      		clr r26
 2056 09ac BB27      		clr r27
 2057 09ae BF93      		push r27
 2058 09b0 AF93      		push r26
 2059 09b2 9F93      		push r25
 2060 09b4 8F93      		push r24
 2061 09b6 C0E0      		ldi r28,lo8(uart_message_string)
 2062 09b8 D0E0      		ldi r29,hi8(uart_message_string)
 2063 09ba DF93      		push r29
 2064 09bc CF93      		push r28
 2065 09be 80E0      		ldi r24,lo8(__c.2699)
 2066 09c0 90E0      		ldi r25,hi8(__c.2699)
 2067 09c2 9F93      		push r25
 2068 09c4 8F93      		push r24
 2069 09c6 0EE7      		ldi r16,lo8(126)
 2070 09c8 10E0      		ldi r17,hi8(126)
 2071 09ca 1F93      		push r17
 2072 09cc 0F93      		push r16
 2073 09ce DF93      		push r29
 2074 09d0 CF93      		push r28
 2075 09d2 0E94 0000 		call snprintf_P
 2077               	.LM215:
 2078 09d6 0E94 0000 		call relayThresholdsGetHighThreshold
 2080               	.LM216:
 2081 09da AA27      		clr r26
 2082 09dc BB27      		clr r27
 2083 09de BF93      		push r27
 2084 09e0 AF93      		push r26
 2085 09e2 9F93      		push r25
 2086 09e4 8F93      		push r24
 2087 09e6 DF93      		push r29
 2088 09e8 CF93      		push r28
 2089 09ea 80E0      		ldi r24,lo8(__c.2701)
 2090 09ec 90E0      		ldi r25,hi8(__c.2701)
 2091 09ee 9F93      		push r25
 2092 09f0 8F93      		push r24
 2093 09f2 1F93      		push r17
 2094 09f4 0F93      		push r16
 2095 09f6 DF93      		push r29
 2096 09f8 CF93      		push r28
 2097 09fa 0E94 0000 		call snprintf_P
 2099               	.LM217:
 2100 09fe 0E94 0000 		call relayThresholdsGetRelayValue
 2102               	.LM218:
 2103 0a02 8DB7      		in r24,__SP_L__
 2104 0a04 9EB7      		in r25,__SP_H__
 2105 0a06 4896      		adiw r24,24
 2106 0a08 0FB6      		in __tmp_reg__,__SREG__
 2107 0a0a F894      		cli
 2108 0a0c 9EBF      		out __SP_H__,r25
 2109 0a0e 0FBE      		out __SREG__,__tmp_reg__
 2110 0a10 8DBF      		out __SP_L__,r24
 2111 0a12 00C0      		rjmp .L136
 2112               	.L123:
 2114               	.LM219:
 2115 0a14 0E94 0000 		call relayThresholdsGetRelayValue
 2117               	.LM220:
 2118 0a18 9927      		clr r25
 2119 0a1a AA27      		clr r26
 2120 0a1c BB27      		clr r27
 2121 0a1e BF93      		push r27
 2122 0a20 AF93      		push r26
 2123 0a22 9F93      		push r25
 2124 0a24 8F93      		push r24
 2125 0a26 C0E0      		ldi r28,lo8(uart_message_string)
 2126 0a28 D0E0      		ldi r29,hi8(uart_message_string)
 2127 0a2a DF93      		push r29
 2128 0a2c CF93      		push r28
 2129 0a2e 80E0      		ldi r24,lo8(__c.2603)
 2130 0a30 90E0      		ldi r25,hi8(__c.2603)
 2131               	.L218:
 2132 0a32 9F93      		push r25
 2133 0a34 8F93      		push r24
 2134 0a36 8EE7      		ldi r24,lo8(126)
 2135 0a38 90E0      		ldi r25,hi8(126)
 2136 0a3a 9F93      		push r25
 2137 0a3c 8F93      		push r24
 2138 0a3e DF93      		push r29
 2139 0a40 CF93      		push r28
 2140 0a42 0E94 0000 		call snprintf_P
 2142               	.LM221:
 2143 0a46 8DB7      		in r24,__SP_L__
 2144 0a48 9EB7      		in r25,__SP_H__
 2145 0a4a 0C96      		adiw r24,12
 2146 0a4c 0FB6      		in __tmp_reg__,__SREG__
 2147 0a4e F894      		cli
 2148 0a50 9EBF      		out __SP_H__,r25
 2149 0a52 0FBE      		out __SREG__,__tmp_reg__
 2150 0a54 8DBF      		out __SP_L__,r24
 2151 0a56 00C0      		rjmp .L136
 2152               	.L122:
 2154               	.LM222:
 2155 0a58 0E94 0000 		call relayThresholdsGetReportStateEnableFlag
 2157               	.LM223:
 2158 0a5c 8823      		tst r24
 2159 0a5e 01F4      		brne .+2
 2160 0a60 00C0      		rjmp .L146
 2161 0a62 60E0      		ldi r22,lo8(__c.2589)
 2162 0a64 70E0      		ldi r23,hi8(__c.2589)
 2163 0a66 00C0      		rjmp .L169
 2164               	.L121:
 2166               	.LM224:
 2167 0a68 0E94 0000 		call relayThresholdsGetLedPin
 2169               	.LM225:
 2170 0a6c 9927      		clr r25
 2171 0a6e AA27      		clr r26
 2172 0a70 BB27      		clr r27
 2173 0a72 BF93      		push r27
 2174 0a74 AF93      		push r26
 2175 0a76 9F93      		push r25
 2176 0a78 8F93      		push r24
 2177 0a7a C0E0      		ldi r28,lo8(uart_message_string)
 2178 0a7c D0E0      		ldi r29,hi8(uart_message_string)
 2179 0a7e DF93      		push r29
 2180 0a80 CF93      		push r28
 2181 0a82 80E0      		ldi r24,lo8(__c.2600)
 2182 0a84 90E0      		ldi r25,hi8(__c.2600)
 2183 0a86 00C0      		rjmp .L217
 2184               	.L117:
 2186               	.LM226:
 2187 0a88 0E94 0000 		call relayThresholdsGetLowThreshold
 2189               	.LM227:
 2190 0a8c AA27      		clr r26
 2191 0a8e BB27      		clr r27
 2192 0a90 BF93      		push r27
 2193 0a92 AF93      		push r26
 2194 0a94 9F93      		push r25
 2195 0a96 8F93      		push r24
 2196 0a98 C0E0      		ldi r28,lo8(uart_message_string)
 2197 0a9a D0E0      		ldi r29,hi8(uart_message_string)
 2198 0a9c DF93      		push r29
 2199 0a9e CF93      		push r28
 2200 0aa0 80E0      		ldi r24,lo8(__c.2577)
 2201 0aa2 90E0      		ldi r25,hi8(__c.2577)
 2202 0aa4 9F93      		push r25
 2203 0aa6 8F93      		push r24
 2204 0aa8 8EE7      		ldi r24,lo8(126)
 2205 0aaa 90E0      		ldi r25,hi8(126)
 2206 0aac 9F93      		push r25
 2207 0aae 8F93      		push r24
 2208 0ab0 DF93      		push r29
 2209 0ab2 CF93      		push r28
 2210 0ab4 0E94 0000 		call snprintf_P
 2212               	.LM228:
 2213 0ab8 8091 0000 		lds r24,relayThresholds_valid
 2214 0abc 2DB7      		in r18,__SP_L__
 2215 0abe 3EB7      		in r19,__SP_H__
 2216 0ac0 245F      		subi r18,lo8(-(12))
 2217 0ac2 3F4F      		sbci r19,hi8(-(12))
 2218 0ac4 0FB6      		in __tmp_reg__,__SREG__
 2219 0ac6 F894      		cli
 2220 0ac8 3EBF      		out __SP_H__,r19
 2221 0aca 0FBE      		out __SREG__,__tmp_reg__
 2222 0acc 2DBF      		out __SP_L__,r18
 2223 0ace 8823      		tst r24
 2224 0ad0 01F4      		brne .+2
 2225 0ad2 00C0      		rjmp .L140
 2226 0ad4 60E0      		ldi r22,lo8(__c.2579)
 2227 0ad6 70E0      		ldi r23,hi8(__c.2579)
 2228 0ad8 00C0      		rjmp .L169
 2229               	.L116:
 2231               	.LM229:
 2232 0ada 0E94 0000 		call relayThresholdsGetHighThreshold
 2234               	.LM230:
 2235 0ade AA27      		clr r26
 2236 0ae0 BB27      		clr r27
 2237 0ae2 BF93      		push r27
 2238 0ae4 AF93      		push r26
 2239 0ae6 9F93      		push r25
 2240 0ae8 8F93      		push r24
 2241 0aea C0E0      		ldi r28,lo8(uart_message_string)
 2242 0aec D0E0      		ldi r29,hi8(uart_message_string)
 2243 0aee DF93      		push r29
 2244 0af0 CF93      		push r28
 2245 0af2 80E0      		ldi r24,lo8(__c.2570)
 2246 0af4 90E0      		ldi r25,hi8(__c.2570)
 2247 0af6 9F93      		push r25
 2248 0af8 8F93      		push r24
 2249 0afa 8EE7      		ldi r24,lo8(126)
 2250 0afc 90E0      		ldi r25,hi8(126)
 2251 0afe 9F93      		push r25
 2252 0b00 8F93      		push r24
 2253 0b02 DF93      		push r29
 2254 0b04 CF93      		push r28
 2255 0b06 0E94 0000 		call snprintf_P
 2257               	.LM231:
 2258 0b0a 8091 0000 		lds r24,relayThresholds_valid+1
 2259 0b0e EDB7      		in r30,__SP_L__
 2260 0b10 FEB7      		in r31,__SP_H__
 2261 0b12 3C96      		adiw r30,12
 2262 0b14 0FB6      		in __tmp_reg__,__SREG__
 2263 0b16 F894      		cli
 2264 0b18 FEBF      		out __SP_H__,r31
 2265 0b1a 0FBE      		out __SREG__,__tmp_reg__
 2266 0b1c EDBF      		out __SP_L__,r30
 2267 0b1e 8823      		tst r24
 2268 0b20 01F4      		brne .+2
 2269 0b22 00C0      		rjmp .L137
 2270 0b24 60E0      		ldi r22,lo8(__c.2572)
 2271 0b26 70E0      		ldi r23,hi8(__c.2572)
 2272 0b28 00C0      		rjmp .L169
 2273               	.L115:
 2275               	.LM232:
 2276 0b2a 0E94 0000 		call relayThresholdsGetCurrentValue
 2278               	.LM233:
 2279 0b2e 9F93      		push r25
 2280 0b30 8F93      		push r24
 2281 0b32 7F93      		push r23
 2282 0b34 6F93      		push r22
 2283 0b36 C0E0      		ldi r28,lo8(uart_message_string)
 2284 0b38 D0E0      		ldi r29,hi8(uart_message_string)
 2285 0b3a DF93      		push r29
 2286 0b3c CF93      		push r28
 2287 0b3e 80E0      		ldi r24,lo8(__c.2560)
 2288 0b40 90E0      		ldi r25,hi8(__c.2560)
 2289 0b42 00C0      		rjmp .L217
 2290               	.L119:
 2292               	.LM234:
 2293 0b44 0E94 0000 		call relayThresholdsGetInputChannel
 2295               	.LM235:
 2296 0b48 9927      		clr r25
 2297 0b4a AA27      		clr r26
 2298 0b4c BB27      		clr r27
 2299 0b4e BF93      		push r27
 2300 0b50 AF93      		push r26
 2301 0b52 9F93      		push r25
 2302 0b54 8F93      		push r24
 2303 0b56 C0E0      		ldi r28,lo8(uart_message_string)
 2304 0b58 D0E0      		ldi r29,hi8(uart_message_string)
 2305 0b5a DF93      		push r29
 2306 0b5c CF93      		push r28
 2307 0b5e 80E0      		ldi r24,lo8(__c.2594)
 2308 0b60 90E0      		ldi r25,hi8(__c.2594)
 2309 0b62 00C0      		rjmp .L218
 2310               	.L118:
 2312               	.LM236:
 2313 0b64 0E94 0000 		call relayThresholdsGetEnableFlag
 2315               	.LM237:
 2316 0b68 8823      		tst r24
 2317 0b6a 01F4      		brne .+2
 2318 0b6c 00C0      		rjmp .L143
 2319 0b6e 60E0      		ldi r22,lo8(__c.2584)
 2320 0b70 70E0      		ldi r23,hi8(__c.2584)
 2321 0b72 00C0      		rjmp .L169
 2322               	.L120:
 2324               	.LM238:
 2325 0b74 0E94 0000 		call relayThresholdsGetOutputPin
 2327               	.LM239:
 2328 0b78 9927      		clr r25
 2329 0b7a AA27      		clr r26
 2330 0b7c BB27      		clr r27
 2331 0b7e BF93      		push r27
 2332 0b80 AF93      		push r26
 2333 0b82 9F93      		push r25
 2334 0b84 8F93      		push r24
 2335 0b86 C0E0      		ldi r28,lo8(uart_message_string)
 2336 0b88 D0E0      		ldi r29,hi8(uart_message_string)
 2337 0b8a DF93      		push r29
 2338 0b8c CF93      		push r28
 2339 0b8e 80E0      		ldi r24,lo8(__c.2597)
 2340 0b90 90E0      		ldi r25,hi8(__c.2597)
 2341 0b92 00C0      		rjmp .L219
 2342               	.L114:
 2344               	.LM240:
 2345 0b94 0E94 0000 		call relayThresholdsGetCurrentState
 2346 0b98 E82E      		mov r14,r24
 2347 0b9a FF24      		clr r15
 2348 0b9c 0027      		clr r16
 2349 0b9e 1127      		clr r17
 2351               	.LM241:
 2352 0ba0 1F93      		push r17
 2353 0ba2 0F93      		push r16
 2354 0ba4 FF92      		push r15
 2355 0ba6 EF92      		push r14
 2356 0ba8 C0E0      		ldi r28,lo8(uart_message_string)
 2357 0baa D0E0      		ldi r29,hi8(uart_message_string)
 2358 0bac DF93      		push r29
 2359 0bae CF93      		push r28
 2360 0bb0 80E0      		ldi r24,lo8(__c.2564)
 2361 0bb2 90E0      		ldi r25,hi8(__c.2564)
 2362 0bb4 9F93      		push r25
 2363 0bb6 8F93      		push r24
 2364 0bb8 8EE7      		ldi r24,lo8(126)
 2365 0bba 90E0      		ldi r25,hi8(126)
 2366 0bbc 9F93      		push r25
 2367 0bbe 8F93      		push r24
 2368 0bc0 DF93      		push r29
 2369 0bc2 CF93      		push r28
 2370 0bc4 0E94 0000 		call snprintf_P
 2371               	.LBB8:
 2373               	.LM242:
 2374 0bc8 EE0C      		lsl r14
 2375 0bca FF1C      		rol r15
 2376 0bcc 80E0      		ldi r24,lo8(relayThresholdStateStrings)
 2377 0bce 90E0      		ldi r25,hi8(relayThresholdStateStrings)
 2378 0bd0 E80E      		add r14,r24
 2379 0bd2 F91E      		adc r15,r25
 2380 0bd4 F701      		movw r30,r14
 2381               	/* #APP */
 2382 0bd6 C895      		lpm
 2383 0bd8 602D      		mov r22, r0
 2384 0bda 3196      		adiw r30, 1
 2385 0bdc C895      		lpm
 2386 0bde 702D      		mov r23, r0
 2387               		
 2388               	/* #NOAPP */
 2389               	.LBE8:
 2390 0be0 4EE7      		ldi r20,lo8(126)
 2391 0be2 50E0      		ldi r21,hi8(126)
 2392 0be4 CE01      		movw r24,r28
 2393 0be6 0E94 0000 		call strncat_P
 2395               	.LM243:
 2396 0bea 2DB7      		in r18,__SP_L__
 2397 0bec 3EB7      		in r19,__SP_H__
 2398 0bee 245F      		subi r18,lo8(-(12))
 2399 0bf0 3F4F      		sbci r19,hi8(-(12))
 2400 0bf2 0FB6      		in __tmp_reg__,__SREG__
 2401 0bf4 F894      		cli
 2402 0bf6 3EBF      		out __SP_H__,r19
 2403 0bf8 0FBE      		out __SREG__,__tmp_reg__
 2404 0bfa 2DBF      		out __SP_L__,r18
 2405 0bfc 00C0      		rjmp .L136
 2406               	.L223:
 2408               	.LM244:
 2409 0bfe 60E0      		ldi r22,lo8(__c.2710)
 2410 0c00 70E0      		ldi r23,hi8(__c.2710)
 2411 0c02 80E0      		ldi r24,lo8(setParameter+50)
 2412 0c04 90E0      		ldi r25,hi8(setParameter+50)
 2413 0c06 0E94 0000 		call strcmp_P
 2414 0c0a 892B      		or r24,r25
 2415 0c0c 01F4      		brne .+2
 2416 0c0e 00C0      		rjmp .L183
 2418               	.LM245:
 2419 0c10 60E0      		ldi r22,lo8(__c.2712)
 2420 0c12 70E0      		ldi r23,hi8(__c.2712)
 2421 0c14 80E0      		ldi r24,lo8(setParameter+50)
 2422 0c16 90E0      		ldi r25,hi8(setParameter+50)
 2423 0c18 0E94 0000 		call strcmp_P
 2424 0c1c 892B      		or r24,r25
 2425 0c1e 01F0      		breq .+2
 2426 0c20 00C0      		rjmp .L225
 2427               	.L186:
 2429               	.LM246:
 2430 0c22 AA24      		clr r10
 2431 0c24 BB24      		clr r11
 2432 0c26 6501      		movw r12,r10
 2433 0c28 00C0      		rjmp .L191
 2434               	.L198:
 2436               	.LM247:
 2437 0c2a 8A2D      		mov r24,r10
 2438 0c2c 0E94 0000 		call relayThresholdsSetLedPin
 2439 0c30 9927      		clr r25
 2440 0c32 AA27      		clr r26
 2441 0c34 BB27      		clr r27
 2442 0c36 00C0      		rjmp .L208
 2443               	.L206:
 2445               	.LM248:
 2446 0c38 C530      		cpi r28,5
 2447 0c3a D105      		cpc r29,__zero_reg__
 2448 0c3c 01F4      		brne .+2
 2449 0c3e 00C0      		rjmp .L196
 2450 0c40 C630      		cpi r28,6
 2451 0c42 D105      		cpc r29,__zero_reg__
 2452 0c44 01F0      		breq .+2
 2453 0c46 00C0      		rjmp .L192
 2455               	.LM249:
 2456 0c48 8A2D      		mov r24,r10
 2457 0c4a 0E94 0000 		call relayThresholdsSetOutputPin
 2458 0c4e 9927      		clr r25
 2459 0c50 AA27      		clr r26
 2460 0c52 BB27      		clr r27
 2461 0c54 00C0      		rjmp .L208
 2462               	.L207:
 2464               	.LM250:
 2465 0c56 C131      		cpi r28,17
 2466 0c58 D105      		cpc r29,__zero_reg__
 2467 0c5a 01F0      		breq .L204
 2468 0c5c C231      		cpi r28,18
 2469 0c5e D105      		cpc r29,__zero_reg__
 2470 0c60 01F0      		breq .L204
 2471 0c62 CF30      		cpi r28,15
 2472 0c64 D105      		cpc r29,__zero_reg__
 2473 0c66 01F0      		breq .+2
 2474 0c68 00C0      		rjmp .L192
 2476               	.LM251:
 2477 0c6a 8A2D      		mov r24,r10
 2478 0c6c 0E94 0000 		call relayThresholdsSetInvertPolarityFlag
 2479 0c70 9927      		clr r25
 2480 0c72 AA27      		clr r26
 2481 0c74 BB27      		clr r27
 2482 0c76 00C0      		rjmp .L208
 2483               	.L204:
 2485               	.LM252:
 2486 0c78 8A2D      		mov r24,r10
 2487 0c7a 0E94 0000 		call relayThresholdsSetExternalPolarityPinPos
 2488 0c7e 9927      		clr r25
 2489 0c80 AA27      		clr r26
 2490 0c82 BB27      		clr r27
 2491 0c84 00C0      		rjmp .L208
 2492               	.L179:
 2494               	.LM253:
 2495 0c86 60E0      		ldi r22,lo8(__c.2691)
 2496 0c88 70E0      		ldi r23,hi8(__c.2691)
 2497 0c8a 00C0      		rjmp .L181
 2498               	.L176:
 2500               	.LM254:
 2501 0c8c 60E0      		ldi r22,lo8(__c.2685)
 2502 0c8e 70E0      		ldi r23,hi8(__c.2685)
 2503 0c90 00C0      		rjmp .L178
 2504               	.L173:
 2506               	.LM255:
 2507 0c92 60E0      		ldi r22,lo8(__c.2679)
 2508 0c94 70E0      		ldi r23,hi8(__c.2679)
 2509 0c96 00C0      		rjmp .L175
 2510               	.L170:
 2512               	.LM256:
 2513 0c98 60E0      		ldi r22,lo8(__c.2673)
 2514 0c9a 70E0      		ldi r23,hi8(__c.2673)
 2515 0c9c 00C0      		rjmp .L172
 2516               	.L146:
 2518               	.LM257:
 2519 0c9e 60E0      		ldi r22,lo8(__c.2591)
 2520 0ca0 70E0      		ldi r23,hi8(__c.2591)
 2521 0ca2 00C0      		rjmp .L169
 2522               	.L143:
 2524               	.LM258:
 2525 0ca4 60E0      		ldi r22,lo8(__c.2586)
 2526 0ca6 70E0      		ldi r23,hi8(__c.2586)
 2527 0ca8 00C0      		rjmp .L169
 2528               	.L161:
 2530               	.LM259:
 2531 0caa 60E0      		ldi r22,lo8(__c.2628)
 2532 0cac 70E0      		ldi r23,hi8(__c.2628)
 2533 0cae 00C0      		rjmp .L169
 2534               	.L152:
 2536               	.LM260:
 2537 0cb0 60E0      		ldi r22,lo8(__c.2613)
 2538 0cb2 70E0      		ldi r23,hi8(__c.2613)
 2539 0cb4 00C0      		rjmp .L169
 2540               	.L158:
 2542               	.LM261:
 2543 0cb6 60E0      		ldi r22,lo8(__c.2623)
 2544 0cb8 70E0      		ldi r23,hi8(__c.2623)
 2545 0cba 00C0      		rjmp .L169
 2546               	.L155:
 2548               	.LM262:
 2549 0cbc 60E0      		ldi r22,lo8(__c.2618)
 2550 0cbe 70E0      		ldi r23,hi8(__c.2618)
 2551 0cc0 00C0      		rjmp .L169
 2552               	.L140:
 2554               	.LM263:
 2555 0cc2 60E0      		ldi r22,lo8(__c.2581)
 2556 0cc4 70E0      		ldi r23,hi8(__c.2581)
 2557 0cc6 00C0      		rjmp .L169
 2558               	.L137:
 2560               	.LM264:
 2561 0cc8 60E0      		ldi r22,lo8(__c.2574)
 2562 0cca 70E0      		ldi r23,hi8(__c.2574)
 2563 0ccc 00C0      		rjmp .L169
 2564               	.L167:
 2566               	.LM265:
 2567 0cce 60E0      		ldi r22,lo8(__c.2666)
 2568 0cd0 70E0      		ldi r23,hi8(__c.2666)
 2569 0cd2 00C0      		rjmp .L169
 2570               	.L164:
 2572               	.LM266:
 2573 0cd4 60E0      		ldi r22,lo8(__c.2660)
 2574 0cd6 70E0      		ldi r23,hi8(__c.2660)
 2575 0cd8 00C0      		rjmp .L166
 2576               	.L149:
 2578               	.LM267:
 2579 0cda 60E0      		ldi r22,lo8(__c.2608)
 2580 0cdc 70E0      		ldi r23,hi8(__c.2608)
 2581 0cde 00C0      		rjmp .L169
 2582               	.L193:
 2584               	.LM268:
 2585 0ce0 C501      		movw r24,r10
 2586 0ce2 0E94 0000 		call relayThresholdsSetHighThreshold
 2587 0ce6 9927      		clr r25
 2588 0ce8 AA27      		clr r26
 2589 0cea BB27      		clr r27
 2590 0cec 00C0      		rjmp .L208
 2591               	.L199:
 2593               	.LM269:
 2594 0cee 8A2D      		mov r24,r10
 2595 0cf0 8F70      		andi r24,lo8(15)
 2596 0cf2 0E94 0000 		call relayThresholdsSetReportCurrentStatusEnableFlag
 2597 0cf6 9927      		clr r25
 2598 0cf8 AA27      		clr r26
 2599 0cfa BB27      		clr r27
 2600 0cfc 00C0      		rjmp .L208
 2601               	.L196:
 2603               	.LM270:
 2604 0cfe 8A2D      		mov r24,r10
 2605 0d00 0E94 0000 		call relayThresholdsSetInputChannel
 2606 0d04 9927      		clr r25
 2607 0d06 AA27      		clr r26
 2608 0d08 BB27      		clr r27
 2609 0d0a 00C0      		rjmp .L208
 2610               	.L225:
 2612               	.LM271:
 2613 0d0c 60E0      		ldi r22,lo8(__c.2714)
 2614 0d0e 70E0      		ldi r23,hi8(__c.2714)
 2615 0d10 80E0      		ldi r24,lo8(setParameter+50)
 2616 0d12 90E0      		ldi r25,hi8(setParameter+50)
 2617 0d14 0E94 0000 		call strcmp_P
 2618 0d18 892B      		or r24,r25
 2619 0d1a 01F4      		brne .+2
 2620 0d1c 00C0      		rjmp .L186
 2622               	.LM272:
 2623 0d1e 69E1      		ldi r22,lo8(25)
 2624 0d20 70E0      		ldi r23,hi8(25)
 2625 0d22 80E0      		ldi r24,lo8(setParameter+50)
 2626 0d24 90E0      		ldi r25,hi8(setParameter+50)
 2627 0d26 0E94 0000 		call getNumericLength
 2628 0d2a 892B      		or r24,r25
 2629 0d2c 01F0      		breq .L189
 2631               	.LM273:
 2632 0d2e 40E1      		ldi r20,lo8(16)
 2633 0d30 50E0      		ldi r21,hi8(16)
 2634 0d32 60E0      		ldi r22,lo8(ptr_setParameter+4)
 2635 0d34 70E0      		ldi r23,hi8(ptr_setParameter+4)
 2636 0d36 80E0      		ldi r24,lo8(setParameter+50)
 2637 0d38 90E0      		ldi r25,hi8(setParameter+50)
 2638 0d3a 0E94 0000 		call strtoul
 2639 0d3e 5B01      		movw r10,r22
 2640 0d40 6C01      		movw r12,r24
 2641 0d42 00C0      		rjmp .L191
 2642               	.L224:
 2644               	.LM274:
 2645 0d44 8A2D      		mov r24,r10
 2646 0d46 0E94 0000 		call relayThresholdsSetRelayValue
 2647 0d4a 9927      		clr r25
 2648 0d4c AA27      		clr r26
 2649 0d4e BB27      		clr r27
 2650 0d50 00C0      		rjmp .L208
 2651               	.L189:
 2653               	.LM275:
 2654 0d52 0FEF      		ldi r16,lo8(-1)
 2655 0d54 1FEF      		ldi r17,hi8(-1)
 2656 0d56 20E0      		ldi r18,lo8(__c.2716)
 2657 0d58 30E0      		ldi r19,hi8(__c.2716)
 2658 0d5a 41E0      		ldi r20,lo8(1)
 2659 0d5c 6FEF      		ldi r22,lo8(-1)
 2660 0d5e 7FEF      		ldi r23,hi8(-1)
 2661 0d60 81E0      		ldi r24,lo8(1)
 2662 0d62 0E94 0000 		call CommunicationError
 2663               	.L214:
 2664               	/* epilogue: frame size=0 */
 2665 0d66 DF91      		pop r29
 2666 0d68 CF91      		pop r28
 2667 0d6a 1F91      		pop r17
 2668 0d6c 0F91      		pop r16
 2669 0d6e FF90      		pop r15
 2670 0d70 EF90      		pop r14
 2671 0d72 DF90      		pop r13
 2672 0d74 CF90      		pop r12
 2673 0d76 BF90      		pop r11
 2674 0d78 AF90      		pop r10
 2675 0d7a 0895      		ret
 2676               	/* epilogue end (size=11) */
 2677               	/* function relayThresholdMiscSubCommands size 1278 (1257) */
 2695               	.Lscope25:
 2697               	.global	relayThresholdsReportCurrentStatus
 2699               	relayThresholdsReportCurrentStatus:
 2701               	.LM276:
 2702               	/* prologue: frame size=0 */
 2703 0d7c 0F93      		push r16
 2704 0d7e 1F93      		push r17
 2705               	/* prologue end (size=2) */
 2707               	.LM277:
 2708 0d80 E091 0000 		lds r30,ptr_uartStruct
 2709 0d84 F091 0000 		lds r31,(ptr_uartStruct)+1
 2710 0d88 038D      		ldd r16,Z+27
 2711 0d8a 1127      		clr r17
 2712 0d8c 07FD      		sbrc r16,7
 2713 0d8e 1095      		com r17
 2715               	.LM278:
 2716 0d90 81E0      		ldi r24,lo8(1)
 2717 0d92 838F      		std Z+27,r24
 2719               	.LM279:
 2720 0d94 6BE0      		ldi r22,lo8(11)
 2721 0d96 70E0      		ldi r23,hi8(11)
 2722 0d98 8091 0000 		lds r24,ptr_uartStruct
 2723 0d9c 9091 0000 		lds r25,(ptr_uartStruct)+1
 2724 0da0 0E94 0000 		call relayThresholdMiscSubCommands
 2726               	.LM280:
 2727 0da4 E091 0000 		lds r30,ptr_uartStruct
 2728 0da8 F091 0000 		lds r31,(ptr_uartStruct)+1
 2729 0dac 038F      		std Z+27,r16
 2730               	/* epilogue: frame size=0 */
 2731 0dae 1F91      		pop r17
 2732 0db0 0F91      		pop r16
 2733 0db2 0895      		ret
 2734               	/* epilogue end (size=3) */
 2735               	/* function relayThresholdsReportCurrentStatus size 28 (23) */
 2740               	.Lscope26:
 2743               	.global	relayThresholdsSetExternalPolarityPort
 2745               	relayThresholdsSetExternalPolarityPort:
 2747               	.LM281:
 2748               	/* prologue: frame size=0 */
 2749 0db4 0F93      		push r16
 2750 0db6 1F93      		push r17
 2751               	/* prologue end (size=2) */
 2752 0db8 982F      		mov r25,r24
 2754               	.LM282:
 2755 0dba 8A50      		subi r24,lo8(-(-10))
 2756 0dbc 8630      		cpi r24,lo8(6)
 2757 0dbe 00F0      		brlo .L229
 2759               	.LM283:
 2760 0dc0 892F      		mov r24,r25
 2761 0dc2 9927      		clr r25
 2762 0dc4 9F93      		push r25
 2763 0dc6 8F93      		push r24
 2765               	.LM284:
 2766 0dc8 80E0      		ldi r24,lo8(__c.3189)
 2767 0dca 90E0      		ldi r25,hi8(__c.3189)
 2768 0dcc 9F93      		push r25
 2769 0dce 8F93      		push r24
 2770 0dd0 8EE7      		ldi r24,lo8(126)
 2771 0dd2 90E0      		ldi r25,hi8(126)
 2772 0dd4 9F93      		push r25
 2773 0dd6 8F93      		push r24
 2774 0dd8 80E0      		ldi r24,lo8(message)
 2775 0dda 90E0      		ldi r25,hi8(message)
 2776 0ddc 9F93      		push r25
 2777 0dde 8F93      		push r24
 2778 0de0 0E94 0000 		call snprintf_P
 2780               	.LM285:
 2781 0de4 04EB      		ldi r16,lo8(-1100)
 2782 0de6 1BEF      		ldi r17,hi8(-1100)
 2783 0de8 20E0      		ldi r18,lo8(0)
 2784 0dea 30E0      		ldi r19,hi8(0)
 2785 0dec 41E0      		ldi r20,lo8(1)
 2786 0dee 6CE9      		ldi r22,lo8(-100)
 2787 0df0 7FEF      		ldi r23,hi8(-100)
 2788 0df2 80E0      		ldi r24,lo8(0)
 2789 0df4 0E94 0000 		call CommunicationError
 2790 0df8 81E0      		ldi r24,lo8(1)
 2791 0dfa 90E0      		ldi r25,hi8(1)
 2793               	.LM286:
 2794 0dfc 2DB7      		in r18,__SP_L__
 2795 0dfe 3EB7      		in r19,__SP_H__
 2796 0e00 285F      		subi r18,lo8(-(8))
 2797 0e02 3F4F      		sbci r19,hi8(-(8))
 2798 0e04 0FB6      		in __tmp_reg__,__SREG__
 2799 0e06 F894      		cli
 2800 0e08 3EBF      		out __SP_H__,r19
 2801 0e0a 0FBE      		out __SREG__,__tmp_reg__
 2802 0e0c 2DBF      		out __SP_L__,r18
 2803 0e0e 00C0      		rjmp .L231
 2804               	.L229:
 2806               	.LM287:
 2807 0e10 9093 0000 		sts relayThresholdsExternalPolarityPort,r25
 2809               	.LM288:
 2810 0e14 0E94 0000 		call relayThresholdInBoundPolarityInit
 2812               	.LM289:
 2813 0e18 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 2814 0e1c 8823      		tst r24
 2815 0e1e 01F4      		brne .L236
 2817               	.LM290:
 2818 0e20 80E0      		ldi r24,lo8(0)
 2819 0e22 90E0      		ldi r25,hi8(0)
 2820 0e24 00C0      		rjmp .L231
 2821               	.L236:
 2822 0e26 0E94 0000 		call relayThresholdsReportCurrentStatus
 2823 0e2a 80E0      		ldi r24,lo8(0)
 2824 0e2c 90E0      		ldi r25,hi8(0)
 2825               	.L231:
 2826               	/* epilogue: frame size=0 */
 2827 0e2e 1F91      		pop r17
 2828 0e30 0F91      		pop r16
 2829 0e32 0895      		ret
 2830               	/* epilogue end (size=3) */
 2831               	/* function relayThresholdsSetExternalPolarityPort size 64 (59) */
 2833               	.Lscope27:
 2836               	.global	relayThresholdsSetExternalPolarityPinPos
 2838               	relayThresholdsSetExternalPolarityPinPos:
 2840               	.LM291:
 2841               	/* prologue: frame size=0 */
 2842 0e34 0F93      		push r16
 2843 0e36 1F93      		push r17
 2844               	/* prologue end (size=2) */
 2845 0e38 982F      		mov r25,r24
 2847               	.LM292:
 2848 0e3a 8150      		subi r24,lo8(-(-1))
 2849 0e3c 8830      		cpi r24,lo8(8)
 2850 0e3e 00F0      		brlo .L238
 2852               	.LM293:
 2853 0e40 892F      		mov r24,r25
 2854 0e42 9927      		clr r25
 2855 0e44 9F93      		push r25
 2856 0e46 8F93      		push r24
 2858               	.LM294:
 2859 0e48 80E0      		ldi r24,lo8(__c.3179)
 2860 0e4a 90E0      		ldi r25,hi8(__c.3179)
 2861 0e4c 9F93      		push r25
 2862 0e4e 8F93      		push r24
 2863 0e50 8EE7      		ldi r24,lo8(126)
 2864 0e52 90E0      		ldi r25,hi8(126)
 2865 0e54 9F93      		push r25
 2866 0e56 8F93      		push r24
 2867 0e58 80E0      		ldi r24,lo8(message)
 2868 0e5a 90E0      		ldi r25,hi8(message)
 2869 0e5c 9F93      		push r25
 2870 0e5e 8F93      		push r24
 2871 0e60 0E94 0000 		call snprintf_P
 2873               	.LM295:
 2874 0e64 04EB      		ldi r16,lo8(-1100)
 2875 0e66 1BEF      		ldi r17,hi8(-1100)
 2876 0e68 20E0      		ldi r18,lo8(0)
 2877 0e6a 30E0      		ldi r19,hi8(0)
 2878 0e6c 41E0      		ldi r20,lo8(1)
 2879 0e6e 6CE9      		ldi r22,lo8(-100)
 2880 0e70 7FEF      		ldi r23,hi8(-100)
 2881 0e72 80E0      		ldi r24,lo8(0)
 2882 0e74 0E94 0000 		call CommunicationError
 2883 0e78 81E0      		ldi r24,lo8(1)
 2884 0e7a 90E0      		ldi r25,hi8(1)
 2886               	.LM296:
 2887 0e7c 2DB7      		in r18,__SP_L__
 2888 0e7e 3EB7      		in r19,__SP_H__
 2889 0e80 285F      		subi r18,lo8(-(8))
 2890 0e82 3F4F      		sbci r19,hi8(-(8))
 2891 0e84 0FB6      		in __tmp_reg__,__SREG__
 2892 0e86 F894      		cli
 2893 0e88 3EBF      		out __SP_H__,r19
 2894 0e8a 0FBE      		out __SREG__,__tmp_reg__
 2895 0e8c 2DBF      		out __SP_L__,r18
 2896 0e8e 00C0      		rjmp .L240
 2897               	.L238:
 2899               	.LM297:
 2900 0e90 9093 0000 		sts relayThresholdsExternalPolarityPinPos,r25
 2902               	.LM298:
 2903 0e94 0E94 0000 		call relayThresholdInBoundPolarityInit
 2905               	.LM299:
 2906 0e98 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 2907 0e9c 8823      		tst r24
 2908 0e9e 01F4      		brne .L245
 2910               	.LM300:
 2911 0ea0 80E0      		ldi r24,lo8(0)
 2912 0ea2 90E0      		ldi r25,hi8(0)
 2913 0ea4 00C0      		rjmp .L240
 2914               	.L245:
 2915 0ea6 0E94 0000 		call relayThresholdsReportCurrentStatus
 2916 0eaa 80E0      		ldi r24,lo8(0)
 2917 0eac 90E0      		ldi r25,hi8(0)
 2918               	.L240:
 2919               	/* epilogue: frame size=0 */
 2920 0eae 1F91      		pop r17
 2921 0eb0 0F91      		pop r16
 2922 0eb2 0895      		ret
 2923               	/* epilogue end (size=3) */
 2924               	/* function relayThresholdsSetExternalPolarityPinPos size 64 (59) */
 2926               	.Lscope28:
 2929               	.global	relayThresholdsSetRelaySetValue
 2931               	relayThresholdsSetRelaySetValue:
 2933               	.LM301:
 2934               	/* prologue: frame size=0 */
 2935               	/* prologue end (size=0) */
 2936 0eb4 982F      		mov r25,r24
 2938               	.LM302:
 2939 0eb6 8111      		cpse r24,__zero_reg__
 2941               	.LM303:
 2942 0eb8 91E0      		ldi r25,lo8(1)
 2943               	.L247:
 2945               	.LM304:
 2946 0eba 8091 0000 		lds r24,relayThresholdRelaySetValue
 2947 0ebe 9817      		cp r25,r24
 2948 0ec0 01F0      		breq .L248
 2950               	.LM305:
 2951 0ec2 9093 0000 		sts relayThresholdRelaySetValue,r25
 2953               	.LM306:
 2954 0ec6 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 2955 0eca 8823      		tst r24
 2956 0ecc 01F0      		breq .L248
 2958               	.LM307:
 2959 0ece 0E94 0000 		call relayThresholdsReportCurrentStatus
 2960               	.L248:
 2962               	.LM308:
 2963 0ed2 80E0      		ldi r24,lo8(0)
 2964 0ed4 90E0      		ldi r25,hi8(0)
 2965               	/* epilogue: frame size=0 */
 2966 0ed6 0895      		ret
 2967               	/* epilogue end (size=1) */
 2968               	/* function relayThresholdsSetRelaySetValue size 19 (18) */
 2970               	.Lscope29:
 2973               	.global	relayThresholdsSetRelayValue
 2975               	relayThresholdsSetRelayValue:
 2977               	.LM309:
 2978               	/* prologue: frame size=0 */
 2979               	/* prologue end (size=0) */
 2980 0ed8 482F      		mov r20,r24
 2982               	.LM310:
 2983 0eda 8111      		cpse r24,__zero_reg__
 2985               	.LM311:
 2986 0edc 41E0      		ldi r20,lo8(1)
 2987               	.L253:
 2989               	.LM312:
 2990 0ede 8091 0000 		lds r24,relayThresholdRelayValue
 2991 0ee2 4817      		cp r20,r24
 2992 0ee4 01F0      		breq .L254
 2994               	.LM313:
 2995 0ee6 4130      		cpi r20,lo8(1)
 2996 0ee8 01F0      		breq .L261
 2998               	.LM314:
 2999 0eea 82B1      		in r24,34-0x20
 3000 0eec 9091 0000 		lds r25,relayThresholdOutputPin
 3001 0ef0 21E0      		ldi r18,lo8(1)
 3002 0ef2 30E0      		ldi r19,hi8(1)
 3003 0ef4 00C0      		rjmp 2f
 3004 0ef6 220F      	1:	lsl r18
 3005 0ef8 331F      		rol r19
 3006 0efa 9A95      	2:	dec r25
 3007 0efc 02F4      		brpl 1b
 3008 0efe 2095      		com r18
 3009 0f00 8223      		and r24,r18
 3010 0f02 82B9      		out 34-0x20,r24
 3011               	.L258:
 3013               	.LM315:
 3014 0f04 4093 0000 		sts relayThresholdRelayValue,r20
 3016               	.LM316:
 3017 0f08 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 3018 0f0c 8823      		tst r24
 3019 0f0e 01F0      		breq .L254
 3021               	.LM317:
 3022 0f10 0E94 0000 		call relayThresholdsReportCurrentStatus
 3023 0f14 00C0      		rjmp .L254
 3024               	.L261:
 3026               	.LM318:
 3027 0f16 82B1      		in r24,34-0x20
 3028 0f18 9091 0000 		lds r25,relayThresholdOutputPin
 3029 0f1c 21E0      		ldi r18,lo8(1)
 3030 0f1e 30E0      		ldi r19,hi8(1)
 3031 0f20 00C0      		rjmp 2f
 3032 0f22 220F      	1:	lsl r18
 3033 0f24 331F      		rol r19
 3034 0f26 9A95      	2:	dec r25
 3035 0f28 02F4      		brpl 1b
 3036 0f2a 822B      		or r24,r18
 3037 0f2c 82B9      		out 34-0x20,r24
 3038 0f2e 00C0      		rjmp .L258
 3039               	.L254:
 3041               	.LM319:
 3042 0f30 80E0      		ldi r24,lo8(0)
 3043 0f32 90E0      		ldi r25,hi8(0)
 3044               	/* epilogue: frame size=0 */
 3045 0f34 0895      		ret
 3046               	/* epilogue end (size=1) */
 3047               	/* function relayThresholdsSetRelayValue size 50 (49) */
 3049               	.Lscope30:
 3052               	.global	relayThresholdsSetInvertPolarityFlag
 3054               	relayThresholdsSetInvertPolarityFlag:
 3056               	.LM320:
 3057               	/* prologue: frame size=0 */
 3058               	/* prologue end (size=0) */
 3060               	.LM321:
 3061 0f36 8111      		cpse r24,__zero_reg__
 3063               	.LM322:
 3064 0f38 81E0      		ldi r24,lo8(1)
 3065               	.L263:
 3066 0f3a 8093 0000 		sts relayThresholdInvertPolarity_flag,r24
 3068               	.LM323:
 3069 0f3e 0E94 0000 		call relayThresholdInBoundPolarityInit
 3071               	.LM324:
 3072 0f42 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 3073 0f46 8823      		tst r24
 3074 0f48 01F0      		breq .L264
 3076               	.LM325:
 3077 0f4a 0E94 0000 		call relayThresholdsReportCurrentStatus
 3078               	.L264:
 3080               	.LM326:
 3081 0f4e 80E0      		ldi r24,lo8(0)
 3082 0f50 90E0      		ldi r25,hi8(0)
 3083               	/* epilogue: frame size=0 */
 3084 0f52 0895      		ret
 3085               	/* epilogue end (size=1) */
 3086               	/* function relayThresholdsSetInvertPolarityFlag size 16 (15) */
 3088               	.Lscope31:
 3091               	.global	relayThresholdsSetOutOfBoundsTransitLockFlag
 3093               	relayThresholdsSetOutOfBoundsTransitLockFlag:
 3095               	.LM327:
 3096               	/* prologue: frame size=0 */
 3097               	/* prologue end (size=0) */
 3099               	.LM328:
 3100 0f54 8111      		cpse r24,__zero_reg__
 3102               	.LM329:
 3103 0f56 81E0      		ldi r24,lo8(1)
 3104               	.L268:
 3105 0f58 8093 0000 		sts relayThresholdOutOfBoundsTransitLock_flag,r24
 3107               	.LM330:
 3108 0f5c 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 3109 0f60 8823      		tst r24
 3110 0f62 01F0      		breq .L269
 3112               	.LM331:
 3113 0f64 0E94 0000 		call relayThresholdsReportCurrentStatus
 3114               	.L269:
 3116               	.LM332:
 3117 0f68 80E0      		ldi r24,lo8(0)
 3118 0f6a 90E0      		ldi r25,hi8(0)
 3119               	/* epilogue: frame size=0 */
 3120 0f6c 0895      		ret
 3121               	/* epilogue end (size=1) */
 3122               	/* function relayThresholdsSetOutOfBoundsTransitLockFlag size 14 (13) */
 3124               	.Lscope32:
 3127               	.global	relayThresholdsSetReportCurrentStatusEnableFlag
 3129               	relayThresholdsSetReportCurrentStatusEnableFlag:
 3131               	.LM333:
 3132               	/* prologue: frame size=0 */
 3133               	/* prologue end (size=0) */
 3135               	.LM334:
 3136 0f6e 8111      		cpse r24,__zero_reg__
 3138               	.LM335:
 3139 0f70 81E0      		ldi r24,lo8(1)
 3140               	.L273:
 3141 0f72 8093 0000 		sts relayThresholdReportCurrentStatusEnable_flag,r24
 3143               	.LM336:
 3144 0f76 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 3145 0f7a 8823      		tst r24
 3146 0f7c 01F0      		breq .L274
 3148               	.LM337:
 3149 0f7e 0E94 0000 		call relayThresholdsReportCurrentStatus
 3150               	.L274:
 3152               	.LM338:
 3153 0f82 80E0      		ldi r24,lo8(0)
 3154 0f84 90E0      		ldi r25,hi8(0)
 3155               	/* epilogue: frame size=0 */
 3156 0f86 0895      		ret
 3157               	/* epilogue end (size=1) */
 3158               	/* function relayThresholdsSetReportCurrentStatusEnableFlag size 14 (13) */
 3160               	.Lscope33:
 3161               		.data
 3162               	.LC0:
 3163 0000 7265 6C61 		.string	"relay.c"
 3163      792E 6300 
 3164               		.text
 3166               	.global	relayThresholdInit
 3168               	relayThresholdInit:
 3170               	.LM339:
 3171               	/* prologue: frame size=0 */
 3172               	/* prologue end (size=0) */
 3174               	.LM340:
 3175 0f88 8091 0000 		lds r24,debug
 3176 0f8c 8230      		cpi r24,lo8(2)
 3177 0f8e 00F0      		brlo .L278
 3179               	.LM341:
 3180 0f90 8091 0000 		lds r24,debugMask
 3181 0f94 9091 0000 		lds r25,(debugMask)+1
 3182 0f98 A091 0000 		lds r26,(debugMask)+2
 3183 0f9c B091 0000 		lds r27,(debugMask)+3
 3184 0fa0 86FD      		sbrc r24,6
 3185 0fa2 00C0      		rjmp .L297
 3186               	.L278:
 3188               	.LM342:
 3189 0fa4 8091 0000 		lds r24,relayThresholds_valid
 3190 0fa8 8823      		tst r24
 3191 0faa 01F0      		breq .L281
 3192 0fac 8091 0000 		lds r24,relayThresholds_valid+1
 3193 0fb0 8823      		tst r24
 3194 0fb2 01F4      		brne .L298
 3195               	.L281:
 3197               	.LM343:
 3198 0fb4 80E0      		ldi r24,lo8(0)
 3199 0fb6 90E0      		ldi r25,hi8(0)
 3201               	.LM344:
 3202 0fb8 0895      		ret
 3203               	.L298:
 3205               	.LM345:
 3206 0fba 0E94 0000 		call relayThresholdsGetCurrentValue
 3207 0fbe 9B01      		movw r18,r22
 3208 0fc0 AC01      		movw r20,r24
 3210               	.LM346:
 3211 0fc2 CA01      		movw r24,r20
 3212 0fc4 AA27      		clr r26
 3213 0fc6 BB27      		clr r27
 3214 0fc8 0097      		sbiw r24,0
 3215 0fca A105      		cpc r26,__zero_reg__
 3216 0fcc B105      		cpc r27,__zero_reg__
 3217 0fce 01F4      		brne .L281
 3219               	.LM347:
 3220 0fd0 4070      		andi r20,hlo8(65535)
 3221 0fd2 5070      		andi r21,hhi8(65535)
 3223               	.LM348:
 3224 0fd4 8091 0000 		lds r24,relayThresholdLow
 3225 0fd8 9091 0000 		lds r25,(relayThresholdLow)+1
 3226 0fdc AA27      		clr r26
 3227 0fde BB27      		clr r27
 3228 0fe0 2817      		cp r18,r24
 3229 0fe2 3907      		cpc r19,r25
 3230 0fe4 4A07      		cpc r20,r26
 3231 0fe6 5B07      		cpc r21,r27
 3232 0fe8 00F0      		brlo .+2
 3233 0fea 00C0      		rjmp .L285
 3235               	.LM349:
 3236 0fec 81E0      		ldi r24,lo8(1)
 3237 0fee 8093 0000 		sts relayThresholdCurrentState,r24
 3239               	.LM350:
 3240 0ff2 8091 0000 		lds r24,relayThresholdsOutOfBoundsPolarity
 3241 0ff6 8093 0000 		sts relayThresholdRelaySetValue,r24
 3242               	.L287:
 3244               	.LM351:
 3245 0ffa 8091 0000 		lds r24,relayThresholdEnable_flag
 3246 0ffe 8823      		tst r24
 3247 1000 01F0      		breq .+2
 3248 1002 00C0      		rjmp .L299
 3249               	.L290:
 3251               	.LM352:
 3252 1004 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 3253 1008 8823      		tst r24
 3254 100a 01F0      		breq .L296
 3256               	.LM353:
 3257 100c 82B1      		in r24,34-0x20
 3258 100e 9091 0000 		lds r25,relayThresholdLedPin
 3259 1012 21E0      		ldi r18,lo8(1)
 3260 1014 30E0      		ldi r19,hi8(1)
 3261 1016 00C0      		rjmp 2f
 3262 1018 220F      	1:	lsl r18
 3263 101a 331F      		rol r19
 3264 101c 9A95      	2:	dec r25
 3265 101e 02F4      		brpl 1b
 3266 1020 822B      		or r24,r18
 3267 1022 82B9      		out 34-0x20,r24
 3269               	.LM354:
 3270 1024 0E94 0000 		call relayThresholdsReportCurrentStatus
 3271               	.L296:
 3272 1028 81E0      		ldi r24,lo8(1)
 3273 102a 90E0      		ldi r25,hi8(1)
 3274 102c 0895      		ret
 3275               	.L297:
 3277               	.LM355:
 3278 102e 80E0      		ldi r24,lo8(.LC0)
 3279 1030 90E0      		ldi r25,hi8(.LC0)
 3280 1032 9F93      		push r25
 3281 1034 8F93      		push r24
 3282 1036 88EA      		ldi r24,lo8(424)
 3283 1038 91E0      		ldi r25,hi8(424)
 3284 103a 9F93      		push r25
 3285 103c 8F93      		push r24
 3286 103e 80E0      		ldi r24,lo8(__c.2949)
 3287 1040 90E0      		ldi r25,hi8(__c.2949)
 3288 1042 9F93      		push r25
 3289 1044 8F93      		push r24
 3290 1046 8EE7      		ldi r24,lo8(126)
 3291 1048 90E0      		ldi r25,hi8(126)
 3292 104a 9F93      		push r25
 3293 104c 8F93      		push r24
 3294 104e 80E0      		ldi r24,lo8(uart_message_string)
 3295 1050 90E0      		ldi r25,hi8(uart_message_string)
 3296 1052 9F93      		push r25
 3297 1054 8F93      		push r24
 3298 1056 0E94 0000 		call snprintf_P
 3300               	.LM356:
 3301 105a 60E0      		ldi r22,lo8(0)
 3302 105c 70E0      		ldi r23,hi8(0)
 3303 105e 80E0      		ldi r24,lo8(0)
 3304 1060 90E0      		ldi r25,hi8(0)
 3305 1062 0E94 0000 		call UART0_Send_Message_String
 3306 1066 8DB7      		in r24,__SP_L__
 3307 1068 9EB7      		in r25,__SP_H__
 3308 106a 0A96      		adiw r24,10
 3309 106c 0FB6      		in __tmp_reg__,__SREG__
 3310 106e F894      		cli
 3311 1070 9EBF      		out __SP_H__,r25
 3312 1072 0FBE      		out __SREG__,__tmp_reg__
 3313 1074 8DBF      		out __SP_L__,r24
 3314 1076 00C0      		rjmp .L278
 3315               	.L285:
 3317               	.LM357:
 3318 1078 8091 0000 		lds r24,relayThresholdHigh
 3319 107c 9091 0000 		lds r25,(relayThresholdHigh)+1
 3320 1080 AA27      		clr r26
 3321 1082 BB27      		clr r27
 3322 1084 8217      		cp r24,r18
 3323 1086 9307      		cpc r25,r19
 3324 1088 A407      		cpc r26,r20
 3325 108a B507      		cpc r27,r21
 3326 108c 00F4      		brsh .L288
 3328               	.LM358:
 3329 108e 83E0      		ldi r24,lo8(3)
 3330 1090 8093 0000 		sts relayThresholdCurrentState,r24
 3332               	.LM359:
 3333 1094 8091 0000 		lds r24,relayThresholdsOutOfBoundsPolarity
 3334 1098 8093 0000 		sts relayThresholdRelaySetValue,r24
 3335 109c 00C0      		rjmp .L287
 3336               	.L299:
 3338               	.LM360:
 3339 109e 8091 0000 		lds r24,relayThresholdRelaySetValue
 3340 10a2 0E94 0000 		call relayThresholdsSetRelayValue
 3341 10a6 00C0      		rjmp .L290
 3342               	.L288:
 3344               	.LM361:
 3345 10a8 82E0      		ldi r24,lo8(2)
 3346 10aa 8093 0000 		sts relayThresholdCurrentState,r24
 3348               	.LM362:
 3349 10ae 8091 0000 		lds r24,relayThresholdsInBoundsPolarity
 3350 10b2 8093 0000 		sts relayThresholdRelaySetValue,r24
 3351 10b6 00C0      		rjmp .L287
 3352               	/* epilogue: frame size=0 */
 3353               	/* epilogue: noreturn */
 3354               	/* epilogue end (size=0) */
 3355               	/* function relayThresholdInit size 153 (153) */
 3360               	.Lscope34:
 3363               	.global	relayThreshold
 3365               	relayThreshold:
 3367               	.LM363:
 3368               	/* prologue: frame size=0 */
 3369 10b8 FF92      		push r15
 3370 10ba 0F93      		push r16
 3371 10bc 1F93      		push r17
 3372 10be CF93      		push r28
 3373 10c0 DF93      		push r29
 3374               	/* prologue end (size=5) */
 3375 10c2 EC01      		movw r28,r24
 3377               	.LM364:
 3378 10c4 8B8D      		ldd r24,Y+27
 3379 10c6 8823      		tst r24
 3380 10c8 01F4      		brne .L301
 3382               	.LM365:
 3383 10ca 00E0      		ldi r16,lo8(0)
 3384 10cc 10E0      		ldi r17,hi8(0)
 3385 10ce 71E0      		ldi r23,lo8(1)
 3386 10d0 F72E      		mov r15,r23
 3387               	.L303:
 3389               	.LM366:
 3390 10d2 FB8E      		std Y+27,r15
 3392               	.LM367:
 3393 10d4 B801      		movw r22,r16
 3394 10d6 CE01      		movw r24,r28
 3395 10d8 0E94 0000 		call relayThresholdMiscSubCommands
 3397               	.LM368:
 3398 10dc 1B8E      		std Y+27,__zero_reg__
 3399 10de 0F5F      		subi r16,lo8(-(1))
 3400 10e0 1F4F      		sbci r17,hi8(-(1))
 3402               	.LM369:
 3403 10e2 0531      		cpi r16,21
 3404 10e4 1105      		cpc r17,__zero_reg__
 3405 10e6 01F4      		brne .L303
 3406 10e8 00C0      		rjmp .L305
 3407               	.L301:
 3409               	.LM370:
 3410 10ea 6FEF      		ldi r22,lo8(-1)
 3411 10ec 7FEF      		ldi r23,hi8(-1)
 3412 10ee CE01      		movw r24,r28
 3413 10f0 0E94 0000 		call relayThresholdMiscSubCommands
 3414               	.L305:
 3415               	/* epilogue: frame size=0 */
 3416 10f4 DF91      		pop r29
 3417 10f6 CF91      		pop r28
 3418 10f8 1F91      		pop r17
 3419 10fa 0F91      		pop r16
 3420 10fc FF90      		pop r15
 3421 10fe 0895      		ret
 3422               	/* epilogue end (size=6) */
 3423               	/* function relayThreshold size 36 (25) */
 3425               	.Lscope35:
 3427               	.global	relayThresholdDetermineStateAndTriggerRelay
 3429               	relayThresholdDetermineStateAndTriggerRelay:
 3431               	.LM371:
 3432               	/* prologue: frame size=0 */
 3433 1100 CF92      		push r12
 3434 1102 DF92      		push r13
 3435 1104 EF92      		push r14
 3436 1106 FF92      		push r15
 3437 1108 0F93      		push r16
 3438 110a 1F93      		push r17
 3439               	/* prologue end (size=6) */
 3441               	.LM372:
 3442 110c 0E94 0000 		call relayThresholdsGetCurrentValue
 3443 1110 9B01      		movw r18,r22
 3444 1112 AC01      		movw r20,r24
 3446               	.LM373:
 3447 1114 CA01      		movw r24,r20
 3448 1116 AA27      		clr r26
 3449 1118 BB27      		clr r27
 3450 111a 0097      		sbiw r24,0
 3451 111c A105      		cpc r26,__zero_reg__
 3452 111e B105      		cpc r27,__zero_reg__
 3453 1120 01F0      		breq .+2
 3454 1122 00C0      		rjmp .L360
 3456               	.LM374:
 3457 1124 9FEF      		ldi r25,lo8(65535)
 3458 1126 E92E      		mov r14,r25
 3459 1128 9FEF      		ldi r25,hi8(65535)
 3460 112a F92E      		mov r15,r25
 3461 112c 012D      		mov r16,__zero_reg__
 3462 112e 112D      		mov r17,__zero_reg__
 3463 1130 E222      		and r14,r18
 3464 1132 F322      		and r15,r19
 3465 1134 0423      		and r16,r20
 3466 1136 1523      		and r17,r21
 3468               	.LM375:
 3469 1138 8091 0000 		lds r24,debug
 3470 113c 8230      		cpi r24,lo8(2)
 3471 113e 00F0      		brlo .L310
 3472 1140 8091 0000 		lds r24,debugMask
 3473 1144 9091 0000 		lds r25,(debugMask)+1
 3474 1148 A091 0000 		lds r26,(debugMask)+2
 3475 114c B091 0000 		lds r27,(debugMask)+3
 3476 1150 86FD      		sbrc r24,6
 3477 1152 00C0      		rjmp .L372
 3478               	.L310:
 3480               	.LM376:
 3481 1154 8091 0000 		lds r24,relayThresholdCurrentState
 3482 1158 8130      		cpi r24,lo8(1)
 3483 115a 01F0      		breq .L315
 3484               	.L376:
 3485 115c 8130      		cpi r24,lo8(1)
 3486 115e 00F4      		brsh .+2
 3487 1160 00C0      		rjmp .L314
 3488 1162 8230      		cpi r24,lo8(2)
 3489 1164 01F4      		brne .+2
 3490 1166 00C0      		rjmp .L316
 3491 1168 8330      		cpi r24,lo8(3)
 3492 116a 01F4      		brne .+2
 3493 116c 00C0      		rjmp .L373
 3495               	.LM377:
 3496 116e 84E0      		ldi r24,lo8(4)
 3497 1170 8093 0000 		sts relayThresholdCurrentState,r24
 3499               	.LM378:
 3500 1174 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 3501 1178 8823      		tst r24
 3502 117a 01F0      		breq .+2
 3503 117c 00C0      		rjmp .L324
 3504               	.L345:
 3505 117e DD24      		clr r13
 3506 1180 CC24      		clr r12
 3507 1182 00C0      		rjmp .L334
 3508               	.L315:
 3510               	.LM379:
 3511 1184 28EE      		ldi r18,lo8(1000)
 3512 1186 33E0      		ldi r19,hi8(1000)
 3513 1188 EAEF      		ldi r30,lo8(250)
 3514 118a F0E0      		ldi r31,hi8(250)
 3515               	.L339:
 3516               	.LBB34:
 3517               	.LBB35:
 3518               	.LBB36:
 3519               	.LBB37:
 3521               	.Ltext1:
   1:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** /* Copyright (c) 2002, Marek Michalkiewicz
   2:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****    Copyright (c) 2007 Joerg Wunsch
   3:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****    All rights reserved.
   4:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
   5:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****    Redistribution and use in source and binary forms, with or without
   6:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****    modification, are permitted provided that the following conditions are met:
   7:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
   8:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****    * Redistributions of source code must retain the above copyright
   9:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****      notice, this list of conditions and the following disclaimer.
  10:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  11:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****    * Redistributions in binary form must reproduce the above copyright
  12:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****      notice, this list of conditions and the following disclaimer in
  13:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****      the documentation and/or other materials provided with the
  14:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****      distribution.
  15:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  16:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****    * Neither the name of the copyright holders nor the names of
  17:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****      contributors may be used to endorse or promote products derived
  18:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****      from this software without specific prior written permission.
  19:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  20:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  21:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  24:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  25:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  26:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  27:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  28:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  29:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  30:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****   POSSIBILITY OF SUCH DAMAGE. */
  31:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  32:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** /* $Id: delay_basic.h,v 1.1 2007/05/13 21:23:20 joerg_wunsch Exp $ */
  33:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  34:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** #ifndef _UTIL_DELAY_BASIC_H_
  35:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** #define _UTIL_DELAY_BASIC_H_ 1
  36:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  37:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** #include <inttypes.h>
  38:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  39:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** /** \file */
  40:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** /** \defgroup util_delay_basic <util/delay_basic.h>: Basic busy-wait delay loops
  41:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     \code
  42:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     #include <util/delay_basic.h>
  43:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     \endcode
  44:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  45:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     The functions in this header file implement simple delay loops
  46:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     that perform a busy-waiting.  They are typically used to
  47:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     facilitate short delays in the program execution.  They are
  48:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     implemented as count-down loops with a well-known CPU cycle
  49:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     count per loop iteration.  As such, no other processing can
  50:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     occur simultaneously.  It should be kept in mind that the
  51:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     functions described here do not disable interrupts.
  52:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  53:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     In general, for long delays, the use of hardware timers is
  54:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     much preferrable, as they free the CPU, and allow for
  55:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     concurrent processing of other events while the timer is
  56:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     running.  However, in particular for very short delays, the
  57:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     overhead of setting up a hardware timer is too much compared
  58:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     to the overall delay time.
  59:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  60:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     Two inline functions are provided for the actual delay algorithms.
  61:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  62:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** */
  63:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  64:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** #if !defined(__DOXYGEN__)
  65:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));
  66:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline));
  67:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** #endif
  68:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  69:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** /** \ingroup util_delay_basic
  70:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  71:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     Delay loop using an 8-bit counter \c __count, so up to 256
  72:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     iterations are possible.  (The value 256 would have to be passed
  73:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     as 0.)  The loop executes three CPU cycles per iteration, not
  74:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     including the overhead the compiler needs to setup the counter
  75:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     register.
  76:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  77:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds
  78:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     can be achieved.
  79:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** */
  80:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** void
  81:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** _delay_loop_1(uint8_t __count)
  82:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** {
  83:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 	__asm__ volatile (
  84:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 		"1: dec %0" "\n\t"
  85:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 		"brne 1b"
  86:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 		: "=r" (__count)
  87:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 		: "0" (__count)
  88:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 	);
  89:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** }
  90:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  91:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** /** \ingroup util_delay_basic
  92:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  93:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     Delay loop using a 16-bit counter \c __count, so up to 65536
  94:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     iterations are possible.  (The value 65536 would have to be
  95:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     passed as 0.)  The loop executes four CPU cycles per iteration,
  96:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     not including the overhead the compiler requires to setup the
  97:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     counter register pair.
  98:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 
  99:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     Thus, at a CPU speed of 1 MHz, delays of up to about 262.1
 100:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****     milliseconds can be achieved.
 101:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h ****  */
 102:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** void
 103:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** _delay_loop_2(uint16_t __count)
 104:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** {
 105:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay_basic.h **** 	__asm__ volatile (
 3523               	.LM380:
 3524 118c CF01      		movw r24,r30
 3525               	/* #APP */
 3526 118e 0197      		1: sbiw r24,1
 3527 1190 01F4      		brne 1b
 3528               	/* #NOAPP */
 3529               	.LBE37:
 3530               	.LBE36:
 3532               	.Ltext2:
   1:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** /* Copyright (c) 2002, Marek Michalkiewicz
   2:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    Copyright (c) 2004,2005,2007 Joerg Wunsch
   3:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    Copyright (c) 2007  Florin-Viorel Petrov
   4:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    All rights reserved.
   5:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
   6:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    Redistribution and use in source and binary forms, with or without
   7:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    modification, are permitted provided that the following conditions are met:
   8:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
   9:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    * Redistributions of source code must retain the above copyright
  10:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****      notice, this list of conditions and the following disclaimer.
  11:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  12:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    * Redistributions in binary form must reproduce the above copyright
  13:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****      notice, this list of conditions and the following disclaimer in
  14:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****      the documentation and/or other materials provided with the
  15:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****      distribution.
  16:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  17:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    * Neither the name of the copyright holders nor the names of
  18:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****      contributors may be used to endorse or promote products derived
  19:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****      from this software without specific prior written permission.
  20:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  21:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  22:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  25:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  26:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  27:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  28:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  29:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  30:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  31:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****   POSSIBILITY OF SUCH DAMAGE. */
  32:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  33:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** /* $Id: delay.h,v 1.5 2007/10/28 23:25:56 joerg_wunsch Exp $ */
  34:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  35:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** #ifndef _UTIL_DELAY_H_
  36:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** #define _UTIL_DELAY_H_ 1
  37:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  38:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** #include <inttypes.h>
  39:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** #include <util/delay_basic.h>
  40:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  41:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** /** \file */
  42:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** /** \defgroup util_delay <util/delay.h>: Convenience functions for busy-wait delay loops
  43:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     \code
  44:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     #define F_CPU 1000000UL  // 1 MHz
  45:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     //#define F_CPU 14.7456E6
  46:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     #include <util/delay.h>
  47:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     \endcode
  48:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  49:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     \note As an alternative method, it is possible to pass the
  50:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     F_CPU macro down to the compiler from the Makefile.
  51:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     Obviously, in that case, no \c \#define statement should be
  52:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     used.
  53:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  54:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     The functions in this header file are wrappers around the basic
  55:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     busy-wait functions from <util/delay_basic.h>.  They are meant as
  56:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     convenience functions where actual time values can be specified
  57:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     rather than a number of cycles to wait for.  The idea behind is
  58:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     that compile-time constant expressions will be eliminated by
  59:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     compiler optimization so floating-point expressions can be used
  60:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     to calculate the number of delay cycles needed based on the CPU
  61:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     frequency passed by the macro F_CPU.
  62:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  63:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     \note In order for these functions to work as intended, compiler
  64:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     optimizations <em>must</em> be enabled, and the delay time
  65:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     <em>must</em> be an expression that is a known constant at
  66:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     compile-time.  If these requirements are not met, the resulting
  67:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     delay will be much longer (and basically unpredictable), and
  68:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     applications that otherwise do not use floating-point calculations
  69:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     will experience severe code bloat by the floating-point library
  70:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     routines linked into the application.
  71:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  72:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     The functions available allow the specification of microsecond, and
  73:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     millisecond delays directly, using the application-supplied macro
  74:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****     F_CPU as the CPU clock frequency (in Hertz).
  75:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  76:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** */
  77:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  78:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** #if !defined(__DOXYGEN__)
  79:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** static inline void _delay_us(double __us) __attribute__((always_inline));
  80:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** static inline void _delay_ms(double __ms) __attribute__((always_inline));
  81:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** #endif
  82:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  83:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** #ifndef F_CPU
  84:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** /* prevent compiler error by supplying a default */
  85:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** # warning "F_CPU not defined for <util/delay.h>"
  86:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** # define F_CPU 1000000UL
  87:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** #endif
  88:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  89:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** #ifndef __OPTIMIZE__
  90:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** # warning "Compiler optimizations disabled; functions from <util/delay.h> won't work as designed"
  91:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** #endif
  92:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  93:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** /**
  94:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    \ingroup util_delay
  95:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  96:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    Perform a delay of \c __us microseconds, using _delay_loop_1().
  97:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
  98:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    The macro F_CPU is supposed to be defined to a
  99:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    constant defining the CPU clock frequency (in Hertz).
 100:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
 101:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    The maximal possible delay is 768 us / F_CPU in MHz.
 102:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
 103:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    If the user requests a delay greater than the maximal possible one,
 104:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    _delay_us() will automatically call _delay_ms() instead.  The user
 105:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    will not be informed about this case.
 106:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****  */
 107:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** void
 108:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** _delay_us(double __us)
 109:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** {
 110:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 	uint8_t __ticks;
 111:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 	double __tmp = ((F_CPU) / 3e6) * __us;
 112:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 	if (__tmp < 1.0)
 113:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 		__ticks = 1;
 114:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 	else if (__tmp > 255)
 115:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 	{
 116:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 		_delay_ms(__us / 1000.0);
 117:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 		return;
 118:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 	}
 119:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 	else
 120:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 		__ticks = (uint8_t)__tmp;
 121:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 	_delay_loop_1(__ticks);
 122:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** }
 123:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
 124:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
 125:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** /**
 126:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    \ingroup util_delay
 127:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
 128:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    Perform a delay of \c __ms milliseconds, using _delay_loop_2().
 129:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
 130:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    The macro F_CPU is supposed to be defined to a
 131:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    constant defining the CPU clock frequency (in Hertz).
 132:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
 133:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    The maximal possible delay is 262.14 ms / F_CPU in MHz.
 134:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 
 135:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    When the user request delay which exceed the maximum possible one,
 136:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    _delay_ms() provides a decreased resolution functionality. In this
 137:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    mode _delay_ms() will work with a resolution of 1/10 ms, providing
 138:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    delays up to 6.5535 seconds (independent from CPU frequency).  The
 139:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****    user will not be informed about decreased resolution.
 140:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h ****  */
 141:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** void
 142:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** _delay_ms(double __ms)
 143:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** {
 144:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 	uint16_t __ticks;
 145:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 	double __tmp = ((F_CPU) / 4e3) * __ms;
 146:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 	if (__tmp < 1.0)
 147:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 		__ticks = 1;
 148:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 	else if (__tmp > 65535)
 149:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 	{
 150:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 		//	__ticks = requested delay in 1/10 ms
 151:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 		__ticks = (uint16_t) (__ms * 10.0);
 152:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 		while(__ticks)
 153:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 		{
 154:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 			// wait 1/10 ms
 155:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 			_delay_loop_2(((F_CPU) / 4e3) / 10);
 156:/opt/cross/lib/gcc/avr/4.1.2/../../../../avr/include/util/delay.h **** 			__ticks --;
 3534               	.LM381:
 3535 1192 2150      		subi r18,lo8(-(-1))
 3536 1194 3040      		sbci r19,hi8(-(-1))
 3538               	.LM382:
 3539 1196 01F4      		brne .L339
 3540 1198 28EE      		ldi r18,lo8(1000)
 3541 119a 33E0      		ldi r19,hi8(1000)
 3542 119c EAEF      		ldi r30,lo8(250)
 3543 119e F0E0      		ldi r31,hi8(250)
 3544               	.L341:
 3545               	.LBE35:
 3546               	.LBE34:
 3547               	.LBB38:
 3548               	.LBB39:
 3549               	.LBB40:
 3550               	.LBB41:
 3552               	.Ltext3:
 3554               	.LM383:
 3555 11a0 CF01      		movw r24,r30
 3556               	/* #APP */
 3557 11a2 0197      		1: sbiw r24,1
 3558 11a4 01F4      		brne 1b
 3559               	/* #NOAPP */
 3560               	.LBE41:
 3561               	.LBE40:
 3563               	.Ltext4:
 3565               	.LM384:
 3566 11a6 2150      		subi r18,lo8(-(-1))
 3567 11a8 3040      		sbci r19,hi8(-(-1))
 3569               	.LM385:
 3570 11aa 01F4      		brne .L341
 3571               	.LBE39:
 3572               	.LBE38:
 3574               	.Ltext5:
 3576               	.LM386:
 3577 11ac 2091 0000 		lds r18,relayThresholdLedPin
 3578 11b0 81E0      		ldi r24,lo8(1)
 3579 11b2 90E0      		ldi r25,hi8(1)
 3580 11b4 00C0      		rjmp 2f
 3581 11b6 880F      	1:	lsl r24
 3582 11b8 991F      		rol r25
 3583 11ba 2A95      	2:	dec r18
 3584 11bc 02F4      		brpl 1b
 3585 11be 80B9      		out 32-0x20,r24
 3587               	.LM387:
 3588 11c0 8091 0000 		lds r24,relayThresholdHigh
 3589 11c4 9091 0000 		lds r25,(relayThresholdHigh)+1
 3590 11c8 AA27      		clr r26
 3591 11ca BB27      		clr r27
 3592 11cc 8E15      		cp r24,r14
 3593 11ce 9F05      		cpc r25,r15
 3594 11d0 A007      		cpc r26,r16
 3595 11d2 B107      		cpc r27,r17
 3596 11d4 00F0      		brlo .+2
 3597 11d6 00C0      		rjmp .L343
 3599               	.LM388:
 3600 11d8 8091 0000 		lds r24,relayThresholdsOutOfBoundsPolarity
 3601 11dc 8093 0000 		sts relayThresholdRelaySetValue,r24
 3603               	.LM389:
 3604 11e0 83E0      		ldi r24,lo8(3)
 3605 11e2 8093 0000 		sts relayThresholdCurrentState,r24
 3607               	.LM390:
 3608 11e6 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 3609 11ea 8823      		tst r24
 3610 11ec 01F4      		brne .+2
 3611 11ee 00C0      		rjmp .L345
 3612               	.L324:
 3614               	.LM391:
 3615 11f0 E1E0      		ldi r30,lo8(1)
 3616 11f2 DE2E      		mov r13,r30
 3617               	.L371:
 3618 11f4 CC24      		clr r12
 3619               	.L334:
 3621               	.LM392:
 3622 11f6 8091 0000 		lds r24,relayThresholdEnable_flag
 3623 11fa 8823      		tst r24
 3624 11fc 01F0      		breq .L354
 3626               	.LM393:
 3627 11fe 9091 0000 		lds r25,relayThresholdRelaySetValue
 3628 1202 8091 0000 		lds r24,relayThresholdRelayValue
 3629 1206 9817      		cp r25,r24
 3630 1208 01F0      		breq .L356
 3632               	.LM394:
 3633 120a 8091 0000 		lds r24,relayThresholdRelaySetValue
 3634 120e 0E94 0000 		call relayThresholdsSetRelayValue
 3635               	.L356:
 3637               	.LM395:
 3638 1212 CC20      		tst r12
 3639 1214 01F0      		breq .+2
 3640 1216 00C0      		rjmp .L374
 3641               	.L354:
 3643               	.LM396:
 3644 1218 DD20      		tst r13
 3645 121a 01F4      		brne .+2
 3646 121c 00C0      		rjmp .L360
 3648               	.LM397:
 3649 121e 0E94 0000 		call relayThresholdsReportCurrentStatus
 3650 1222 00C0      		rjmp .L360
 3651               	.L314:
 3653               	.LM398:
 3654 1224 8091 0000 		lds r24,relayThresholdHigh
 3655 1228 9091 0000 		lds r25,(relayThresholdHigh)+1
 3656 122c AA27      		clr r26
 3657 122e BB27      		clr r27
 3658 1230 8E15      		cp r24,r14
 3659 1232 9F05      		cpc r25,r15
 3660 1234 A007      		cpc r26,r16
 3661 1236 B107      		cpc r27,r17
 3662 1238 00F4      		brsh .+2
 3663 123a 00C0      		rjmp .L375
 3664               	.L318:
 3666               	.LM399:
 3667 123c DD24      		clr r13
 3668               	.L321:
 3670               	.LM400:
 3671 123e 8091 0000 		lds r24,relayThresholdLow
 3672 1242 9091 0000 		lds r25,(relayThresholdLow)+1
 3673 1246 AA27      		clr r26
 3674 1248 BB27      		clr r27
 3675 124a E816      		cp r14,r24
 3676 124c F906      		cpc r15,r25
 3677 124e 0A07      		cpc r16,r26
 3678 1250 1B07      		cpc r17,r27
 3679 1252 00F0      		brlo .+2
 3680 1254 00C0      		rjmp .L322
 3682               	.LM401:
 3683 1256 8091 0000 		lds r24,relayThresholdsOutOfBoundsPolarity
 3684 125a 8093 0000 		sts relayThresholdRelaySetValue,r24
 3686               	.LM402:
 3687 125e 81E0      		ldi r24,lo8(1)
 3688 1260 8093 0000 		sts relayThresholdCurrentState,r24
 3690               	.LM403:
 3691 1264 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 3692 1268 8823      		tst r24
 3693 126a 01F4      		brne .L324
 3694 126c 00C0      		rjmp .L371
 3695               	.L372:
 3697               	.LM404:
 3698 126e 80E0      		ldi r24,lo8(.LC0)
 3699 1270 90E0      		ldi r25,hi8(.LC0)
 3700 1272 9F93      		push r25
 3701 1274 8F93      		push r24
 3702 1276 8AEF      		ldi r24,lo8(506)
 3703 1278 91E0      		ldi r25,hi8(506)
 3704 127a 9F93      		push r25
 3705 127c 8F93      		push r24
 3706 127e 80E0      		ldi r24,lo8(__c.2989)
 3707 1280 90E0      		ldi r25,hi8(__c.2989)
 3708 1282 9F93      		push r25
 3709 1284 8F93      		push r24
 3710 1286 8EE7      		ldi r24,lo8(126)
 3711 1288 90E0      		ldi r25,hi8(126)
 3712 128a 9F93      		push r25
 3713 128c 8F93      		push r24
 3714 128e 80E0      		ldi r24,lo8(uart_message_string)
 3715 1290 90E0      		ldi r25,hi8(uart_message_string)
 3716 1292 9F93      		push r25
 3717 1294 8F93      		push r24
 3718 1296 0E94 0000 		call snprintf_P
 3720               	.LM405:
 3721 129a 60E0      		ldi r22,lo8(0)
 3722 129c 70E0      		ldi r23,hi8(0)
 3723 129e 80E0      		ldi r24,lo8(0)
 3724 12a0 90E0      		ldi r25,hi8(0)
 3725 12a2 0E94 0000 		call UART0_Send_Message_String
 3726 12a6 8DB7      		in r24,__SP_L__
 3727 12a8 9EB7      		in r25,__SP_H__
 3728 12aa 0A96      		adiw r24,10
 3729 12ac 0FB6      		in __tmp_reg__,__SREG__
 3730 12ae F894      		cli
 3731 12b0 9EBF      		out __SP_H__,r25
 3732 12b2 0FBE      		out __SREG__,__tmp_reg__
 3733 12b4 8DBF      		out __SP_L__,r24
 3735               	.LM406:
 3736 12b6 8091 0000 		lds r24,relayThresholdCurrentState
 3737 12ba 8130      		cpi r24,lo8(1)
 3738 12bc 01F0      		breq .+2
 3739 12be 00C0      		rjmp .L376
 3740 12c0 00C0      		rjmp .L315
 3741               	.L375:
 3743               	.LM407:
 3744 12c2 8091 0000 		lds r24,relayThresholdsOutOfBoundsPolarity
 3745 12c6 8093 0000 		sts relayThresholdRelaySetValue,r24
 3747               	.LM408:
 3748 12ca 83E0      		ldi r24,lo8(3)
 3749 12cc 8093 0000 		sts relayThresholdCurrentState,r24
 3751               	.LM409:
 3752 12d0 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 3753 12d4 8823      		tst r24
 3754 12d6 01F4      		brne .+2
 3755 12d8 00C0      		rjmp .L318
 3756 12da 81E0      		ldi r24,lo8(1)
 3757 12dc D82E      		mov r13,r24
 3758 12de 00C0      		rjmp .L321
 3759               	.L316:
 3761               	.LM410:
 3762 12e0 8091 0000 		lds r24,relayThresholdHigh
 3763 12e4 9091 0000 		lds r25,(relayThresholdHigh)+1
 3764 12e8 AA27      		clr r26
 3765 12ea BB27      		clr r27
 3766 12ec 8E15      		cp r24,r14
 3767 12ee 9F05      		cpc r25,r15
 3768 12f0 A007      		cpc r26,r16
 3769 12f2 B107      		cpc r27,r17
 3770 12f4 00F4      		brsh .+2
 3771 12f6 00C0      		rjmp .L328
 3772 12f8 DD24      		clr r13
 3773 12fa CC24      		clr r12
 3774               	.L330:
 3776               	.LM411:
 3777 12fc 8091 0000 		lds r24,relayThresholdLow
 3778 1300 9091 0000 		lds r25,(relayThresholdLow)+1
 3779 1304 AA27      		clr r26
 3780 1306 BB27      		clr r27
 3781 1308 E816      		cp r14,r24
 3782 130a F906      		cpc r15,r25
 3783 130c 0A07      		cpc r16,r26
 3784 130e 1B07      		cpc r17,r27
 3785 1310 00F0      		brlo .+2
 3786 1312 00C0      		rjmp .L334
 3788               	.LM412:
 3789 1314 8091 0000 		lds r24,relayThresholdsOutOfBoundsPolarity
 3790 1318 8093 0000 		sts relayThresholdRelaySetValue,r24
 3792               	.LM413:
 3793 131c 81E0      		ldi r24,lo8(1)
 3794 131e 8093 0000 		sts relayThresholdCurrentState,r24
 3796               	.LM414:
 3797 1322 8091 0000 		lds r24,relayThresholdOutOfBoundsTransitLock_flag
 3798 1326 8823      		tst r24
 3799 1328 01F0      		breq .L336
 3800 132a A1E0      		ldi r26,lo8(1)
 3801 132c CA2E      		mov r12,r26
 3802               	.L336:
 3804               	.LM415:
 3805 132e 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 3806 1332 8823      		tst r24
 3807 1334 01F4      		brne .+2
 3808 1336 00C0      		rjmp .L334
 3809 1338 F1E0      		ldi r31,lo8(1)
 3810 133a DF2E      		mov r13,r31
 3811 133c 00C0      		rjmp .L334
 3812               	.L322:
 3814               	.LM416:
 3815 133e 8091 0000 		lds r24,relayThresholdLow
 3816 1342 9091 0000 		lds r25,(relayThresholdLow)+1
 3817 1346 0296      		adiw r24,2
 3818 1348 AA27      		clr r26
 3819 134a BB27      		clr r27
 3820 134c 8E15      		cp r24,r14
 3821 134e 9F05      		cpc r25,r15
 3822 1350 A007      		cpc r26,r16
 3823 1352 B107      		cpc r27,r17
 3824 1354 00F0      		brlo .+2
 3825 1356 00C0      		rjmp .L371
 3826 1358 8091 0000 		lds r24,relayThresholdHigh
 3827 135c 9091 0000 		lds r25,(relayThresholdHigh)+1
 3828 1360 0297      		sbiw r24,2
 3829 1362 AA27      		clr r26
 3830 1364 BB27      		clr r27
 3831 1366 E816      		cp r14,r24
 3832 1368 F906      		cpc r15,r25
 3833 136a 0A07      		cpc r16,r26
 3834 136c 1B07      		cpc r17,r27
 3835 136e 00F0      		brlo .+2
 3836 1370 00C0      		rjmp .L371
 3838               	.LM417:
 3839 1372 8091 0000 		lds r24,relayThresholdsInBoundsPolarity
 3840 1376 8093 0000 		sts relayThresholdRelaySetValue,r24
 3842               	.LM418:
 3843 137a 82E0      		ldi r24,lo8(2)
 3844 137c 8093 0000 		sts relayThresholdCurrentState,r24
 3846               	.LM419:
 3847 1380 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 3848 1384 8823      		tst r24
 3849 1386 01F0      		breq .+2
 3850 1388 00C0      		rjmp .L324
 3851 138a 00C0      		rjmp .L371
 3852               	.L374:
 3854               	.LM420:
 3855 138c 80E0      		ldi r24,lo8(0)
 3856 138e 0E94 0000 		call relayThresholdsSetEnableFlag
 3857 1392 00C0      		rjmp .L354
 3858               	.L343:
 3860               	.LM421:
 3861 1394 8091 0000 		lds r24,relayThresholdLow
 3862 1398 9091 0000 		lds r25,(relayThresholdLow)+1
 3863 139c 0296      		adiw r24,2
 3864 139e AA27      		clr r26
 3865 13a0 BB27      		clr r27
 3866 13a2 8E15      		cp r24,r14
 3867 13a4 9F05      		cpc r25,r15
 3868 13a6 A007      		cpc r26,r16
 3869 13a8 B107      		cpc r27,r17
 3870 13aa 00F0      		brlo .+2
 3871 13ac 00C0      		rjmp .L345
 3872               	.L370:
 3874               	.LM422:
 3875 13ae 8091 0000 		lds r24,relayThresholdsInBoundsPolarity
 3876 13b2 8093 0000 		sts relayThresholdRelaySetValue,r24
 3878               	.LM423:
 3879 13b6 82E0      		ldi r24,lo8(2)
 3880 13b8 8093 0000 		sts relayThresholdCurrentState,r24
 3882               	.LM424:
 3883 13bc 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 3884 13c0 8823      		tst r24
 3885 13c2 01F0      		breq .+2
 3886 13c4 00C0      		rjmp .L324
 3887 13c6 00C0      		rjmp .L345
 3888               	.L373:
 3890               	.LM425:
 3891 13c8 28EE      		ldi r18,lo8(1000)
 3892 13ca 33E0      		ldi r19,hi8(1000)
 3893 13cc EAEF      		ldi r30,lo8(250)
 3894 13ce F0E0      		ldi r31,hi8(250)
 3895               	.L347:
 3896               	.LBB42:
 3897               	.LBB43:
 3898               	.LBB44:
 3899               	.LBB45:
 3901               	.Ltext6:
 3903               	.LM426:
 3904 13d0 CF01      		movw r24,r30
 3905               	/* #APP */
 3906 13d2 0197      		1: sbiw r24,1
 3907 13d4 01F4      		brne 1b
 3908               	/* #NOAPP */
 3909               	.LBE45:
 3910               	.LBE44:
 3912               	.Ltext7:
 3914               	.LM427:
 3915 13d6 2150      		subi r18,lo8(-(-1))
 3916 13d8 3040      		sbci r19,hi8(-(-1))
 3918               	.LM428:
 3919 13da 01F4      		brne .L347
 3920 13dc 28EE      		ldi r18,lo8(1000)
 3921 13de 33E0      		ldi r19,hi8(1000)
 3922 13e0 EAEF      		ldi r30,lo8(250)
 3923 13e2 F0E0      		ldi r31,hi8(250)
 3924               	.L349:
 3925               	.LBE43:
 3926               	.LBE42:
 3927               	.LBB46:
 3928               	.LBB47:
 3929               	.LBB48:
 3930               	.LBB49:
 3932               	.Ltext8:
 3934               	.LM429:
 3935 13e4 CF01      		movw r24,r30
 3936               	/* #APP */
 3937 13e6 0197      		1: sbiw r24,1
 3938 13e8 01F4      		brne 1b
 3939               	/* #NOAPP */
 3940               	.LBE49:
 3941               	.LBE48:
 3943               	.Ltext9:
 3945               	.LM430:
 3946 13ea 2150      		subi r18,lo8(-(-1))
 3947 13ec 3040      		sbci r19,hi8(-(-1))
 3949               	.LM431:
 3950 13ee 01F4      		brne .L349
 3951               	.LBE47:
 3952               	.LBE46:
 3954               	.Ltext10:
 3956               	.LM432:
 3957 13f0 2091 0000 		lds r18,relayThresholdLedPin
 3958 13f4 81E0      		ldi r24,lo8(1)
 3959 13f6 90E0      		ldi r25,hi8(1)
 3960 13f8 00C0      		rjmp 2f
 3961 13fa 880F      	1:	lsl r24
 3962 13fc 991F      		rol r25
 3963 13fe 2A95      	2:	dec r18
 3964 1400 02F4      		brpl 1b
 3965 1402 80B9      		out 32-0x20,r24
 3967               	.LM433:
 3968 1404 8091 0000 		lds r24,relayThresholdLow
 3969 1408 9091 0000 		lds r25,(relayThresholdLow)+1
 3970 140c AA27      		clr r26
 3971 140e BB27      		clr r27
 3972 1410 E816      		cp r14,r24
 3973 1412 F906      		cpc r15,r25
 3974 1414 0A07      		cpc r16,r26
 3975 1416 1B07      		cpc r17,r27
 3976 1418 00F0      		brlo .L377
 3978               	.LM434:
 3979 141a 8091 0000 		lds r24,relayThresholdHigh
 3980 141e 9091 0000 		lds r25,(relayThresholdHigh)+1
 3981 1422 0297      		sbiw r24,2
 3982 1424 AA27      		clr r26
 3983 1426 BB27      		clr r27
 3984 1428 E816      		cp r14,r24
 3985 142a F906      		cpc r15,r25
 3986 142c 0A07      		cpc r16,r26
 3987 142e 1B07      		cpc r17,r27
 3988 1430 00F0      		brlo .+2
 3989 1432 00C0      		rjmp .L345
 3990 1434 00C0      		rjmp .L370
 3991               	.L328:
 3993               	.LM435:
 3994 1436 8091 0000 		lds r24,relayThresholdsOutOfBoundsPolarity
 3995 143a 8093 0000 		sts relayThresholdRelaySetValue,r24
 3997               	.LM436:
 3998 143e 83E0      		ldi r24,lo8(3)
 3999 1440 8093 0000 		sts relayThresholdCurrentState,r24
 4001               	.LM437:
 4002 1444 8091 0000 		lds r24,relayThresholdOutOfBoundsTransitLock_flag
 4003 1448 8111      		cpse r24,__zero_reg__
 4004 144a 81E0      		ldi r24,lo8(1)
 4005               	.L331:
 4006 144c C82E      		mov r12,r24
 4008               	.LM438:
 4009 144e 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 4010 1452 8823      		tst r24
 4011 1454 01F0      		breq .L332
 4012 1456 B1E0      		ldi r27,lo8(1)
 4013 1458 DB2E      		mov r13,r27
 4014 145a 00C0      		rjmp .L330
 4015               	.L377:
 4017               	.LM439:
 4018 145c 8091 0000 		lds r24,relayThresholdsOutOfBoundsPolarity
 4019 1460 8093 0000 		sts relayThresholdRelaySetValue,r24
 4021               	.LM440:
 4022 1464 81E0      		ldi r24,lo8(1)
 4023 1466 8093 0000 		sts relayThresholdCurrentState,r24
 4025               	.LM441:
 4026 146a 8091 0000 		lds r24,relayThresholdReportCurrentStatusEnable_flag
 4027 146e 8823      		tst r24
 4028 1470 01F0      		breq .+2
 4029 1472 00C0      		rjmp .L324
 4030 1474 00C0      		rjmp .L345
 4031               	.L332:
 4033               	.LM442:
 4034 1476 DD24      		clr r13
 4035 1478 00C0      		rjmp .L330
 4036               	.L360:
 4037               	/* epilogue: frame size=0 */
 4038 147a 1F91      		pop r17
 4039 147c 0F91      		pop r16
 4040 147e FF90      		pop r15
 4041 1480 EF90      		pop r14
 4042 1482 DF90      		pop r13
 4043 1484 CF90      		pop r12
 4044 1486 0895      		ret
 4045               	/* epilogue end (size=7) */
 4046               	/* function relayThresholdDetermineStateAndTriggerRelay size 471 (458) */
 4077               	.Lscope36:
 4078               	.global	relayThresholdCommandKeywords
 4079               		.section	.progmem.data,"a",@progbits
 4082               	relayThresholdCommandKeywords:
 4083 0000 0000      		.word	relayThresholdCommandKeyword00
 4084 0002 0000      		.word	relayThresholdCommandKeyword01
 4085 0004 0000      		.word	relayThresholdCommandKeyword02
 4086 0006 0000      		.word	relayThresholdCommandKeyword03
 4087 0008 0000      		.word	relayThresholdCommandKeyword04
 4088 000a 0000      		.word	relayThresholdCommandKeyword05
 4089 000c 0000      		.word	relayThresholdCommandKeyword06
 4090 000e 0000      		.word	relayThresholdCommandKeyword07
 4091 0010 0000      		.word	relayThresholdCommandKeyword08
 4092 0012 0000      		.word	relayThresholdCommandKeyword09
 4093 0014 0000      		.word	relayThresholdCommandKeyword10
 4094 0016 0000      		.word	relayThresholdCommandKeyword11
 4095 0018 0000      		.word	relayThresholdCommandKeyword12
 4096 001a 0000      		.word	relayThresholdCommandKeyword13
 4097 001c 0000      		.word	relayThresholdCommandKeyword14
 4098 001e 0000      		.word	relayThresholdCommandKeyword15
 4099 0020 0000      		.word	relayThresholdCommandKeyword16
 4100 0022 0000      		.word	relayThresholdCommandKeyword17
 4101 0024 0000      		.word	relayThresholdCommandKeyword18
 4102 0026 0000      		.word	relayThresholdCommandKeyword19
 4103 0028 0000      		.word	relayThresholdCommandKeyword20
 4104               	.global	relayThresholdStateStrings
 4107               	relayThresholdStateStrings:
 4108 002a 0000      		.word	relayThresholdStateString00
 4109 002c 0000      		.word	relayThresholdStateString01
 4110 002e 0000      		.word	relayThresholdStateString02
 4111 0030 0000      		.word	relayThresholdStateString03
 4112 0032 0000      		.word	relayThresholdStateString04
 4115               	__c.3286:
 4116 0034 6572 726F 		.string	"error accessing ADCs"
 4116      7220 6163 
 4116      6365 7373 
 4116      696E 6720 
 4116      4144 4373 
 4119               	__c.3284:
 4120 0049 6572 726F 		.string	"error accessing ADC channel %i"
 4120      7220 6163 
 4120      6365 7373 
 4120      696E 6720 
 4120      4144 4320 
 4123               	__c.3282:
 4124 0068 6572 726F 		.string	"error accessing ADC wrong channel: %i"
 4124      7220 6163 
 4124      6365 7373 
 4124      696E 6720 
 4124      4144 4320 
 4127               	__c.3189:
 4128 008e 7661 6C75 		.string	"value out of bounds [A,F]"
 4128      6520 6F75 
 4128      7420 6F66 
 4128      2062 6F75 
 4128      6E64 7320 
 4131               	__c.3179:
 4132 00a8 7661 6C75 		.string	"value out of bounds [1,8]"
 4132      6520 6F75 
 4132      7420 6F66 
 4132      2062 6F75 
 4132      6E64 7320 
 4135               	__c.3172:
 4136 00c2 696E 7661 		.string	"invalid command argument"
 4136      6C69 6420 
 4136      636F 6D6D 
 4136      616E 6420 
 4136      6172 6775 
 4139               	__c.3165:
 4140 00db 696E 7661 		.string	"invalid command argument"
 4140      6C69 6420 
 4140      636F 6D6D 
 4140      616E 6420 
 4140      6172 6775 
 4143               	__c.3158:
 4144 00f4 696E 7661 		.string	"invalid command argument"
 4144      6C69 6420 
 4144      636F 6D6D 
 4144      616E 6420 
 4144      6172 6775 
 4147               	__c.2989:
 4148 010d 4445 4255 		.string	"DEBUG (%4i, %s) Determine..."
 4148      4720 2825 
 4148      3469 2C20 
 4148      2573 2920 
 4148      4465 7465 
 4151               	__c.2949:
 4152 012a 4445 4255 		.string	"DEBUG (%4i, %s) Init"
 4152      4720 2825 
 4152      3469 2C20 
 4152      2573 2920 
 4152      496E 6974 
 4155               	__c.2864:
 4156 013f 2752 4C54 		.string	"'RLTH invalid input port for external polarity"
 4156      4820 696E 
 4156      7661 6C69 
 4156      6420 696E 
 4156      7075 7420 
 4159               	__c.2738:
 4160 016e 696E 7661 		.string	"invalid number of arguments"
 4160      6C69 6420 
 4160      6E75 6D62 
 4160      6572 206F 
 4160      6620 6172 
 4163               	__c.2732:
 4164 018a 696E 7661 		.string	"invalid command argument"
 4164      6C69 6420 
 4164      636F 6D6D 
 4164      616E 6420 
 4164      6172 6775 
 4167               	__c.2716:
 4168 01a3 696E 7661 		.string	"invalid command argument"
 4168      6C69 6420 
 4168      636F 6D6D 
 4168      616E 6420 
 4168      6172 6775 
 4171               	__c.2714:
 4172 01bc 6661 6C73 		.string	"false"
 4172      6500 
 4175               	__c.2712:
 4176 01c2 4641 4C53 		.string	"FALSE"
 4176      4500 
 4179               	__c.2710:
 4180 01c8 7472 7565 		.string	"true"
 4180      00
 4183               	__c.2708:
 4184 01cd 5452 5545 		.string	"TRUE"
 4184      00
 4187               	__c.2704:
 4188 01d2 696E 7661 		.string	"invalid command argument"
 4188      6C69 6420 
 4188      636F 6D6D 
 4188      616E 6420 
 4188      6172 6775 
 4191               	__c.2701:
 4192 01eb 2573 2068 		.string	"%s high:0x%x"
 4192      6967 683A 
 4192      3078 2578 
 4192      00
 4195               	__c.2699:
 4196 01f8 2573 6C6F 		.string	"%slow:0x%x"
 4196      773A 3078 
 4196      2578 00
 4199               	__c.2695:
 4200 0203 2573 2065 		.string	"%s ext_port:%x"
 4200      7874 5F70 
 4200      6F72 743A 
 4200      2578 00
 4203               	__c.2693:
 4204 0212 2573 2065 		.string	"%s ext_pos:%x"
 4204      7874 5F70 
 4204      6F73 3A25 
 4204      7800 
 4207               	__c.2691:
 4208 0220 4641 4C53 		.string	"FALSE"
 4208      4500 
 4211               	__c.2689:
 4212 0226 5452 5545 		.string	"TRUE"
 4212      00
 4215               	__c.2687:
 4216 022b 2065 7874 		.string	" ext:"
 4216      3A00 
 4219               	__c.2685:
 4220 0231 4641 4C53 		.string	"FALSE"
 4220      4500 
 4223               	__c.2683:
 4224 0237 5452 5545 		.string	"TRUE"
 4224      00
 4227               	__c.2681:
 4228 023c 2069 6E76 		.string	" invert:"
 4228      6572 743A 
 4228      00
 4231               	__c.2679:
 4232 0245 4641 4C53 		.string	"FALSE"
 4232      4500 
 4235               	__c.2677:
 4236 024b 5452 5545 		.string	"TRUE"
 4236      00
 4239               	__c.2675:
 4240 0250 204F 6642 		.string	" OfBounds:"
 4240      6F75 6E64 
 4240      733A 00
 4243               	__c.2673:
 4244 025b 4641 4C53 		.string	"FALSE"
 4244      4500 
 4247               	__c.2671:
 4248 0261 5452 5545 		.string	"TRUE"
 4248      00
 4251               	__c.2669:
 4252 0266 696E 426F 		.string	"inBounds:"
 4252      756E 6473 
 4252      3A00 
 4255               	__c.2666:
 4256 0270 4641 4C53 		.string	"FALSE"
 4256      4500 
 4259               	__c.2664:
 4260 0276 5452 5545 		.string	"TRUE"
 4260      00
 4263               	__c.2662:
 4264 027b 2030 745F 		.string	" 0t_lock:"
 4264      6C6F 636B 
 4264      3A00 
 4267               	__c.2660:
 4268 0285 4641 4C53 		.string	"FALSE"
 4268      4500 
 4271               	__c.2658:
 4272 028b 5452 5545 		.string	"TRUE"
 4272      00
 4275               	__c.2656:
 4276 0290 2065 6E61 		.string	" enable:"
 4276      626C 653A 
 4276      00
 4279               	__c.2654:
 4280 0299 2573 206C 		.string	"%s led:%x"
 4280      6564 3A25 
 4280      7800 
 4283               	__c.2652:
 4284 02a3 2573 206F 		.string	"%s out:%x"
 4284      7574 3A25 
 4284      7800 
 4287               	__c.2650:
 4288 02ad 2573 2069 		.string	"%s in:%x"
 4288      6E3A 2578 
 4288      00
 4291               	__c.2648:
 4292 02b6 2573 2072 		.string	"%s relay:%x"
 4292      656C 6179 
 4292      3A25 7800 
 4295               	__c.2646:
 4296 02c2 2573 2068 		.string	"%s high:0x%x"
 4296      6967 683A 
 4296      3078 2578 
 4296      00
 4299               	__c.2644:
 4300 02cf 2573 206C 		.string	"%s low:0x%x"
 4300      6F77 3A30 
 4300      7825 7800 
 4303               	__c.2642:
 4304 02db 2573 2076 		.string	"%s val:0x%x"
 4304      616C 3A30 
 4304      7825 7800 
 4307               	__c.2637:
 4308 02e7 2573 2569 		.string	"%s%i %s"
 4308      2025 7300 
 4311               	__c.2634:
 4312 02ef 2573 2578 		.string	"%s%x"
 4312      00
 4315               	__c.2631:
 4316 02f4 2573 2578 		.string	"%s%x"
 4316      00
 4319               	__c.2628:
 4320 02f9 4641 4C53 		.string	"FALSE"
 4320      4500 
 4323               	__c.2626:
 4324 02ff 5452 5545 		.string	"TRUE"
 4324      00
 4327               	__c.2623:
 4328 0304 4641 4C53 		.string	"FALSE"
 4328      4500 
 4331               	__c.2621:
 4332 030a 5452 5545 		.string	"TRUE"
 4332      00
 4335               	__c.2618:
 4336 030f 4641 4C53 		.string	"FALSE"
 4336      4500 
 4339               	__c.2616:
 4340 0315 5452 5545 		.string	"TRUE"
 4340      00
 4343               	__c.2613:
 4344 031a 4641 4C53 		.string	"FALSE"
 4344      4500 
 4347               	__c.2611:
 4348 0320 5452 5545 		.string	"TRUE"
 4348      00
 4351               	__c.2608:
 4352 0325 4641 4C53 		.string	"FALSE"
 4352      4500 
 4355               	__c.2606:
 4356 032b 5452 5545 		.string	"TRUE"
 4356      00
 4359               	__c.2603:
 4360 0330 2573 2578 		.string	"%s%x"
 4360      00
 4363               	__c.2600:
 4364 0335 2573 2578 		.string	"%s%x"
 4364      00
 4367               	__c.2597:
 4368 033a 2573 2578 		.string	"%s%x"
 4368      00
 4371               	__c.2594:
 4372 033f 2573 2578 		.string	"%s%x"
 4372      00
 4375               	__c.2591:
 4376 0344 4641 4C53 		.string	"FALSE"
 4376      4500 
 4379               	__c.2589:
 4380 034a 5452 5545 		.string	"TRUE"
 4380      00
 4383               	__c.2586:
 4384 034f 4641 4C53 		.string	"FALSE"
 4384      4500 
 4387               	__c.2584:
 4388 0355 5452 5545 		.string	"TRUE"
 4388      00
 4391               	__c.2581:
 4392 035a 2049 4E56 		.string	" INVALID"
 4392      414C 4944 
 4392      00
 4395               	__c.2579:
 4396 0363 2056 414C 		.string	" VALID"
 4396      4944 00
 4399               	__c.2577:
 4400 036a 2573 3078 		.string	"%s0x%x"
 4400      2578 00
 4403               	__c.2574:
 4404 0371 2049 4E56 		.string	" INVALID"
 4404      414C 4944 
 4404      00
 4407               	__c.2572:
 4408 037a 2056 414C 		.string	" VALID"
 4408      4944 00
 4411               	__c.2570:
 4412 0381 2573 3078 		.string	"%s0x%x"
 4412      2578 00
 4415               	__c.2564:
 4416 0388 2573 2569 		.string	"%s%i %s"
 4416      2025 7300 
 4419               	__c.2560:
 4420 0390 2573 3078 		.string	"%s0x%x"
 4420      2578 00
 4421               		.comm ErrorCodes,1,1
 4424               	relayThresholdCommandKeyword00:
 4425 0397 6375 7272 		.string	"current_state"
 4425      656E 745F 
 4425      7374 6174 
 4425      6500 
 4428               	relayThresholdCommandKeyword01:
 4429 03a5 6375 7272 		.string	"current_value"
 4429      656E 745F 
 4429      7661 6C75 
 4429      6500 
 4432               	relayThresholdCommandKeyword02:
 4433 03b3 7468 725F 		.string	"thr_high"
 4433      6869 6768 
 4433      00
 4436               	relayThresholdCommandKeyword03:
 4437 03bc 7468 725F 		.string	"thr_low"
 4437      6C6F 7700 
 4440               	relayThresholdCommandKeyword04:
 4441 03c4 656E 6162 		.string	"enable"
 4441      6C65 00
 4444               	relayThresholdCommandKeyword05:
 4445 03cb 696E 7075 		.string	"input_channel"
 4445      745F 6368 
 4445      616E 6E65 
 4445      6C00 
 4448               	relayThresholdCommandKeyword06:
 4449 03d9 6F75 7470 		.string	"output_pin"
 4449      7574 5F70 
 4449      696E 00
 4452               	relayThresholdCommandKeyword07:
 4453 03e4 6C65 645F 		.string	"led_pin"
 4453      7069 6E00 
 4456               	relayThresholdCommandKeyword08:
 4457 03ec 7265 706F 		.string	"report_state_enable"
 4457      7274 5F73 
 4457      7461 7465 
 4457      5F65 6E61 
 4457      626C 6500 
 4460               	relayThresholdCommandKeyword09:
 4461 0400 7265 6C61 		.string	"relay"
 4461      7900 
 4464               	relayThresholdCommandKeyword10:
 4465 0406 7468 7265 		.string	"thresholds"
 4465      7368 6F6C 
 4465      6473 00
 4468               	relayThresholdCommandKeyword11:
 4469 0411 7374 6174 		.string	"status"
 4469      7573 00
 4472               	relayThresholdCommandKeyword12:
 4473 0418 6F75 744F 		.string	"outOfBounds_transit_lock"
 4473      6642 6F75 
 4473      6E64 735F 
 4473      7472 616E 
 4473      7369 745F 
 4476               	relayThresholdCommandKeyword13:
 4477 0431 696E 5F62 		.string	"in_bounds_polarity"
 4477      6F75 6E64 
 4477      735F 706F 
 4477      6C61 7269 
 4477      7479 00
 4480               	relayThresholdCommandKeyword14:
 4481 0444 6F75 745F 		.string	"out_of_bounds_polarity"
 4481      6F66 5F62 
 4481      6F75 6E64 
 4481      735F 706F 
 4481      6C61 7269 
 4484               	relayThresholdCommandKeyword15:
 4485 045b 696E 7665 		.string	"invert_polarity_logic"
 4485      7274 5F70 
 4485      6F6C 6172 
 4485      6974 795F 
 4485      6C6F 6769 
 4488               	relayThresholdCommandKeyword16:
 4489 0471 6578 7465 		.string	"extern_inBounds_polarity"
 4489      726E 5F69 
 4489      6E42 6F75 
 4489      6E64 735F 
 4489      706F 6C61 
 4492               	relayThresholdCommandKeyword17:
 4493 048a 6578 7465 		.string	"extern_inBounds_pin_pos"
 4493      726E 5F69 
 4493      6E42 6F75 
 4493      6E64 735F 
 4493      7069 6E5F 
 4496               	relayThresholdCommandKeyword18:
 4497 04a2 6578 7465 		.string	"extern_inBounds_port"
 4497      726E 5F69 
 4497      6E42 6F75 
 4497      6E64 735F 
 4497      706F 7274 
 4500               	relayThresholdCommandKeyword19:
 4501 04b7 706F 6C61 		.string	"polarity"
 4501      7269 7479 
 4501      00
 4504               	relayThresholdCommandKeyword20:
 4505 04c0 706F 6C61 		.string	"polarity_reinit"
 4505      7269 7479 
 4505      5F72 6569 
 4505      6E69 7400 
 4508               	relayThresholdStateString00:
 4509 04d0 4944 4C45 		.string	"IDLE"
 4509      00
 4512               	relayThresholdStateString01:
 4513 04d5 4245 4C4F 		.string	"BELOW_LOW_THRESHOLD"
 4513      575F 4C4F 
 4513      575F 5448 
 4513      5245 5348 
 4513      4F4C 4400 
 4516               	relayThresholdStateString02:
 4517 04e9 494E 4245 		.string	"INBETWEEN"
 4517      5457 4545 
 4517      4E00 
 4520               	relayThresholdStateString03:
 4521 04f3 4142 4F56 		.string	"ABOVE_HIGH_THRESHOLD"
 4521      455F 4849 
 4521      4748 5F54 
 4521      4852 4553 
 4521      484F 4C44 
 4524               	relayThresholdStateString04:
 4525 0508 554E 4445 		.string	"UNDEFINED"
 4525      4649 4E45 
 4525      4400 
 4632               		.text
 4634               	.Letext0:
 4635               	/* File "relay.c": code 2704 = 0x0a90 (2594), prologues  37, epilogues  73 */
DEFINED SYMBOLS
                            *ABS*:00000000 relay.c
     /tmp/ccvvbvFZ.s:3      *ABS*:0000003f __SREG__
     /tmp/ccvvbvFZ.s:4      *ABS*:0000003e __SP_H__
     /tmp/ccvvbvFZ.s:5      *ABS*:0000003d __SP_L__
     /tmp/ccvvbvFZ.s:6      *ABS*:00000000 __tmp_reg__
     /tmp/ccvvbvFZ.s:7      *ABS*:00000001 __zero_reg__
     /tmp/ccvvbvFZ.s:129    .text:00000000 relayThresholdsSetHighThreshold
     /tmp/ccvvbvFZ.s:156    .text:00000014 relayThresholdsSetLowThreshold
     /tmp/ccvvbvFZ.s:183    .text:00000028 relayThresholdsSetEnableFlag
     /tmp/ccvvbvFZ.s:247    .text:00000076 relayThresholdsGetInvertPolarityFlag
     /tmp/ccvvbvFZ.s:267    .text:0000007e relayThresholdsGetHighThreshold
     /tmp/ccvvbvFZ.s:285    .text:00000088 relayThresholdsGetLowThreshold
     /tmp/ccvvbvFZ.s:303    .text:00000092 relayThresholdsGetEnableFlag
     /tmp/ccvvbvFZ.s:323    .text:0000009a relayThresholdsGetOutOfBoundsTransitLockFlag
     /tmp/ccvvbvFZ.s:343    .text:000000a2 relayThresholdsGetReportStateEnableFlag
     /tmp/ccvvbvFZ.s:363    .text:000000aa relayThresholdsGetInBoundsPolarity
     /tmp/ccvvbvFZ.s:392    .text:000000be relayThresholdsGetOutOfBoundsPolarity
     /tmp/ccvvbvFZ.s:421    .text:000000d2 relayThresholdsGetExternalPolarityPinPos
     /tmp/ccvvbvFZ.s:441    .text:000000da relayThresholdsGetExternalPolarityPort
     /tmp/ccvvbvFZ.s:461    .text:000000e2 relayThresholdsGetExternalPolarity
     /tmp/ccvvbvFZ.s:490    .text:000000f6 relayThresholdsGetInputChannel
     /tmp/ccvvbvFZ.s:510    .text:000000fe relayThresholdsGetOutputPin
     /tmp/ccvvbvFZ.s:530    .text:00000106 relayThresholdsGetLedPin
     /tmp/ccvvbvFZ.s:550    .text:0000010e relayThresholdsGetCurrentState
     /tmp/ccvvbvFZ.s:570    .text:00000116 relayThresholdsGetRelayValue
     /tmp/ccvvbvFZ.s:590    .text:0000011e relayThresholdsGetRelaySetValue
     /tmp/ccvvbvFZ.s:610    .text:00000126 relayThresholdsGetCurrentValue
     /tmp/ccvvbvFZ.s:4123   .progmem.data:00000068 __c.3282
     /tmp/ccvvbvFZ.s:4119   .progmem.data:00000049 __c.3284
     /tmp/ccvvbvFZ.s:4115   .progmem.data:00000034 __c.3286
     /tmp/ccvvbvFZ.s:832    .text:00000280 relayThresholdsSetLedPin
     /tmp/ccvvbvFZ.s:4135   .progmem.data:000000c2 __c.3172
     /tmp/ccvvbvFZ.s:876    .text:000002b0 relayThresholdsSetOutputPin
     /tmp/ccvvbvFZ.s:4139   .progmem.data:000000db __c.3165
     /tmp/ccvvbvFZ.s:920    .text:000002e0 relayThresholdsSetInputChannel
     /tmp/ccvvbvFZ.s:4143   .progmem.data:000000f4 __c.3158
     /tmp/ccvvbvFZ.s:963    .text:00000310 relayThresholdInBoundPolarityInit
     /tmp/ccvvbvFZ.s:4155   .progmem.data:0000013f __c.2864
     /tmp/ccvvbvFZ.s:1117   .text:000003da relayThresholdMiscSubCommands
     /tmp/ccvvbvFZ.s:4159   .progmem.data:0000016e __c.2738
     /tmp/ccvvbvFZ.s:4082   .progmem.data:00000000 relayThresholdCommandKeywords
     /tmp/ccvvbvFZ.s:4187   .progmem.data:000001d2 __c.2704
     /tmp/ccvvbvFZ.s:4183   .progmem.data:000001cd __c.2708
     /tmp/ccvvbvFZ.s:3168   .text:00000f88 relayThresholdInit
     /tmp/ccvvbvFZ.s:4163   .progmem.data:0000018a __c.2732
     /tmp/ccvvbvFZ.s:3093   .text:00000f54 relayThresholdsSetOutOfBoundsTransitLockFlag
     /tmp/ccvvbvFZ.s:4251   .progmem.data:00000266 __c.2669
     /tmp/ccvvbvFZ.s:4247   .progmem.data:00000261 __c.2671
     /tmp/ccvvbvFZ.s:4239   .progmem.data:00000250 __c.2675
     /tmp/ccvvbvFZ.s:4235   .progmem.data:0000024b __c.2677
     /tmp/ccvvbvFZ.s:4227   .progmem.data:0000023c __c.2681
     /tmp/ccvvbvFZ.s:4223   .progmem.data:00000237 __c.2683
     /tmp/ccvvbvFZ.s:4215   .progmem.data:0000022b __c.2687
     /tmp/ccvvbvFZ.s:4211   .progmem.data:00000226 __c.2689
     /tmp/ccvvbvFZ.s:4203   .progmem.data:00000212 __c.2693
     /tmp/ccvvbvFZ.s:4199   .progmem.data:00000203 __c.2695
     /tmp/ccvvbvFZ.s:4311   .progmem.data:000002ef __c.2634
     /tmp/ccvvbvFZ.s:4315   .progmem.data:000002f4 __c.2631
     /tmp/ccvvbvFZ.s:4323   .progmem.data:000002ff __c.2626
     /tmp/ccvvbvFZ.s:4331   .progmem.data:0000030a __c.2621
     /tmp/ccvvbvFZ.s:4347   .progmem.data:00000320 __c.2611
     /tmp/ccvvbvFZ.s:4339   .progmem.data:00000315 __c.2616
     /tmp/ccvvbvFZ.s:4355   .progmem.data:0000032b __c.2606
     /tmp/ccvvbvFZ.s:4307   .progmem.data:000002e7 __c.2637
     /tmp/ccvvbvFZ.s:4107   .progmem.data:0000002a relayThresholdStateStrings
     /tmp/ccvvbvFZ.s:4303   .progmem.data:000002db __c.2642
     /tmp/ccvvbvFZ.s:4299   .progmem.data:000002cf __c.2644
     /tmp/ccvvbvFZ.s:4295   .progmem.data:000002c2 __c.2646
     /tmp/ccvvbvFZ.s:4291   .progmem.data:000002b6 __c.2648
     /tmp/ccvvbvFZ.s:4287   .progmem.data:000002ad __c.2650
     /tmp/ccvvbvFZ.s:4283   .progmem.data:000002a3 __c.2652
     /tmp/ccvvbvFZ.s:4279   .progmem.data:00000299 __c.2654
     /tmp/ccvvbvFZ.s:4275   .progmem.data:00000290 __c.2656
     /tmp/ccvvbvFZ.s:4271   .progmem.data:0000028b __c.2658
     /tmp/ccvvbvFZ.s:4263   .progmem.data:0000027b __c.2662
     /tmp/ccvvbvFZ.s:4259   .progmem.data:00000276 __c.2664
     /tmp/ccvvbvFZ.s:4195   .progmem.data:000001f8 __c.2699
     /tmp/ccvvbvFZ.s:4191   .progmem.data:000001eb __c.2701
     /tmp/ccvvbvFZ.s:4359   .progmem.data:00000330 __c.2603
     /tmp/ccvvbvFZ.s:4379   .progmem.data:0000034a __c.2589
     /tmp/ccvvbvFZ.s:4363   .progmem.data:00000335 __c.2600
     /tmp/ccvvbvFZ.s:4399   .progmem.data:0000036a __c.2577
     /tmp/ccvvbvFZ.s:4395   .progmem.data:00000363 __c.2579
     /tmp/ccvvbvFZ.s:4411   .progmem.data:00000381 __c.2570
     /tmp/ccvvbvFZ.s:4407   .progmem.data:0000037a __c.2572
     /tmp/ccvvbvFZ.s:4419   .progmem.data:00000390 __c.2560
     /tmp/ccvvbvFZ.s:4371   .progmem.data:0000033f __c.2594
     /tmp/ccvvbvFZ.s:4387   .progmem.data:00000355 __c.2584
     /tmp/ccvvbvFZ.s:4367   .progmem.data:0000033a __c.2597
     /tmp/ccvvbvFZ.s:4415   .progmem.data:00000388 __c.2564
     /tmp/ccvvbvFZ.s:4179   .progmem.data:000001c8 __c.2710
     /tmp/ccvvbvFZ.s:4175   .progmem.data:000001c2 __c.2712
     /tmp/ccvvbvFZ.s:3054   .text:00000f36 relayThresholdsSetInvertPolarityFlag
     /tmp/ccvvbvFZ.s:2838   .text:00000e34 relayThresholdsSetExternalPolarityPinPos
     /tmp/ccvvbvFZ.s:4207   .progmem.data:00000220 __c.2691
     /tmp/ccvvbvFZ.s:4219   .progmem.data:00000231 __c.2685
     /tmp/ccvvbvFZ.s:4231   .progmem.data:00000245 __c.2679
     /tmp/ccvvbvFZ.s:4243   .progmem.data:0000025b __c.2673
     /tmp/ccvvbvFZ.s:4375   .progmem.data:00000344 __c.2591
     /tmp/ccvvbvFZ.s:4383   .progmem.data:0000034f __c.2586
     /tmp/ccvvbvFZ.s:4319   .progmem.data:000002f9 __c.2628
     /tmp/ccvvbvFZ.s:4343   .progmem.data:0000031a __c.2613
     /tmp/ccvvbvFZ.s:4327   .progmem.data:00000304 __c.2623
     /tmp/ccvvbvFZ.s:4335   .progmem.data:0000030f __c.2618
     /tmp/ccvvbvFZ.s:4391   .progmem.data:0000035a __c.2581
     /tmp/ccvvbvFZ.s:4403   .progmem.data:00000371 __c.2574
     /tmp/ccvvbvFZ.s:4255   .progmem.data:00000270 __c.2666
     /tmp/ccvvbvFZ.s:4267   .progmem.data:00000285 __c.2660
     /tmp/ccvvbvFZ.s:4351   .progmem.data:00000325 __c.2608
     /tmp/ccvvbvFZ.s:3129   .text:00000f6e relayThresholdsSetReportCurrentStatusEnableFlag
     /tmp/ccvvbvFZ.s:4171   .progmem.data:000001bc __c.2714
     /tmp/ccvvbvFZ.s:2975   .text:00000ed8 relayThresholdsSetRelayValue
     /tmp/ccvvbvFZ.s:4167   .progmem.data:000001a3 __c.2716
     /tmp/ccvvbvFZ.s:2699   .text:00000d7c relayThresholdsReportCurrentStatus
     /tmp/ccvvbvFZ.s:2745   .text:00000db4 relayThresholdsSetExternalPolarityPort
     /tmp/ccvvbvFZ.s:4127   .progmem.data:0000008e __c.3189
     /tmp/ccvvbvFZ.s:4131   .progmem.data:000000a8 __c.3179
     /tmp/ccvvbvFZ.s:2931   .text:00000eb4 relayThresholdsSetRelaySetValue
     /tmp/ccvvbvFZ.s:4151   .progmem.data:0000012a __c.2949
     /tmp/ccvvbvFZ.s:3365   .text:000010b8 relayThreshold
     /tmp/ccvvbvFZ.s:3429   .text:00001100 relayThresholdDetermineStateAndTriggerRelay
     /tmp/ccvvbvFZ.s:4147   .progmem.data:0000010d __c.2989
     /tmp/ccvvbvFZ.s:4424   .progmem.data:00000397 relayThresholdCommandKeyword00
     /tmp/ccvvbvFZ.s:4428   .progmem.data:000003a5 relayThresholdCommandKeyword01
     /tmp/ccvvbvFZ.s:4432   .progmem.data:000003b3 relayThresholdCommandKeyword02
     /tmp/ccvvbvFZ.s:4436   .progmem.data:000003bc relayThresholdCommandKeyword03
     /tmp/ccvvbvFZ.s:4440   .progmem.data:000003c4 relayThresholdCommandKeyword04
     /tmp/ccvvbvFZ.s:4444   .progmem.data:000003cb relayThresholdCommandKeyword05
     /tmp/ccvvbvFZ.s:4448   .progmem.data:000003d9 relayThresholdCommandKeyword06
     /tmp/ccvvbvFZ.s:4452   .progmem.data:000003e4 relayThresholdCommandKeyword07
     /tmp/ccvvbvFZ.s:4456   .progmem.data:000003ec relayThresholdCommandKeyword08
     /tmp/ccvvbvFZ.s:4460   .progmem.data:00000400 relayThresholdCommandKeyword09
     /tmp/ccvvbvFZ.s:4464   .progmem.data:00000406 relayThresholdCommandKeyword10
     /tmp/ccvvbvFZ.s:4468   .progmem.data:00000411 relayThresholdCommandKeyword11
     /tmp/ccvvbvFZ.s:4472   .progmem.data:00000418 relayThresholdCommandKeyword12
     /tmp/ccvvbvFZ.s:4476   .progmem.data:00000431 relayThresholdCommandKeyword13
     /tmp/ccvvbvFZ.s:4480   .progmem.data:00000444 relayThresholdCommandKeyword14
     /tmp/ccvvbvFZ.s:4484   .progmem.data:0000045b relayThresholdCommandKeyword15
     /tmp/ccvvbvFZ.s:4488   .progmem.data:00000471 relayThresholdCommandKeyword16
     /tmp/ccvvbvFZ.s:4492   .progmem.data:0000048a relayThresholdCommandKeyword17
     /tmp/ccvvbvFZ.s:4496   .progmem.data:000004a2 relayThresholdCommandKeyword18
     /tmp/ccvvbvFZ.s:4500   .progmem.data:000004b7 relayThresholdCommandKeyword19
     /tmp/ccvvbvFZ.s:4504   .progmem.data:000004c0 relayThresholdCommandKeyword20
     /tmp/ccvvbvFZ.s:4508   .progmem.data:000004d0 relayThresholdStateString00
     /tmp/ccvvbvFZ.s:4512   .progmem.data:000004d5 relayThresholdStateString01
     /tmp/ccvvbvFZ.s:4516   .progmem.data:000004e9 relayThresholdStateString02
     /tmp/ccvvbvFZ.s:4520   .progmem.data:000004f3 relayThresholdStateString03
     /tmp/ccvvbvFZ.s:4524   .progmem.data:00000508 relayThresholdStateString04
                            *COM*:00000001 ErrorCodes

UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
relayThresholdHigh
relayThresholds_valid
relayThresholdLow
relayThresholdEnable_flag
relayThresholdCurrentState
relayThresholdLedPin
relayThresholdInvertPolarity_flag
relayThresholdOutOfBoundsTransitLock_flag
relayThresholdReportCurrentStatusEnable_flag
relayThresholdsInBoundsPolarity
relayThresholdsOutOfBoundsPolarity
relayThresholdsExternalPolarityPinPos
relayThresholdsExternalPolarityPort
relayThresholdsExternalPolarity
relayThresholdInputChannel
relayThresholdOutputPin
relayThresholdRelayValue
relayThresholdRelaySetValue
atmelReadSingleADCChannelVoltage
ptr_uartStruct
message
snprintf_P
CommunicationError
res2
res3
res4
res0
res5
res1
Voltages
res6
res7
general_errorCode
createExtendedSubCommandReceiveResponseHeader
uart_message_string
clearString
setParameter
strncmp_P
strcmp_P
strncat_P
UART0_Send_Message_String
getNumericLength
ptr_setParameter
strtoul
debug
debugMask
