MCPcopy Create free account
hub / github.com/apache/nuttx / rpmsg_socket_send_continuous

Function rpmsg_socket_send_continuous

net/rpmsg/rpmsg_sockif.c:1002–1091  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1000}
1001
1002static ssize_t rpmsg_socket_send_continuous(FAR struct socket *psock,
1003 FAR const struct iovec *buf,
1004 size_t iovcnt, bool nonblock)
1005{
1006 FAR struct rpmsg_socket_conn_s *conn = psock->s_conn;
1007 uint32_t len = rpmsg_socket_get_iovlen(buf, iovcnt);
1008 uint32_t written = 0;
1009 uint32_t offset = 0;
1010 int ret = 0;
1011
1012 while (written < len)
1013 {
1014 FAR struct rpmsg_socket_data_s *msg;
1015 uint32_t block_written = 0;
1016 uint32_t ipcsize;
1017 uint32_t block;
1018
1019 nxmutex_lock(&conn->sendlock);
1020 block = MIN(len - written, rpmsg_socket_get_space(conn));
1021 nxmutex_unlock(&conn->sendlock);
1022
1023 if (block == 0)
1024 {
1025 if (nonblock)
1026 {
1027 ret = -EAGAIN;
1028 break;
1029 }
1030
1031 ret = net_sem_timedwait(&conn->sendsem,
1032 _SO_TIMEOUT(conn->sconn.s_sndtimeo));
1033 if (!conn->ept.rdev || conn->unbind)
1034 {
1035 ret = -ECONNRESET;
1036 }
1037
1038 if (ret < 0)
1039 {
1040 break;
1041 }
1042
1043 continue;
1044 }
1045
1046 msg = rpmsg_get_tx_payload_buffer(&conn->ept, &ipcsize, true);
1047 if (!msg)
1048 {
1049 ret = -EINVAL;
1050 break;
1051 }
1052
1053 nxmutex_lock(&conn->sendlock);
1054 block = MIN(len - written, rpmsg_socket_get_space(conn));
1055 block = MIN(block, ipcsize - sizeof(*msg));
1056
1057 msg->cmd = RPMSG_SOCKET_CMD_DATA;
1058 msg->pos = conn->recvpos;
1059 msg->len = block;

Callers 1

rpmsg_socket_sendmsgFunction · 0.85

Calls 6

rpmsg_socket_get_iovlenFunction · 0.85
nxmutex_lockFunction · 0.85
rpmsg_socket_get_spaceFunction · 0.85
nxmutex_unlockFunction · 0.85
net_sem_timedwaitFunction · 0.85
memcpyFunction · 0.50

Tested by

no test coverage detected