MCPcopy Create free account
hub / github.com/Duet3D/RepRapFirmware / WriteSetVariableResult

Method WriteSetVariableResult

src/SBC/DataTransfer.cpp:1438–1538  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1436}
1437
1438bool DataTransfer::WriteSetVariableResult(const char *varName, const ExpressionValue& value) noexcept
1439{
1440 // Calculate payload length
1441 const size_t varNameLength = strlen(varName);
1442 size_t payloadLength;
1443 String<StringLength50> rslt;
1444 switch (value.GetType())
1445 {
1446 case TypeCode::Bool:
1447 case TypeCode::DriverId_tc:
1448 case TypeCode::Uint32:
1449 case TypeCode::Float:
1450 case TypeCode::Int32:
1451 case TypeCode::Char:
1452 payloadLength = varNameLength;
1453 break;
1454 case TypeCode::CString:
1455 payloadLength = varNameLength + strlen(value.sVal);
1456 break;
1457 case TypeCode::IPAddress_tc:
1458 case TypeCode::MacAddress_tc:
1459 case TypeCode::DateTime_tc:
1460 // All these types are represented as strings
1461 value.AppendAsString(rslt.GetRef());
1462 payloadLength = varNameLength + rslt.strlen();
1463 break;
1464 case TypeCode::HeapString:
1465 payloadLength = varNameLength + value.shVal.GetLength();
1466 break;
1467
1468 default:
1469 rslt.printf("unsupported type code %d", (int)value.type);
1470 payloadLength = varNameLength + rslt.strlen();
1471 break;
1472 }
1473
1474 // Check if it fits
1475 if (!CanWritePacket(sizeof(EvaluationResultHeader) + payloadLength))
1476 {
1477 return false;
1478 }
1479
1480 // Write packet header
1481 (void)WritePacketHeader(FirmwareRequest::VariableResult, sizeof(EvaluationResultHeader) + payloadLength);
1482
1483 // Write partial header
1484 EvaluationResultHeader *header = WriteDataHeader<EvaluationResultHeader>();
1485 header->expressionLength = varNameLength;
1486
1487 // Write variable name
1488 WriteData(varName, varNameLength);
1489
1490 // Write data type and expression value
1491 switch (value.GetType())
1492 {
1493 case TypeCode::Bool:
1494 header->dataType = DataType::Bool;
1495 header->intValue = value.bVal ? 1 : 0;

Callers 1

ExchangeDataMethod · 0.80

Calls 8

AppendAsStringMethod · 0.80
GetTypeMethod · 0.45
GetLengthMethod · 0.45
printfMethod · 0.45
GetMethod · 0.45
LengthMethod · 0.45
DataMethod · 0.45
DataLengthMethod · 0.45

Tested by

no test coverage detected