Esempio n. 1
0
/**
 * FMB_Poll_Task
 *
 * @param   none
 * @return  none
 *
 * @brief   FMB_Poll_Task
 */
void FMB_Poll_Task(void *arg)
{
		printf("RS485_Init ERRORCode = %d\n",eMBMasterInit(MB_RTU,RS485_1,1200,MB_PAR_ODD));
		printf("RS485_Enable ERRORCode = %d\n",eMBMasterEnable());
		while(1)
		{
			printf("RS485_Poll ERRORCode = %d\n",eMBMasterPoll());
			OSTimeDly(500);
		}
}
Esempio n. 2
0
int main( int argc, char *argv[] )
{
  int c;
  int option_index = 0;
  int received;
  int mq_id;
  struct sIPCMsg mymsg;

  char *ttydev = DEFAULT_TTY;
  char *parity_s = DEFAULT_PAR;
  int parity;
  int baud = DEFAULT_BAUD;
  USHORT result[255] = {0,};
  int result_int = 0;

  USHORT usLen;
  eMBErrorCode err = MB_ENOERR;

  int reg_start = DEFAULT_REGISTER_START;
  int address = DEFAULT_ADDRESS;
  int regt = -1;
  int reg_action = -1;
  int reg_action_param = -1;
  int no_reg = -1;
  int run_forground = 0;
  int errorcount = 0;
  struct pidfile *pidfile = NULL;

  UCHAR *pucFrame;
  eMBException    eException;
  UCHAR ucFuncType;

  /* Parse cmd-line options */
  while ( (c = getopt_long (argc, argv, "hVd:s:p:r:t:c:a:f", long_options, &option_index)) != EOF ) {    
    switch (c) {
      case 'h':
        fprintf(stderr, "%s", helptext);
        exit(EXIT_SUCCESS);
      case 'V':
        exit(EXIT_SUCCESS);
      case 'd':
        ttydev = strndup(optarg, MAXLEN);
        break;
      case 's':
        baud = atoi(optarg);
        break; 
      case 'p':
        parity_s = strndup(optarg, MAXLEN);
        break;
      case 'f': // run in forground
	run_forground = 1;
	break;
      case '?':
        /* getopt_long already printed an error message. */
      default:
        fprintf(stderr, "%s", helptext);
        exit(EXIT_SUCCESS);
    }
  }

  if(!run_forground){
      fprintf(stderr, "Deamonizing...\n");
      daemon(0, 0);
  }


  /* Setup signalhandler so that we shut down 
     nicely on CTRL+C */
  signal(SIGINT, int_handler);
  
  pidfile = pidfile_create(DEFAULT_PIDFILE, PMODE_RETURN, 0);

  mq_id = create_ipc();


  /* Allocate space for an ADU frame */
  pucFrame = eMBAllocateFrame(&usLen);

  while(outer_loop) {

    if(running == 1) 
      printf("Restarting modbus layer\n");   
    else {
      printf("\n\n\n\n Restarting modbus layer\n\n\n\n");
      running = 1;
      errorcount = 0;
    }

    /* Parse user inputs... */
    if(strcmp(parity_s, "even") == 0)
      parity = MB_PAR_EVEN;
    else if(strcmp(parity_s, "odd") == 0)
      parity = MB_PAR_ODD;
    else
      parity = MB_PAR_NONE;

    PRINT_DBG(1, "init modbus at tty: %s parity %d baud %d", ttydev, parity, baud);

    /* mode, port, baud, parity */
    eMBMasterInit(MB_RTU, ttydev, baud, parity);

    while(running) {

      /* Check message queue */
      if((received = msgrcv(mq_id, &mymsg, sizeof(mymsg.text), 1, IPC_NOWAIT)) > 0) {

        /* Address */
        address = parse_address(mymsg.text);
        /* Starting register */
        reg_start = parse_reg_start(mymsg.text);
        /* Register type */
        regt = parse_reg_type(mymsg.text);
        /* Register action */
        reg_action_param = 0;
        reg_action = parse_reg_action(mymsg.text, &reg_action_param);
        /* Optional: number of registers */
        no_reg = parse_no_reg(mymsg.text);


#ifdef DBG
	if(dbglev>=1){
	    printf("Got: %s\n", mymsg.text);
	    printf("Parsing command:\n");
	    printf("Address: 0x%02x\n", address);
	    printf("Register: %d\n", reg_start);
	    printf("Register type: %d\n", regt);
	    printf("Register action: %d  Arg: %d\n", reg_action, reg_action_param);
	    printf("Register count: %d\n", no_reg);
	}
#endif

        switch(regt) {
          case MB_TYPE_COILS:
            switch(reg_action) {
              case ACTION_READ:
                err = build_eMBMasterReadCoils (pucFrame, reg_start, reg_action_param, &usLen);
                break;
              case ACTION_WRITE:
                err = build_eMBMasterWriteCoils (pucFrame, reg_start, reg_action_param ? 0xff : 0x0, &usLen);
                break;
              case ACTION_WRITEMULTIPLE:
                err = build_eMBMasterWriteMultipleCoils (pucFrame, reg_start, no_reg, reg_action_param ? 0xff : 0x0, &usLen);
                break;
            }
            break;
          case MB_TYPE_INPUT:
            err = build_eMBMasterReadInput (pucFrame, reg_start, reg_action_param, &usLen);
            break;
          case MB_TYPE_HOLDING:
            switch(reg_action) {
              case ACTION_READ:
                err = build_eMBMasterReadHolding (pucFrame, reg_start, reg_action_param, &usLen);
                break;
              case ACTION_WRITE:
                err = build_eMBMasterWriteSingleHolding (pucFrame, reg_start, reg_action_param, &usLen);
                break;
            }
            break;
        }
     
#ifdef DBG
        if(dbglev){
          int n;
          printf("Dumping built frame:\n");
          for(n=0; n<10; n++)
            printf("%02x ",pucFrame[n]);
          printf("\n");            
        }
#endif
      
        /* ? */
        eMBEnable();

        memset(result, 0, sizeof(result));

        if(err == MB_EX_NONE) {
          /* Set the address of the device in question */
          eMBSetSlaveAddress(address);

          /* Send the frame */
          if( (err = eMBSendFrame(pucFrame, usLen)) == MB_ENOERR) {
            printf(" ---- done processing frame ----\n");
            eException = MB_EX_ILLEGAL_FUNCTION;
            ucFuncType = pucFrame[MB_PDU_FUNC_OFF];      

#ifdef DBG
	    if(dbglev){
            printf("%s():%d - after send...\n", __FUNCTION__, __LINE__);
            {
              int n;
              printf("Dumping received frame:\n");
              for(n=0; n<10; n++)
                printf("%02x ",pucFrame[n]);
              printf("\n");            
            }
	    }
#endif
          

            if(ucFuncType & 0x80) {
              UCHAR ucExceptType = pucFrame[MB_PDU_FUNC_OFF+1];
              /* We encountered some sort of error */
              switch(ucExceptType) {
                case MB_EX_ILLEGAL_FUNCTION:
                  fprintf(stderr, "Error! Illegal function!\n");
                  break;
                case MB_EX_ILLEGAL_DATA_ADDRESS:
                  fprintf(stderr, "Error! Illegal data address!\n");
                  break;
                case MB_EX_ILLEGAL_DATA_VALUE:
                  fprintf(stderr, "Error! Illegal data value!\n");
                  break;
                case MB_EX_SLAVE_DEVICE_FAILURE:
                  fprintf(stderr, "Error! Slave device failure!\n");
                  break;
                default:
                  fprintf(stderr, "Unknown error (%d)!\n", eException);
                  break;
              }
            } else {
              switch(ucFuncType) {
                case MB_FUNC_READ_COILS:
                  eException = parse_eMBMasterReadCoils(pucFrame, &usLen, (void *)result);
#ifdef DBG
                  if(dbglev)
		      printf("Reply: %04x\n", result[0]);
#endif
                  break;
                case MB_FUNC_WRITE_SINGLE_COIL:
                  eException = parse_eMBMasterWriteCoils(pucFrame, &usLen, (void *)result);
#ifdef DBG
		  if(dbglev)
		      printf("Reply: %04x\n", result[0]);
#endif
                  break;
                case MB_FUNC_READ_INPUT_REGISTER:
                  eException = parse_eMBMasterReadInput(pucFrame, &usLen, (void *)result);
#ifdef DBG
		  if(dbglev)
		      printf("Reply (%d): %04x\n", eException, result[0]);
#endif
                  break;
                case MB_FUNC_READ_HOLDING_REGISTER:
                  eException = parse_eMBMasterReadHolding(pucFrame, &usLen, (void *)result);
		  
		 
		  
#ifdef DBG
                  printf("Reply: %04x %04x %d %d\n", result[0],result[1], result_int, reg_action_param);
#endif
                  break;
                case MB_FUNC_WRITE_REGISTER:
                  eException = parse_eMBMasterWriteSingleHolding(pucFrame, &usLen, (void *)result);
#ifdef DBG
                  printf("Reply: %04x\n", result[0]);
#endif
                  break;
                case MB_FUNC_WRITE_MULTIPLE_COILS:
                  usLen = 5;
                  eException =  parse_eMBMasterWriteMultipleCoils(pucFrame, &usLen, (void *)result);
                  if(eException == MB_EX_NONE)
                    printf("Write multiple coils SUCCESS!\n");
                  else
                    printf("Write multiple coils FAIL!\n");
                  break;
                default:
                  printf("Unknown function type : %x\n", ucFuncType);
                  printf("%d : %s()\n", __LINE__, __FUNCTION__);
                  {
                    int n;
                    for(n=0; n<10; n++)
                      printf("%02x ",pucFrame[n]);
                    printf("\n");            
                  }
                  break;
              }
	      switch(ucFuncType) {
		case MB_FUNC_READ_HOLDING_REGISTER:
		case MB_FUNC_READ_INPUT_REGISTER:
		   if(reg_action_param == 2){
		      printf("!!!!\n");
		      result_int = (result[0]<<16) | result[1];
		  }else {
		      result_int = result[0];
		  }
		  break;
		default:
		  result_int = result[0];
		  break;
	      }
              if(eException == MB_EX_NONE) {
		  snprintf(mymsg.text, sizeof(mymsg.text), "%ld:REG:%d:RESULT:%d",  time(NULL), reg_start, result_int);
              } else {
                snprintf(mymsg.text, sizeof(mymsg.text), "ERROR:Parsing frame");
              }
#ifdef DBG
              printf("%s():%d - reply: %s\n",
                     __FUNCTION__, __LINE__, mymsg.text);
#endif
              goto out;

            }
          } else {
            printf("Error sending frame. (%d)\n", err);
            snprintf(mymsg.text, sizeof(mymsg.text), "ERROR:Sending frame");
            if(errorcount > 10)
              running = 0;
            else
              errorcount++;
          }
        } else {
          printf("Error in frame arguments.\n");
          snprintf(mymsg.text, sizeof(mymsg.text), "ERROR:Wrong argument");
        }
      out:
        /* Set the reply */
        mymsg.type = 2;
#ifdef DBG
        printf("%s():%d - reply: %s\n",
               __FUNCTION__, __LINE__, mymsg.text);
#endif
        msgsnd(mq_id, &mymsg, sizeof(mymsg.text), IPC_NOWAIT);

        eMBDisable();
      } else {
        //printf("No messages. Sleeping (%d - %s)\n", received, received < 0 ? strerror(errno) :  "");
      } 
      usleep(1000);
    }
    //    free(pucFrame);
    eMBClose();
  }

  destroy_ipc(PROJ_ID);

  pidfile_delete(pidfile);

  return 0;
}
Esempio n. 3
0
int main( int argc, char *argv[] )
{
  int c;
  int option_index = 0;

  char *ttydev = DEFAULT_TTY;
  char *parity_s = DEFAULT_PAR;
  int parity;
  int baud = DEFAULT_BAUD;
  int reg_start = DEFAULT_REGISTER_START;
  int address = DEFAULT_ADDRESS;
  char *reg_type = NULL;
  int regt = -1;
  char *reg_action = NULL;

  USHORT usLen;
  UCHAR *pucFrame;
  eMBErrorCode err = MB_ENOERR;

  /* Parse cmd-line options */
  while ( (c = getopt_long (argc, argv, "hVd:s:p:r:t:c:a:", long_options, &option_index)) != EOF ) {    
    switch (c) {
      case 'h':
        fprintf(stderr, "%s", helptext);
        exit(EXIT_SUCCESS);
      case 'V':
        exit(EXIT_SUCCESS);
      case 'd':
        ttydev = strndup(optarg, MAXLEN);
        break;
      case 's':
        baud = atoi(optarg);
        break; 
      case 'p':
        parity_s = strndup(optarg, MAXLEN);
        break;
      case 'r':
        reg_start = (int)strtod(optarg, NULL);
        break;
      case 't':
        reg_type = strndup(optarg, MAXLEN);
        break;
      case 'c':
        reg_action = strndup(optarg, MAXLEN);
        break; 
      case 'a':
        address = (int)strtod(optarg, NULL);
        break;
      case '?':
        /* getopt_long already printed an error message. */
      default:
        fprintf(stderr, "%s", helptext);
        exit(EXIT_SUCCESS);
    }
  }

  if(argc <= 1) {
    fprintf(stderr, "%s", helptext);
    exit(EXIT_FAILURE);
  }


  /* Allocate space for an ADU frame */
  pucFrame = eMBAllocateFrame(&usLen);

  /* Parse user inputs... */
  if(strcmp(parity_s, "even") == 0)
    parity = MB_PAR_EVEN;
  else if(strcmp(parity_s, "odd") == 0)
    parity = MB_PAR_ODD;
  else
    parity = MB_PAR_NONE;

  if(reg_start < 0 ||  reg_start > 0xffff) {
    fprintf(stderr, "Error! Modbus register out of range. Must be within (0x0-0xffff)\n");
    exit(EXIT_FAILURE);
  }

  if(reg_type) {
    if(strcmp(reg_type, "coils" ) == 0) {
      regt = MB_TYPE_COILS;
    } else if(strcmp(reg_type, "input" ) == 0) {
      regt = MB_TYPE_INPUT;
    } else if(strcmp(reg_type, "holding" ) == 0) {
      regt = MB_TYPE_HOLDING;
    } else if(strcmp(reg_type, "slaveid" ) == 0) {
      regt = MB_TYPE_SLAVEID;
      build_eMBMasterGetSlaveID (pucFrame, &usLen);
    } else {
      fprintf(stderr, "Error! Unknown register type (%s). Known types are: coils\n", reg_type);
      exit(EXIT_FAILURE);
    }
  } else {
    fprintf(stderr, "Error! No register type (-t) specified\n");
    exit(EXIT_FAILURE);
  }

  if(reg_action) {
    if(regt == MB_TYPE_COILS) {
      if(strncmp(reg_action, "read", 4) == 0) {
        int val;
        if(sscanf(reg_action, "%*s %i", &val) != 1) {
          fprintf(stderr, "Error! No number of coils specified.\n");
          exit(EXIT_FAILURE); 
        }
        if(val%8 == 0) {
          build_eMBMasterReadCoils (pucFrame, reg_start, val, &usLen);
        } else {
          fprintf(stderr, "Error! Invalid coil value (%d). Must be a multiple of 8.\n", val);
          exit(EXIT_FAILURE);
        }
      } else if(strncmp(reg_action, "writesingle", 11) == 0) {
        char buf[4];
        if(sscanf(reg_action, "%*s %3[FNO]", buf) != 1) {
          fprintf(stderr, "Error! No coil value specified (ON/OFF).\n");
          exit(EXIT_FAILURE); 
        }
        if(strcmp(buf, "ON") == 0)
          build_eMBMasterWriteCoils (pucFrame, reg_start, 0xff, &usLen);
        else
          build_eMBMasterWriteCoils (pucFrame, reg_start, 0x0, &usLen);
      } else if(strncmp(reg_action, "writemultiple", 13) == 0) {
        int no;
        char buf[4];
        if( sscanf(reg_action, "%*s %i %3[FNO]", &no, buf) != 2) {
          fprintf(stderr, "Error! Invalid value specified.\n");
          exit(EXIT_FAILURE); 
        }
        if(strcmp(buf, "ON") == 0)
          build_eMBMasterWriteMultipleCoils (pucFrame, reg_start, no, 0xff, &usLen);
        else
          build_eMBMasterWriteMultipleCoils (pucFrame, reg_start, no, 0x0, &usLen);
      } else {
        fprintf(stderr, "Error! Unknown command type (%s).\n", reg_action);
        exit(EXIT_FAILURE); 
      }
      
    } else if(regt == MB_TYPE_INPUT) {
      if(strncmp(reg_action, "read", 4) == 0) {
        int val;
        
        if(sscanf(reg_action, "%*s %i", &val) != 1) {
          fprintf(stderr, "Error! No number of registers specified.\n");
          exit(EXIT_FAILURE); 
        }
        if(build_eMBMasterReadInput (pucFrame, reg_start, val, &usLen) != MB_ENOERR) {
          fprintf(stderr, "Error! Wrong register count. Must be between 1 and 125 (0x7d)\n");
            exit(EXIT_FAILURE); 
        }
      }
    } else if(regt == MB_TYPE_HOLDING) {
      if(strncmp(reg_action, "read", 4) == 0) {
        int val;
        
        if(sscanf(reg_action, "%*s %i", &val) != 1) {
          fprintf(stderr, "Error! No number of registers specified.\n");
          exit(EXIT_FAILURE); 
        }
        if(build_eMBMasterReadHolding (pucFrame, reg_start, val, &usLen) != MB_ENOERR) {
          fprintf(stderr, "Error! Wrong register count. Must be between 1 and 125 (0x7d)\n");
          exit(EXIT_FAILURE); 
        }
        printf("%s():%d -  build_eMBMasterReadHolding(pucFramem, %d, %d, %d)\n", 
               __FUNCTION__, __LINE__,
               reg_start, val, usLen);
      } else if(strncmp(reg_action, "writesingle", 11) == 0) {
        int val;
        if( sscanf(reg_action, "%*s %i", &val) != 1) {
          fprintf(stderr, "Error! Invalid value specified.\n");
          exit(EXIT_FAILURE); 
        }
        if(build_eMBMasterWriteSingleHolding (pucFrame, reg_start, val, &usLen) != MB_ENOERR) {
          fprintf(stderr, "Error!\n");
          exit(EXIT_FAILURE); 
        }
      }
    }
  } else {
    fprintf(stderr, "Error! No command (-c) specified.\n");
    exit(EXIT_FAILURE); 
  }

  /* mode, port, baud, parity */
  eMBMasterInit(MB_RTU, ttydev, baud, parity);

  /* ? */
  eMBEnable();
  
  /* Set the address of the device in question */
  eMBSetSlaveAddress(address);
  
  /* Send the frame */
  if( (err = eMBSendFrame(pucFrame, usLen)) != MB_ENOERR) {
    printf("Error sending frame (%d).\n", err);
    exit(EXIT_FAILURE);
  }

  eMBException    eException;
  eException = MB_EX_ILLEGAL_FUNCTION;
  UCHAR ucFuncType = pucFrame[MB_PDU_FUNC_OFF];
  
  USHORT retval[255];

  if(ucFuncType & 0x80) {
    UCHAR ucExceptType = pucFrame[MB_PDU_FUNC_OFF+1];
    /* We encountered some sort of error */
    switch(ucExceptType) {
      case MB_EX_ILLEGAL_FUNCTION:
        fprintf(stderr, "Error! Illegal function!\n");
        break;
      case MB_EX_ILLEGAL_DATA_ADDRESS:
        fprintf(stderr, "Error! Illegal data address!\n");
        break;
      case MB_EX_ILLEGAL_DATA_VALUE:
        fprintf(stderr, "Error! Illegal data value!\n");
        break;
      case MB_EX_SLAVE_DEVICE_FAILURE:
        fprintf(stderr, "Error! Slave device failure!\n");
        break;
      default:
        fprintf(stderr, "Unknown error (%d)!\n", eException);
        break;
    }
  } else {
    switch(ucFuncType) {
      case MB_FUNC_READ_COILS:
        eException = parse_eMBMasterReadCoils(pucFrame, &usLen, (void *)retval);
        printf("Reply: %04x\n", retval[0]);
        break;
     case MB_FUNC_WRITE_SINGLE_COIL:
        eException = parse_eMBMasterWriteCoils(pucFrame, &usLen, (void *)retval);
        printf("Reply: %04x\n", retval[0]);
        break;
      case MB_FUNC_READ_INPUT_REGISTER:
        eException = parse_eMBMasterReadInput(pucFrame, &usLen, (void *)retval);
        printf("Reply (%d): %04x\n", eException, retval[0]);
        break;
      case MB_FUNC_READ_HOLDING_REGISTER:
        eException = parse_eMBMasterReadHolding(pucFrame, &usLen, (void *)retval);
        printf("Reply: %04x\n", retval[0]);
        break;
      case MB_FUNC_WRITE_REGISTER:
        eException = parse_eMBMasterWriteSingleHolding(pucFrame, &usLen, (void *)retval);
        printf("Reply: %04x\n", retval[0]);
        break;
      case MB_FUNC_WRITE_MULTIPLE_COILS:
        usLen = 5;
        eException =  parse_eMBMasterWriteMultipleCoils(pucFrame, &usLen, (void *)retval);
        if(eException == MB_EX_NONE)
          printf("Write multiple coils SUCCESS!\n");
        else
          printf("Write multiple coils FAIL!\n");
        break;

      default:
        printf("Unknown function type : %x\n", ucFuncType);
        printf("%d : %s()\n", __LINE__, __FUNCTION__);
        {
         
          int n;
          for(n=0; n<10; n++)
            printf("%02x ",pucFrame[n]);
          printf("\n");            
         
        }
        break;
    }
  }
    
#ifdef DBG
  printf("%d : %s()\n", __LINE__, __FUNCTION__);
  {
    int j;
    for(j=0; j<usLen; j++)
      printf("%02x ", pucFrame[j]); 
    printf("\n");
  }
#endif

  eMBClose();
  
  return 0;
}
Esempio n. 4
0
__noreturn main()
{
  RCC_Config();
  //I2C_Enable();
  SPI_Enable();
  GPIO_Enable();
  //ADC_Enable();
  
  MTouchInit();
  
  MTouchSetSensor(0, CH0_TRIS, CH0_LAT, CH0_IO_BIT, CH0_AN_NUM, -1, -1, -1,OUT_CH0_MODER,IN_CH0_MODER,AN_CH0_MODER);// sensor #0	
  MTouchSetSensor(1, CH1_TRIS, CH1_LAT, CH1_IO_BIT, CH1_AN_NUM, -1, -1, -1,OUT_CH1_MODER,IN_CH1_MODER,AN_CH1_MODER);// sensor #1	
  MTouchSetSensor(2, CH2_TRIS, CH2_LAT, CH2_IO_BIT, CH2_AN_NUM, -1, -1, -1,OUT_CH2_MODER,IN_CH2_MODER,AN_CH2_MODER);// sensor #2	
  MTouchSetSensor(3, CH3_TRIS, CH3_LAT, CH3_IO_BIT, CH3_AN_NUM, -1, -1, -1,OUT_CH3_MODER,IN_CH3_MODER,AN_CH3_MODER);// sensor #3	
  //                                                            thr ovs  cd                                 
  MTouchSetButton(0, 0, DECODE_PRESS_RELEASE|DECODE_ONE_EVENT);
  MTouchSetButton(1, 1, DECODE_PRESS_RELEASE|DECODE_ONE_EVENT);
  MTouchSetButton(2, 2, DECODE_PRESS_RELEASE|DECODE_ONE_EVENT);
  MTouchSetButton(3, 3, DECODE_PRESS_RELEASE|DECODE_ONE_EVENT);
  Timers_init();
  
#ifdef __MOD_BUS_ENABLE__
  eMBMasterInit(MB_RTU, 2, 38400,  MB_PAR_NONE);
  eMBMasterEnable();
#endif /*__MOD_BUS_ENABLE__*/
  
  __enable_irq();
  
  //*******************Потом заменим на чтение из EEPROM*******************
 up_led(1);
 bottom_led(0);
 chasy_led_string("er");
 minuty_led_string("r");
 Indic_struct.colon = False;
 //************************************************************************
 
 while (1)
  {
#ifdef __MOD_BUS_ENABLE__
   eMBMasterPoll();
#endif /*__MOD_BUS_ENABLE__*/
   
#ifdef __SENSOR_KEYS__
    MTouchDecode();
#endif /*__SENSOR_KEYS__*/
    
#ifdef __TOUCH_DEBUG__
    up_led(buttons[0].pSensor->delta/10);
    chasy_led(buttons[1].pSensor->delta/10);
    minuty_led(buttons[2].pSensor->delta/10);
    bottom_led(buttons[3].pSensor->delta/10);
    if(buttons[0].curState == 0x01){Indic_struct.k4 = True;} else {Indic_struct.k4 = False;};
    if(buttons[1].curState == 0x01){Indic_struct.k3 = True;} else {Indic_struct.k3 = False;};
    if(buttons[2].curState == 0x01){Indic_struct.k2 = True;} else {Indic_struct.k2 = False;};
    if(buttons[3].curState == 0x01){Indic_struct.k1 = True;} else {Indic_struct.k1 = False;};
#endif /*__TOUCH_DEBUG__*/
    
    
//    if (o < 7 ) {o++;} else {/*o = 0;*/};
//    switch(o)
//    {
//    case 0:
//      Indic_struct.k1 = True;
//      break;
//    case 1:
//      Indic_struct.k2 = True;
//      break;
//    case 2:
//      Indic_struct.k3 = True;
//      break;
//    case 3:
//      Indic_struct.k4 = True;
//      break;
//    case 4:
//      Indic_struct.red_bottom = True;
//      break;
//      case 5:
//         //Indic_struct.minus = True;
//      break;
//      case 6:
//        Indic_struct.red_up = True;
//      break;
//      case 100:
//        Indic_struct.k1 = False;
//        Indic_struct.k2 = False;
//        Indic_struct.k3 = False;
//        Indic_struct.k4 = False;
//        Indic_struct.red_bottom = False;
//        Indic_struct.minus = False;
//        Indic_struct.red_up = False;
//      break;
//    default:
//      break;
//    };
//      
//    for(uint16_t f=0;f<60000;f++){ for(uint16_t f=0;f<50;f++){};};
//    
//    Indic_struct.minuty++;
//    
//   
//   
//  //Indic_struct.blink_chasy = True;
//  Indic_struct.blink_k2 = True;
//  Indic_struct.blink_minus = False;
//  //Indic_struct.blink_minuty = True;
//  Indic_struct.blink_verhniy_indicator = True;
//  Indic_struct.blink_colon = True;
  };
  //return 0;
}