mirror of
https://github.com/im-tomu/foboot.git
synced 2024-09-20 02:40:09 +00:00
sw: minor shrink of sw code size
Signed-off-by: Sean Cross <sean@xobs.io>
This commit is contained in:
parent
8faf9dbec5
commit
26a327486f
@ -7,6 +7,7 @@ extern "C" {
|
||||
|
||||
void time_init(void);
|
||||
int elapsed(int *last_event, int period);
|
||||
void msleep(int ms);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -14,14 +14,13 @@ void usb_disconnect(void);
|
||||
|
||||
int usb_irq_happened(void);
|
||||
void usb_setup(const struct usb_setup_request *setup);
|
||||
int usb_send(const void *data, int total_count);
|
||||
void usb_send(const void *data, int total_count);
|
||||
void usb_ack_in(void);
|
||||
void usb_ack_out(void);
|
||||
void usb_err(void);
|
||||
int usb_recv(void *buffer, unsigned int buffer_len);
|
||||
void usb_poll(void);
|
||||
int usb_wait_for_send_done(void);
|
||||
void usb_recv_done(void);
|
||||
void usb_wait_for_send_done(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
62
sw/src/rgb.c
62
sw/src/rgb.c
@ -55,59 +55,35 @@ void rgb_init(void) {
|
||||
rgb_mode_idle();
|
||||
}
|
||||
|
||||
void rgb_mode_idle(void) {
|
||||
RGB_SWITCH_MODE(IDLE);
|
||||
// rgb_mode_writing(); return;
|
||||
rgb_write(12, LEDDONR);
|
||||
rgb_write(24, LEDDOFR);
|
||||
static void rgb_switch_mode(uint8_t mode,
|
||||
uint8_t onr, uint8_t ofr,
|
||||
uint8_t onrate, uint8_t offrate,
|
||||
uint8_t r, uint8_t g, uint8_t b) {
|
||||
RGB_SWITCH_MODE(mode);
|
||||
rgb_write(onr, LEDDONR);
|
||||
rgb_write(ofr, LEDDOFR);
|
||||
|
||||
rgb_write(BREATHE_ENABLE | BREATHE_EDGE_BOTH
|
||||
| BREATHE_MODE_MODULATE | BREATHE_RATE(2), LEDDBCRR);
|
||||
rgb_write(BREATHE_ENABLE | BREATHE_MODE_MODULATE | BREATHE_RATE(3), LEDDBCFR);
|
||||
| BREATHE_MODE_MODULATE | BREATHE_RATE(onrate), LEDDBCRR);
|
||||
rgb_write(BREATHE_ENABLE | BREATHE_MODE_MODULATE | BREATHE_RATE(offrate), LEDDBCFR);
|
||||
|
||||
rgb_write(0x00/4, LEDDPWRG); // Red
|
||||
rgb_write(0x4a/4, LEDDPWRB); // Green
|
||||
rgb_write(0xe1/4, LEDDPWRR); // Blue
|
||||
rgb_write(r, LEDDPWRG); // Red
|
||||
rgb_write(g, LEDDPWRB); // Green
|
||||
rgb_write(b, LEDDPWRR); // Blue
|
||||
}
|
||||
|
||||
void rgb_mode_idle(void) {
|
||||
rgb_switch_mode(IDLE, 12, 14, 2, 3, 0x00/4, 0x4a/4, 0xe1/4);
|
||||
}
|
||||
|
||||
void rgb_mode_writing(void) {
|
||||
RGB_SWITCH_MODE(WRITING);
|
||||
rgb_write(1, LEDDONR);
|
||||
rgb_write(2, LEDDOFR);
|
||||
|
||||
rgb_write(BREATHE_ENABLE | 0
|
||||
| BREATHE_MODE_MODULATE | BREATHE_RATE(1), LEDDBCRR);
|
||||
rgb_write(BREATHE_ENABLE | BREATHE_MODE_MODULATE | BREATHE_RATE(3), LEDDBCFR);
|
||||
|
||||
rgb_write(0x00/4, LEDDPWRG); // Red
|
||||
rgb_write(0x7a/4, LEDDPWRB); // Green
|
||||
rgb_write(0x51/4, LEDDPWRR); // Blue
|
||||
rgb_switch_mode(WRITING, 1, 2, 1, 3, 0x00/4, 0x7a/4, 0x51/4);
|
||||
}
|
||||
|
||||
void rgb_mode_error(void) {
|
||||
RGB_SWITCH_MODE(ERROR);
|
||||
rgb_write(3, LEDDONR);
|
||||
rgb_write(3, LEDDOFR);
|
||||
|
||||
rgb_write(BREATHE_ENABLE | BREATHE_EDGE_BOTH
|
||||
| BREATHE_MODE_MODULATE | BREATHE_RATE(2), LEDDBCRR);
|
||||
rgb_write(BREATHE_ENABLE | BREATHE_MODE_MODULATE | BREATHE_RATE(3), LEDDBCFR);
|
||||
|
||||
rgb_write(0xf0/4, LEDDPWRG); // Red
|
||||
rgb_write(0x0a/4, LEDDPWRB); // Green
|
||||
rgb_write(0x01/4, LEDDPWRR); // Blue
|
||||
rgb_switch_mode(ERROR, 3, 3, 2, 3, 0xf0/4, 0x0a/4, 0x01/4);
|
||||
}
|
||||
|
||||
void rgb_mode_done(void) {
|
||||
RGB_SWITCH_MODE(DONE);
|
||||
rgb_write(8, LEDDONR);
|
||||
rgb_write(8, LEDDOFR);
|
||||
|
||||
rgb_write(BREATHE_ENABLE | BREATHE_EDGE_BOTH
|
||||
| BREATHE_MODE_MODULATE | BREATHE_RATE(2), LEDDBCRR);
|
||||
rgb_write(BREATHE_ENABLE | BREATHE_MODE_MODULATE | BREATHE_RATE(3), LEDDBCFR);
|
||||
|
||||
rgb_write(0x14/4, LEDDPWRG); // Red
|
||||
rgb_write(0xff/4, LEDDPWRB); // Green
|
||||
rgb_write(0x44/4, LEDDPWRR); // Blue
|
||||
rgb_switch_mode(DONE, 8, 8, 2, 3, 0x14/4, 0xff/4, 0x44/4);
|
||||
}
|
12
sw/src/spi.c
12
sw/src/spi.c
@ -6,6 +6,7 @@
|
||||
#include <sys/stat.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <generated/csr.h>
|
||||
|
||||
#include "spi.h"
|
||||
@ -510,6 +511,7 @@ void spiWriteStatus(struct ff_spi *spi, uint8_t sr, uint8_t val) {
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
struct spi_id spiId(struct ff_spi *spi) {
|
||||
return spi->id;
|
||||
}
|
||||
@ -538,7 +540,7 @@ static void spi_decode_id(struct ff_spi *spi) {
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#endif
|
||||
static void spi_get_id(struct ff_spi *spi) {
|
||||
spiBegin(spi);
|
||||
spiCommand(spi, 0x90); // Read manufacturer ID
|
||||
@ -548,7 +550,8 @@ static void spi_get_id(struct ff_spi *spi) {
|
||||
spi->id.manufacturer_id = spiCommandRx(spi);
|
||||
spi->id.device_id = spiCommandRx(spi);
|
||||
spiEnd(spi);
|
||||
|
||||
}
|
||||
#if 0
|
||||
spiBegin(spi);
|
||||
spiCommand(spi, 0x9f); // Read device id
|
||||
spi->id._manufacturer_id = spiCommandRx(spi);
|
||||
@ -589,6 +592,7 @@ void spiOverrideSize(struct ff_spi *spi, uint32_t size) {
|
||||
else
|
||||
spi->id.bytes = size;
|
||||
}
|
||||
#endif
|
||||
|
||||
int spiSetType(struct ff_spi *spi, enum spi_type type) {
|
||||
|
||||
@ -729,8 +733,7 @@ uint8_t spiReset(struct ff_spi *spi) {
|
||||
spiCommand(spi, 0x99); // "Reset Device" command
|
||||
spiEnd(spi);
|
||||
|
||||
#pragma warn "Sleep for 30 ms here"
|
||||
// usleep(30);
|
||||
// msleep(30);
|
||||
|
||||
spiBegin(spi);
|
||||
spiCommand(spi, 0xab); // "Resume from Deep Power-Down" command
|
||||
@ -768,7 +771,6 @@ int spiInit(struct ff_spi *spi) {
|
||||
spi_get_id(spi);
|
||||
|
||||
spi->quirks |= SQ_SR2_FROM_SR1;
|
||||
// if (spi->id.manufacturer_id == 0x1f)
|
||||
if (spi->id.manufacturer_id == 0xef)
|
||||
spi->quirks |= SQ_SKIP_SR_WEL | SQ_SECURITY_NYBBLE_SHIFT;
|
||||
|
||||
|
@ -206,6 +206,16 @@ void usb_setup(const struct usb_setup_request *setup)
|
||||
{
|
||||
data = reply_buffer;
|
||||
datalen = 6;
|
||||
// If the state is dfuMANIFEST-WAIT-RESET, then perform a reset
|
||||
// once the host acknowledges the packet.
|
||||
if (reply_buffer[4] == 8) {
|
||||
usb_send(data, datalen);
|
||||
usb_wait_for_send_done();
|
||||
int i;
|
||||
for (i = 0; i < 10000; i++)
|
||||
asm("nop");
|
||||
reboot();
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
|
@ -133,7 +133,7 @@ static void process_tx(void) {
|
||||
return;
|
||||
}
|
||||
|
||||
int usb_send(const void *data, int total_count) {
|
||||
void usb_send(const void *data, int total_count) {
|
||||
|
||||
while ((current_length || current_data))// && usb_ep_0_in_respond_read() != EPF_NAK)
|
||||
;
|
||||
@ -143,16 +143,13 @@ int usb_send(const void *data, int total_count) {
|
||||
data_to_send = 0;
|
||||
control_state = IN_DATA;
|
||||
process_tx();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int usb_wait_for_send_done(void) {
|
||||
void usb_wait_for_send_done(void) {
|
||||
while (current_data && current_length)
|
||||
usb_poll();
|
||||
while ((usb_ep_0_in_dtb_read() & 1) == 1)
|
||||
usb_poll();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void usb_isr(void) {
|
||||
@ -237,10 +234,6 @@ int usb_recv(void *buffer, unsigned int buffer_len) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// void usb_recv_done(void) {
|
||||
// usb_ep_0_in_respond_write(EPF_NAK);
|
||||
// }
|
||||
|
||||
void usb_poll(void) {
|
||||
// If some data was received, then process it.
|
||||
while (usb_ep0out_rd_ptr != usb_ep0out_wr_ptr) {
|
||||
|
10
sw/third_party/libbase/time.c
vendored
10
sw/third_party/libbase/time.c
vendored
@ -31,3 +31,13 @@ int elapsed(int *last_event, int period)
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
|
||||
void msleep(int ms)
|
||||
{
|
||||
timer0_en_write(0);
|
||||
timer0_reload_write(0);
|
||||
timer0_load_write(SYSTEM_CLOCK_FREQUENCY/1000*ms);
|
||||
timer0_en_write(1);
|
||||
timer0_update_value_write(1);
|
||||
while(timer0_value_read()) timer0_update_value_write(1);
|
||||
}
|
Loading…
Reference in New Issue
Block a user