uint16_t W5100Class::send_data_part_begin(SOCKET s) // returns 'ptr' to be passed to 'send_data_part' and 'send_data_part_end' { return readSnTX_WR(s); } void W5100Class::send_data_part(SOCKET s, uint8_t *data, uint16_t len, uint16_t & ptr) { uint16_t offset = ptr & SMASK; uint16_t dstAddr = offset + SBASE[s]; if (offset + len > SSIZE) { // Wrap around circular buffer uint16_t size = SSIZE - offset; write(dstAddr, data, size); write(SBASE[s], data + size, len - size); } else { write(dstAddr, data, len); } ptr += len; } void W5100Class::send_data_part_end(SOCKET s, uint16_t ptr) { writeSnTX_WR(s, ptr); } uint16_t W5100Class::recv_data_part_begin(SOCKET s) // returns ptr (use getRXReceivedSize for size) { return readSnRX_RD(s); } void W5100Class::recv_data_part(SOCKET s, uint8_t *data, uint16_t len, uint16_t & ptr) { read_data(s, (uint8_t *)ptr, data, len); ptr += len; } void W5100Class::recv_data_part_end(SOCKET s, uint16_t ptr) { writeSnRX_RD(s, ptr); }