Add SetHidden SDK packet

This commit is contained in:
Adam Honse
2026-05-26 17:44:06 -05:00
parent ce4d2b1d78
commit a8da9dbc62
8 changed files with 111 additions and 19 deletions

View File

@@ -876,6 +876,23 @@ void NetworkClient::SendRequest_RGBController_ResizeZone(unsigned int dev_idx, i
send_in_progress.unlock();
}
void NetworkClient::SendRequest_RGBController_SetHidden(unsigned int dev_idx, bool hidden)
{
if(change_in_progress)
{
return;
}
NetPacketHeader request_hdr;
InitNetPacketHeader(&request_hdr, dev_idx, NET_PACKET_ID_RGBCONTROLLER_SETHIDDEN, sizeof(hidden));
send_in_progress.lock();
send(client_sock, (char *)&request_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL);
send(client_sock, (char *)&hidden, sizeof(hidden), MSG_NOSIGNAL);
send_in_progress.unlock();
}
void NetworkClient::SendRequest_RGBController_UpdateLEDs(unsigned int dev_idx, unsigned char* data_ptr, unsigned int data_size)
{
if(change_in_progress)
@@ -889,7 +906,7 @@ void NetworkClient::SendRequest_RGBController_UpdateLEDs(unsigned int dev_idx, u
send_in_progress.lock();
send(client_sock, (char *)&request_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL);
send(client_sock, (char *)data_ptr, data_size, 0);
send(client_sock, (char *)data_ptr, data_size, MSG_NOSIGNAL);
send_in_progress.unlock();
}
@@ -1900,6 +1917,12 @@ void NetworkClient::ProcessRequest_RGBController_SignalUpdate(unsigned int data_
case RGBCONTROLLER_UPDATE_REASON_SETDEVICESPECIFICZONECONFIGURATION:
default:
RGBController::SetDeviceDescription(data_ptr, data_size - (data_ptr - data_start), controller, GetProtocolVersion());
/*---------------------------------------------*\
| Mark this controller as remote owned |
\*---------------------------------------------*/
controller->flags &= ~CONTROLLER_FLAG_LOCAL;
controller->flags |= CONTROLLER_FLAG_REMOTE;
break;
}

View File

@@ -155,6 +155,7 @@ public:
void SendRequest_RGBController_AddSegment(unsigned int dev_idx, unsigned char* data_ptr, unsigned int data_size);
void SendRequest_RGBController_ConfigureZone(unsigned int dev_idx, unsigned char* data_ptr, unsigned int data_size);
void SendRequest_RGBController_ResizeZone(unsigned int dev_idx, int zone, int new_size);
void SendRequest_RGBController_SetHidden(unsigned int dev_idx, bool hidden);
void SendRequest_RGBController_UpdateLEDs(unsigned int dev_idx, unsigned char* data_ptr, unsigned int data_size);
void SendRequest_RGBController_UpdateZoneLEDs(unsigned int dev_idx, unsigned char* data_ptr, unsigned int data_size);

View File

@@ -173,6 +173,7 @@ enum
NET_PACKET_ID_RGBCONTROLLER_CLEARSEGMENTS = 1001, /* RGBController::ClearSegments() */
NET_PACKET_ID_RGBCONTROLLER_ADDSEGMENT = 1002, /* RGBController::AddSegment() */
NET_PACKET_ID_RGBCONTROLLER_CONFIGUREZONE = 1003, /* RGBController::ConfigureZone() */
NET_PACKET_ID_RGBCONTROLLER_SETHIDDEN = 1004, /* RGBController::SetHidden() */
NET_PACKET_ID_RGBCONTROLLER_UPDATELEDS = 1050, /* RGBController::UpdateLEDs() */
NET_PACKET_ID_RGBCONTROLLER_UPDATEZONELEDS = 1051, /* RGBController::UpdateZoneLEDs() */

View File

@@ -1469,6 +1469,10 @@ void NetworkServer::ListenThreadFunction(NetworkClientInfo* client_info)
status = ProcessRequest_RGBController_ConfigureZone(client_info, header.pkt_size, data, header.pkt_dev_id);
break;
case NET_PACKET_ID_RGBCONTROLLER_SETHIDDEN:
status = ProcessRequest_RGBController_SetHidden(client_info, header.pkt_size, data, header.pkt_dev_id);
break;
case NET_PACKET_ID_RGBCONTROLLER_SETDEVICESPECIFICCONFIGURATION:
status = ProcessRequest_RGBController_SetDeviceSpecificConfiguration(client_info, header.pkt_size, data, header.pkt_dev_id);
break;
@@ -2536,6 +2540,43 @@ NetPacketStatus NetworkServer::ProcessRequest_RGBController_SetDeviceSpecificZon
return(NET_PACKET_STATUS_OK);
}
NetPacketStatus NetworkServer::ProcessRequest_RGBController_SetHidden(NetworkClientInfo* client_info, unsigned int data_size, unsigned char* data_ptr, unsigned int controller_id)
{
/*-----------------------------------------------------*\
| Convert ID to index |
\*-----------------------------------------------------*/
bool controller_idx_valid;
unsigned int controller_idx = index_from_id(controller_id, client_info->client_protocol_version, &controller_idx_valid);
/*-----------------------------------------------------*\
| If data pointer is null, return |
\*-----------------------------------------------------*/
if(data_ptr == NULL)
{
return(NET_PACKET_STATUS_ERROR_INVALID_DATA);
}
/*-----------------------------------------------------*\
| If data size is invalid, return |
\*-----------------------------------------------------*/
if(data_size < sizeof(bool))
{
return(NET_PACKET_STATUS_ERROR_INVALID_DATA);
}
/*-----------------------------------------------------*\
| If controller ID is invalid, return |
\*-----------------------------------------------------*/
if(!controller_idx_valid)
{
return(NET_PACKET_STATUS_ERROR_INVALID_ID);
}
controllers[controller_idx]->SetHidden((bool*)data_ptr);
return(NET_PACKET_STATUS_OK);
}
NetPacketStatus NetworkServer::ProcessRequest_RGBController_UpdateLEDs(NetworkClientInfo* client_info, unsigned int data_size, unsigned char* data_ptr, unsigned int controller_id)
{
/*-----------------------------------------------------*\

View File

@@ -259,6 +259,7 @@ private:
NetPacketStatus ProcessRequest_RGBController_SetCustomMode(NetworkClientInfo* client_info, unsigned int controller_id);
NetPacketStatus ProcessRequest_RGBController_SetDeviceSpecificConfiguration(NetworkClientInfo* client_info, unsigned int data_size, unsigned char* data_ptr, unsigned int controller_id);
NetPacketStatus ProcessRequest_RGBController_SetDeviceSpecificZoneConfiguration(NetworkClientInfo* client_info, unsigned int data_size, unsigned char* data_ptr, unsigned int controller_id);
NetPacketStatus ProcessRequest_RGBController_SetHidden(NetworkClientInfo* client_info, unsigned int data_size, unsigned char* data_ptr, unsigned int controller_id);
NetPacketStatus ProcessRequest_RGBController_UpdateLEDs(NetworkClientInfo* client_info, unsigned int data_size, unsigned char* data_ptr, unsigned int controller_id);
NetPacketStatus ProcessRequest_RGBController_UpdateSaveMode(NetworkClientInfo* client_info, unsigned int data_size, unsigned char* data_ptr, unsigned int controller_id, bool save_mode);
NetPacketStatus ProcessRequest_RGBController_UpdateSingleLED(NetworkClientInfo* client_info, unsigned int data_size, unsigned char* data_ptr, unsigned int controller_id);

View File

@@ -154,7 +154,13 @@ device_type RGBController::GetDeviceType()
unsigned int RGBController::GetFlags()
{
return(flags);
unsigned int controller_flags;
AccessMutex.lock_shared();
controller_flags = flags;
AccessMutex.unlock_shared();
return(controller_flags);
}
/*---------------------------------------------------------*\
@@ -162,19 +168,31 @@ unsigned int RGBController::GetFlags()
\*---------------------------------------------------------*/
bool RGBController::GetHidden()
{
return(flags & CONTROLLER_FLAG_HIDDEN);
bool hidden;
AccessMutex.lock_shared();
hidden = flags & CONTROLLER_FLAG_HIDDEN;
AccessMutex.unlock_shared();
return(hidden);
}
void RGBController::SetHidden(bool hidden)
{
if(hidden)
{
AccessMutex.lock();
flags |= CONTROLLER_FLAG_HIDDEN;
AccessMutex.unlock();
SignalUpdate(RGBCONTROLLER_UPDATE_REASON_HIDDEN);
}
else
{
AccessMutex.lock();
flags &= ~CONTROLLER_FLAG_HIDDEN;
AccessMutex.unlock();
SignalUpdate(RGBCONTROLLER_UPDATE_REASON_UNHIDDEN);
}
}
@@ -256,20 +274,20 @@ std::size_t RGBController::GetZoneCount()
unsigned int RGBController::GetZoneFlags(unsigned int zone)
{
unsigned int flags;
unsigned int zone_flags;
AccessMutex.lock_shared();
if(zone < zones.size())
{
flags = zones[zone].flags;
zone_flags = zones[zone].flags;
}
else
{
flags = 0;
zone_flags = 0;
}
AccessMutex.unlock_shared();
return(flags);
return(zone_flags);
}
unsigned int RGBController::GetZoneLEDsCount(unsigned int zone)
@@ -581,20 +599,20 @@ unsigned int RGBController::GetZoneModeDirection(unsigned int zone, unsigned int
unsigned int RGBController::GetZoneModeFlags(unsigned int zone, unsigned int mode)
{
unsigned int flags;
unsigned int mode_flags;
AccessMutex.lock_shared();
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
flags = zones[zone].modes[mode].flags;
mode_flags = zones[zone].modes[mode].flags;
}
else
{
flags = 0;
mode_flags = 0;
}
AccessMutex.unlock_shared();
return(flags);
return(mode_flags);
}
std::string RGBController::GetZoneModeName(unsigned int zone, unsigned int mode)
@@ -725,20 +743,20 @@ std::size_t RGBController::GetZoneSegmentCount(unsigned int zone)
unsigned int RGBController::GetZoneSegmentFlags(unsigned int zone, unsigned int segment)
{
unsigned int flags;
unsigned int segment_flags;
AccessMutex.lock_shared();
if((zone < zones.size()) && (segment < zones[zone].segments.size()))
{
flags = zones[zone].segments[segment].flags;
segment_flags = zones[zone].segments[segment].flags;
}
else
{
flags = 0;
segment_flags = 0;
}
AccessMutex.unlock_shared();
return(flags);
return(segment_flags);
}
unsigned int RGBController::GetZoneSegmentLEDsCount(unsigned int zone, unsigned int segment)
@@ -1242,20 +1260,20 @@ unsigned int RGBController::GetModeDirection(unsigned int mode)
unsigned int RGBController::GetModeFlags(unsigned int mode)
{
unsigned int flags;
unsigned int mode_flags;
AccessMutex.lock_shared();
if(mode < modes.size())
{
flags = modes[mode].flags;
mode_flags = modes[mode].flags;
}
else
{
flags = 0;
mode_flags = 0;
}
AccessMutex.unlock_shared();
return(flags);
return(mode_flags);
}
std::string RGBController::GetModeName(unsigned int mode)

View File

@@ -30,6 +30,11 @@ unsigned int RGBController_Network::GetID()
return(dev_id);
}
void RGBController_Network::SetHidden(bool hidden)
{
client->SendRequest_RGBController_SetHidden(dev_id, hidden);
}
void RGBController_Network::ClearSegments(int zone)
{
client->SendRequest_RGBController_ClearSegments(dev_id, zone);

View File

@@ -23,6 +23,8 @@ public:
unsigned int GetID();
void SetHidden(bool hidden);
void ClearSegments(int zone);
void AddSegment(int zone, segment new_segment);