예제 #1
0
string FieldBinding::GetFullType() const
{
  string type = GetType();

  if (IsClass())
  {
    type = string("class:") + type;
  }

  if (IsRepeated())
  {
    type = string("vector<") + type + ">";
  }

  return type;
}
void KnxTelegram::InfoVerbose(String& str) const
{
  byte payloadLength = GetPayloadLength();
  str+= "Repeat="; str+= IsRepeated() ? "YES" : "NO";
  str+="\nPrio=";
  switch(GetPriority())
  {
    case KNX_PRIORITY_SYSTEM_VALUE : str+="SYSTEM"; break;
    case KNX_PRIORITY_ALARM_VALUE : str+="ALARM"; break;
    case KNX_PRIORITY_HIGH_VALUE : str+="HIGH"; break;
    case KNX_PRIORITY_NORMAL_VALUE : str+="NORMAL"; break;
    default : str+="ERR_VAL!"; break;
  }
  str+="\nSrcAddr=" + String(GetSourceAddress(),HEX);
  str+="\nTargetAddr=" + String(GetTargetAddress(),HEX);
  str+="\nGroupAddr="; if (IsMulticast()) str+= "YES"; else str+="NO";
  str+="\nRout.Counter=" + String(GetRoutingCounter(),DEC);
  str+="\nPayloadLgth=" + String(payloadLength,DEC);
  str+="\nTelegramLength=" + String(GetTelegramLength(),DEC);
  str+="\nCommand=";
  switch(GetCommand())
  {
    case KNX_COMMAND_VALUE_READ : str+="VAL_READ"; break;
    case KNX_COMMAND_VALUE_RESPONSE : str+="VAL_RESP"; break;
    case KNX_COMMAND_VALUE_WRITE : str+="VAL_WRITE"; break;
    case KNX_COMMAND_MEMORY_WRITE : str+="MEM_WRITE"; break;
    default : str+="ERR_VAL!"; break;
  }
  str+="\nPayload=" + String(GetFirstPayloadByte(),HEX)+' ';
  for (byte i = 0; i < payloadLength-1; i++) str+=String(_payloadChecksum[i], HEX)+' ';
  str+="\nValidity=";
   switch(GetValidity())
  {
    case KNX_TELEGRAM_VALID : str+="VALID"; break;
    case KNX_TELEGRAM_INVALID_CONTROL_FIELD : str+="INVALID_CTRL_FIELD"; break;
    case KNX_TELEGRAM_UNSUPPORTED_FRAME_FORMAT : str+="UNSUPPORTED_FRAME_FORMAT"; break;
    case KNX_TELEGRAM_INCORRECT_PAYLOAD_LENGTH : str+="INCORRECT_PAYLOAD_LGTH"; break;
    case KNX_TELEGRAM_INVALID_COMMAND_FIELD : str+="INVALID_CMD_FIELD"; break;
    case KNX_TELEGRAM_UNKNOWN_COMMAND : str+="UNKNOWN_CMD"; break;
    case KNX_TELEGRAM_INCORRECT_CHECKSUM : str+="INCORRECT_CHKSUM"; break;
    default : str+="ERR_VAL!"; break;
  }
  str+='\n';
}
예제 #3
0
tinyxml2::XMLElement* FieldBinding::GenerateWsdl(tinyxml2::XMLDocument* doc) const
{
  tinyxml2::XMLElement* el = doc->NewElement("xs:element");
  el->SetAttribute("name", m_name.c_str());

  if (IsEnum())
  {
    tinyxml2::XMLElement* restriction = doc->NewElement("xs:restriction");
    restriction->SetAttribute("base", "xs:string");

    for (size_t x = 0; x < m_enumValues.size(); ++x)
    {
      tinyxml2::XMLElement* enumeration = doc->NewElement("xs:enumeration");
      enumeration->SetAttribute("value", m_enumValues[x].c_str());
      restriction->LinkEndChild(enumeration);
    }
    el->LinkEndChild(restriction);
  }
  else
  {
    if (IsOptional())
    {
      el->SetAttribute("minOccurs", "0");
    }

    if (IsRepeated())
    {
      el->SetAttribute("maxOccurs", "unbounded");
    }

    if (IsClass())
    {
      el->SetAttribute("type", (string("bntypes:") + m_type).c_str());
    }
    else
    {
      el->SetAttribute("type", (string("xs:") + m_type).c_str());
    }
  }

	return el;
}