Compare commits

..

No commits in common. "master" and "v0.0.2-dc32" have entirely different histories.

6 changed files with 35 additions and 49 deletions

View File

@ -3,8 +3,7 @@
* GAT Addon Firmware * GAT Addon Firmware
* by true * by true
* *
* version 0.0.3 * version 0.0.2
* Last Update 20240808
* *
* code was made for different random addons I designed for dc32, * code was made for different random addons I designed for dc32,
* then adapted to each one. so things might be a mess. * then adapted to each one. so things might be a mess.
@ -27,7 +26,6 @@
#include "src/config.h" #include "src/config.h"
#include "src/i2c.h" #include "src/i2c.h"
#include "src/led.h" #include "src/led.h"
#include "src/led_rgbprog.h"
#include "src/rand.h" #include "src/rand.h"
#include "src/ui.h" #include "src/ui.h"
@ -59,12 +57,10 @@ void gpio_init()
// lightsense LED cathode // lightsense LED cathode
gpio.GPIO_Mode = GPIO_Mode_Out_PP; gpio.GPIO_Mode = GPIO_Mode_Out_PP;
gpio.GPIO_Pin = GPIO_Pin_2; gpio.GPIO_Pin = GPIO_Pin_2;
GPIOA->OUTDR = ~GPIO_Pin_2;
GPIO_Init(GPIOA, &gpio); GPIO_Init(GPIOA, &gpio);
// lightsense LED anode // lightsense LED anode
gpio.GPIO_Pin = GPIO_Pin_0; gpio.GPIO_Pin = GPIO_Pin_0;
GPIOD->OUTDR = ~GPIO_Pin_0;
GPIO_Init(GPIOD, &gpio); GPIO_Init(GPIOD, &gpio);
// unused pins // unused pins
@ -88,14 +84,7 @@ void gpio_init()
gpio.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_6; gpio.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_6;
GPIO_Init(GPIOC, &gpio); GPIO_Init(GPIOC, &gpio);
// BTN1 (PC5) pull up, BTN2 (PC4) pull down // BTN1, BTN2 will be handled by button handler
gpio.GPIO_Pin = GPIO_Pin_4;
gpio.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOC, &gpio);
gpio.GPIO_Pin = GPIO_Pin_5;
gpio.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOC, &gpio);
} }
int main(void) int main(void)
@ -112,6 +101,7 @@ int main(void)
// configure gpio pins, hard buttons (used for settings reset) // configure gpio pins, hard buttons (used for settings reset)
gpio_init(); gpio_init();
btn_init();
// get saved settings, or reset if BTN1 is pushed // get saved settings, or reset if BTN1 is pushed
i2c_init(); i2c_init();
@ -119,7 +109,6 @@ int main(void)
// configure hardware // configure hardware
adc_init(); adc_init();
btn_init();
led_init(); led_init();
// configure random // configure random
@ -131,9 +120,6 @@ int main(void)
// configure systick interrupt // configure systick interrupt
systick_init(); systick_init();
// set up LEDs initially
led_rgb_firstrun();
// do system shit // do system shit
while(1) { while(1) {
__WFI(); __WFI();

View File

@ -18,10 +18,10 @@ void btn_init()
{ {
uint8_t i; uint8_t i;
// configure GPIO (now handled as part of main GPIO init function) // configure GPIO
// BTN_PORT->BSHR = (BTN1_PUPD << BTN1_PIN) | (BTN2_PUPD << BTN2_PIN); BTN_PORT->BSHR = (BTN1_PUPD << BTN1_PIN) | (BTN2_PUPD << BTN2_PIN);
// BTN_PORT->CFGLR &= ~((0xf << (BTN1_PIN*4)) | ((0xf << (BTN2_PIN*4)))); BTN_PORT->CFGLR &= ~((0xf << (BTN1_PIN*4)) | ((0xf << (BTN2_PIN*4))));
// BTN_PORT->CFGLR |= (0x8 << (BTN1_PIN*4)) | (0x8 << (BTN2_PIN*4)); BTN_PORT->CFGLR |= (0x8 << (BTN1_PIN*4)) | (0x8 << (BTN2_PIN*4));
// configure default setup // configure default setup
for (i = 0; i < BTN_COUNT; i++) { for (i = 0; i < BTN_COUNT; i++) {

View File

@ -80,9 +80,11 @@ int8_t i2c_read_addr1b(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t len)
*data++ = I2C_ReceiveData(I2C1); *data++ = I2C_ReceiveData(I2C1);
len--; len--;
}
if (!len) {
I2C_GenerateSTOP(I2C1, ENABLE); I2C_GenerateSTOP(I2C1, ENABLE);
}
}
return 0; return 0;
} }
@ -143,7 +145,7 @@ void i2c_write_reg_8b(uint8_t addr, uint8_t reg, const uint8_t dat)
i2c_write_addr1b(addr, reg, &dat, 1); i2c_write_addr1b(addr, reg, &dat, 1);
} }
int8_t i2c_addr_scan(uint8_t addr) uint8_t i2c_addr_scan(uint8_t addr)
{ {
uint8_t found = 1; uint8_t found = 1;
uint32_t event; uint32_t event;
@ -162,28 +164,30 @@ int8_t i2c_addr_scan(uint8_t addr)
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT) && timeout--); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT) && timeout--);
if (!timeout) return -2; if (!timeout) return -2;
I2C_Send7bitAddress(I2C1, (addr & 0xfe), (addr & 0x01)); I2C_Send7bitAddress(I2C1, addr, (addr & 1));
timeout = I2C_TIMEOUT_ACK_POLL; timeout = I2C_TIMEOUT_ACK_POLL;
if (addr & 1) event = I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED; if (addr & 1) event = I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED;
else event = I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED; else event = I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED;
while ((I2C_CheckEvent(I2C1, event) == NoREADY) && timeout--) { while (I2C_CheckEvent(I2C1, event) && timeout--) {
if (I2C_GetFlagStatus(I2C1, I2C_FLAG_AF)) { if (I2C_GetFlagStatus(I2C1, I2C_FLAG_AF)) {
found = 0; found = 0;
break; break;
} }
} }
if (!timeout) { if (!timeout) {
found = 0; found = 0;
} }
// reset flags; it might be in a fucked state
I2C1->STAR1 = 0;
// send a stop to make sure anything listening knows to stfu // send a stop to make sure anything listening knows to stfu
I2C_GenerateSTOP(I2C1, ENABLE); I2C_GenerateSTOP(I2C1, ENABLE);
// reset flags; it might be in a fucked state
if (!found) { if (!found) {
I2C1->STAR1 = 0;
return 0; return 0;
} }

View File

@ -19,7 +19,7 @@ int8_t i2c_write_addr1b(uint8_t addr, uint8_t reg, const uint8_t *data, uint8_t
uint8_t i2c_read_reg_8b(uint8_t addr, uint8_t reg); uint8_t i2c_read_reg_8b(uint8_t addr, uint8_t reg);
void i2c_write_reg_8b(uint8_t addr, uint8_t reg, const uint8_t dat); void i2c_write_reg_8b(uint8_t addr, uint8_t reg, const uint8_t dat);
int8_t i2c_addr_scan(uint8_t addr); uint8_t i2c_addr_scan(uint8_t addr);

View File

@ -520,23 +520,23 @@ void led_rgb_4_typing(uint8_t preview, uint8_t tick)
if (typing_fadeout >= 3) typing_fadeout--; if (typing_fadeout >= 3) typing_fadeout--;
else typing_fadeout = 0; else typing_fadeout = 0;
// always do O character if (!preview || (i == 4) || (((preview & 0xf) == 4) && i >= 5)) {
for (j = 0; j < 3; j++) { for (j = 0; j < 3; j++) {
s = rgb[4][j]; s = rgb[8][j];
s *= typing_fadeout; s *= typing_fadeout;
rgb[8][j] = s >> 8; rgb[8][j] = s >> 8;
} }
if (!preview) {
w = ((preview & 0xf) == 4) ? 5 : 0;
for (i = w; i < 9; i++) {
rgb[i][0] = rgb[4][0];
rgb[i][1] = rgb[4][1];
rgb[i][2] = rgb[4][2];
} }
// cursor w = ((preview & 0xf) == 4) ? 5 : 0;
for (i = w; i < 8; i++) {
rgb[i][0] = rgb[8][0];
rgb[i][1] = rgb[8][1];
rgb[i][2] = rgb[8][2];
}
if (!preview) {
s = cursor[color]; s = cursor[color];
s *= typing_fadeout; s *= typing_fadeout;
cursor[color] = s >> 8; cursor[color] = s >> 8;

View File

@ -324,16 +324,12 @@ static void ui_cursor_flash()
case MODE_PROGRAM: { case MODE_PROGRAM: {
// cursor is on if this program is flagged as on // cursor is on if this program is flagged as on
cursor[0] = (userconf.ledprog_ena_mask & (1 << preview_idx)) ? 127 : 0; cursor[0] = (userconf.ledprog_ena_mask & (1 << preview_idx)) ? 127 : 0;
cursor[1] = 0;
cursor[2] = 0;
break; break;
} }
case MODE_PARAMETER: { case MODE_PARAMETER: {
// cursor is on when program is being edited // cursor is on when program is being edited
cursor[0] = rgb_prog_is_editing ? 127 : 0; cursor[0] = rgb_prog_is_editing ? 127 : 0;
cursor[1] = 0;
cursor[2] = 0;
break; break;
} }
@ -529,7 +525,7 @@ void ui_render()
config_save_timer = UI_CONF_SAVE_TIMEOUT; config_save_timer = UI_CONF_SAVE_TIMEOUT;
// rapidly flash lsens // rapidly flash lsens
if ((tick & 0x7) == 0) { if ((tick >> 3) & 1) {
GPIOD->OUTDR ^= GPIO_Pin_0; GPIOD->OUTDR ^= GPIO_Pin_0;
} }
@ -573,7 +569,7 @@ void ui_render()
config_save_timer = UI_CONF_SAVE_TIMEOUT; config_save_timer = UI_CONF_SAVE_TIMEOUT;
// slowly flash lsnes // slowly flash lsnes
if ((tick & 0x20) == 0) { if ((tick >> 5) & 1) {
GPIOD->OUTDR ^= GPIO_Pin_0; GPIOD->OUTDR ^= GPIO_Pin_0;
} }