void enc_transmit_pbuf(struct pbuf *buf) { uint16_t length = buf->tot_len; /** @todo check buffer size */ transmit_start(); while(1) { transmit_partial(buf->payload, buf->len); if (buf->len == buf->tot_len) break; buf = buf->next; } transmit_end(length); }
void sense_measure(uint8_t txchan, uint8_t rxchan, uint8_t n) { uint8_t phase = 0; uint8_t count = 0; uint8_t done = 0; // This needs to be signed int16_t samp; measurement[0] = 0; measurement[1] = 0; measurement[2] = 0; measurement[3] = 0; transmit_select(txchan); transmit_start(); sense_start(); ADMUX |= rxchan; _delay_us(290); _delay_loop_1(3); NOP; ADCSRA |= (1<<ADEN); ADCSRA |= (1<<ADSC); while(!done) { while(!adc_done); samp = ADC - 512; adc_done = 0; if(phase & 2) { measurement[phase & 1] += samp; } else { measurement[phase & 1] -= samp; } if(phase == 3) count++; phase = (phase + 1) & 3; if(count == n) done = 1; } sense_finish(); }