Skip to content

read(buf, len) bug....Found error in code... #1752

@glennkreisel

Description

@glennkreisel

UPDATE*** I have fixed this code in the udp_dev version..

in ard_utils.c

bool getTcpData(uint8_t sock, void** payload, uint16_t* len)
{
        tData* p = NULL;
        p = get_pBuf(sock);
        if (p != NULL)
        {
                *payload = p->data;
                *len = p->len;
                return true;
        }
        return false;
}

This function should return only the unread contents but instead the whole buffer of old and new data is returned. Even though the read(buf, len) from arduino only asks for 10 bytes. This should accept a LENGTH var and return the data at the current p->idx location up to end of buffered data or LENGTH reached...
This makes the WiFi code on arduino fail for wificlient.read(buf, len)..
So currently you can ONLY read one byte at a time and it is very slow with all the SPI traffic for each byte.

This is called in: ard_spi.c
This routine should accept another param of LENGTH from the arduino and only read that many bytes in the call to GetTcpData.

cmd_spi_state_t get_databuf_tcp_cmd_cb(char* recv, char* reply, void* ctx, uint16_t* count) {

        uint8_t* data;
        uint16_t len;

    CHECK_ARD_NETIF(recv, reply, count);

    if ((recv[3]==1)&&(recv[4]>=0)&&(recv[4]<MAX_SOCK_NUM))
    {
            if (getTcpData((uint8_t)recv[4], (void**)&data, &len))
            {
                    CREATE_HEADER_REPLY(reply, recv, PARAM_NUMS_1);
                    PUT_BUFDATA_INT(data, len, reply, 3);
                    END_HEADER_REPLY(reply, 3+len+2+1, *count);
                    freeTcpData((uint8_t)recv[4]);
            }else{
                    CREATE_HEADER_REPLY(reply, recv, PARAM_NUMS_0);
                    END_HEADER_REPLY(reply, 3, *count);
            }
    }
    return SPI_CMD_DONE;
}

Metadata

Metadata

Assignees

Labels

Component: CoreRelated to the code for the standard Arduino APILibrary: WifiThe Wifi Arduino library

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions