kopia lustrzana https://github.com/fsphil/hadie
Workaround compiler bug, and other cleanups.
rodzic
cbdc235291
commit
98c38ca9e1
9
c328.c
9
c328.c
|
@ -19,7 +19,7 @@ uint8_t rxbuf[RXBUF_LEN];
|
||||||
uint16_t rxbuf_len = 0;
|
uint16_t rxbuf_len = 0;
|
||||||
|
|
||||||
/* Expected package size */
|
/* Expected package size */
|
||||||
static uint8_t pkg_len = 64; /* Default is 64 according to datasheet */
|
static uint16_t pkg_len = 64; /* Default is 64 according to datasheet */
|
||||||
|
|
||||||
/* Timeout counter */
|
/* Timeout counter */
|
||||||
volatile static uint8_t timeout_clk = 0;
|
volatile static uint8_t timeout_clk = 0;
|
||||||
|
@ -156,7 +156,9 @@ char c3_get_picture(uint8_t pt, uint16_t *length)
|
||||||
char c3_get_package(uint16_t id, uint8_t **dst, uint16_t *length)
|
char c3_get_package(uint16_t id, uint8_t **dst, uint16_t *length)
|
||||||
{
|
{
|
||||||
uint8_t checksum;
|
uint8_t checksum;
|
||||||
uint16_t s;
|
volatile uint16_t s;
|
||||||
|
/* s is volatile to work around an apparent bug in avr-gcc --
|
||||||
|
* discovered by ms7821 in #highaltitude */
|
||||||
|
|
||||||
rxbuf_len = 0;
|
rxbuf_len = 0;
|
||||||
checksum = 0;
|
checksum = 0;
|
||||||
|
@ -172,7 +174,8 @@ char c3_get_package(uint16_t id, uint8_t **dst, uint16_t *length)
|
||||||
if(!RXREADY) continue;
|
if(!RXREADY) continue;
|
||||||
|
|
||||||
/* Read the byte and update checksum */
|
/* Read the byte and update checksum */
|
||||||
checksum += rxbuf[rxbuf_len++] = UDR0;
|
rxbuf[rxbuf_len] = UDR0;
|
||||||
|
checksum += rxbuf[rxbuf_len++];
|
||||||
|
|
||||||
if(rxbuf_len == 4)
|
if(rxbuf_len == 4)
|
||||||
{
|
{
|
||||||
|
|
19
hadie.c
19
hadie.c
|
@ -91,6 +91,7 @@ char tx_image(void)
|
||||||
static uint16_t pkg_len;
|
static uint16_t pkg_len;
|
||||||
|
|
||||||
static uint8_t img_id = 0;
|
static uint8_t img_id = 0;
|
||||||
|
static uint8_t img_tx;
|
||||||
static uint8_t pkt_id;
|
static uint8_t pkt_id;
|
||||||
|
|
||||||
if(!setup)
|
if(!setup)
|
||||||
|
@ -101,6 +102,8 @@ char tx_image(void)
|
||||||
pkt_id = 0;
|
pkt_id = 0;
|
||||||
pkg_len = 0;
|
pkg_len = 0;
|
||||||
pkg_id = 0;
|
pkg_id = 0;
|
||||||
|
img_tx = 0;
|
||||||
|
img_id++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialise the packet -- make sure previous packet has finished TX'ing! */
|
/* Initialise the packet -- make sure previous packet has finished TX'ing! */
|
||||||
|
@ -114,7 +117,7 @@ char tx_image(void)
|
||||||
char msg[100];
|
char msg[100];
|
||||||
if(c3_get_package(pkg_id++, &pkg, &pkg_len) != 0)
|
if(c3_get_package(pkg_id++, &pkg, &pkg_len) != 0)
|
||||||
{
|
{
|
||||||
snprintf(msg, 100, "$$" CALLSIGN ",Get package %i failed, had %i bytes: %02X %02X %02X %02X\n", pkg_id - 1, pkg_len, pkg[0], pkg[1], pkg[2], pkg[3]);
|
snprintf(msg, 100, "$$" CALLSIGN ",Get package %i failed\n", pkg_id - 1);
|
||||||
rtx_string(msg);
|
rtx_string(msg);
|
||||||
rtx_wait();
|
rtx_wait();
|
||||||
|
|
||||||
|
@ -122,10 +125,6 @@ char tx_image(void)
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(msg, 100, "$$" CALLSIGN ",Got package %i, %i bytes, %i in pkt\n", pkg_id - 1, pkg_len, pkt_len);
|
|
||||||
rtx_string(msg);
|
|
||||||
rtx_wait();
|
|
||||||
|
|
||||||
/* Skip the package header */
|
/* Skip the package header */
|
||||||
pkg += 4;
|
pkg += 4;
|
||||||
pkg_len -= 6;
|
pkg_len -= 6;
|
||||||
|
@ -141,10 +140,18 @@ char tx_image(void)
|
||||||
pkg += l;
|
pkg += l;
|
||||||
pkg_len -= l;
|
pkg_len -= l;
|
||||||
pkt_len += l;
|
pkt_len += l;
|
||||||
|
img_tx += l;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Have we reached the end of the image? */
|
||||||
|
if(img_tx == image_len)
|
||||||
|
{
|
||||||
|
c3_finish_picture();
|
||||||
|
setup = 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rtx_string_P(PSTR("TX'ing packet\n"));
|
|
||||||
encode_rs_8(&pkt[1], &pkt[PKT_SIZE_HEADER + PKT_SIZE_PAYLOAD], 0);
|
encode_rs_8(&pkt[1], &pkt[PKT_SIZE_HEADER + PKT_SIZE_PAYLOAD], 0);
|
||||||
rtx_data(pkt, PKT_SIZE);
|
rtx_data(pkt, PKT_SIZE);
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue