aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/firmware/angie/c/src/usb.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/contrib/firmware/angie/c/src/usb.c b/contrib/firmware/angie/c/src/usb.c
index e284efd..0a43ff9 100644
--- a/contrib/firmware/angie/c/src/usb.c
+++ b/contrib/firmware/angie/c/src/usb.c
@@ -757,14 +757,13 @@ void i2c_recieve(void)
PIN_SDA_DIR = 0;
if (EP6FIFOBUF[0] == 1) {
uint8_t rdwr = EP6FIFOBUF[0]; //read
- uint8_t reg_adr_check = EP6FIFOBUF[1];
- uint8_t count = EP6FIFOBUF[2]; //request data count
+ uint8_t data_count = EP6FIFOBUF[1]; //data sent count
+ uint8_t count = EP6FIFOBUF[2]; //requested data count
uint8_t adr = EP6FIFOBUF[3]; //address
- uint8_t reg_adr = EP6FIFOBUF[4];
uint8_t address = get_address(adr, rdwr); //address byte (read command)
uint8_t address_2 = get_address(adr, 0); //address byte 2 (write command)
- printf("%d\n", address);
+ printf("%d\n", address - 1);
/* start: */
start_cd();
@@ -774,10 +773,12 @@ void i2c_recieve(void)
uint8_t ack = get_ack();
/* send data */
- if (reg_adr_check) { //if there is a byte reg
- send_byte(reg_adr);
- /* ack(): */
- ack = get_ack();
+ if (data_count) { //if there is a byte reg
+ for (uint8_t i = 0; i < data_count; i++) {
+ send_byte(EP6FIFOBUF[i + 4]);
+ /* ack(): */
+ ack = get_ack();
+ }
}
/* repeated start: */
@@ -788,13 +789,15 @@ void i2c_recieve(void)
ack = get_ack();
/* receive data */
- for (uint8_t i = 0; i < count; i++) {
+ for (uint8_t i = 0; i < count - 1; i++) {
EP8FIFOBUF[i] = receive_byte();
- /* send ack: */
+ /* send ack: */
send_ack();
}
+ EP8FIFOBUF[count - 1] = receive_byte();
+
/* stop */
stop_cd();