#include "include/circular_buffer.h" #include "include/wifi.h" #include "include/spi_drv.h" Byte __xdata circular_buffer[CBUF_SIZE]; Int16 cbuf_head; Int16 cbuf_tail; void cbuf_init() { cbuf_head=0; cbuf_tail=0; } Int16 cbuf_space() { if (cbuf_tail >= cbuf_head) { return CBUF_SIZE-cbuf_tail+cbuf_head-1; } else { return cbuf_head-cbuf_tail-1; } } void cbuf_fill_buffer() { Byte len_lo; Byte len_hi; Int16 len_recv = 0; Int16 i; Int16 buf_space = cbuf_space(); if (!buf_space) return; wifi_select(); Spi_write_data(WIFI_COMMAND_READ); Spi_wait_eot(); Spi_write_dummy(); Spi_wait_eot(); len_hi=Spi_read_data(); Spi_write_dummy(); Spi_wait_eot(); len_lo=Spi_read_data(); len_recv=len_hi; len_recv = len_recv << 8; len_recv |= len_lo; if (len_recv > buf_space) { len_recv = buf_space; } for (i=0; i