#include #include #include #include #include #include #include #include "Fader.h" Fader::Fader(std::size_t nstrips, std::size_t nmodules_per_strip) : m_strips(nstrips), m_modulesPerStrip(nmodules_per_strip) { m_fd = socket(AF_INET, SOCK_DGRAM, 0); } void Fader::set_color(uint32_t strip, uint32_t module, const Fader::Color &color) { m_commands.emplace_back(Command{ SET_COLOUR, static_cast(strip), static_cast(module), color }); } void Fader::add_color(uint32_t strip, uint32_t module, const Fader::Color &color) { m_commands.emplace_back(Command{ ADD_COLOUR, static_cast(strip), static_cast(module), color }); } void Fader::fade_color(uint32_t strip, uint32_t module, const Fader::Color &color) { m_commands.emplace_back(Command{ FADE_COLOUR, static_cast(strip), static_cast(module), color }); } void Fader::set_color(const Fader::Color &color) { for(std::size_t strip = 0; strip < m_strips; strip++) { for(std::size_t module = 0; module < m_modulesPerStrip; module++) { set_color(strip, module, color); } } } void Fader::add_color(const Fader::Color &color) { for(std::size_t strip = 0; strip < m_strips; strip++) { for(std::size_t module = 0; module < m_modulesPerStrip; module++) { add_color(strip, module, color); } } } void Fader::fade_color(const Fader::Color &color) { for(std::size_t strip = 0; strip < m_strips; strip++) { for(std::size_t module = 0; module < m_modulesPerStrip; module++) { fade_color(strip, module, color); } } } void Fader::set_fadestep(uint8_t newFadestep) { m_commands.emplace_back(Command{ SET_FADESTEP, 0, 0, Color{newFadestep, 0, 0, 0} }); } void Fader::update(void) { // TODO: convert the m_commands vector to an UDP packet and send it std::vector packet; for(auto &command : m_commands) { packet.push_back(command.action); packet.push_back(command.strip); packet.push_back(command.module); packet.push_back(command.color.r); packet.push_back(command.color.g); packet.push_back(command.color.b); packet.push_back(command.color.w); } sockaddr_in target_addr; target_addr.sin_family = AF_INET; target_addr.sin_port = htons(2703); target_addr.sin_addr.s_addr = inet_addr("10.42.7.145"); int ret = sendto(m_fd, packet.data(), packet.size(), 0, reinterpret_cast(&target_addr), sizeof(target_addr)); if(ret == -1) { std::cerr << "sendto failed: " << strerror(errno) << std::endl; } m_commands.clear(); }