Message logging
This commit is contained in:
parent
9fc984d6f2
commit
f6baf22907
|
@ -107,8 +107,6 @@ AssemblyDebug_Render(panel* Panel, rect2 PanelBounds, render_command_buffer* Ren
|
||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ui_RangeSlider(Interface, MakeString("Test"), .5f, 0, 1);
|
|
||||||
|
|
||||||
ui_PopLayout(Interface, MakeString("Assembly Debug Layout"));
|
ui_PopLayout(Interface, MakeString("Assembly Debug Layout"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -133,7 +133,8 @@ UPDATE_AND_RENDER(UpdateAndRender)
|
||||||
Editor_Render(State, Context, RenderBuffer);
|
Editor_Render(State, Context, RenderBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if SEND_DATA
|
#define SEND_DATA
|
||||||
|
#ifdef SEND_DATA
|
||||||
// NOTE(pjs): Building data buffers to be sent out to the sculpture
|
// NOTE(pjs): Building data buffers to be sent out to the sculpture
|
||||||
// This array is used on the platform side to actually send the information
|
// This array is used on the platform side to actually send the information
|
||||||
assembly_array SACNAssemblies = AssemblyArray_Filter(State->Assemblies, AssemblyFilter_OutputsViaSACN, State->Transient);
|
assembly_array SACNAssemblies = AssemblyArray_Filter(State->Assemblies, AssemblyFilter_OutputsViaSACN, State->Transient);
|
||||||
|
|
|
@ -201,7 +201,7 @@ typedef struct system_time
|
||||||
s32 Second;
|
s32 Second;
|
||||||
} system_time;
|
} system_time;
|
||||||
|
|
||||||
#define STATUS_PACKET_FREQ_SECONDS 5
|
#define STATUS_PACKET_FREQ_SECONDS 2
|
||||||
|
|
||||||
struct context
|
struct context
|
||||||
{
|
{
|
||||||
|
|
|
@ -264,6 +264,11 @@ Win32SocketPeek(platform_socket* Socket)
|
||||||
{
|
{
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
|
case WSAECONNABORTED:
|
||||||
|
{
|
||||||
|
Win32CloseSocket(Socket);
|
||||||
|
}break;
|
||||||
|
|
||||||
InvalidDefaultCase;
|
InvalidDefaultCase;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -302,6 +307,14 @@ Win32SocketReceive(platform_socket* Socket, gs_memory_arena* Storage)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct status_packet_foo
|
||||||
|
{
|
||||||
|
u8 NextMotorEventType;
|
||||||
|
u32 NextEventTime;
|
||||||
|
char AnimFileName[32];
|
||||||
|
} status_packet;
|
||||||
|
|
||||||
internal s32
|
internal s32
|
||||||
Win32SocketSend(platform_socket* Socket, u32 Address, u32 Port, gs_data Data, s32 Flags)
|
Win32SocketSend(platform_socket* Socket, u32 Address, u32 Port, gs_data Data, s32 Flags)
|
||||||
{
|
{
|
||||||
|
@ -312,8 +325,11 @@ Win32SocketSend(platform_socket* Socket, u32 Address, u32 Port, gs_data Data, s3
|
||||||
SockAddress.sin_port = HostToNetU16(Port);
|
SockAddress.sin_port = HostToNetU16(Port);
|
||||||
SockAddress.sin_addr.s_addr = HostToNetU32(Address);
|
SockAddress.sin_addr.s_addr = HostToNetU32(Address);
|
||||||
|
|
||||||
|
status_packet_foo* Foo = (status_packet_foo*)Data.Memory;
|
||||||
|
|
||||||
s32 LengthSent = sendto(*Win32Sock, (char*)Data.Memory, Data.Size, Flags, (sockaddr*)&SockAddress, sizeof(sockaddr_in));
|
s32 LengthSent = sendto(*Win32Sock, (char*)Data.Memory, Data.Size, Flags, (sockaddr*)&SockAddress, sizeof(sockaddr_in));
|
||||||
|
|
||||||
|
OutputDebugString("Attempting To Send Network Data: ");
|
||||||
if (LengthSent == SOCKET_ERROR)
|
if (LengthSent == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
s32 Error = WSAGetLastError();
|
s32 Error = WSAGetLastError();
|
||||||
|
@ -330,6 +346,12 @@ Win32SocketSend(platform_socket* Socket, u32 Address, u32 Port, gs_data Data, s3
|
||||||
// TODO(Peter): :ErrorLogging
|
// TODO(Peter): :ErrorLogging
|
||||||
InvalidCodePath;
|
InvalidCodePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OutputDebugString("Error\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
OutputDebugString("Sent\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return LengthSent;
|
return LengthSent;
|
||||||
|
@ -368,9 +390,11 @@ Win32Socket_SendTo(platform_socket_handle SocketHandle, u32 Address, u32 Port, c
|
||||||
|
|
||||||
s32 LengthSent = sendto(Socket->Socket, Buffer, BufferLength, Flags, (sockaddr*)&SockAddress, sizeof(sockaddr_in));
|
s32 LengthSent = sendto(Socket->Socket, Buffer, BufferLength, Flags, (sockaddr*)&SockAddress, sizeof(sockaddr_in));
|
||||||
|
|
||||||
|
OutputDebugString("Attempting To Send Network Data: ");
|
||||||
if (LengthSent == SOCKET_ERROR)
|
if (LengthSent == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
s32 Error = WSAGetLastError();
|
s32 Error = WSAGetLastError();
|
||||||
|
OutputDebugString("Error\n");
|
||||||
if (Error == 10051)
|
if (Error == 10051)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -380,6 +404,10 @@ Win32Socket_SendTo(platform_socket_handle SocketHandle, u32 Address, u32 Port, c
|
||||||
InvalidCodePath;
|
InvalidCodePath;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
OutputDebugString("Sent\n");
|
||||||
|
}
|
||||||
|
|
||||||
return LengthSent;
|
return LengthSent;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,26 +37,21 @@ MessageQueue_Init(blumen_network_msg_queue* Queue, gs_memory_arena* Arena)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal gs_data*
|
|
||||||
MessageQueue_GetWrite(blumen_network_msg_queue* Queue)
|
|
||||||
{
|
|
||||||
u32 Index = Queue->WriteHead++;
|
|
||||||
gs_data* Result = &Queue->Buffers[Index];
|
|
||||||
Assert(Result->Size > 0);
|
|
||||||
|
|
||||||
if (Queue->WriteHead >= PACKETS_MAX)
|
|
||||||
{
|
|
||||||
Queue->WriteHead = 0;
|
|
||||||
}
|
|
||||||
return Result;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal bool
|
internal bool
|
||||||
MessageQueue_Write(blumen_network_msg_queue* Queue, gs_data Msg)
|
MessageQueue_Write(blumen_network_msg_queue* Queue, gs_data Msg)
|
||||||
{
|
{
|
||||||
gs_data* Dest = MessageQueue_GetWrite(Queue);
|
|
||||||
Assert(Msg.Size <= DEFAULT_QUEUE_ENTRY_SIZE);
|
Assert(Msg.Size <= DEFAULT_QUEUE_ENTRY_SIZE);
|
||||||
|
|
||||||
|
u32 Index = Queue->WriteHead;
|
||||||
|
gs_data* Dest = Queue->Buffers + Index;
|
||||||
CopyMemoryTo(Msg.Memory, Dest->Memory, Msg.Size);
|
CopyMemoryTo(Msg.Memory, Dest->Memory, Msg.Size);
|
||||||
|
Dest->Size = Msg.Size;
|
||||||
|
|
||||||
|
// NOTE(pjs): We increment write head at the end of writing so that
|
||||||
|
// a reader thread doesn't pull the message off before we've finished
|
||||||
|
// filling it out
|
||||||
|
Queue->WriteHead++;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal bool
|
internal bool
|
||||||
|
@ -104,8 +99,6 @@ BlumenLumen_MicListenJob(gs_thread_context* Ctx, u8* UserData)
|
||||||
u32 Port = WeathermanPort;
|
u32 Port = WeathermanPort;
|
||||||
s32 Flags = 0;
|
s32 Flags = 0;
|
||||||
SocketSend(Data->SocketManager, Data->ListenSocket, Address, Port, Msg, Flags);
|
SocketSend(Data->SocketManager, Data->ListenSocket, Address, Port, Msg, Flags);
|
||||||
|
|
||||||
OutputDebugString("Sending Motor Packet\n");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -180,7 +173,7 @@ BlumenLumen_CustomInit(app_state* State, context Context)
|
||||||
BLState->MicListenJobData.OutgoingMsgQueue = &BLState->OutgoingMsgQueue;
|
BLState->MicListenJobData.OutgoingMsgQueue = &BLState->OutgoingMsgQueue;
|
||||||
BLState->MicListenJobData.ListenSocket = CreateSocket(Context.SocketManager, "127.0.0.1", "20185");
|
BLState->MicListenJobData.ListenSocket = CreateSocket(Context.SocketManager, "127.0.0.1", "20185");
|
||||||
|
|
||||||
#if 0
|
#if 1
|
||||||
BLState->MicListenThread = CreateThread(Context.ThreadManager, BlumenLumen_MicListenJob, (u8*)&BLState->MicListenJobData);
|
BLState->MicListenThread = CreateThread(Context.ThreadManager, BlumenLumen_MicListenJob, (u8*)&BLState->MicListenJobData);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -284,18 +277,30 @@ BlumenLumen_CustomUpdate(gs_data UserData, app_state* State, context* Context)
|
||||||
State->AnimationSystem.ActiveFadeGroup.From.Index = 2;
|
State->AnimationSystem.ActiveFadeGroup.From.Index = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
OutputDebugStringA("Received Pattern Packet\n");
|
OutputDebugStringA("\nReceived Pattern Packet\n");
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
case PacketType_MotorState:
|
case PacketType_MotorState:
|
||||||
{
|
{
|
||||||
motor_packet Motor = Packet.MotorPacket;
|
motor_packet Motor = Packet.MotorPacket;
|
||||||
|
|
||||||
|
// NOTE(pjs): Python sends multi-byte integers in little endian
|
||||||
|
// order. Have to unpack
|
||||||
|
u8* T = (u8*)&Motor.Temperature;
|
||||||
|
Motor.Temperature = (T[0] << 8 |
|
||||||
|
T[1] << 0);
|
||||||
|
|
||||||
BLState->LastKnownMotorState = Motor;
|
BLState->LastKnownMotorState = Motor;
|
||||||
|
|
||||||
gs_string Temp = PushStringF(State->Transient, 256, "Received Motor States: %d %d %d\n",
|
gs_string Temp = PushStringF(State->Transient, 256, "\nReceived Motor States: \n\tPos: %d %d %d\n\tErr: %d %d %d\n\tTemp: %d\n\n",
|
||||||
Motor.FlowerPositions[0],
|
Motor.FlowerPositions[0],
|
||||||
Motor.FlowerPositions[1],
|
Motor.FlowerPositions[1],
|
||||||
Motor.FlowerPositions[2]);
|
Motor.FlowerPositions[2],
|
||||||
|
Motor.MotorStatus[0],
|
||||||
|
Motor.MotorStatus[1],
|
||||||
|
Motor.MotorStatus[2],
|
||||||
|
(u32)Motor.Temperature
|
||||||
|
);
|
||||||
NullTerminate(&Temp);
|
NullTerminate(&Temp);
|
||||||
|
|
||||||
OutputDebugStringA(Temp.Str);
|
OutputDebugStringA(Temp.Str);
|
||||||
|
@ -307,14 +312,14 @@ BlumenLumen_CustomUpdate(gs_data UserData, app_state* State, context* Context)
|
||||||
|
|
||||||
if (Temp.Temperature > 21)
|
if (Temp.Temperature > 21)
|
||||||
{
|
{
|
||||||
BLState->BrightnessPercent = .5f;
|
BLState->BrightnessPercent = .25f;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BLState->BrightnessPercent = 1.f;
|
BLState->BrightnessPercent = 1.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
gs_string TempStr = PushStringF(State->Transient, 256, "Temperature: %d\n",
|
gs_string TempStr = PushStringF(State->Transient, 256, "\nTemperature: %d\n",
|
||||||
Temp.Temperature);
|
Temp.Temperature);
|
||||||
NullTerminate(&TempStr);
|
NullTerminate(&TempStr);
|
||||||
OutputDebugStringA(TempStr.Str);
|
OutputDebugStringA(TempStr.Str);
|
||||||
|
@ -334,29 +339,37 @@ BlumenLumen_CustomUpdate(gs_data UserData, app_state* State, context* Context)
|
||||||
time_range Range = MotorOpenTimes[i];
|
time_range Range = MotorOpenTimes[i];
|
||||||
|
|
||||||
bool CurrTimeInRange = SystemTimeIsInTimeRange(Context->SystemTime_Current, Range);
|
bool CurrTimeInRange = SystemTimeIsInTimeRange(Context->SystemTime_Current, Range);
|
||||||
|
|
||||||
bool LastTimeInRange = SystemTimeIsInTimeRange(Context->SystemTime_Last, Range);
|
bool LastTimeInRange = SystemTimeIsInTimeRange(Context->SystemTime_Last, Range);
|
||||||
|
|
||||||
if (CurrTimeInRange && !LastTimeInRange)
|
bool SendOpen = CurrTimeInRange && !LastTimeInRange;
|
||||||
|
|
||||||
|
r64 NanosSinceLastSend = ((r64)Context->SystemTime_Current.NanosSinceEpoch - (r64)BLState->LastSendTime.NanosSinceEpoch);
|
||||||
|
r64 SecondsSinceLastSend = NanosSinceLastSend / PowR32(10, 8);
|
||||||
|
|
||||||
|
SendOpen = SecondsSinceLastSend > 2;
|
||||||
|
if (SendOpen)
|
||||||
{
|
{
|
||||||
OutputDebugString("Open\n");
|
BLState->LastSendTime = Context->SystemTime_Current;
|
||||||
gs_data* Msg = MessageQueue_GetWrite(&BLState->OutgoingMsgQueue);
|
OutputDebugString("Motors: Open\n");
|
||||||
|
blumen_packet Packet = {};
|
||||||
blumen_packet* Packet = (blumen_packet*)Msg->Memory;
|
Packet.Type = PacketType_MotorState;
|
||||||
Packet->Type = PacketType_MotorState;
|
Packet.MotorPacket.FlowerPositions[0] = 2;
|
||||||
Packet->MotorPacket.FlowerPositions[0] = 2;
|
Packet.MotorPacket.FlowerPositions[1] = 2;
|
||||||
Packet->MotorPacket.FlowerPositions[1] = 2;
|
Packet.MotorPacket.FlowerPositions[2] = 2;
|
||||||
Packet->MotorPacket.FlowerPositions[2] = 2;
|
gs_data Msg = StructToData(&Packet, blumen_packet);
|
||||||
|
MessageQueue_Write(&BLState->OutgoingMsgQueue, Msg);
|
||||||
}
|
}
|
||||||
else if (!CurrTimeInRange && LastTimeInRange)
|
else if (!CurrTimeInRange && LastTimeInRange)
|
||||||
{
|
{
|
||||||
OutputDebugString("Close\n");
|
OutputDebugString("Motors: Close\n");
|
||||||
gs_data* Msg = MessageQueue_GetWrite(&BLState->OutgoingMsgQueue);
|
blumen_packet Packet = {};
|
||||||
|
Packet.Type = PacketType_MotorState;
|
||||||
blumen_packet* Packet = (blumen_packet*)Msg->Memory;
|
Packet.MotorPacket.FlowerPositions[0] = 1;
|
||||||
Packet->Type = PacketType_MotorState;
|
Packet.MotorPacket.FlowerPositions[1] = 1;
|
||||||
Packet->MotorPacket.FlowerPositions[0] = 1;
|
Packet.MotorPacket.FlowerPositions[2] = 1;
|
||||||
Packet->MotorPacket.FlowerPositions[1] = 1;
|
gs_data Msg = StructToData(&Packet, blumen_packet);
|
||||||
Packet->MotorPacket.FlowerPositions[2] = 1;
|
MessageQueue_Write(&BLState->OutgoingMsgQueue, Msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -377,23 +390,25 @@ BlumenLumen_CustomUpdate(gs_data UserData, app_state* State, context* Context)
|
||||||
// Send Status Packet
|
// Send Status Packet
|
||||||
{
|
{
|
||||||
system_time LastSendTime = BLState->LastStatusUpdateTime;
|
system_time LastSendTime = BLState->LastStatusUpdateTime;
|
||||||
s64 NanosSinceLastSend = ((s64)Context->SystemTime_Current.NanosSinceEpoch - (s64)LastSendTime.NanosSinceEpoch);
|
r64 NanosSinceLastSend = ((r64)Context->SystemTime_Current.NanosSinceEpoch - (r64)LastSendTime.NanosSinceEpoch);
|
||||||
s64 SecondsSinceLastSend = NanosSinceLastSend * 1000000000;
|
r64 SecondsSinceLastSend = NanosSinceLastSend / PowR32(10, 8);
|
||||||
if (SecondsSinceLastSend >= STATUS_PACKET_FREQ_SECONDS)
|
if (SecondsSinceLastSend >= STATUS_PACKET_FREQ_SECONDS)
|
||||||
{
|
{
|
||||||
BLState->LastStatusUpdateTime = Context->SystemTime_Current;
|
BLState->LastStatusUpdateTime = Context->SystemTime_Current;
|
||||||
gs_data* Msg = MessageQueue_GetWrite(&BLState->OutgoingMsgQueue);
|
|
||||||
|
|
||||||
OutputDebugString("Sending Status\n");
|
OutputDebugString("Sending Status\n");
|
||||||
|
|
||||||
blumen_packet* Packet = (blumen_packet*)Msg->Memory;
|
blumen_packet Packet = {};
|
||||||
Packet->Type = PacketType_LumenariumStatus;
|
Packet.Type = PacketType_LumenariumStatus;
|
||||||
Packet->StatusPacket.NextMotorEventType = 0;
|
Packet.StatusPacket.NextMotorEventType = 0;
|
||||||
Packet->StatusPacket.NextEventTime = 0;
|
Packet.StatusPacket.NextEventTime = 0;
|
||||||
|
|
||||||
animation* ActiveAnim = AnimationSystem_GetActiveAnimation(&State->AnimationSystem);
|
animation* ActiveAnim = AnimationSystem_GetActiveAnimation(&State->AnimationSystem);
|
||||||
CopyMemoryTo(ActiveAnim->Name.Str, Packet->StatusPacket.AnimFileName,
|
CopyMemoryTo(ActiveAnim->Name.Str, Packet.StatusPacket.AnimFileName,
|
||||||
Min(ActiveAnim->Name.Length, 32));
|
Min(ActiveAnim->Name.Length, 32));
|
||||||
|
Packet.StatusPacket.AnimFileName[ActiveAnim->Name.Length] = 0;
|
||||||
|
|
||||||
|
gs_data Msg = StructToData(&Packet, blumen_packet);
|
||||||
|
MessageQueue_Write(&BLState->OutgoingMsgQueue, Msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,14 @@ enum bl_python_packet_type
|
||||||
typedef struct motor_packet
|
typedef struct motor_packet
|
||||||
{
|
{
|
||||||
u8 FlowerPositions[3];
|
u8 FlowerPositions[3];
|
||||||
|
/*
|
||||||
|
u8 Motor1Pos;
|
||||||
|
u8 Motor2Pos;
|
||||||
|
u8 Motor3Pos;
|
||||||
|
*/
|
||||||
|
u8 MotorStatus[3];
|
||||||
|
u16 Temperature;
|
||||||
|
|
||||||
} motor_packet;
|
} motor_packet;
|
||||||
|
|
||||||
typedef struct microphone_packet
|
typedef struct microphone_packet
|
||||||
|
@ -46,13 +54,15 @@ enum motor_event_type
|
||||||
typedef struct status_packet
|
typedef struct status_packet
|
||||||
{
|
{
|
||||||
u8 NextMotorEventType;
|
u8 NextMotorEventType;
|
||||||
|
// u16 Padding;
|
||||||
u32 NextEventTime;
|
u32 NextEventTime;
|
||||||
|
|
||||||
char AnimFileName[32];
|
char AnimFileName[32];
|
||||||
} status_packet;
|
} status_packet;
|
||||||
|
|
||||||
typedef struct blumen_packet
|
typedef struct blumen_packet
|
||||||
{
|
{
|
||||||
bl_python_packet_type Type;
|
u8 Type;
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
motor_packet MotorPacket;
|
motor_packet MotorPacket;
|
||||||
|
@ -104,9 +114,12 @@ SystemTimeIsInTimeRange(system_time SysTime, time_range Range)
|
||||||
}
|
}
|
||||||
|
|
||||||
global time_range MotorOpenTimes[] = {
|
global time_range MotorOpenTimes[] = {
|
||||||
{ 14, 28, 14, 29 }
|
{ 17, 56, 17, 56 },
|
||||||
|
{ 17, 58, 17, 56 },
|
||||||
|
{ 18, 00, 18, 00 },
|
||||||
|
|
||||||
};
|
};
|
||||||
global u32 MotorOpenTimesCount = 1;
|
global u32 MotorOpenTimesCount = 3;
|
||||||
|
|
||||||
struct blumen_lumen_state
|
struct blumen_lumen_state
|
||||||
{
|
{
|
||||||
|
@ -131,6 +144,8 @@ struct blumen_lumen_state
|
||||||
// dim the leds.
|
// dim the leds.
|
||||||
r32 BrightnessPercent;
|
r32 BrightnessPercent;
|
||||||
system_time LastStatusUpdateTime;
|
system_time LastStatusUpdateTime;
|
||||||
|
|
||||||
|
system_time LastSendTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue