diff --git a/Controllers/FanBusController/FanBusController.cpp b/Controllers/FanBusController/FanBusController.cpp index 59e83904..46704fdc 100644 --- a/Controllers/FanBusController/FanBusController.cpp +++ b/Controllers/FanBusController/FanBusController.cpp @@ -37,10 +37,12 @@ void FanBusController::SetLEDs(std::vector colors) unsigned char grn = RGBGetGValue(colors[led_idx]); unsigned char blu = RGBGetBValue(colors[led_idx]); - bus->write(dev, 0x10 + (led_idx * 3), red); - bus->write(dev, 0x11 + (led_idx * 3), grn); - bus->write(dev, 0x12 + (led_idx * 3), blu); + bus->write_queue(dev, 0x10 + (led_idx * 3), red); + bus->write_queue(dev, 0x11 + (led_idx * 3), grn); + bus->write_queue(dev, 0x12 + (led_idx * 3), blu); } - bus->write(dev, 0x0C, 0x01); + bus->write_queue(dev, 0x0C, 0x01); + + bus->process_queue(); } diff --git a/Controllers/FanBusController/FanBusInterface.cpp b/Controllers/FanBusController/FanBusInterface.cpp index 1a33404f..ed5551cd 100644 --- a/Controllers/FanBusController/FanBusInterface.cpp +++ b/Controllers/FanBusController/FanBusInterface.cpp @@ -104,6 +104,30 @@ int FanBusInterface::write return(serialport->serial_write((char *)fanbus_msg, 5)); } +void FanBusInterface::write_queue + ( + unsigned char dev_addr, + unsigned char int_addr, + unsigned char val + ) +{ + unsigned char fanbus_msg[] = { 0x00, int_addr, dev_addr, val, 0xFF }; + + for(int i = 0; i < sizeof(fanbus_msg); i++) + { + fanbus_msg_queued.push_back(fanbus_msg[i]); + } +} + +int FanBusInterface::process_queue() +{ + int return_val = serialport->serial_write((char *)&fanbus_msg_queued[0], fanbus_msg_queued.size()); + + fanbus_msg_queued.clear(); + + return(return_val); +} + std::vector FanBusInterface::DetectControllers() { std::vector detected_controllers; diff --git a/Controllers/FanBusController/FanBusInterface.h b/Controllers/FanBusController/FanBusInterface.h index b4b1d2b9..e9bc3b90 100644 --- a/Controllers/FanBusController/FanBusInterface.h +++ b/Controllers/FanBusController/FanBusInterface.h @@ -32,8 +32,19 @@ public: unsigned char val ); + void write_queue + ( + unsigned char dev_addr, + unsigned char int_addr, + unsigned char val + ); + + int process_queue(); + private: serial_port * serialport; std::string port_name; bool half_duplex; + + std::vector fanbus_msg_queued; };