Masking off the top leds if the flowers are open, and mapping between file names and clear core motor indices
This commit is contained in:
parent
83707b10b9
commit
bb7c175c33
|
@ -195,9 +195,11 @@ ConstructAssemblyFromDefinition (assembly* Assembly, led_system* LedSystem)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal assembly*
|
||||||
LoadAssembly (assembly_array* Assemblies, led_system* LedSystem, gs_memory_arena* Scratch, context Context, gs_const_string Path, event_log* GlobalLog)
|
LoadAssembly (assembly_array* Assemblies, led_system* LedSystem, gs_memory_arena* Scratch, context Context, gs_const_string Path, event_log* GlobalLog)
|
||||||
{
|
{
|
||||||
|
assembly* NewAssembly = 0;
|
||||||
|
|
||||||
gs_file AssemblyFile = ReadEntireFile(Context.ThreadContext.FileHandler, Path);
|
gs_file AssemblyFile = ReadEntireFile(Context.ThreadContext.FileHandler, Path);
|
||||||
if (FileNoError(AssemblyFile))
|
if (FileNoError(AssemblyFile))
|
||||||
{
|
{
|
||||||
|
@ -206,7 +208,7 @@ LoadAssembly (assembly_array* Assemblies, led_system* LedSystem, gs_memory_arena
|
||||||
s32 IndexOfLastSlash = FindLast(Path, '\\');
|
s32 IndexOfLastSlash = FindLast(Path, '\\');
|
||||||
gs_const_string FileName = Substring(Path, IndexOfLastSlash + 1, Path.Length);
|
gs_const_string FileName = Substring(Path, IndexOfLastSlash + 1, Path.Length);
|
||||||
|
|
||||||
assembly* NewAssembly = AssemblyArray_Take(Assemblies);
|
NewAssembly = AssemblyArray_Take(Assemblies);
|
||||||
NewAssembly->Arena = CreateMemoryArena(Context.ThreadContext.Allocator, "Assembly Arena");
|
NewAssembly->Arena = CreateMemoryArena(Context.ThreadContext.Allocator, "Assembly Arena");
|
||||||
|
|
||||||
parser AssemblyParser = ParseAssemblyFile(NewAssembly, FileName, AssemblyFileText, Scratch);
|
parser AssemblyParser = ParseAssemblyFile(NewAssembly, FileName, AssemblyFileText, Scratch);
|
||||||
|
@ -232,6 +234,8 @@ LoadAssembly (assembly_array* Assemblies, led_system* LedSystem, gs_memory_arena
|
||||||
{
|
{
|
||||||
LogError(GlobalLog, "Unable to load assembly file");
|
LogError(GlobalLog, "Unable to load assembly file");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return NewAssembly;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
|
|
|
@ -5,6 +5,24 @@
|
||||||
//
|
//
|
||||||
#ifndef BLUMEN_LUMEN_CPP
|
#ifndef BLUMEN_LUMEN_CPP
|
||||||
|
|
||||||
|
internal s32
|
||||||
|
GetCCIndex (assembly Assembly, blumen_lumen_state* BLState)
|
||||||
|
{
|
||||||
|
s32 Result = 0;
|
||||||
|
|
||||||
|
u64 AssemblyNameHash = HashDJB2ToU32(StringExpand(Assembly.Name));
|
||||||
|
for (u32 i = 0; i < BLState->AssemblyNameToClearCoreMapCount; i++)
|
||||||
|
{
|
||||||
|
if (AssemblyNameHash == BLState->AssemblyNameToClearCore_Names[i])
|
||||||
|
{
|
||||||
|
Result = (s32)i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
internal bool
|
internal bool
|
||||||
MessageQueue_CanRead(blumen_network_msg_queue* Queue)
|
MessageQueue_CanRead(blumen_network_msg_queue* Queue)
|
||||||
{
|
{
|
||||||
|
@ -190,9 +208,17 @@ BlumenLumen_CustomInit(app_state* State, context Context)
|
||||||
gs_const_string SculpturePath0 = ConstString("data/ss_blumen_one.fold");
|
gs_const_string SculpturePath0 = ConstString("data/ss_blumen_one.fold");
|
||||||
gs_const_string SculpturePath1 = ConstString("data/ss_blumen_two.fold");
|
gs_const_string SculpturePath1 = ConstString("data/ss_blumen_two.fold");
|
||||||
gs_const_string SculpturePath2 = ConstString("data/ss_blumen_three.fold");
|
gs_const_string SculpturePath2 = ConstString("data/ss_blumen_three.fold");
|
||||||
LoadAssembly(&State->Assemblies, &State->LedSystem, State->Transient, Context, SculpturePath0, State->GlobalLog);
|
assembly* Flower0 = LoadAssembly(&State->Assemblies, &State->LedSystem, State->Transient, Context, SculpturePath0, State->GlobalLog);
|
||||||
LoadAssembly(&State->Assemblies, &State->LedSystem, State->Transient, Context, SculpturePath1, State->GlobalLog);
|
assembly* Flower1 = LoadAssembly(&State->Assemblies, &State->LedSystem, State->Transient, Context, SculpturePath1, State->GlobalLog);
|
||||||
LoadAssembly(&State->Assemblies, &State->LedSystem, State->Transient, Context, SculpturePath2, State->GlobalLog);
|
assembly* Flower2 = LoadAssembly(&State->Assemblies, &State->LedSystem, State->Transient, Context, SculpturePath2, State->GlobalLog);
|
||||||
|
|
||||||
|
BLState->AssemblyNameToClearCoreMapCount = 3;
|
||||||
|
BLState->AssemblyNameToClearCore_Names = PushArray(&State->Permanent,
|
||||||
|
u64,
|
||||||
|
BLState->AssemblyNameToClearCoreMapCount);
|
||||||
|
BLState->AssemblyNameToClearCore_Names[0] = HashDJB2ToU32(StringExpand(Flower0->Name));
|
||||||
|
BLState->AssemblyNameToClearCore_Names[1] = HashDJB2ToU32(StringExpand(Flower1->Name));
|
||||||
|
BLState->AssemblyNameToClearCore_Names[2] = HashDJB2ToU32(StringExpand(Flower2->Name));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
|
@ -437,11 +463,23 @@ BlumenLumen_CustomUpdate(gs_data UserData, app_state* State, context* Context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(PS): This should really only happen if we think the
|
// NOTE(PS): If the flowers are mostly open or full open
|
||||||
// flower _might_ be open
|
// we mask off the top leds to prevent them from overheating
|
||||||
|
// while telescoped inside the flower
|
||||||
|
motor_packet CurrMotorPos = BLState->LastKnownMotorState;
|
||||||
for (u32 a = 0; a < State->Assemblies.Count; a++)
|
for (u32 a = 0; a < State->Assemblies.Count; a++)
|
||||||
{
|
{
|
||||||
assembly Assembly = State->Assemblies.Values[a];
|
assembly Assembly = State->Assemblies.Values[a];
|
||||||
|
u64 AssemblyCCIndex = GetCCIndex(Assembly, BLState);
|
||||||
|
|
||||||
|
u8 MotorPos = CurrMotorPos.FlowerPositions[AssemblyCCIndex];
|
||||||
|
|
||||||
|
if (MotorPos == MotorState_Closed ||
|
||||||
|
MotorPos == MotorState_HalfOpen)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
led_buffer Buffer = State->LedSystem.Buffers[Assembly.LedBufferIndex];
|
led_buffer Buffer = State->LedSystem.Buffers[Assembly.LedBufferIndex];
|
||||||
|
|
||||||
led_strip_list TopStrips = AssemblyStripsGetWithTagValue(Assembly, ConstString("section"), ConstString("inner_bloom"), State->Transient);
|
led_strip_list TopStrips = AssemblyStripsGetWithTagValue(Assembly, ConstString("section"), ConstString("inner_bloom"), State->Transient);
|
||||||
|
|
|
@ -14,6 +14,16 @@ enum bl_python_packet_type
|
||||||
PacketType_LumenariumStatus = 4,
|
PacketType_LumenariumStatus = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum bl_motor_state_value
|
||||||
|
{
|
||||||
|
MotorState_Invalid = 0,
|
||||||
|
|
||||||
|
MotorState_Closed = 1,
|
||||||
|
MotorState_Open = 2,
|
||||||
|
MotorState_HalfOpen = 3,
|
||||||
|
MotorState_MostlyOpen = 4,
|
||||||
|
};
|
||||||
|
|
||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
typedef struct motor_packet
|
typedef struct motor_packet
|
||||||
{
|
{
|
||||||
|
@ -171,6 +181,14 @@ struct blumen_lumen_state
|
||||||
system_time LastSendTime;
|
system_time LastSendTime;
|
||||||
|
|
||||||
v4 AssemblyColors[3];
|
v4 AssemblyColors[3];
|
||||||
|
|
||||||
|
// The indices of this array are the index the clear core uses to
|
||||||
|
// represent a motor.
|
||||||
|
// The values of the array are the names Lumenarium uses to
|
||||||
|
// represent assemblies.
|
||||||
|
//
|
||||||
|
u32 AssemblyNameToClearCoreMapCount;
|
||||||
|
u64* AssemblyNameToClearCore_Names;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue