Lumenarium/src/app/engine/foldhaus_assembly.h

118 lines
1.7 KiB
C
Raw Normal View History

2020-01-02 02:41:43 +00:00
//
// File: foldhaus_assembly.h
// Author: Peter Slattery
// Creation Date: 2020-01-01
//
#ifndef FOLDHAUS_ASSEMBLY_H
enum network_protocol
{
NetworkProtocol_SACN,
NetworkProtocol_ArtNet,
NetworkProtocol_UART,
NetworkProtocol_Count,
};
2019-11-23 00:07:25 +00:00
union pixel
{
struct
{
u8 R;
u8 G;
u8 B;
};
u8 Channels[3];
};
struct led_buffer
{
u32 LedCount;
pixel* Colors;
v4* Positions;
};
struct led_system
{
gs_allocator PlatformMemory;
u32 BuffersCountMax;
u32 BuffersCount;
led_buffer* Buffers;
u32 LedsCountTotal;
};
struct v2_tag
{
u64 NameHash;
u64 ValueHash;
};
struct strip_sacn_addr
{
s32 StartUniverse;
s32 StartChannel;
};
struct strip_uart_addr
{
u8 Channel;
};
struct v2_strip
{
s32 ControlBoxID; // TODO(Peter): I don't think we need this anymore
strip_sacn_addr SACNAddr;
strip_uart_addr UARTAddr;
// TODO(Peter): When we create more ways to calculate points, this needs to become
// a type enum and a union
v3 StartPosition;
v3 EndPosition;
u32 LedCount;
u32* LedLUT;
u32 TagsCount;
v2_tag* Tags;
};
struct led_strip_list
{
u32 Count;
u32 CountMax;
u32* StripIndices;
};
2019-11-23 00:07:25 +00:00
struct assembly
{
gs_memory_arena Arena;
2019-11-23 00:07:25 +00:00
gs_string Name;
gs_string FilePath;
2019-11-23 00:07:25 +00:00
r32 Scale;
v3 Center;
s32 LedCountTotal;
u32 LedBufferIndex;
u32 StripCount;
v2_strip* Strips;
network_protocol OutputMode;
2020-10-05 20:17:33 +00:00
gs_const_string UARTComPort;
2019-11-23 00:07:25 +00:00
};
2020-01-02 02:41:43 +00:00
struct assembly_array
{
u32 CountMax;
u32 Count;
assembly* Values;
};
2020-01-02 02:41:43 +00:00
internal led_buffer* LedSystemGetBuffer(led_system* System, u32 Index);
2020-01-02 02:41:43 +00:00
#define FOLDHAUS_ASSEMBLY_H
#endif // FOLDHAUS_ASSEMBLY_H