Beispiel #1
0
void UDP_Init (void)
{
	DEBUGOUT("Initializing UDP Echo client\r\n");



  eeprom_read_buffer(EE_ADDR_UDPTRACE_IP, (UINT8 *)&udp_ipaddr, 4);
	//udp_ipaddr = localmachine.defgw;
  udp_port= 5001;
  //udp_ipaddr = 0xC0A80105; //192.168.1.5
	udp_soch = udp_getsocket(0 , UPD_PanelEventlistener , UDP_OPT_SEND_CS | UDP_OPT_CHECK_CS);
	
	if(udp_soch == -1)
	    {
		DEBUGOUT("No free UDP sockets!! \r\n");
		RESET_SYSTEM();
	    }
	
	/* open socket */
	(void)udp_open(udp_soch, UDP_AK_PORT);
}
Beispiel #2
0
static void hum_temp_complete_read(struct task* task) {
  uint8_t dht11_data[5];
  result_t result = dht11_read((struct gpio*) task->data, dht11_data);
  
  if (result == RESULT_SUCCESS) {
    struct hum_temp_reading reading = { dht11_data[0], dht11_data[2] };
    current_read_event.reading = reading;
  } else {
    current_read_event.reading = (struct hum_temp_reading) { 0 };    
  }
  event_fire_event((event_t*) &current_read_event);
}

static bool on_hum_temp_reading(event_t* event) {
  struct hum_temp_read_event* read_event = (struct hum_temp_read_event*) event;
  struct hum_temp_reading current_reading = read_event->reading;
  if (current_reading.temperature == 0 && current_reading.humidity == 0) {
    LOG_ERROR("No humidity / temperature reading received\n", "");
  }

  push_sample(&humidity_20_sec_buffer, current_reading.humidity);
  push_sample(&humidity_10_min_buffer, current_reading.humidity);

  push_sample(&temperature_20_sec_buffer, current_reading.temperature);
  push_sample(&temperature_10_min_buffer, current_reading.temperature);

  return false;
}

uint16_t hum_temp_load(void) {
  uint16_t pos = 0;
  for (uint8_t i = 0; i < ARRAY_SIZE(sample_buffers); i++) {
    sample_buffer_init(sample_buffers[i], sample_buffers[i]->samples, sample_buffers[i]->size);
    eeprom_read_buffer(sample_buffers[i], pos);
    pos += sample_buffers[i]->count + 2;
  }
  return pos;
}
Beispiel #3
0
void WebReadEEpromVar (UINT16 getParam, UINT16 getLen, void* getData) 
{
    eeprom_read_buffer(getParam, (UINT8*)getData, getLen);  
}
Beispiel #4
0
//-----------------------------------------------------------------------------
// Analizar mensaje de configuracion recibido por canal TCP.
//-----------------------------------------------------------------------------
//
void f_ConfigRxCfgFrame (void)
{
  UINT8   TmpWriteByte;
 
  switch (CfgMsgFrame.OpCode){
 
    case CFG_TCP_READ:
      CfgMsgInfo.InvCode      = SYS_ConfigParam.InvCode;
      CfgMsgInfo.ScanRate     = SYS_ConfigParam.ScanRate;
      CfgMsgInfo.RunConfig    = SYS_ConfigParam.RunConfig;
//      CfgMsgInfo.SIE_CmdWordA = SIE_ConfigParam.CmdWordA;
      eeprom_read_buffer(EE_ADDR_SIE_CMDWA, (UINT8 *)&(CfgMsgInfo.SIE_CmdWordA), 2); 
      (void)memcpy ((UINT8 *)(&(CfgMsgFrame.Data)),
              (UINT8 *)(&CfgMsgInfo),
              sizeof(CFG_MSG_INFO));        
      CfgMsgFrame.Len = sizeof(CFG_MSG_INFO);      
      break;    


    case CFG_TCP_READ_CTES:
      (void)memcpy ((UINT8 *)(&((CFG_MSG_CTES *)(CfgMsgFrame.Data))->ConsignaFrec),
              (UINT8 *)(&(SYS_ConfigParam.ConsignaFrec)),
              4*sizeof(float));  
     	eeprom_read_buffer(EE_ADDR_VER_TEXT,
     	                  (UINT8 *)(((CFG_MSG_CTES *)(CfgMsgFrame.Data))->UsrText), 30); 
      CfgMsgFrame.Len = sizeof(CFG_MSG_CTES);    
      break;    
      
 
    case CFG_TCP_READ_STAT:
      IIC_RtcGetDateTime ();
      (void)memcpy ((UINT8 *)(&(CfgMsgFrame.Data)),
                    (UINT8 *)(&StatisticData),
                     sizeof(STATISTIC_MSG));  
      CfgMsgFrame.Len = sizeof(STATISTIC_MSG);      
      break;    
      

    case CFG_TCP_READ_VER:
      (void)memcpy ((UINT8 *)(&((CFG_MSG_VERSION *)(CfgMsgFrame.Data))->FW_VersionHdr), (UINT8*)(&FwVersionData), sizeof(CFG_FW_VERSION));  
     	eeprom_read_buffer(EE_ADDR_VER_HWVER, 
     	                  (UINT8 *)(&((CFG_MSG_VERSION *)(CfgMsgFrame.Data))->HW_Version),
     	                   SIZE_HW_VER); 
     	eeprom_read_buffer(EE_ADDR_VER_SERIAL,
     	                  (UINT8 *)(&((CFG_MSG_VERSION *)(CfgMsgFrame.Data))->Serial),
     	                   SIZE_SERIAL); 
      CfgMsgFrame.Len = sizeof(CFG_MSG_VERSION);
      break;    
  

    case CFG_TCP_WRITE_VER:
      if ( (((CFG_MSG_VERSION *)(CfgMsgFrame.Data))->KeyCode) != VER_KEY_CODE) break; 
              
     	eeprom_write_buffer(EE_ADDR_VER_HWVER,
     	                   (UINT8 *)(&((CFG_MSG_VERSION *)(CfgMsgFrame.Data))->HW_Version),
     	                    SIZE_HW_VER); 
    	eeprom_write_buffer(EE_ADDR_VER_SERIAL,
     	                   (UINT8 *)(&((CFG_MSG_VERSION *)(CfgMsgFrame.Data))->Serial),
     	                    SIZE_SERIAL); 
      StatisticData.OsStat.MsgRstCntr = 0x00;
      StatisticData.OsStat.MsgDogCntr = 0x00;
      eeprom_write_buffer(EE_ADDR_DOG_CNTR, (UINT8 *)&(StatisticData.OsStat.MsgDogCntr), 2);     
      eeprom_write_buffer(EE_ADDR_RST_CNTR, (UINT8 *)&(StatisticData.OsStat.MsgRstCntr), 2);     
      CfgMsgFrame.Len = 0;
      break; 
      

    case CFG_TCP_WRITE_CTES:
      (void)memcpy ((UINT8 *)(&(SYS_ConfigParam.ConsignaFrec)),
                    (UINT8 *)(&((CFG_MSG_CTES *)(CfgMsgFrame.Data))->ConsignaFrec),
                    (4 * sizeof(float)));  
          
      eeprom_write_buffer(EE_ADDR_INV_FREC, (UINT8 *)&(SYS_ConfigParam.ConsignaFrec), 4); 
      eeprom_write_buffer(EE_ADDR_PAR_RELTX, (UINT8 *)&SYS_ConfigParam.RelacionTx, 4); 
      eeprom_write_buffer(EE_ADDR_PAR_CRESB, (UINT8 *)&SYS_ConfigParam.CoefResbal, 4); 
      eeprom_write_buffer(EE_ADDR_PAR_RPMOT, (UINT8 *)&SYS_ConfigParam.RpmEnMotor, 4); 

     	eeprom_write_buffer(EE_ADDR_VER_TEXT,
     	                  (UINT8 *)(((CFG_MSG_CTES *)(CfgMsgFrame.Data))->UsrText), 30); 
      CfgMsgFrame.Len = 0;
      break;  


    case CFG_TCP_WRITE_DATE:    
      (void)memcpy ((UINT8 *)(&(StatisticData.CurrentDateTime.Second)),
                    (UINT8 *)(&((DATE_TIME *)(CfgMsgFrame.Data))->Second),
                    (sizeof(DATE_TIME)));  
      IIC_RtcSetDateTime ();
      CfgMsgFrame.Len = 0;
      break;  
              

    case CFG_TCP_WRITE:
      (void)memcpy ((UINT8 *)(&(CfgMsgInfo)),(UINT8 *)(&(CfgMsgFrame.Data)),
                    (sizeof(CFG_MSG_INFO)));  
      eeprom_write_buffer(EE_ADDR_INV_TYPE, &(CfgMsgInfo.InvCode), 1); 
	    eeprom_write_buffer(EE_ADDR_IP_ADDR, CfgMsgInfo.TcpIP, 4);
	    eeprom_write_buffer(EE_ADDR_IP_SUBNET, CfgMsgInfo.TcpMask, 4);
	    eeprom_write_buffer(EE_ADDR_IP_GATEWAY, CfgMsgInfo.TcpGW, 4);
	    eeprom_write_buffer(EE_ADDR_MAC, CfgMsgInfo.TcpMAC, 6);
      eeprom_write_buffer(EE_ADDR_RUN_CFG, &(CfgMsgInfo.RunConfig), 1); 

      eeprom_write_buffer(EE_ADDR_TCP_INITOUT, (UINT8 *)&(CfgMsgInfo.var_TCP_INIT_RETRY_TOUT), 2); 
      eeprom_write_buffer(EE_ADDR_TCP_TOUT, (UINT8 *)&(CfgMsgInfo.var_TCP_DEF_RETRY_TOUT), 2); 
      eeprom_write_buffer(EE_ADDR_TCP_RETRIES, &(CfgMsgInfo.var_TCP_DEF_RETRIES), 1);    
      if (!CfgMsgInfo.var_TCP_DEF_RETRIES) CfgMsgInfo.var_TCP_DEF_RETRIES = 7;
      if (!CfgMsgInfo.var_TCP_INIT_RETRY_TOUT) CfgMsgInfo.var_TCP_INIT_RETRY_TOUT = 100;
      if (!CfgMsgInfo.var_TCP_DEF_RETRY_TOUT) CfgMsgInfo.var_TCP_DEF_RETRY_TOUT = 400;
  
			SYS_ConfigParam.ScanRate     = CfgMsgInfo.ScanRate;
			SYS_ConfigParam.RunConfig    = CfgMsgInfo.RunConfig;
     
      eeprom_write_buffer(EE_ADDR_INV_POLL, (UINT8 *)&(CfgMsgInfo.ScanRate), 2); 
      eeprom_write_buffer(EE_ADDR_SIE_CMDWA, (UINT8 *)&(CfgMsgInfo.SIE_CmdWordA), 2); 

      (void)memcpy ((UINT8 *)(&(CfgMsgFrame.Data)),
                    (UINT8 *)(&CfgMsgInfo),
                     sizeof(CFG_MSG_INFO));        
      CfgMsgFrame.Len = sizeof(CFG_MSG_INFO);
      break;    

    case CFG_TCP_GET_IOVALUES:
      (void)memcpy ((UINT8 *)(&(CfgMsgFrame.Data[0])),
              (UINT8 *)(&(InputOutputData)),
              sizeof(GIO_STATE_VAL));  
      CfgMsgFrame.Len = sizeof(GIO_STATE_VAL);    
    
      break;
      
    case CFG_TCP_SET_IOVALUES:
      (void)memcpy ( (UINT8 *)(&(InputOutputData)),
                     (UINT8 *)(&(CfgMsgFrame.Data[0])),              
                      sizeof(GIO_STATE_VAL));  
      GIO_SetOutVal ( ((GIO_STATE_VAL *)(&(CfgMsgFrame.Data[0])))->DigOutVal );
      IIC_DacSetValues();
      CfgMsgFrame.Len = sizeof(GIO_STATE_VAL);    
    
      break;

  
    case CFG_TCP_RESET:
      __asm SEI;                         // Deshabilitar Interrupciones (RESET)
      FOREVER;    
      break;

      
    case CFG_TCP_POL:
      CfgMsgFrame.OpCode = CFG_TCP_ACK;
      CfgMsgFrame.Len = 0;
      break;
    

    case CFG_TCP_WRITE_FLASH:
      FLA_SaveReg (CfgMsgFrame.Parameter, CfgMsgFrame.Len, (UINT8*) &(CfgMsgFrame.Data));
      CfgMsgFrame.Len = 0;
      break;

    case CFG_TCP_READ_FLASH:
      FLA_ReadReg (CfgMsgFrame.Parameter, (UINT8)(CfgMsgFrame.AuxParam), (UINT8*) &(CfgMsgFrame.Data));
      CfgMsgFrame.Len = (UINT8)(CfgMsgFrame.AuxParam);
      break;
      
    case CFG_TCP_UPGRADE_FW:
      TmpWriteByte = LDR_UPDATE_LOAD;
      eeprom_write_buffer(EE_ADDR_FW_UPDATE, &TmpWriteByte, 1);     
      __asm SEI;                         // Deshabilitar Interrupciones (RESET)
      FOREVER;    
      break;

//  FW cargado ok, grabar bandera para informar al loader..
    case CFG_TCP_VALIDATE_FW:
      TmpWriteByte = LDR_UPDATE_VALID;
      eeprom_write_buffer(EE_ADDR_FW_UPDATE, &TmpWriteByte, 1);     
      CfgMsgFrame.Len = 0;
      break;

//  RECUPERAR EL FW DE FABRICA.. 
    case CFG_TCP_RESTORE_FW:
      TmpWriteByte = LDR_FACTORY_TEST;
      eeprom_write_buffer(EE_ADDR_FW_UPDATE, &TmpWriteByte, 1);     
      __asm SEI;                         // Deshabilitar Interrupciones (RESET)
      FOREVER;    
      break;
      
    default:
      CfgMsgFrame.OpCode = CFG_TCP_NAK;
      CfgMsgFrame.Len = 0;
      break;  
  }

 
  CfgMsgFrame.RxWindow = CfgMsgFrame.TxWindow;
  
  if (TCP_SendCfgBuff()){				                    // Error en envio de respuesta
	  (void)TMR_SetTimer ( TCP_TIMEOUT_SENDRETRY , PROC_CONFIG, 0x00, FALSE);	            // Reintentar
  }
//  TCP_SendCfgBuff();
  return;
   
}
Beispiel #5
0
//-----------------------------------------------------------------------------------------
// TCP_Init: inicializa todos los sockets
//-----------------------------------------------------------------------------------------
//
void TCP_Init (void)
{

	/* Get socket:
	 * 	TCP_TYPE_SERVER - type of TCP socket is server
	 * 	TCP_TOS_NORMAL  - no other type of service implemented so far
	 *	TCP_DEF_TOUT	- timeout value in seconds. If for this many seconds
	 *		no data is exchanged over the TCP connection the socket will be
	 *		closed.
	 *	tcps_control_panel_eventlistener - pointer to event listener function for
	 * 		this socket.	
	 */
 UINT8   TmpCntr; 	

 #ifdef   DNP_SLAVE_MODE

  UINT8   CliTcpIpAddrTxt[30];
  UINT8   CliTcpIpAddrIdx;
  UINT8   CliTcpIpCharIdx;
  UINT8   CliTcpIpChar[4];

  // el txt tiene address y puerto con formato xxx.xxx.xxx.xxx:ppp
 	eeprom_read_buffer( EE_ADDR_VER_TEXT, CliTcpIpAddrTxt, 30);
 	CliTcpIpAddrIdx=0; 
 	CliTcpIpCharIdx=0; 
 	for ( TmpCntr=0; TmpCntr<30 ; TmpCntr++){
 	  if (CliTcpIpAddrTxt[TmpCntr] == '.'){
 	    CliTcpIpAddrTxt[TmpCntr] = '\0';
 	    CliTcpIpChar[CliTcpIpCharIdx++] = (UINT8)(atoi((INT8*)&(CliTcpIpAddrTxt[CliTcpIpAddrIdx])));
 	    CliTcpIpAddrIdx = TmpCntr+1;
 	  } 
 	  if (CliTcpIpAddrTxt[TmpCntr] == ':'){
 	    CliTcpIpAddrTxt[TmpCntr] = '\0';
 	    CliTcpIpChar[CliTcpIpCharIdx++] = (UINT8)(atoi((INT8*)&(CliTcpIpAddrTxt[CliTcpIpAddrIdx])));
 	    CliTcpIpAddrIdx = TmpCntr+1;
 	    break;
 	  }
// 	  if (CliTcpIpAddrTxt[TmpCntr] == '\0') break;
 	}
  CliTcpIp = *((UINT32 *)CliTcpIpChar); 
  CliTcpSockPort = atoi((INT8*)&(CliTcpIpAddrTxt[CliTcpIpAddrIdx]));
 	
#endif //  DNP_SLAVE_MODE
	
	
	DEBUGOUT("Initializing TCP application. \r\n");
	
	
#ifdef   DNP_MASTER_MODE
// abrir todos los sockets destinados a recibir conexiones de DNP esclavos
for (TmpCntr=0 ; TmpCntr<MAX_SRV_TCPSOCH ; TmpCntr++)
{
	  // Puerto TCP Server recibir mensajes DNP_ETH desde el conversor remoto
	  TcpSockSrv[TmpCntr].TcpSrvTcpSoch = tcp_getsocket(TCP_TYPE_SERVER, TCP_TOS_NORMAL, TCP_SRV_TOUT, TCP_SrvTcpEventlistener);
	  if ( TcpSockSrv[TmpCntr].TcpSrvTcpSoch < 0 ){
		  DEBUGOUT("TCP: Unable to get socket. Resetting!!!\r\n");
		  RESET_SYSTEM();
	  }	 	
	  (void)tcp_listen(TcpSockSrv[TmpCntr].TcpSrvTcpSoch, TCP_DNPSRV_PORT);  // listen on port TCP_DNPSRV_PORT
//	(void)tcp_listen(TcpSrvTcpSoch, (UINT16)(CliTcpSockPort));  // listen on port CliTcpRemotePort
	  TcpSockSrv[TmpCntr].status = STATUS_LISTENING;
		TcpSockSrv[TmpCntr].SlaveIpAddress = 0;
  	TcpSockSrv[TmpCntr].SlaveTcpPort = 0;
  	TcpSockSrv[TmpCntr].SlaveNodeAddress = 0;
    TcpSockSrv[TmpCntr].BufferToken = 0xFF;
  	
}

#endif //  DNP_MASTER_MODE			
					
  // Puerto TCP para Server de mensajes de configuraciзn, recibidos por GWY_Config desde PC
	TcpConfigSoch = tcp_getsocket(TCP_TYPE_SERVER, TCP_TOS_NORMAL, TCP_DEF_TOUT, TCP_ConfigEventlistener);
	if ( TcpConfigSoch < 0 ){
		DEBUGOUT("TCP: Unable to get socket. Resetting!!!\r\n");
		RESET_SYSTEM();
	} 	
	(void)tcp_listen(TcpConfigSoch, TCP_CFG_PORT);  // listen on some port TCP_CFG_PORT


#ifdef   DNP_SLAVE_MODE

  // Puerto TCP  para Cliente DNP, envьa los mensajes recibidos por puerto serie.
 	TcpCliTcpSoch = tcp_getsocket(TCP_TYPE_CLIENT, TCP_TOS_NORMAL, TCP_CLI_TOUT, TCP_CliTcpEventlistener);	

	if ( TcpCliTcpSoch < 0 ){
		DEBUGOUT("TCP: Unable to get socket. Resetting!!!\r\n");
		RESET_SYSTEM();
	}
	
//  if (tcp_getstate(TcpCliTcpSoch) != TCP_STATE_CONNECTED){
//      (void) tcp_connect (TcpCliTcpSoch, CliTcpIp, (UINT16)(CliTcpSockPort), 0);//(UINT16)(DNP_LOCAL_PORT) );
//  }

#endif  // DNP_SLAVE_MODE	

	TcpConfigState =  FALSE;
	
}
Beispiel #6
0
//--------------------------------------------------------------------------------------
//-- Funcion de Reinicialización en caso de fallas 
//
void SCIA_ReInit (BYTE TargetProc, BYTE  ProtocolFrame)
{
  BYTE    tmp_cfgCode;	
  BYTE    tmp_byteIdx;	

  SCIA_TargetProc = TargetProc;
  SCIA_ProtocolFrame =  ProtocolFrame;

 // leer byte de configuración para la comunicacion serie
  eeprom_read_buffer(EE_ADDR_CFG_SCIA, &tmp_cfgCode, 1);
  tmp_byteIdx = tmp_cfgCode & CFG_SCI_BAUDRATE_MASK;
  SCIA_SCIBD  = BaudCode2RegVal[tmp_byteIdx];

 // leer byte de configuración para la comunicacion serie
  eeprom_read_buffer(EE_ADDR_CFG_SCIA, &tmp_cfgCode, 1);
  tmp_byteIdx = tmp_cfgCode & CFG_SCI_BAUDRATE_MASK;
  SCIA_SCIBD  = BaudCode2RegVal[tmp_byteIdx];
  if ((tmp_cfgCode & CFG_SCI_PARITY_NONE) != CFG_SCI_PARITY_NONE){	  // Habilitar paridad
    SCIA_SCICR1 = SCI1CR1_PE_MASK;                    // 7 bits de datos + paridad = 8 bits
    if (!(tmp_cfgCode & CFG_SCI_DATABITS_MASK)){      // 8 bits de datos
      SCIA_SCICR1 |= SCI1CR1_M_MASK;                  // total 9 bits: 8 bits de datos, + paridad 
    }
    if (tmp_cfgCode & CFG_SCI_PARITY_ODD){
      SCIA_SCICR1 |= SCI1CR1_PT_MASK;                 //  paridad IMPAR
    }
  }
  
  SCIA_ConfigByte = tmp_cfgCode;
  SCIA_SCICR2 = 0x00;
  
  eeprom_read_buffer(EE_ADDR_TMR_TXWAIT_SCIA, (UINT8 *)&SCIA_TMR_TX_TIMEOUT, 2);			// Tiempo de espera para transmitir una trama entera (2 BYTES)
  eeprom_read_buffer(EE_ADDR_TMR_RXWAIT_SCIA, (UINT8 *)&SCIA_TMR_RX_TIMEOUT, 2);			// Tiempo de espera para recibir una trama entera (2 BYTES)
  eeprom_read_buffer(EE_ADDR_TMR_DRIVE_SCIA, (UINT8 *)&SCIA_TMR_DRIVE_TIMEOUT, 2); 	// Tiempo antes de enviar datos despues de establecer DRIVE 485 (2 BYTES)
  

  RS485CFG_A_DE   = 1;              // control DE como salida, RS485_A
  RS485CFG_A_RE_  = 1;              // control RE# como salida, RS485_A
  RS485CFG_A_SEL  = 1;              // control del MUX para selección de modo, como salida  
  
  if (SCIA_ConfigByte & CFG_SCI_PHYMODE_MASK){            // modo RS485
    RS485_A_SEL     = MUX_SEL_RS485;  // MUX seleccionado para tomar señales del DS3695       
    RS485_A_RE_     = 0; 				      // RE# = 0 incializado para recibir
    RS485_A_DE      = 0;				      // DE = 0  incializado para recibir
  } 
  else{
    RS485_A_SEL     = MUX_SEL_RS232;  // MUX seleccionado para tomar señales del MAX232     
  }

  StatisticData.SerialStat.MsgTxOk    = 0x0000;
  StatisticData.SerialStat.MsgRxOk    = 0x0000;
  StatisticData.SerialStat.MsgTxErr   = 0x0000;
  StatisticData.SerialStat.MsgRxErr   = 0x0000;

  SCIA_RxByteCount = 0x00;   
  SCIA_TxByteCount = 0x00;   
  SCIA_StateFlags  = 0x00;
  SCIA_CurrentTxToken = 0xFF;       // Ningún buffer transmitiéndose, habilitado para TX      
    
	CurrentProcessState [PROC_SCIA] = (EVENT_FUNCTION*)SCIAProc_IDLE;	
  
//  SCIA_SCICR2 |=  SCI1CR2_RE_MASK ;			// Rx Enable
//  SCIA_SCICR2 |=  SCI1CR2_TE_MASK ; 		// Tx Enable
  
}
Beispiel #7
0
////////////////////////////////////////////////////////////////////////////////////////////////
// Funciones Auxiliares del Proceso
////////////////////////////////////////////////////////////////////////////////////////////////
//
//--------------------------------------------------------------------------------------
//-- Funcion de Inicialización
//
void SCIB_Init (BYTE TargetProc, BYTE  ProtocolFrame, BYTE _SCI_RX_MSG, BYTE _SCI_RX_ERR, BYTE _SCI_TX_MSG, BYTE _SCI_TX_ERR, BYTE _SCI_TX_BUSY)
{
  BYTE    tmp_cfgCode;	
  BYTE    tmp_byteIdx;	
  UINT8*  pTmpRxBuffer;
  UINT8   bTmpToken; 
  UINT16  wSenRequestParam;

  SCIB_TargetProc = TargetProc;
  SCIB_ProtocolFrame =  ProtocolFrame;

  SCIB_RX_TimerID = 0xFF;
  SCIB_TX_TimerID = 0xFF;


  SCIB_EVT_SCI_RXMSG = _SCI_RX_MSG;
  SCIB_EVT_SCI_RXERR = _SCI_RX_ERR;
  SCIB_EVT_SCI_TXMSG = _SCI_TX_MSG;
  SCIB_EVT_SCI_TXERR = _SCI_TX_ERR;
  SCIB_EVT_SCI_TXBUSY = _SCI_TX_BUSY;
  
 // leer byte de configuración para la comunicacion serie
  eeprom_read_buffer(EE_ADDR_CFG_SCIB, &tmp_cfgCode, 1);
  tmp_byteIdx = tmp_cfgCode & CFG_SCI_BAUDRATE_MASK;
  SCIB_SCIBD  = BaudCode2RegVal[tmp_byteIdx];
  SCIB_SCICR1 = 0x00;
  if ((tmp_cfgCode & CFG_SCI_PARITY_NONE) != CFG_SCI_PARITY_NONE){	  // Habilitar paridad
    SCIB_SCICR1 = SCI1CR1_PE_MASK;                    // 7 bits de datos + paridad = 8 bits
    if (!(tmp_cfgCode & CFG_SCI_DATABITS_MASK)){      // 8 bits de datos
      SCIB_SCICR1 |= SCI1CR1_M_MASK;                  // total 9 bits: 8 bits de datos, + paridad 
    }
    if (tmp_cfgCode & CFG_SCI_PARITY_ODD){
      SCIB_SCICR1 |= SCI1CR1_PT_MASK;                 //  paridad IMPAR
    }
  }
  
  SCIB_ConfigByte = tmp_cfgCode;
  SCIB_SCICR2 = 0x00; 
  
  eeprom_read_buffer(EE_ADDR_TMR_TXWAIT_SCIB, (UINT8 *)&SCIB_TMR_TX_TIMEOUT, 2);			// Tiempo de espera para transmitir una trama entera (2 BYTES)
  eeprom_read_buffer(EE_ADDR_TMR_RXWAIT_SCIB, (UINT8 *)&SCIB_TMR_RX_TIMEOUT, 2);			// Tiempo de espera para recibir una trama entera (2 BYTES)
  eeprom_read_buffer(EE_ADDR_TMR_DRIVE_SCIB, (UINT8 *)&SCIB_TMR_DRIVE_TIMEOUT, 2); 	// Tiempo antes de enviar datos despues de establecer DRIVE 485 (2 BYTES)
  
   
  RS485CFG_B_DE   = 1;              // control DE como salida, RS485_A
  RS485CFG_B_RE_  = 1;              // control RE# como salida, RS485_A
  RS485CFG_B_SEL  = 1;              // control del MUX para selección de modo, como salida  
  
  if (SCIB_ConfigByte & CFG_SCI_PHYMODE_MASK){            // modo RS485
    RS485_B_SEL     = MUX_SEL_RS485;  // MUX seleccionado para tomar señales del DS3695       
    RS485_B_RE_     = 0; 				      // RE# = 0 incializado para recibir
    RS485_B_DE      = 0;				      // DE = 0  incializado para recibir
  } 
  else{
    RS485_B_SEL     = MUX_SEL_RS232;  // MUX seleccionado para tomar señales del MAX232     
  }

  SCIB_CurrentTxToken = 0xFF;       // Ningún buffer transmitiéndose, habilitado para TX      
  StatisticData.SerialStat.MsgTxOk    = 0x0000;
  StatisticData.SerialStat.MsgRxOk    = 0x0000;
  StatisticData.SerialStat.MsgTxErr   = 0x0000;
  StatisticData.SerialStat.MsgRxErr   = 0x0000;
  SCIB_TxErrAcc = 0x00;
  SCIB_RxErrAcc = 0x00;
  SCIB_RxByteCount = 0x00;   
  SCIB_TxByteCount = 0x00;   
  SCIB_StateFlags  = 0x00;

  SCIB_SCICR2 = 0x00;  
//  SCIB_SCICR2 |=  SCI1CR2_RE_MASK ;			// Rx Enable
//  SCIB_SCICR2 |=  SCI1CR2_TE_MASK ; 		// Tx Enable


  // Si es Modbus SLAVE, pedir un buffer y quedar en recepcion
  if (SCIB_ProtocolFrame == SCI_FRAME_MODBUSRTU_SLV)
  {
      if ( ERROR == MemGetBuffer ( (void**)(&pTmpRxBuffer), &bTmpToken)){
          // TODO: ABR, implementar logs en FLASH
          //PutEventMsg (EVT_LOG_ID, PROC_DEBUG, OS_NOT_PROC, (UINT16)LOG_ID_TCP_NOBUFF);    
          MON_ResetIfNotConnected(0x26);
          return; 
      }  
      wSenRequestParam = 0;     // En la parte alta del parámetro se pasa el offset de transmisión
      wSenRequestParam <<= 8;
      wSenRequestParam |= bTmpToken;
      
      (void)MemSetUsedLen(bTmpToken, 0x08);   // Recibir por lo menos 8 bytes
      
      PutEventMsg (EVT_SCI_RXALL, PROC_SCIB, PROC_SCIB, wSenRequestParam );
  }
  
}
Beispiel #8
0
/*********************************************************************
*
* FUNCTION:			DemoXML
*
* ARGUMENTS:		fat_index   Index of the file system table entry
*                   wLen        Lenght of the request string from the web page
*                   bSession    Http session
*
* RETURNS:			None
*
* DESCRIPTION:		Builds the XML tags and send it to the web page to populate the page
*              
* RESTRICTIONS:		
*
*********************************************************************/
void DemoXML(BYTE fat_index, WORD wLen, BYTE bSession)
{
//  static BYTE sndbuf[512];
  static BYTE sndbuf[450];
	BYTE tmpbuf[100];
	WORD i = 0;
	USR_DYNAMIC_INITIALIZE *  StringFieldPtr;
	
//  fat_index++;  //not used - stops compiler warning
  wLen++;				//not used - stops compiler warning
  
  
 	(void)strcpy((char*)sndbuf, scsHeader);
 	
 	switch (fat_index){
 	  case 1:
 	    StringFieldPtr = (USR_DYNAMIC_INITIALIZE *)StringStatistic;
 	    break;
 
 	  case 3:					// DataObs.xml =  Campo de observaciones
      (void)strcat((char*)sndbuf, (char*)"<par_HW_obs>");
     	eeprom_read_buffer(EE_ADDR_VER_TEXT,(UINT8*)tmpbuf,30);
      (void)strcat((char*)sndbuf, (char*)tmpbuf);
      (void)strcat((char*)sndbuf, (char*)"</par_HW_obs>\n");
      
 	    (void)strcat((char*)sndbuf, scsTrailer);
	    https[bSession].fstart   = (UINT32)sndbuf;
	    https[bSession].fstart   |= (UINT32)0xF0000000;
	    https[bSession].flen     = strlen((char*)sndbuf);
	    https[bSession].fpoint   = 0;
	    https[bSession].funacked = 0;
			return;
 	    break; 	    
 	    
#ifdef   DNP_MASTER_MODE
 	  case 4:
 	    StringFieldPtr = (USR_DYNAMIC_INITIALIZE *)Socket_01;
 	    break;

 	  case 5:
 	    StringFieldPtr = (USR_DYNAMIC_INITIALIZE *)Socket_02;
 	    break;

 	  case 6:
 	    StringFieldPtr = (USR_DYNAMIC_INITIALIZE *)Socket_03;
 	    break;
#endif

 	  default:
 	    StringFieldPtr = (USR_DYNAMIC_INITIALIZE *)StringFields;
 	    break;
 	    
 	}


	while (StringFieldPtr[i].fieldDataSource != NULL)
	{
		LoadValue((char*)tmpbuf, sizeof(tmpbuf),(USR_DYNAMIC_INITIALIZE *)&StringFieldPtr[i]);
        (void)strcat((char*)sndbuf, (char*)tmpbuf);
		i++;
	}

	(void)strcat((char*)sndbuf, scsTrailer);
	
	// ABR: agregar verificación de longitud máxima.. (ToDo)

	/* Modify structure	*/
	https[bSession].fstart   = (UINT32)sndbuf;
	https[bSession].fstart   |= (UINT32)0xF0000000;
	https[bSession].flen     = strlen((char*)sndbuf);
	https[bSession].fpoint   = 0;
	https[bSession].funacked = 0;

}