static LES_NetworkMessage* LES_CreateNetworkMessage(const LES_uint16 type, const LES_uint16 id, const LES_uint32 payloadSize, const int messageSize) { LES_NetworkMessage* const pNetworkMessage = (LES_NetworkMessage*)malloc(messageSize); pNetworkMessage->m_type = toBigEndian16(type); pNetworkMessage->m_id = toBigEndian16(id); pNetworkMessage->m_payloadSize = toBigEndian32(payloadSize); return pNetworkMessage; }
std::pair<size_t, bool> StreamWriter<StreamType>::append_signedInt(long long val) { using Int8 = std::numeric_limits<int8_t>; using Int16 = std::numeric_limits<int16_t>; using Int32 = std::numeric_limits<int32_t>; using Int64 = std::numeric_limits<int64_t>; byte b[8]; std::pair<size_t, bool> rtn(0, false); if(in_range(val, Int8::lowest(), Int8::max())) { write(Marker::Int8); write(static_cast<byte>(val)); rtn = std::make_pair(2, true); } else if(in_range(val, Int16::lowest(), Int16::max())) { const uint16_t tit = static_cast<uint16_t>(val); const uint16_t val = toBigEndian16(tit); std::memcpy(b, &val, 2); write(Marker::Int16); write(b, 2); rtn = std::make_pair(3, true); } else if(in_range(val, Int32::lowest(), Int32::max())) { const uint32_t tit = static_cast<uint32_t>(val); const uint32_t val = toBigEndian32(tit); std::memcpy(b, &val, 4); write(Marker::Int32); write(b, 4); rtn = std::make_pair(5, true); } else if(in_range(val, Int64::lowest(), Int64::max())) { const uint64_t tit = static_cast<uint64_t>(val); const uint64_t val = toBigEndian64(tit); std::memcpy(b, &val, 8); write(Marker::Int64); write(b, 8); rtn = std::make_pair(9, true); } return rtn; }
/*----------------------------------------------------------------------------*/ static void deviceInit(struct DeviceDriver *device, struct Interface *interface, PinNumber ledNumber, uint16_t address) { device->interface = interface; device->state = DEVICE_IDLE; device->desiredRate = DEVICE_CLOCK; device->localAddress = 0; device->deviceAddress = address; device->change = false; static_assert(MEMORY_ADDRESS_SIZE && MEMORY_ADDRESS_SIZE <= 2, "Incorrect address size"); if (MEMORY_ADDRESS_SIZE == 2) device->localAddress = toBigEndian16(device->localAddress); device->led = pinInit(ledNumber); pinOutput(device->led, false); }