232 lines
3.8 KiB
C
232 lines
3.8 KiB
C
//
|
|
// File: blumen_lumen.h
|
|
// Author: Peter Slattery
|
|
// Creation Date: 2021-01-15
|
|
//
|
|
#ifndef BLUMEN_LUMEN_H
|
|
|
|
enum bl_python_packet_type
|
|
{
|
|
PacketType_Invalid = 0,
|
|
PacketType_PatternCommand = 1,
|
|
PacketType_MotorState = 2,
|
|
PacketType_Temperature = 3,
|
|
PacketType_LumenariumStatus = 4,
|
|
};
|
|
|
|
#pragma pack(push, 1)
|
|
typedef struct motor_packet
|
|
{
|
|
u8 FlowerPositions[3];
|
|
} motor_packet;
|
|
|
|
typedef struct motor_status_packet
|
|
{
|
|
motor_packet Pos;
|
|
/*
|
|
u8 Motor1Pos;
|
|
u8 Motor2Pos;
|
|
u8 Motor3Pos;
|
|
*/
|
|
u8 MotorStatus[3];
|
|
u16 Temperature;
|
|
|
|
} motor_status_packet;
|
|
|
|
typedef struct microphone_packet
|
|
{
|
|
b8 ChangeAnimation;
|
|
char AnimationFileName[32];
|
|
b8 SetLayer;
|
|
char LayerName[32];
|
|
r32 LayerOpacity;
|
|
b8 SetLayerParamColor;
|
|
char LayerParamColor[7];
|
|
r32 OverrideDuration;
|
|
} microphone_packet;
|
|
|
|
typedef struct temp_packet
|
|
{
|
|
s8 Temperature;
|
|
} temp_packet;
|
|
|
|
enum motor_event_type
|
|
{
|
|
MotorEvent_Close = 0,
|
|
MotorEvent_Open = 1,
|
|
};
|
|
|
|
typedef struct status_packet
|
|
{
|
|
u8 NextMotorEventType;
|
|
// u16 Padding;
|
|
u32 NextEventTime;
|
|
|
|
char AnimFileName[32];
|
|
} status_packet;
|
|
|
|
typedef struct blumen_packet
|
|
{
|
|
u8 Type;
|
|
union
|
|
{
|
|
motor_packet MotorPacket;
|
|
motor_status_packet MotorStatusPacket;
|
|
microphone_packet MicPacket;
|
|
temp_packet TempPacket;
|
|
status_packet StatusPacket;
|
|
};
|
|
} blumen_packet;
|
|
|
|
#pragma pack(pop)
|
|
|
|
#define BLUMEN_MESSAGE_QUEUE_COUNT 32
|
|
typedef struct blumen_network_msg_queue
|
|
{
|
|
gs_data Buffers[BLUMEN_MESSAGE_QUEUE_COUNT];
|
|
u32 WriteHead;
|
|
u32 ReadHead;
|
|
} blumen_network_msg_queue;
|
|
|
|
// TODO(pjs): Refactor this -> blumen_network_job_state
|
|
struct mic_listen_job_data
|
|
{
|
|
bool* Running;
|
|
|
|
platform_socket_manager* SocketManager;
|
|
blumen_network_msg_queue* IncomingMsgQueue;
|
|
platform_socket_handle_ ListenSocket;
|
|
|
|
blumen_network_msg_queue* OutgoingMsgQueue;
|
|
};
|
|
|
|
typedef struct time_range
|
|
{
|
|
s32 StartHour;
|
|
s32 StartMinute;
|
|
|
|
s32 EndHour;
|
|
s32 EndMinute;
|
|
} time_range;
|
|
|
|
internal bool
|
|
SystemTimeIsInTimeRange(system_time SysTime, time_range Range)
|
|
{
|
|
bool Result = (SysTime.Hour >= Range.StartHour &&
|
|
SysTime.Minute >= Range.StartMinute &&
|
|
SysTime.Hour <= Range.EndHour &&
|
|
SysTime.Minute <= Range.EndMinute);
|
|
return Result;
|
|
}
|
|
|
|
global time_range MotorOpenTimes[] = {
|
|
{ 17, 56, 17, 56 },
|
|
{ 17, 58, 17, 56 },
|
|
{ 18, 00, 18, 00 },
|
|
|
|
};
|
|
global u32 MotorOpenTimesCount = 3;
|
|
|
|
struct phrase_string_to_anim_file
|
|
{
|
|
char* Phrase;
|
|
u32 PatternIndex;
|
|
};
|
|
|
|
phrase_string_to_anim_file PhraseToAnimMap[] = {
|
|
{ "begonia", 0},
|
|
{ "hyacinth", 1 },
|
|
{ "tulip", 1 },
|
|
{ "calla lilly", 0 },
|
|
{ "sunflower", 1 },
|
|
{ "salvia", 2 },
|
|
{ "freesia", 2 },
|
|
};
|
|
u32 PhraseToAnimMapCount = sizeof(PhraseToAnimMap) / sizeof(PhraseToAnimMap[0]);
|
|
|
|
struct blumen_lumen_state
|
|
{
|
|
bool Running;
|
|
|
|
blumen_network_msg_queue IncomingMsgQueue;
|
|
blumen_network_msg_queue OutgoingMsgQueue;
|
|
|
|
temp_job_req JobReq;
|
|
|
|
platform_thread_handle MicListenThread;
|
|
mic_listen_job_data MicListenJobData;
|
|
|
|
motor_packet LastKnownMotorState;
|
|
|
|
r64 TimeElapsed;
|
|
|
|
animation_handle AnimHandles[3];
|
|
u32 CurrAnim;
|
|
|
|
// NOTE(pjs): Based on temperature data from weatherman
|
|
// dim the leds.
|
|
r32 BrightnessPercent;
|
|
system_time LastStatusUpdateTime;
|
|
|
|
system_time LastSendTime;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// If you change anything, exit lumenarium if its running
|
|
// then in this application hit f1 to compile then
|
|
// go to remedybg (the debugger) and hit f5
|
|
|
|
|
|
// don't touch this
|
|
u8 LastPosition = 1;
|
|
|
|
u8 ClosedValue = 1;
|
|
u8 OpenValue = 2;
|
|
|
|
|
|
r64 MotorTimeElapsed = 0;
|
|
r64 OpenClosePeriod = 15.0f;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define BLUMEN_LUMEN_H
|
|
#endif // BLUMEN_LUMEN_H
|