X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb/blobdiff_plain/9248b988ecacab0249a1e957d1221143454d00f1..853cbce9b9a23201a048934b004ac04643f9c895:/hmuartlgw.c diff --git a/hmuartlgw.c b/hmuartlgw.c index 2e6757a..2fa755c 100644 --- a/hmuartlgw.c +++ b/hmuartlgw.c @@ -142,7 +142,7 @@ static int hmuartlgw_init_parse(enum hmuartlgw_dst dst, uint8_t *buf, int buf_le return 1; } -struct hmuartlgw_dev *hmuart_init(char *device, hmuartlgw_cb_fn cb, void *data) +struct hmuartlgw_dev *hmuart_init(char *device, hmuartlgw_cb_fn cb, void *data, int app) { struct hmuartlgw_dev *dev = NULL; struct termios oldtio, tio; @@ -191,7 +191,11 @@ struct hmuartlgw_dev *hmuart_init(char *device, hmuartlgw_cb_fn cb, void *data) hmuartlgw_flush(dev); - hmuartlgw_enter_app(dev); + if (app) { + hmuartlgw_enter_app(dev); + } else { + hmuartlgw_enter_bootloader(dev); + } dev->cb = cb; dev->cb_data = data; @@ -329,7 +333,7 @@ int hmuartlgw_send_raw(struct hmuartlgw_dev *dev, uint8_t *frame, int framelen) int hmuartlgw_send(struct hmuartlgw_dev *dev, uint8_t *cmd, int cmdlen, enum hmuartlgw_dst dst) { static uint8_t cnt = 0; - uint8_t frame[1024] = { 0 }; + uint8_t frame[4096] = { 0 }; uint16_t crc; frame[0] = 0xfd; @@ -413,10 +417,8 @@ int hmuartlgw_poll(struct hmuartlgw_dev *dev, int timeout) return -1; } - crc = crc16(dev->buf, dev->pos - 2); - if ((((crc >> 8) & 0xff) == dev->buf[dev->pos - 2]) && - ((crc & 0xff) == dev->buf[dev->pos - 1])) { - + crc = crc16(dev->buf, dev->pos); + if (crc == 0x0000) { if (debug) hexdump(dev->buf, dev->pos, "UARTLGW > ");