Code style changes for RGB Fusion 2 SMBus

This commit is contained in:
Adam Honse 2020-05-11 12:24:25 -05:00
parent cb8a551683
commit 9f21814395
5 changed files with 89 additions and 85 deletions

View file

@ -5,7 +5,7 @@
| SMBus lighting controller | | SMBus lighting controller |
| | | |
| Adam Honse (CalcProgrammer1) 3/12/2020 | | Adam Honse (CalcProgrammer1) 3/12/2020 |
| Matt Harper 5/5/2020 | | Matt Harper 5/5/2020 |
\*-----------------------------------------*/ \*-----------------------------------------*/
#include "RGBFusion2SMBusController.h" #include "RGBFusion2SMBusController.h"
@ -30,7 +30,7 @@ RGBFusion2SMBusController::RGBFusion2SMBusController(i2c_smbus_interface* bus, r
unsigned int RGBFusion2SMBusController::GetLEDCount() unsigned int RGBFusion2SMBusController::GetLEDCount()
{ {
return(led_count); return(led_count);
} }
std::string RGBFusion2SMBusController::GetDeviceLocation() std::string RGBFusion2SMBusController::GetDeviceLocation()
@ -55,17 +55,20 @@ void RGBFusion2SMBusController::WriteLED(int led)
unsigned short write_register = RGB_FUSION_2_LED_START_ADDR + 2*register_offset; unsigned short write_register = RGB_FUSION_2_LED_START_ADDR + 2*register_offset;
// Adjust if we are writing the second 16 bytes // Adjust if we are writing the second 16 bytes
if (led % 2) { if(led % 2)
led -= 1; {
led -= 1;
} }
#ifdef DEBUG #ifdef DEBUG
std::cout << std::hex << write_register << "\t"; std::cout << std::hex << write_register << "\t";
for (int i = 0; i < 2; i++) { for(int i = 0; i < 2; i++)
for (int j = 0; j < 16; j++) { {
std::cout << std::setw(2) << std::setfill('0') << std::hex << (int)led_data[led+i][j] << " "; for(int j = 0; j < 16; j++)
} {
std::cout << " "; std::cout << std::setw(2) << std::setfill('0') << std::hex << (int)led_data[led+i][j] << " ";
}
std::cout << " ";
} }
std::cout << std::endl; std::cout << std::endl;
#endif #endif
@ -77,8 +80,8 @@ void RGBFusion2SMBusController::Apply()
{ {
// Protocol expects terminating sequence 0x01ff written to register 0x17 // Protocol expects terminating sequence 0x01ff written to register 0x17
bus->i2c_smbus_write_word_data(RGB_FUSION_2_SMBUS_ADDR, bus->i2c_smbus_write_word_data(RGB_FUSION_2_SMBUS_ADDR,
RGB_FUSION_2_APPLY_ADDR, RGB_FUSION_2_APPLY_ADDR,
RGB_FUSION_2_ACTION_APPLY); RGB_FUSION_2_ACTION_APPLY);
} }
void RGBFusion2SMBusController::SetLEDEffect void RGBFusion2SMBusController::SetLEDEffect
@ -91,45 +94,46 @@ void RGBFusion2SMBusController::SetLEDEffect
unsigned char blue unsigned char blue
) )
{ {
led_data[led][RGB_FUSION_2_IDX_MODE] = mode; led_data[led][RGB_FUSION_2_IDX_MODE] = mode;
led_data[led][RGB_FUSION_2_IDX_RED] = red; led_data[led][RGB_FUSION_2_IDX_RED] = red;
led_data[led][RGB_FUSION_2_IDX_GREEN] = green; led_data[led][RGB_FUSION_2_IDX_GREEN] = green;
led_data[led][RGB_FUSION_2_IDX_BLUE] = blue; led_data[led][RGB_FUSION_2_IDX_BLUE] = blue;
led_data[led][RGB_FUSION_2_IDX_BRIGHTNESS] = 0x64; led_data[led][RGB_FUSION_2_IDX_BRIGHTNESS] = 0x64;
switch (mode) { switch (mode)
case RGB_FUSION_2_MODE_PULSE: {
// Timer 1: On time case RGB_FUSION_2_MODE_PULSE:
// Timer 2: Off time // Timer 1: On time
led_data[led][RGB_FUSION_2_TIMER_1_LSB] = 0x20 * speed; // Timer 2: Off time
led_data[led][RGB_FUSION_2_TIMER_1_MSB] = 0x03 * speed; led_data[led][RGB_FUSION_2_TIMER_1_LSB] = 0x20 * speed;
led_data[led][RGB_FUSION_2_TIMER_2_LSB] = 0x20 * speed; led_data[led][RGB_FUSION_2_TIMER_1_MSB] = 0x03 * speed;
led_data[led][RGB_FUSION_2_TIMER_2_MSB] = 0x03 * speed; led_data[led][RGB_FUSION_2_TIMER_2_LSB] = 0x20 * speed;
break; led_data[led][RGB_FUSION_2_TIMER_2_MSB] = 0x03 * speed;
break;
case RGB_FUSION_2_MODE_COLOR_CYCLE: case RGB_FUSION_2_MODE_COLOR_CYCLE:
// Timer 1: Cycle time // Timer 1: Cycle time
led_data[led][RGB_FUSION_2_TIMER_1_LSB] = 0x00; led_data[led][RGB_FUSION_2_TIMER_1_LSB] = 0x00;
led_data[led][RGB_FUSION_2_TIMER_1_MSB] = 0x03 * speed; led_data[led][RGB_FUSION_2_TIMER_1_MSB] = 0x03 * speed;
led_data[led][RGB_FUSION_2_IDX_OPT_1] = 0x07; // Number of colors to cycle through. Valid range [1-7] led_data[led][RGB_FUSION_2_IDX_OPT_1] = 0x07; // Number of colors to cycle through. Valid range [1-7]
led_data[led][RGB_FUSION_2_IDX_OPT_2] = 0x00; // Color cycle, or color cycle and pulse. [0,1] led_data[led][RGB_FUSION_2_IDX_OPT_2] = 0x00; // Color cycle, or color cycle and pulse. [0,1]
break; break;
case RGB_FUSION_2_MODE_FLASHING: case RGB_FUSION_2_MODE_FLASHING:
/* Timer 1: On time /* Timer 1: On time
* Timer 2: Interval * Timer 2: Interval
* Timer 3: Cycle time */ * Timer 3: Cycle time */
led_data[led][RGB_FUSION_2_TIMER_1_LSB] = 0x64; led_data[led][RGB_FUSION_2_TIMER_1_LSB] = 0x64;
led_data[led][RGB_FUSION_2_TIMER_1_MSB] = 0; led_data[led][RGB_FUSION_2_TIMER_1_MSB] = 0;
led_data[led][RGB_FUSION_2_TIMER_2_LSB] = 0xc8; led_data[led][RGB_FUSION_2_TIMER_2_LSB] = 0xc8;
led_data[led][RGB_FUSION_2_TIMER_2_MSB] = 0; led_data[led][RGB_FUSION_2_TIMER_2_MSB] = 0;
led_data[led][RGB_FUSION_2_TIMER_3_LSB] = 0xd0; led_data[led][RGB_FUSION_2_TIMER_3_LSB] = 0xd0;
led_data[led][RGB_FUSION_2_TIMER_3_MSB] = 0x07; led_data[led][RGB_FUSION_2_TIMER_3_MSB] = 0x07;
led_data[led][RGB_FUSION_2_IDX_OPT_1] = speed; // Controls number of flashes led_data[led][RGB_FUSION_2_IDX_OPT_1] = speed; // Controls number of flashes
break; break;
} }
WriteLED(led); WriteLED(led);
} }

View file

@ -16,29 +16,29 @@ typedef unsigned char rgb_fusion_dev_id;
enum enum
{ {
RGB_FUSION_2_IDX_MODE = 0x01, /* Mode index */ RGB_FUSION_2_IDX_MODE = 0x01, /* Mode index */
RGB_FUSION_2_IDX_BRIGHTNESS = 0x02, /* Brightness index */ RGB_FUSION_2_IDX_BRIGHTNESS = 0x02, /* Brightness index */
RGB_FUSION_2_IDX_MAX_BRIGHTNESS = 0x02, /* Max brightness index */ RGB_FUSION_2_IDX_MAX_BRIGHTNESS = 0x02, /* Max brightness index */
RGB_FUSION_2_IDX_MIN_BRIGHTNESS = 0x03, /* Minimum brightness index */ RGB_FUSION_2_IDX_MIN_BRIGHTNESS = 0x03, /* Minimum brightness index */
RGB_FUSION_2_IDX_BLUE = 0x04, /* Blue index */ RGB_FUSION_2_IDX_BLUE = 0x04, /* Blue index */
RGB_FUSION_2_IDX_GREEN = 0x05, /* Green index */ RGB_FUSION_2_IDX_GREEN = 0x05, /* Green index */
RGB_FUSION_2_IDX_RED = 0x06, /* Red index */ RGB_FUSION_2_IDX_RED = 0x06, /* Red index */
RGB_FUSION_2_IDX_WHITE = 0x07, /* White index */ RGB_FUSION_2_IDX_WHITE = 0x07, /* White index */
RGB_FUSION_2_TIMER_1_LSB = 0x08, /* Timer 1 LSB. Valid timer values [0-65535] */ RGB_FUSION_2_TIMER_1_LSB = 0x08, /* Timer 1 LSB. Valid timer values [0-65535] */
RGB_FUSION_2_TIMER_1_MSB = 0x09, /* Timer 1 MSB. Timer unis are milliseconds */ RGB_FUSION_2_TIMER_1_MSB = 0x09, /* Timer 1 MSB. Timer unis are milliseconds */
RGB_FUSION_2_TIMER_2_LSB = 0x0A, /* Timer 2 LSB */ RGB_FUSION_2_TIMER_2_LSB = 0x0A, /* Timer 2 LSB */
RGB_FUSION_2_TIMER_2_MSB = 0x0B, /* Timer 2 MSB */ RGB_FUSION_2_TIMER_2_MSB = 0x0B, /* Timer 2 MSB */
RGB_FUSION_2_TIMER_3_LSB = 0x0C, /* Timer 3 LSB */ RGB_FUSION_2_TIMER_3_LSB = 0x0C, /* Timer 3 LSB */
RGB_FUSION_2_TIMER_3_MSB = 0x0D, /* Timer 3 MSB */ RGB_FUSION_2_TIMER_3_MSB = 0x0D, /* Timer 3 MSB */
RGB_FUSION_2_IDX_OPT_1 = 0x0E, /* Option 1. Use case varies by mode */ RGB_FUSION_2_IDX_OPT_1 = 0x0E, /* Option 1. Use case varies by mode */
RGB_FUSION_2_IDX_OPT_2 = 0x0F, /* Option 2. Use case varies by mode */ RGB_FUSION_2_IDX_OPT_2 = 0x0F, /* Option 2. Use case varies by mode */
}; };
enum enum
{ {
RGB_FUSION_2_APPLY_ADDR = 0x17, RGB_FUSION_2_APPLY_ADDR = 0x17,
RGB_FUSION_2_LED_START_ADDR = 0x20, RGB_FUSION_2_LED_START_ADDR = 0x20,
RGB_FUSION_2_SMBUS_ADDR = 0x68, RGB_FUSION_2_SMBUS_ADDR = 0x68,
}; };
enum enum
@ -49,20 +49,20 @@ enum
enum enum
{ {
RGB_FUSION_2_MODE_PULSE = 0x01, /* Pulse mode */ RGB_FUSION_2_MODE_PULSE = 0x01, /* Pulse mode */
RGB_FUSION_2_MODE_MUSIC = 0x02, /* Music mode */ RGB_FUSION_2_MODE_MUSIC = 0x02, /* Music mode */
RGB_FUSION_2_MODE_COLOR_CYCLE = 0x03, /* Color cycle mode */ RGB_FUSION_2_MODE_COLOR_CYCLE = 0x03, /* Color cycle mode */
RGB_FUSION_2_MODE_STATIC = 0x04, /* Static color mode */ RGB_FUSION_2_MODE_STATIC = 0x04, /* Static color mode */
RGB_FUSION_2_MODE_FLASHING = 0x05, /* Flashing / Double Flashing mode */ RGB_FUSION_2_MODE_FLASHING = 0x05, /* Flashing / Double Flashing mode */
RGB_FUSION_2_MODE_TRANSITION = 0x09, /* Gradual transition from current */ RGB_FUSION_2_MODE_TRANSITION = 0x09, /* Gradual transition from current */
RGB_FUSION_2_MODE_DIGITAL_A = 0x0A, /* Wave mode */ RGB_FUSION_2_MODE_DIGITAL_A = 0x0A, /* Wave mode */
RGB_FUSION_2_MODE_DIGITAL_B = 0x0B, /* */ RGB_FUSION_2_MODE_DIGITAL_B = 0x0B, /* */
RGB_FUSION_2_MODE_DIGITAL_C = 0x0C, /* */ RGB_FUSION_2_MODE_DIGITAL_C = 0x0C, /* */
RGB_FUSION_2_MODE_DIGITAL_D = 0x0D, /* */ RGB_FUSION_2_MODE_DIGITAL_D = 0x0D, /* */
RGB_FUSION_2_MODE_DIGITAL_E = 0x0E, /* */ RGB_FUSION_2_MODE_DIGITAL_E = 0x0E, /* */
RGB_FUSION_2_MODE_DIGITAL_F = 0x0F, /* */ RGB_FUSION_2_MODE_DIGITAL_F = 0x0F, /* */
RGB_FUSION_2_MODE_DIGITAL_G = 0x10, /* */ RGB_FUSION_2_MODE_DIGITAL_G = 0x10, /* */
RGB_FUSION_2_MODE_DIGITAL_H = 0x11, /* */ RGB_FUSION_2_MODE_DIGITAL_H = 0x11, /* */
RGB_FUSION_2_MODE_DIGITAL_I = 0x12, /* */ RGB_FUSION_2_MODE_DIGITAL_I = 0x12, /* */
}; };
enum enum
@ -80,7 +80,7 @@ public:
std::string GetDeviceLocation(); std::string GetDeviceLocation();
unsigned int GetLEDCount(); unsigned int GetLEDCount();
void Apply(); void Apply();
void SetLEDEffect void SetLEDEffect
( (

View file

@ -55,18 +55,19 @@ void DetectRGBFusion2SMBusControllers(std::vector<i2c_smbus_interface*>& busses,
for (unsigned int bus = 0; bus < busses.size(); bus++) for (unsigned int bus = 0; bus < busses.size(); bus++)
{ {
// TODO - Is this necessary? Or an artifact of my own system? // TODO - Is this necessary? Or an artifact of my own system?
// Skip dmcd devices // Skip dmcd devices
std::string device_name = std::string(busses[bus]->device_name); std::string device_name = std::string(busses[bus]->device_name);
if (device_name.find("dmdc") == std::string::npos) { if (device_name.find("dmdc") == std::string::npos)
// Check for RGB Fusion 2 controller at 0x68 {
if (TestForRGBFusion2SMBusController(busses[bus], 0x68)) // Check for RGB Fusion 2 controller at 0x68
{ if (TestForRGBFusion2SMBusController(busses[bus], 0x68))
new_rgb_fusion = new RGBFusion2SMBusController(busses[bus], 0x68); {
new_controller = new RGBController_RGBFusion2SMBus(new_rgb_fusion); new_rgb_fusion = new RGBFusion2SMBusController(busses[bus], 0x68);
rgb_controllers.push_back(new_controller); new_controller = new RGBController_RGBFusion2SMBus(new_rgb_fusion);
} rgb_controllers.push_back(new_controller);
} }
}
} }
} /* DetectRGBFusion2SMBusControllers() */ } /* DetectRGBFusion2SMBusControllers() */

View file

@ -1,11 +1,10 @@
/*-----------------------------------------*\ /*-----------------------------------------*\
| RGBController_RGBFusion2SMBus.cpp | | RGBController_RGBFusion2SMBus.cpp |
| | | |
| Generic RGB Interface for OpenRGB | | Generic RGB Interface for OpenRGB |
| Gigabyte RGB Fusion 2SMBUS Driver | | Gigabyte RGB Fusion 2 SMBUS Driver |
| | | |
| Matt Harper (5/5/2020) | | Matt Harper (5/5/2020) |
\*-----------------------------------------*/ \*-----------------------------------------*/
#include "RGBController_RGBFusion2SMBus.h" #include "RGBController_RGBFusion2SMBus.h"

View file

@ -3,9 +3,9 @@
| RGBController_RGBFusion2SMBus.h | | RGBController_RGBFusion2SMBus.h |
| | | |
| Generic RGB Interface for OpenRGB | | Generic RGB Interface for OpenRGB |
| Gigabyte RGB Fusion 2 SM BUs Driver | | Gigabyte RGB Fusion 2 SMBUS Driver |
| | | |
| Matt Harper (5/5/2020) | | Matt Harper (5/5/2020) |
\*-----------------------------------------*/ \*-----------------------------------------*/
#pragma once #pragma once