int32 ICACHE_FLASH_ATTR sdio_load_data(const uint8* data,uint32 len)
{
    int32 data_len = 0;

	if (pHead_Sended == NULL) {
		os_printf("no buf\r\n");
		return 0;
	}
    int32 left_len = 0;
    
    while(len)
    {
		left_len = RX_BUFFER_SIZE + SDIO_TOKEN_SIZE - (uint32)(pHead_Sended->tail - pHead_Sended->buffer);
        if(len < left_len)
        {
            os_memcpy(pHead_Sended->tail,data,len);
			pHead_Sended->tail += len;
			len = 0;
			data_len += len;
            //os_printf(">555:0x%08x,0x%08x\r\n",pHead_Sended->buffer,pHead_Sended->tail);
        }
        else
        {
            os_memcpy(pHead_Sended->tail,data,left_len);
			pHead_Sended->tail += left_len;
			len -= left_len;
			data += left_len;
			data_len += left_len;
			if(pHead_ToSend == NULL) {
				pTail_ToSend = pHead_Sended;
				pHead_ToSend = pTail_ToSend;
			} else {
				pTail_ToSend->next = pHead_Sended;
				pTail_ToSend = pTail_ToSend->next;
			}
			pHead_Sended = pHead_Sended->next;
			
			pTail_ToSend->next = NULL;
            if(pHead_Sended == NULL)
            {
                os_printf("buf full\r\n");
                break;
            }
            //os_printf(">666\r\n");
        }
    }

	//os_printf(">>pHead_ToSend:0x%08x\r\n",pHead_ToSend);
	
	if(pHead_ToSend == NULL) {
		pTail_ToSend = pHead_Sended;
		pHead_ToSend = pTail_ToSend;

		pHead_Sended = pHead_Sended->next;
		pTail_ToSend->next = NULL;
		//system_os_post(2, 2, 0);
		sdio_try_to_load();
	}
    return data_len;
}
Exemplo n.º 2
0
int32 ICACHE_FLASH_ATTR sdio_load_data(const uint8* data,uint32 len)
{
    int32 data_len = 0;
	struct sdio_list* temp_list;
	if (pHead_Sended == NULL) {
		//os_printf("no buf\r\n");
		return 0;
	}
    int32 left_len = 0;
    while(len)
    {
		ETS_SDIO_INTR_DISABLE();
		if(pHead_Sended == NULL)
        {
            //os_printf("buf full\r\n");
			ETS_SDIO_INTR_ENABLE();
            break;
        }
		temp_list = pHead_Sended;
		pHead_Sended = pHead_Sended->next;
		ETS_SDIO_INTR_ENABLE();
		left_len = RX_BUFFER_SIZE + SDIO_TOKEN_SIZE - (uint32)(temp_list->tail - temp_list->buffer);
        if(len < left_len)
        {
            os_memcpy(temp_list->tail,data,len);
			temp_list->tail += len;
			
			data_len += len;
			len = 0;
			ETS_SDIO_INTR_DISABLE();
			temp_list->next = pHead_Sended;
			pHead_Sended = temp_list;
			//ETS_SDIO_INTR_ENABLE();
        }
        else
        {
            os_memcpy(temp_list->tail,data,left_len);
			temp_list->tail += left_len;
			len -= left_len;
			data += left_len;
			data_len += left_len;
			ETS_SDIO_INTR_DISABLE();
			if(pHead_ToSend == NULL) {
				pTail_ToSend = temp_list;
				pHead_ToSend = pTail_ToSend;
				sdio_try_to_load();
			} else {
				pTail_ToSend->next = temp_list;
				pTail_ToSend = pTail_ToSend->next;
			}
			pTail_ToSend->next = NULL;
			//ETS_SDIO_INTR_ENABLE();
        }
    }
	//ETS_SDIO_INTR_DISABLE();
	if(pHead_ToSend == NULL) {
		pTail_ToSend = pHead_Sended;
		pHead_ToSend = pTail_ToSend;

		pHead_Sended = pHead_Sended->next;
		pTail_ToSend->next = NULL;
		sdio_try_to_load();
	}
	ETS_SDIO_INTR_ENABLE();
    return data_len;
}