| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #include "luat_base.h"
- #include "luat_spi.h"
- #include "luat_gpio.h"
- #include "luat_sfd.h"
- #define LUAT_LOG_TAG "sfd"
- #include "luat_log.h"
- //--------------------------------------------------------------------
- // SFD at memory , for test
- #include "luat_zbuff.h"
- static int sfd_mem_init (void* userdata);
- static int sfd_mem_status (void* userdata);
- static int sfd_mem_read (void* userdata, char* buff, size_t offset, size_t len);
- static int sfd_mem_write (void* userdata, const char* buff, size_t offset, size_t len);
- static int sfd_mem_erase (void* userdata, size_t offset, size_t len);
- static int sfd_mem_ioctl (void* userdata, size_t cmd, void* buff);
- const sdf_opts_t sfd_mem_opts = {
- .initialize = sfd_mem_init,
- .status = sfd_mem_status,
- .read = sfd_mem_read,
- .write = sfd_mem_write,
- .erase = sfd_mem_erase,
- .ioctl = sfd_mem_ioctl,
- };
- static int sfd_mem_init (void* userdata) {
- if (userdata == NULL) {
- LLOGE("userdata for sfd_mem must NOT NULL");
- return -1;
- }
- sfd_drv_t *drv = (sfd_drv_t*)userdata;
- luat_zbuff_t* zbuff = drv->cfg.zbuff;
- if (zbuff->len < 16*1024) {
- LLOGE("zbuff for sfd_mem is too small");
- return -1;
- }
- return 0;
- }
- static int sfd_mem_status (void* userdata) {
- if (userdata == NULL) {
- LLOGE("userdata for sfd_mem must NOT NULL");
- return -1;
- }
- return 0;
- }
- static int sfd_mem_read (void* userdata, char* buff, size_t offset, size_t len) {
- if (userdata == NULL) {
- LLOGE("userdata for sfd_mem must NOT NULL");
- return -1;
- }
- sfd_drv_t *drv = (sfd_drv_t*)userdata;
- luat_zbuff_t* zbuff = drv->cfg.zbuff;
- if (offset > zbuff->len) {
- // LLOGD("over read");
- return 0;
- }
- if (offset+len > zbuff->len) {
- len = zbuff->len - offset;
- }
- if (len > 0) {
- memcpy(buff, zbuff->addr + offset, len);
- }
- return len;
- }
- static int sfd_mem_write (void* userdata, const char* buff, size_t offset, size_t len) {
- if (userdata == NULL) {
- LLOGE("userdata for sfd_mem must NOT NULL");
- return -1;
- }
- sfd_drv_t *drv = (sfd_drv_t*)userdata;
- luat_zbuff_t* zbuff = drv->cfg.zbuff;
- if (offset > zbuff->len) {
- // LLOGD("over read");
- return 0;
- }
- if (offset+len > zbuff->len) {
- len = zbuff->len - offset;
- }
- if (len > 0) {
- memcpy(zbuff->addr + offset, buff, len);
- }
- return len;
- }
- static int sfd_mem_erase (void* userdata, size_t offset, size_t len) {
- if (userdata == NULL) {
- LLOGE("userdata for sfd_mem must NOT NULL");
- return -1;
- }
- sfd_drv_t *drv = (sfd_drv_t*)userdata;
- luat_zbuff_t* zbuff = drv->cfg.zbuff;
- if (offset > zbuff->len) {
- // LLOGD("over read");
- return 0;
- }
- if (offset+len > zbuff->len) {
- len = zbuff->len - offset;
- }
- if (len > 0) {
- memset(zbuff->addr + offset, 0, len);
- }
- return 0;
- }
- static int sfd_mem_ioctl (void* userdata, size_t cmd, void* buff) {
- return 0;
- }
|