2020-10-01 22:30:24 +00:00
|
|
|
//
|
|
|
|
// File: foldhaus_addressed_data.h
|
|
|
|
// Author: Peter Slattery
|
|
|
|
// Creation Date: 2020-10-01
|
|
|
|
//
|
|
|
|
// addressed_data_buffer is a generic buffer of data that also contains information
|
|
|
|
// regarding how it should be sent to a sculpture.
|
|
|
|
// This decouples the encoding step from the sending step.
|
|
|
|
//
|
|
|
|
#ifndef FOLDHAUS_ADDRESSED_DATA_H
|
|
|
|
|
|
|
|
enum data_buffer_address_type
|
|
|
|
{
|
|
|
|
AddressType_NetworkIP,
|
2020-10-03 15:46:14 +00:00
|
|
|
AddressType_ComPort,
|
2020-10-01 22:30:24 +00:00
|
|
|
AddressType_Invalid,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct addressed_data_buffer
|
|
|
|
{
|
2020-10-03 15:46:14 +00:00
|
|
|
union
|
|
|
|
{
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
u8* Memory;
|
|
|
|
u32 MemorySize;
|
|
|
|
};
|
|
|
|
gs_data Data;
|
|
|
|
};
|
2020-10-01 22:30:24 +00:00
|
|
|
|
|
|
|
data_buffer_address_type AddressType;
|
|
|
|
|
|
|
|
// IP Address
|
2020-10-03 15:46:14 +00:00
|
|
|
platform_socket_handle SendSocket;
|
2020-10-01 22:30:24 +00:00
|
|
|
u32 V4SendAddress;
|
|
|
|
u32 SendPort;
|
|
|
|
|
2020-10-03 15:46:14 +00:00
|
|
|
// COM
|
|
|
|
gs_const_string ComPort;
|
|
|
|
|
2020-10-01 22:30:24 +00:00
|
|
|
addressed_data_buffer* Next;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct addressed_data_buffer_list
|
|
|
|
{
|
2020-10-03 15:46:14 +00:00
|
|
|
gs_memory_arena* Arena;
|
2020-10-01 22:30:24 +00:00
|
|
|
addressed_data_buffer* Root;
|
|
|
|
addressed_data_buffer* Head;
|
|
|
|
};
|
|
|
|
|
2020-10-03 15:46:14 +00:00
|
|
|
internal void
|
|
|
|
AddressedDataBufferList_Clear(addressed_data_buffer_list* List)
|
|
|
|
{
|
|
|
|
List->Root = 0;
|
|
|
|
List->Head = 0;
|
|
|
|
ClearArena(List->Arena);
|
|
|
|
}
|
|
|
|
|
2020-10-01 22:30:24 +00:00
|
|
|
internal addressed_data_buffer*
|
2020-10-03 15:46:14 +00:00
|
|
|
AddressedDataBufferList_PushEmpty(addressed_data_buffer_list* List)
|
2020-10-01 22:30:24 +00:00
|
|
|
{
|
2020-10-03 15:46:14 +00:00
|
|
|
addressed_data_buffer* Result = PushStruct(List->Arena, addressed_data_buffer);
|
2020-10-01 22:30:24 +00:00
|
|
|
*Result = {0};
|
2020-10-05 20:17:33 +00:00
|
|
|
Result->Next = 0;
|
2020-10-03 15:46:14 +00:00
|
|
|
Result->MemorySize = 0;
|
|
|
|
Result->Memory = 0;
|
2020-10-01 22:30:24 +00:00
|
|
|
|
|
|
|
SLLPushOrInit(List->Root, List->Head, Result);
|
|
|
|
|
|
|
|
return Result;
|
|
|
|
}
|
|
|
|
|
2020-10-03 15:46:14 +00:00
|
|
|
internal addressed_data_buffer*
|
|
|
|
AddressedDataBufferList_Push(addressed_data_buffer_list* List, u32 BufferSize)
|
2020-10-01 22:30:24 +00:00
|
|
|
{
|
2020-10-03 15:46:14 +00:00
|
|
|
addressed_data_buffer* Result = AddressedDataBufferList_PushEmpty(List);
|
|
|
|
Result->MemorySize = BufferSize;
|
|
|
|
Result->Memory = PushArray(List->Arena, u8, Result->MemorySize);
|
|
|
|
return Result;
|
2020-10-01 22:30:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
internal void
|
2020-10-03 15:46:14 +00:00
|
|
|
AddressedDataBuffer_SetNetworkAddress(addressed_data_buffer* Buffer, platform_socket_handle SendSocket, u32 V4SendAddress, u32 SendPort)
|
2020-10-01 22:30:24 +00:00
|
|
|
{
|
2020-10-03 15:46:14 +00:00
|
|
|
Buffer->AddressType = AddressType_NetworkIP;
|
|
|
|
Buffer->SendSocket = SendSocket;
|
|
|
|
Buffer->V4SendAddress = V4SendAddress;
|
|
|
|
Buffer->SendPort = SendPort;
|
2020-10-01 22:30:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
internal void
|
2020-10-03 15:46:14 +00:00
|
|
|
AddressedDataBuffer_SetCOMPort(addressed_data_buffer* Buffer, gs_const_string ComPort)
|
2020-10-01 22:30:24 +00:00
|
|
|
{
|
2020-10-03 15:46:14 +00:00
|
|
|
Buffer->AddressType = AddressType_ComPort;
|
|
|
|
Buffer->ComPort = ComPort;
|
2020-10-01 22:30:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#define FOLDHAUS_ADDRESSED_DATA_H
|
|
|
|
#endif // FOLDHAUS_ADDRESSED_DATA_H
|