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;
}
ui_RangeSlider(Interface, MakeString("Test"), .5f, 0, 1);
ui_PopLayout(Interface, MakeString("Assembly Debug Layout"));
}

View File

@ -133,7 +133,8 @@ UPDATE_AND_RENDER(UpdateAndRender)
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
// This array is used on the platform side to actually send the information
assembly_array SACNAssemblies = AssemblyArray_Filter(State->Assemblies, AssemblyFilter_OutputsViaSACN, State->Transient);

View File

@ -201,7 +201,7 @@ typedef struct system_time
s32 Second;
} system_time;
#define STATUS_PACKET_FREQ_SECONDS 5
#define STATUS_PACKET_FREQ_SECONDS 2
struct context
{

View File

@ -264,6 +264,11 @@ Win32SocketPeek(platform_socket* Socket)
{
}break;
case WSAECONNABORTED:
{
Win32CloseSocket(Socket);
}break;
InvalidDefaultCase;
}
}
@ -302,6 +307,14 @@ Win32SocketReceive(platform_socket* Socket, gs_memory_arena* Storage)
#endif
}
typedef struct status_packet_foo
{
u8 NextMotorEventType;
u32 NextEventTime;
char AnimFileName[32];
} status_packet;
internal s32
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_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));
OutputDebugString("Attempting To Send Network Data: ");
if (LengthSent == SOCKET_ERROR)
{
s32 Error = WSAGetLastError();
@ -330,6 +346,12 @@ Win32SocketSend(platform_socket* Socket, u32 Address, u32 Port, gs_data Data, s3
// TODO(Peter): :ErrorLogging
InvalidCodePath;
}
OutputDebugString("Error\n");
}
else
{
OutputDebugString("Sent\n");
}
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));
OutputDebugString("Attempting To Send Network Data: ");
if (LengthSent == SOCKET_ERROR)
{
s32 Error = WSAGetLastError();
OutputDebugString("Error\n");
if (Error == 10051)
{
}
@ -380,6 +404,10 @@ Win32Socket_SendTo(platform_socket_handle SocketHandle, u32 Address, u32 Port, c
InvalidCodePath;
}
}
else
{
OutputDebugString("Sent\n");
}
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
MessageQueue_Write(blumen_network_msg_queue* Queue, gs_data Msg)
{
gs_data* Dest = MessageQueue_GetWrite(Queue);
Assert(Msg.Size <= DEFAULT_QUEUE_ENTRY_SIZE);
u32 Index = Queue->WriteHead;
gs_data* Dest = Queue->Buffers + Index;
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
@ -104,8 +99,6 @@ BlumenLumen_MicListenJob(gs_thread_context* Ctx, u8* UserData)
u32 Port = WeathermanPort;
s32 Flags = 0;
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.ListenSocket = CreateSocket(Context.SocketManager, "127.0.0.1", "20185");
#if 0
#if 1
BLState->MicListenThread = CreateThread(Context.ThreadManager, BlumenLumen_MicListenJob, (u8*)&BLState->MicListenJobData);
#endif
@ -284,18 +277,30 @@ BlumenLumen_CustomUpdate(gs_data UserData, app_state* State, context* Context)
State->AnimationSystem.ActiveFadeGroup.From.Index = 2;
}
OutputDebugStringA("Received Pattern Packet\n");
OutputDebugStringA("\nReceived Pattern Packet\n");
}break;
case PacketType_MotorState:
{
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;
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[1],
Motor.FlowerPositions[2]);
Motor.FlowerPositions[2],
Motor.MotorStatus[0],
Motor.MotorStatus[1],
Motor.MotorStatus[2],
(u32)Motor.Temperature
);
NullTerminate(&Temp);
OutputDebugStringA(Temp.Str);
@ -307,14 +312,14 @@ BlumenLumen_CustomUpdate(gs_data UserData, app_state* State, context* Context)
if (Temp.Temperature > 21)
{
BLState->BrightnessPercent = .5f;
BLState->BrightnessPercent = .25f;
}
else
{
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);
NullTerminate(&TempStr);
OutputDebugStringA(TempStr.Str);
@ -334,29 +339,37 @@ BlumenLumen_CustomUpdate(gs_data UserData, app_state* State, context* Context)
time_range Range = MotorOpenTimes[i];
bool CurrTimeInRange = SystemTimeIsInTimeRange(Context->SystemTime_Current, Range);
bool LastTimeInRange = SystemTimeIsInTimeRange(Context->SystemTime_Last, Range);
if (CurrTimeInRange && !LastTimeInRange)
{
OutputDebugString("Open\n");
gs_data* Msg = MessageQueue_GetWrite(&BLState->OutgoingMsgQueue);
bool SendOpen = CurrTimeInRange && !LastTimeInRange;
blumen_packet* Packet = (blumen_packet*)Msg->Memory;
Packet->Type = PacketType_MotorState;
Packet->MotorPacket.FlowerPositions[0] = 2;
Packet->MotorPacket.FlowerPositions[1] = 2;
Packet->MotorPacket.FlowerPositions[2] = 2;
r64 NanosSinceLastSend = ((r64)Context->SystemTime_Current.NanosSinceEpoch - (r64)BLState->LastSendTime.NanosSinceEpoch);
r64 SecondsSinceLastSend = NanosSinceLastSend / PowR32(10, 8);
SendOpen = SecondsSinceLastSend > 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)
{
OutputDebugString("Close\n");
gs_data* Msg = MessageQueue_GetWrite(&BLState->OutgoingMsgQueue);
blumen_packet* Packet = (blumen_packet*)Msg->Memory;
Packet->Type = PacketType_MotorState;
Packet->MotorPacket.FlowerPositions[0] = 1;
Packet->MotorPacket.FlowerPositions[1] = 1;
Packet->MotorPacket.FlowerPositions[2] = 1;
OutputDebugString("Motors: Close\n");
blumen_packet Packet = {};
Packet.Type = PacketType_MotorState;
Packet.MotorPacket.FlowerPositions[0] = 1;
Packet.MotorPacket.FlowerPositions[1] = 1;
Packet.MotorPacket.FlowerPositions[2] = 1;
gs_data Msg = StructToData(&Packet, blumen_packet);
MessageQueue_Write(&BLState->OutgoingMsgQueue, Msg);
}
}
}
@ -377,23 +390,25 @@ BlumenLumen_CustomUpdate(gs_data UserData, app_state* State, context* Context)
// Send Status Packet
{
system_time LastSendTime = BLState->LastStatusUpdateTime;
s64 NanosSinceLastSend = ((s64)Context->SystemTime_Current.NanosSinceEpoch - (s64)LastSendTime.NanosSinceEpoch);
s64 SecondsSinceLastSend = NanosSinceLastSend * 1000000000;
r64 NanosSinceLastSend = ((r64)Context->SystemTime_Current.NanosSinceEpoch - (r64)LastSendTime.NanosSinceEpoch);
r64 SecondsSinceLastSend = NanosSinceLastSend / PowR32(10, 8);
if (SecondsSinceLastSend >= STATUS_PACKET_FREQ_SECONDS)
{
BLState->LastStatusUpdateTime = Context->SystemTime_Current;
gs_data* Msg = MessageQueue_GetWrite(&BLState->OutgoingMsgQueue);
OutputDebugString("Sending Status\n");
blumen_packet* Packet = (blumen_packet*)Msg->Memory;
Packet->Type = PacketType_LumenariumStatus;
Packet->StatusPacket.NextMotorEventType = 0;
Packet->StatusPacket.NextEventTime = 0;
blumen_packet Packet = {};
Packet.Type = PacketType_LumenariumStatus;
Packet.StatusPacket.NextMotorEventType = 0;
Packet.StatusPacket.NextEventTime = 0;
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));
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
{
u8 FlowerPositions[3];
/*
u8 Motor1Pos;
u8 Motor2Pos;
u8 Motor3Pos;
*/
u8 MotorStatus[3];
u16 Temperature;
} motor_packet;
typedef struct microphone_packet
@ -46,13 +54,15 @@ enum motor_event_type
typedef struct status_packet
{
u8 NextMotorEventType;
// u16 Padding;
u32 NextEventTime;
char AnimFileName[32];
} status_packet;
typedef struct blumen_packet
{
bl_python_packet_type Type;
u8 Type;
union
{
motor_packet MotorPacket;
@ -104,9 +114,12 @@ SystemTimeIsInTimeRange(system_time SysTime, time_range Range)
}
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
{
@ -131,6 +144,8 @@ struct blumen_lumen_state
// dim the leds.
r32 BrightnessPercent;
system_time LastStatusUpdateTime;
system_time LastSendTime;
};