Message logging

This commit is contained in:
Peter Slattery 2021-03-20 18:06:04 -07:00
parent 9fc984d6f2
commit f6baf22907
6 changed files with 113 additions and 56 deletions

View File

@ -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"));
} }

View File

@ -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);

View File

@ -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
{ {

View File

@ -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;
} }

View File

@ -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;
{
OutputDebugString("Open\n");
gs_data* Msg = MessageQueue_GetWrite(&BLState->OutgoingMsgQueue);
blumen_packet* Packet = (blumen_packet*)Msg->Memory; r64 NanosSinceLastSend = ((r64)Context->SystemTime_Current.NanosSinceEpoch - (r64)BLState->LastSendTime.NanosSinceEpoch);
Packet->Type = PacketType_MotorState; r64 SecondsSinceLastSend = NanosSinceLastSend / PowR32(10, 8);
Packet->MotorPacket.FlowerPositions[0] = 2;
Packet->MotorPacket.FlowerPositions[1] = 2; SendOpen = SecondsSinceLastSend > 2;
Packet->MotorPacket.FlowerPositions[2] = 2; if (SendOpen)
{
BLState->LastSendTime = Context->SystemTime_Current;
OutputDebugString("Motors: Open\n");
blumen_packet Packet = {};
Packet.Type = PacketType_MotorState;
Packet.MotorPacket.FlowerPositions[0] = 2;
Packet.MotorPacket.FlowerPositions[1] = 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);
} }
} }
} }

View File

@ -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;
}; };