|
From: | Joseph L. Kroesche |
Subject: | [lwip-users] proper way to add extern fs support to htttpserver_raw |
Date: | Wed, 1 May 2013 17:03:11 +0000 |
I am using the httpserver_raw from contrib with lwip 1.4.1 with no rtos. I am serving up web pages from the internal flash memory without any problems. This is the fsdata_custom.c file that is prepared using makefsdata. This all works
fine. However, I am struggling with the proper way to add support for an external file system, specifically SD card using FatFs. I have all the lower layers of FatFs working properly, I can read and open files using the FatFs APIs. I look at
fs.c and I can see that I can create fs_open_custom and fs_close_custom. So far so good. But I do not have all the file in memory so I cant use the file->data, file->index to point to the current contents of the file. So now I think I want to use LWIP_HTTPS_DYNAMIC_FILE_READ.
This is where I am getting stuck. First of all, there is no equivalent call to fs_read_custom() like there is fs_open_custom(). It looks like the only way to hook in my custom file read and write is by implementing fs_canread_custom() and fs_wait_read_custom()
even though I was not planning to do asynchronous reads. I am not sure in this case what I am supposed to do in the functions fs_canread_custom() and fs_wait_read_custom() since neither of these takes any parameters like the buffer pointer and the count which
is what I need to read from FatFs. I did go ahead and modify fs.c fs_read() function to read from FatFs the way I thought it should work, but I am still getting stuck on what I should set file->data and file->len to. When I look at httpd.c it looks like it still expects
these to point at actual file data. It sets hs->file = to data field of fs_file. I also tried setting all these to 0, but then httpd.c calls fs_bytes_left() which returns 0 because len and index are 0. My next step will be to modify fs_bytes_left() to
get bytes left from FatFs. My main question is, am I supposed to be able to cleanly hook in to fs.c in order to add SD card reading via FatFs, or is the expectation that I just need to make my own fs.c? I don’t mind doing that, but since it looks like it already
supports the concept of custom file I/O (fs_open_custom, etc) I thought there was already a defined way to do what I want, and I am worried I am missing something obvious. Thanks for reading. -joe k |
[Prev in Thread] | Current Thread | [Next in Thread] |