36
36
37
37
#include <nuttx/kmalloc.h>
38
38
#include <nuttx/circbuf.h>
39
+ #include <nuttx/crc32.h>
39
40
#include <nuttx/rpmsg/rpmsg.h>
40
41
#include <nuttx/mutex.h>
41
42
#include <nuttx/semaphore.h>
53
54
#define RPMSG_SOCKET_CMD_SYNC 1
54
55
#define RPMSG_SOCKET_CMD_DATA 2
55
56
#define RPMSG_SOCKET_CMD_SHUTDOWN 3
56
- #define RPMSG_SOCKET_NAME_PREFIX "sk:"
57
- #define RPMSG_SOCKET_NAME_PREFIX_LEN 3
58
- #define RPMSG_SOCKET_NAME_ID_LEN 13
59
-
60
- static_assert (RPMSG_SOCKET_NAME_SIZE + RPMSG_SOCKET_NAME_PREFIX_LEN
61
- <= RPMSG_NAME_SIZE , "socket name size config error" );
57
+ #define RPMSG_SOCKET_NAME_PREFIX "s:"
58
+ #define RPMSG_SOCKET_NAME_PREFIX_LEN 2
59
+ #define RPMSG_SOCKET_NAME_LEN 10
62
60
63
61
/****************************************************************************
64
62
* Private Types
@@ -100,7 +98,7 @@ struct rpmsg_socket_conn_s
100
98
struct rpmsg_endpoint ept ;
101
99
102
100
struct sockaddr_rpmsg rpaddr ;
103
- char nameid [RPMSG_SOCKET_NAME_ID_LEN ];
101
+ char nameid [RPMSG_SOCKET_NAME_LEN ];
104
102
uint16_t crefs ;
105
103
uint32_t how ;
106
104
@@ -222,7 +220,7 @@ const struct sock_intf_s g_rpmsg_sockif =
222
220
* Private Data
223
221
****************************************************************************/
224
222
225
- static uint64_t g_rpmsg_id ;
223
+ static uint32_t g_rpmsg_id ;
226
224
227
225
/****************************************************************************
228
226
* Private Functions
@@ -496,11 +494,30 @@ static void rpmsg_socket_ept_release(FAR struct rpmsg_endpoint *ept)
496
494
}
497
495
}
498
496
497
+ static void rpmsg_socket_format_name (FAR struct rpmsg_socket_conn_s * conn ,
498
+ FAR char * namebuf )
499
+ {
500
+ if (strlen (conn -> rpaddr .rp_name ) > RPMSG_SOCKET_NAME_LEN )
501
+ {
502
+ uint32_t crc = crc32 ((const uint8_t * )conn -> rpaddr .rp_name ,
503
+ strlen (conn -> rpaddr .rp_name ));
504
+ snprintf (namebuf , RPMSG_NAME_SIZE , "%s%.2s%08" PRIx32 "%s" ,
505
+ RPMSG_SOCKET_NAME_PREFIX , conn -> rpaddr .rp_name ,
506
+ crc , conn -> nameid );
507
+ }
508
+ else
509
+ {
510
+ snprintf (namebuf , RPMSG_NAME_SIZE , "%s%.*s%s" ,
511
+ RPMSG_SOCKET_NAME_PREFIX , RPMSG_SOCKET_NAME_LEN ,
512
+ conn -> rpaddr .rp_name , conn -> nameid );
513
+ }
514
+ }
515
+
499
516
static void rpmsg_socket_device_created (FAR struct rpmsg_device * rdev ,
500
517
FAR void * priv )
501
518
{
502
519
FAR struct rpmsg_socket_conn_s * conn = priv ;
503
- char buf [RPMSG_NAME_SIZE ];
520
+ char namebuf [RPMSG_NAME_SIZE ];
504
521
505
522
if (conn -> ept .rdev )
506
523
{
@@ -512,10 +529,9 @@ static void rpmsg_socket_device_created(FAR struct rpmsg_device *rdev,
512
529
conn -> ept .priv = conn ;
513
530
conn -> ept .ns_bound_cb = rpmsg_socket_ns_bound ;
514
531
conn -> ept .release_cb = rpmsg_socket_ept_release ;
515
- snprintf (buf , sizeof (buf ), "%s%s%s" , RPMSG_SOCKET_NAME_PREFIX ,
516
- conn -> rpaddr .rp_name , conn -> nameid );
532
+ rpmsg_socket_format_name (conn , namebuf );
517
533
518
- rpmsg_create_ept (& conn -> ept , rdev , buf ,
534
+ rpmsg_create_ept (& conn -> ept , rdev , namebuf ,
519
535
RPMSG_ADDR_ANY , RPMSG_ADDR_ANY ,
520
536
rpmsg_socket_ept_cb , rpmsg_socket_ns_unbind );
521
537
}
@@ -526,11 +542,10 @@ static bool rpmsg_socket_ns_match(FAR struct rpmsg_device *rdev,
526
542
uint32_t dest )
527
543
{
528
544
FAR struct rpmsg_socket_conn_s * server = priv ;
529
- char buf [RPMSG_NAME_SIZE ];
545
+ char namebuf [RPMSG_NAME_SIZE ];
530
546
531
- snprintf (buf , sizeof (buf ), "%s%s" , RPMSG_SOCKET_NAME_PREFIX ,
532
- server -> rpaddr .rp_name );
533
- if (strncmp (name , buf , strlen (buf )))
547
+ rpmsg_socket_format_name (server , namebuf );
548
+ if (strncmp (name , namebuf , strlen (namebuf )))
534
549
{
535
550
return false;
536
551
}
@@ -640,7 +655,7 @@ static int rpmsg_socket_setaddr(FAR struct rpmsg_socket_conn_s *conn,
640
655
641
656
if (suffix )
642
657
{
643
- snprintf (conn -> nameid , sizeof (conn -> nameid ), ":%" PRIx64 ,
658
+ snprintf (conn -> nameid , sizeof (conn -> nameid ), ":%" PRIx32 ,
644
659
g_rpmsg_id ++ );
645
660
}
646
661
else
0 commit comments