Compare commits
3 Commits
f8ce60d511
...
185578ad8d
Author | SHA1 | Date |
---|---|---|
true | 185578ad8d | |
true | d42f20773b | |
true | 70bf2c481f |
|
@ -68,18 +68,14 @@ void gpio_init()
|
||||||
// I2C will be handled by the driver
|
// I2C will be handled by the driver
|
||||||
|
|
||||||
// IS_SDB IS31FL3729 shutdown pin (active low)
|
// IS_SDB IS31FL3729 shutdown pin (active low)
|
||||||
|
// WP for EEPROM
|
||||||
GPIOC->BCR = GPIO_Pin_3;
|
GPIOC->BCR = GPIO_Pin_3;
|
||||||
gpio.GPIO_Mode = GPIO_Mode_Out_OD;
|
GPIOC->BSHR = GPIO_Pin_6;
|
||||||
gpio.GPIO_Pin = GPIO_Pin_3;
|
gpio.GPIO_Mode = GPIO_Mode_Out_PP;
|
||||||
|
gpio.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_6;
|
||||||
GPIO_Init(GPIOC, &gpio);
|
GPIO_Init(GPIOC, &gpio);
|
||||||
|
|
||||||
// BTN1, BTN2 will be handled by button handler
|
// BTN1, BTN2 will be handled by button handler
|
||||||
|
|
||||||
// WP for EEPROM
|
|
||||||
GPIOC->BSHR = GPIO_Pin_6;
|
|
||||||
gpio.GPIO_Mode = GPIO_Mode_Out_OD;
|
|
||||||
gpio.GPIO_Pin = GPIO_Pin_6;
|
|
||||||
GPIO_Init(GPIOC, &gpio);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
|
|
|
@ -81,18 +81,20 @@ void adc_convert()
|
||||||
|
|
||||||
void adc_read()
|
void adc_read()
|
||||||
{
|
{
|
||||||
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
|
if (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)) {
|
||||||
adc_val[adc_val_idx++] = ADC_GetConversionValue(ADC1);
|
adc_val[adc_val_idx++] = ADC_GetConversionValue(ADC1);
|
||||||
adc_val_idx &= 0x0f;
|
adc_val_idx &= 0x0f;
|
||||||
if (!adc_val_idx) adc_calc_avg();
|
if (!adc_val_idx) adc_calc_avg();
|
||||||
|
|
||||||
if (ADC1->CTLR1 & ADC_JAUTO) {
|
if (ADC1->CTLR1 & ADC_JAUTO) {
|
||||||
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_JEOC));
|
if (ADC_GetFlagStatus(ADC1, ADC_FLAG_JEOC)) {
|
||||||
lsens_val = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_1);
|
lsens_val = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_1);
|
||||||
|
|
||||||
// reset LSENS
|
// reset LSENS
|
||||||
ADC_AutoInjectedConvCmd(ADC1, DISABLE);
|
ADC_AutoInjectedConvCmd(ADC1, DISABLE);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void adc_use_lsens()
|
void adc_use_lsens()
|
||||||
|
|
|
@ -122,7 +122,9 @@ int8_t i2c_write_addr1b(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t len)
|
||||||
if (!timeout) return -4;
|
if (!timeout) return -4;
|
||||||
|
|
||||||
while (len) {
|
while (len) {
|
||||||
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_TXE) != RESET) {
|
// fixme: can get stuck here if address isn't found.
|
||||||
|
// somehow all the above passes but this will fail
|
||||||
|
if (I2C_GetFlagStatus(I2C1, I2C_FLAG_TXE) != RESET) {
|
||||||
I2C_SendData(I2C1, *data++);
|
I2C_SendData(I2C1, *data++);
|
||||||
len--;
|
len--;
|
||||||
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
|
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const uint8_t rgb_map[9] = {0x04, 0x14, 0x01, 0x11, 0x07, 0x0a, 0x1a, 0x0d, 0x1d};
|
static const uint8_t rgb_map[9] = {0x04, 0x14, 0x01, 0x11, 0x07, 0x0a, 0x1a, 0x0d, 0x1d};
|
||||||
const uint8_t cursor_map[3] = {0x17, 0x18, 0x19};
|
static const uint8_t cursor_map[3] = {0x17, 0x18, 0x19};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -45,15 +45,17 @@ void led_is_updated()
|
||||||
void led_send()
|
void led_send()
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
uint8_t o;
|
||||||
uint8_t out[16*2];
|
uint8_t out[16*2];
|
||||||
|
|
||||||
// only render when there's something to render
|
// only render when there's something to render
|
||||||
if (led_updated) {
|
if (led_updated) {
|
||||||
// stuff RGB outputs
|
// stuff RGB outputs
|
||||||
for (i = 0; i < 9; i++) {
|
for (i = 0; i < 9; i++) {
|
||||||
out[rgb_map[i] + 0] = rgb[i][0];
|
o = (rgb_map[i] - 1) & 0x1f;
|
||||||
out[rgb_map[i] + 1] = rgb[i][1];
|
out[o + 0] = rgb[i][0];
|
||||||
out[rgb_map[i] + 2] = rgb[i][2];
|
out[o + 1] = rgb[i][1];
|
||||||
|
out[o + 2] = rgb[i][2];
|
||||||
}
|
}
|
||||||
|
|
||||||
// stuff cursor outputs
|
// stuff cursor outputs
|
||||||
|
|
|
@ -62,22 +62,6 @@ static const uint8_t rainbow_angles[8][5] = {
|
||||||
0x00, 0x00} // bottom to top
|
0x00, 0x00} // bottom to top
|
||||||
};
|
};
|
||||||
|
|
||||||
static void rainbow_letter_next()
|
|
||||||
{
|
|
||||||
uint16_t h;
|
|
||||||
|
|
||||||
// add to our hue
|
|
||||||
h = userconf.ledprog_setting[0][1];
|
|
||||||
h <<= 2;
|
|
||||||
|
|
||||||
rainbow_hue += h;
|
|
||||||
rainbow_hue++;
|
|
||||||
rainbow_hue %= 256*6;
|
|
||||||
|
|
||||||
// make a color out of it
|
|
||||||
hsv2rgb_8b(rainbow_hue, 255, 255, &prog_rgb[0], &prog_rgb[1], &prog_rgb[2]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void led_rgb_0_rainbow(uint8_t preview, uint8_t tick)
|
void led_rgb_0_rainbow(uint8_t preview, uint8_t tick)
|
||||||
{
|
{
|
||||||
uint8_t i, j; // iterator
|
uint8_t i, j; // iterator
|
||||||
|
@ -86,6 +70,8 @@ void led_rgb_0_rainbow(uint8_t preview, uint8_t tick)
|
||||||
uint8_t max; // max number of iterations for this angle
|
uint8_t max; // max number of iterations for this angle
|
||||||
uint8_t angle; // fill direction from LUT
|
uint8_t angle; // fill direction from LUT
|
||||||
|
|
||||||
|
uint16_t hoff;
|
||||||
|
|
||||||
// run at half framerate
|
// run at half framerate
|
||||||
if (tick & 1) {
|
if (tick & 1) {
|
||||||
// no matter what, this puke is getting updated
|
// no matter what, this puke is getting updated
|
||||||
|
@ -96,22 +82,24 @@ void led_rgb_0_rainbow(uint8_t preview, uint8_t tick)
|
||||||
angle &= 0x7;
|
angle &= 0x7;
|
||||||
max = rainbow_angles[angle][2] & 0x7;
|
max = rainbow_angles[angle][2] & 0x7;
|
||||||
|
|
||||||
|
hoff = userconf.ledprog_setting[0][1];
|
||||||
|
hoff <<= 2;
|
||||||
|
hoff = (256*6) - hoff;
|
||||||
|
|
||||||
// process outputs
|
// process outputs
|
||||||
for (i = 0; i <= max; i++) {
|
for (i = 0; i <= max; i++) {
|
||||||
// get the next puke
|
// get the next puke
|
||||||
rainbow_letter_next();
|
hsv2rgb_8b((rainbow_hue + (hoff * i)) % (256*6), 255, 255,
|
||||||
|
&prog_rgb[0], &prog_rgb[1], &prog_rgb[2]);
|
||||||
|
|
||||||
// apply to next set of LEDs
|
// apply to next set of LEDs
|
||||||
n = 0;
|
n = 0;
|
||||||
for (j = 0; j < 9; j++) {
|
for (j = 0; j < 9; j++) {
|
||||||
n++;
|
|
||||||
if (j == 5) n++; // nybble index
|
|
||||||
|
|
||||||
idx = rainbow_angles[angle][n >> 1]; // get mask byte
|
idx = rainbow_angles[angle][n >> 1]; // get mask byte
|
||||||
if ((n & 1) == 0) idx >>= 4; // shift even values over
|
if (!(n & 1)) idx >>= 4; // shift even numbered LED index over
|
||||||
idx &= 0x7; // mask lowest 3 bits
|
idx &= 0x7; // mask lowest 3 bits
|
||||||
|
|
||||||
if (idx == i) { // is this LED part of this pattern?
|
if (i == idx) { // is this LED part of this pattern at this index?
|
||||||
if (preview) { // are we in preview mode?
|
if (preview) { // are we in preview mode?
|
||||||
if (j != 0) { // is the first letter not the one selected?
|
if (j != 0) { // is the first letter not the one selected?
|
||||||
if ((preview & 0x7f) == 0) {// is this preview selected?
|
if ((preview & 0x7f) == 0) {// is this preview selected?
|
||||||
|
@ -123,8 +111,14 @@ void led_rgb_0_rainbow(uint8_t preview, uint8_t tick)
|
||||||
rgb[j][1] = prog_rgb[1];
|
rgb[j][1] = prog_rgb[1];
|
||||||
rgb[j][2] = prog_rgb[2];
|
rgb[j][2] = prog_rgb[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
n++; // nybble index
|
||||||
|
if (n == 5) n++; // skip the 6th nybble; this indicates the max
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rainbow_hue += 2;
|
||||||
|
rainbow_hue %= (256*6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ static const uint16_t cursor_flash_rates[] = { // off-to-on flash rates in
|
||||||
};
|
};
|
||||||
|
|
||||||
static uint8_t rgb_prog_idx = 0; // currently running rgbled program index
|
static uint8_t rgb_prog_idx = 0; // currently running rgbled program index
|
||||||
static uint16_t rgb_prog_timer = 0; // timeout until this program is done and switches
|
static uint16_t rgb_prog_timer = 9; // timeout until this program is done and switches
|
||||||
static uint8_t rgb_prog_is_editing = 0; // currently editing a program's parameters
|
static uint8_t rgb_prog_is_editing = 0; // currently editing a program's parameters
|
||||||
static uint8_t preview_idx = 0; // currently selected program preview index
|
static uint8_t preview_idx = 0; // currently selected program preview index
|
||||||
|
|
||||||
|
@ -320,13 +320,13 @@ static void ui_cursor_flash()
|
||||||
if (cursor_flash < 4) {
|
if (cursor_flash < 4) {
|
||||||
level >>= (cursor_flash << 1);
|
level >>= (cursor_flash << 1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// set the level on the cursor
|
// set the level on the cursor
|
||||||
if (cursor[color] != level) {
|
if (cursor[color] != level) {
|
||||||
cursor[color] = level;
|
cursor[color] = level;
|
||||||
led_is_updated();
|
led_is_updated();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!cursor_flash) {
|
if (!cursor_flash) {
|
||||||
// toggle on/off
|
// toggle on/off
|
||||||
|
@ -424,8 +424,7 @@ void ui_render()
|
||||||
is31fl3729_set_global_current(FL3729_ADDR, target_gc);
|
is31fl3729_set_global_current(FL3729_ADDR, target_gc);
|
||||||
}
|
}
|
||||||
|
|
||||||
led_rgbprog[rgb_prog_idx](LED_RGBPROG_NORMAL, tick);
|
if (userconf.ledprog_ena_mask) {
|
||||||
|
|
||||||
// fade and change programs depending on the timer
|
// fade and change programs depending on the timer
|
||||||
rgb_prog_timer--;
|
rgb_prog_timer--;
|
||||||
if (rgb_prog_timer <= 17) {
|
if (rgb_prog_timer <= 17) {
|
||||||
|
@ -443,7 +442,13 @@ void ui_render()
|
||||||
w = prng_get8();
|
w = prng_get8();
|
||||||
w &= 0x3;
|
w &= 0x3;
|
||||||
if (w == rgb_prog_idx) w++;
|
if (w == rgb_prog_idx) w++;
|
||||||
|
|
||||||
|
for (i = 0; i < 7; i++) {
|
||||||
|
if (userconf.ledprog_ena_mask & (1 << ((w + i) & 0x7))) {
|
||||||
rgb_prog_idx = w;
|
rgb_prog_idx = w;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
led_rgb_firstrun();
|
led_rgb_firstrun();
|
||||||
}
|
}
|
||||||
|
@ -470,7 +475,14 @@ void ui_render()
|
||||||
|
|
||||||
rgb_prog_timer = t + UI_PROG_RUNTIME_MIN;
|
rgb_prog_timer = t + UI_PROG_RUNTIME_MIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// actually run the program
|
||||||
|
led_rgbprog[rgb_prog_idx - 1](LED_RGBPROG_NORMAL, tick);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// temp: remove me once buttons are tested and working
|
||||||
|
led_rgbprog[0](LED_RGBPROG_NORMAL, tick);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue