agileRTOS (zrtos)  Version 0.8.0 (ghostbuster)
w5500.h File Reference
Include dependency graph for w5500.h:

Go to the source code of this file.

Data Structures

struct  _zrtos_vfs_module_w5500_ioctl_t
 
struct  _zrtos_vfs_module_w5500_inode_t
 

Macros

#define ZRTOS_VFS_MODULE_W5500__CFG_STARTUP_DELAY   600
 
#define ZRTOS_VFS_MODULE_W5500__CFG_SPI_CLOCK_RATE   ZRTOS_VFS_MODULE_SPI_SYNC_CONTROL__CLOCK_RATE_4
 
#define ZRTOS_VFS_MODULE_W5500__CFG_SPI_CONTROL
 
#define ZRTOS_VFS_MODULE_W5500_IOCTL__GET(addr, len)   ((addr << 8) | (0x00 << 6) | len)
 
#define ZRTOS_VFS_MODULE_W5500_IOCTL__SET(addr, len)   ((addr << 8) | (0x01 << 6) | len)
 

Typedefs

typedef struct _zrtos_vfs_module_w5500_ioctl_t zrtos_vfs_module_w5500_ioctl_t
 
typedef struct _zrtos_vfs_module_w5500_inode_t zrtos_vfs_module_w5500_inode_t
 

Enumerations

enum  zrtos_vfs_module_w5500_mode_t { ZRTOS_VFS_MODULE_W5500_MODE__RST = 0 }
 
enum  zrtos_vfs_module_w5500_ctl_t {
  ZRTOS_VFS_MODULE_W5500_CTL__READ = 0,
  ZRTOS_VFS_MODULE_W5500_CTL__WRITE = (1<<2)
}
 

Functions

zrtos_error_t zrtos_vfs_module_w5500__spi_transfer_uint8 (zrtos_vfs_fd_t fd, uint16_t addr, uint8_t ctl, uint8_t *val)
 
zrtos_error_t zrtos_vfs_module_w5500__spi_transfer_uint16 (zrtos_vfs_fd_t fd, uint16_t addr, uint8_t ctl, uint16_t *val)
 
zrtos_error_t zrtos_vfs_module_w5500__reset (zrtos_vfs_fd_t fd)
 
zrtos_error_t zrtos_vfs_module_w5500__on_mount (zrtos_vfs_dentry_t *thiz)
 
zrtos_error_t zrtos_vfs_module_w5500__on_umount (zrtos_vfs_dentry_t *thiz)
 
 ZRTOS_ASSERT__STATIC (sizeof(int) >=sizeof(uint16_t))
 
zrtos_error_t zrtos_vfs_module_w5500__on_ioctl_helper (zrtos_vfs_fd_t fd, char *path, int request, va_list args, uint8_t ctl_bsb, bool(*validate)(uint16_t addr, size_t length))
 
bool zrtos_vfs_module_w5500__on_ioctl_helper_validate_addr (uint16_t addr, size_t length)
 
zrtos_error_t zrtos_vfs_module_w5500__on_ioctl (zrtos_vfs_file_t *thiz, char *path, int request, va_list args)
 
 ZRTOS_VFS_PLUGIN__INIT (w5500, ZRTOS_VFS_PLUGIN__0_ON_OPEN_DEFAULT() ZRTOS_VFS_PLUGIN__1_ON_CLOSE_DEFAULT() ZRTOS_VFS_PLUGIN__2_ON_MOUNT(zrtos_vfs_module_w5500__on_mount) ZRTOS_VFS_PLUGIN__3_ON_UMOUNT(zrtos_vfs_module_w5500__on_umount) ZRTOS_VFS_PLUGIN__4_ON_READ_DEFAULT() ZRTOS_VFS_PLUGIN__5_ON_WRITE_DEFAULT() ZRTOS_VFS_PLUGIN__6_ON_CAN_READ_DEFAULT() ZRTOS_VFS_PLUGIN__7_ON_CAN_WRITE_DEFAULT() ZRTOS_VFS_PLUGIN__8_ON_SEEK_DEFAULT() ZRTOS_VFS_PLUGIN__9_ON_IOCTL(zrtos_vfs_module_w5500__on_ioctl))
 

Macro Definition Documentation

◆ ZRTOS_VFS_MODULE_W5500__CFG_SPI_CLOCK_RATE

#define ZRTOS_VFS_MODULE_W5500__CFG_SPI_CLOCK_RATE   ZRTOS_VFS_MODULE_SPI_SYNC_CONTROL__CLOCK_RATE_4

Definition at line 26 of file w5500.h.

◆ ZRTOS_VFS_MODULE_W5500__CFG_SPI_CONTROL

#define ZRTOS_VFS_MODULE_W5500__CFG_SPI_CONTROL

◆ ZRTOS_VFS_MODULE_W5500__CFG_STARTUP_DELAY

#define ZRTOS_VFS_MODULE_W5500__CFG_STARTUP_DELAY   600

Definition at line 20 of file w5500.h.

◆ ZRTOS_VFS_MODULE_W5500_IOCTL__GET

#define ZRTOS_VFS_MODULE_W5500_IOCTL__GET (   addr,
  len 
)    ((addr << 8) | (0x00 << 6) | len)

Definition at line 57 of file w5500.h.

◆ ZRTOS_VFS_MODULE_W5500_IOCTL__SET

#define ZRTOS_VFS_MODULE_W5500_IOCTL__SET (   addr,
  len 
)    ((addr << 8) | (0x01 << 6) | len)

Definition at line 59 of file w5500.h.

Typedef Documentation

◆ zrtos_vfs_module_w5500_inode_t

◆ zrtos_vfs_module_w5500_ioctl_t

Enumeration Type Documentation

◆ zrtos_vfs_module_w5500_ctl_t

Enumerator
ZRTOS_VFS_MODULE_W5500_CTL__READ 
ZRTOS_VFS_MODULE_W5500_CTL__WRITE 

Definition at line 52 of file w5500.h.

◆ zrtos_vfs_module_w5500_mode_t

Enumerator
ZRTOS_VFS_MODULE_W5500_MODE__RST 

Definition at line 48 of file w5500.h.

Function Documentation

◆ ZRTOS_ASSERT__STATIC()

ZRTOS_ASSERT__STATIC ( sizeof(int) >=sizeof(uint16_t)  )
Here is the caller graph for this function:

◆ zrtos_vfs_module_w5500__on_ioctl()

zrtos_error_t zrtos_vfs_module_w5500__on_ioctl ( zrtos_vfs_file_t thiz,
char *  path,
int  request,
va_list  args 
)

Definition at line 280 of file w5500.h.

285  {
289  );
291  inode_data->fd
292  ,path
293  ,request
294  ,args
295  ,0
297  );
298 }
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
bool zrtos_vfs_module_w5500_socket__on_ioctl_helper_validate_addr(uint16_t addr, size_t length)
Definition: w5500_socket.h:309
zrtos_error_t zrtos_vfs_module_w5500__on_ioctl_helper(zrtos_vfs_fd_t fd, char *path, int request, va_list args, uint8_t ctl_bsb, bool(*validate)(uint16_t addr, size_t length))
Definition: w5500.h:221
void * zrtos_vfs_file__get_inode_data(zrtos_vfs_file_t *thiz)
Definition: vfs_file.h:191
Here is the call graph for this function:

◆ zrtos_vfs_module_w5500__on_ioctl_helper()

zrtos_error_t zrtos_vfs_module_w5500__on_ioctl_helper ( zrtos_vfs_fd_t  fd,
char *  path,
int  request,
va_list  args,
uint8_t  ctl_bsb,
bool(*)(uint16_t addr, size_t length)  validate 
)

Definition at line 221 of file w5500.h.

228  {
229  zrtos_error_t ret;
230  uint16_t req = ZRTOS_CAST__REINTERPRET(
231  int
232  ,request
233  );
234  uint16_t addr;
235  uint8_t ctl;
236  size_t length;
237  void *value = zrtos_va__arg_ptr(
238  args
239  ,void*
240  );
241  size_t value_length = zrtos_va__arg_ptr(
242  args
243  ,size_t
244  );
245 
246  length = req & 0xF;
247  req >>= 4;
248  ctl = req & 0xF | ctl_bsb;
249  req >>= 4;
250  addr = zrtos_types__htobe16(req);
251 
252  //@todo verify endianness
253  if(length == value_length
254  && validate(addr,length)
255  ){
257  fd
258  ,3
259  ,&addr
260  ,sizeof(addr)
261  ,&ctl
262  ,sizeof(ctl)
263  ,value
264  ,value_length
265  );
266  }else{
267  ret = ZRTOS_ERROR__INVAL;
268  }
269 
270  return ret;
271 }
#define ZRTOS_CAST__REINTERPRET(type, value)
Definition: cast.h:19
#define zrtos_types__htobe16(x)
Definition: types.h:233
#define zrtos_va__arg_ptr(ap, type)
Definition: va.h:26
Invalid argument.
Definition: error.h:46
zrtos_error_t zrtos_vfs_fd__spi_transfer(zrtos_vfs_fd_t fd, size_t len,...)
Definition: vfs_fd.h:113
static uint8_t
Definition: mcp2515.h:159
zrtos_error_t
Definition: error.h:20
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_vfs_module_w5500__on_ioctl_helper_validate_addr()

bool zrtos_vfs_module_w5500__on_ioctl_helper_validate_addr ( uint16_t  addr,
size_t  length 
)

Definition at line 273 of file w5500.h.

273  {
274  return (
275  (addr + length < 0x2F)
276  || (addr == 0x39 && length == 1)
277  );
278 }

◆ zrtos_vfs_module_w5500__on_mount()

zrtos_error_t zrtos_vfs_module_w5500__on_mount ( zrtos_vfs_dentry_t thiz)

Definition at line 204 of file w5500.h.

204  {
207  ,zrtos_vfs_dentry__get_data(thiz)
208  );
209 
211 
212  return zrtos_vfs_module_w5500__reset(inode_data->fd);
213 }
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
zrtos_error_t zrtos_vfs_module_w5500__reset(zrtos_vfs_fd_t fd)
Definition: w5500.h:167
void zrtos_gpio__delay_milliseconds(uint16_t ms)
Definition: gpio.h:512
#define ZRTOS_VFS_MODULE_W5500__CFG_STARTUP_DELAY
Definition: w5500.h:20
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_vfs_module_w5500__on_umount()

zrtos_error_t zrtos_vfs_module_w5500__on_umount ( zrtos_vfs_dentry_t thiz)

Definition at line 215 of file w5500.h.

215  {
216  return ZRTOS_ERROR__SUCCESS;
217 }
Successful program execution status.
Definition: error.h:22
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_vfs_module_w5500__reset()

zrtos_error_t zrtos_vfs_module_w5500__reset ( zrtos_vfs_fd_t  fd)

Definition at line 167 of file w5500.h.

169  {
170  zrtos_error_t ret;
171  size_t llimit = 1;
172  uint16_t cmd = zrtos_types__htobe16(MR);
173  uint8_t ctl = _W5500_SPI_WRITE_;
174  uint8_t mode = MR_RST;
175 
176  for(size_t l = 2;l--;){
177  while(llimit-- && zrtos_error__is_success((ret = zrtos_vfs_fd__spi_transfer(
178  inode_data->fd
179  ,3
180  ,&cmd
181  ,sizeof(cmd)
182  ,&ctl
183  ,sizeof(ctl)
184  ,&mode
185  ,sizeof(mode)
186  ))) && (mode & MR_RST) != 0){
187  continue;
188  }
189 
190  ctl = _W5500_SPI_READ_;
191  llimit = ZRTOS_TYPES__SIZE_MAX;
192  }
193 
194  return zrtos_error__is_success(ret)
195  ? (
196  (mode & MR_RST) == 0
199  )
200  : ret
201  ;
202 }
Try again.
Definition: error.h:35
#define zrtos_types__htobe16(x)
Definition: types.h:233
#define ZRTOS_TYPES__SIZE_MAX
Definition: types.h:170
bool zrtos_error__is_success(zrtos_error_t thiz)
Definition: error.h:152
Successful program execution status.
Definition: error.h:22
zrtos_error_t zrtos_vfs_fd__spi_transfer(zrtos_vfs_fd_t fd, size_t len,...)
Definition: vfs_fd.h:113
static uint8_t
Definition: mcp2515.h:159
zrtos_error_t
Definition: error.h:20
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_vfs_module_w5500__spi_transfer_uint16()

zrtos_error_t zrtos_vfs_module_w5500__spi_transfer_uint16 ( zrtos_vfs_fd_t  fd,
uint16_t  addr,
uint8_t  ctl,
uint16_t *  val 
)

Definition at line 149 of file w5500.h.

154  {
156  fd
157  ,3
158  ,&addr
159  ,sizeof(addr)
160  ,&ctl
161  ,sizeof(ctl)
162  ,val
163  ,sizeof(*val)
164  );
165 }
zrtos_error_t zrtos_vfs_fd__spi_transfer(zrtos_vfs_fd_t fd, size_t len,...)
Definition: vfs_fd.h:113
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_vfs_module_w5500__spi_transfer_uint8()

zrtos_error_t zrtos_vfs_module_w5500__spi_transfer_uint8 ( zrtos_vfs_fd_t  fd,
uint16_t  addr,
uint8_t  ctl,
uint8_t val 
)

Definition at line 131 of file w5500.h.

136  {
138  fd
139  ,3
140  ,&addr
141  ,sizeof(addr)
142  ,&ctl
143  ,sizeof(ctl)
144  ,val
145  ,sizeof(*val)
146  );
147 }
zrtos_error_t zrtos_vfs_fd__spi_transfer(zrtos_vfs_fd_t fd, size_t len,...)
Definition: vfs_fd.h:113
Here is the call graph for this function:

◆ ZRTOS_VFS_PLUGIN__INIT()