Browse Source

add mailbox test demo

shanlong.li 2 years ago
parent
commit
ea845e88e9
3 changed files with 76 additions and 0 deletions
  1. BIN
      mailbox/mailbox_test.docx
  2. 76 0
      mailbox/read_mbox.c
  3. BIN
      mailbox/read_test

BIN
mailbox/mailbox_test.docx


+ 76 - 0
mailbox/read_mbox.c

@@ -0,0 +1,76 @@
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <sys/ioctl.h>
+#include <pthread.h>
+
+volatile int msg_done = 0;
+int active = 1;
+
+void mailbox_irq_handler(int val)
+{
+	printf("mailbox msg recv %d\n",val);
+	msg_done = 1;
+}
+
+void init_signal(int fd)
+{
+	int flags,ret;
+	
+	signal(SIGIO, mailbox_irq_handler);
+
+    ret = fcntl(fd, F_SETOWN, getpid());
+
+    flags = fcntl(fd, F_GETFL);
+
+    fcntl(fd, F_SETFL, flags | FASYNC);
+}
+
+void * mailbox_user_read(void *arg)
+{
+	char buf[8];
+	int fp = open("/sys/kernel/debug/soc:mailbox_client@0/message",O_RDWR);
+	
+	while(active)
+	{
+		read(fp,buf,sizeof(char));
+		printf("user recv:%c\n",buf[0]);
+	}
+	close(fp);
+}
+
+int main(int argv,char **argc)
+{
+    int fd,i=0,ret;
+    char buf_tx[8],buf_rx[8];
+
+    fd = open("/sys/kernel/debug/soc:mailbox_client@0/message",O_RDWR);
+    if(fd < 0)
+        printf("open device error\n");
+
+	pthread_t thread_read;
+
+	if(pthread_create(&thread_read,NULL,mailbox_user_read,NULL) != 0)
+	{
+		printf("pthread_create error\n");
+		close(fd);
+		return 0;
+	}
+	
+	buf_tx[0] = 'a';
+	do{
+		write(fd,buf_tx,sizeof(char));	
+		printf("user send:%c\n",buf_tx[0]);
+		sleep(1);
+
+		buf_tx[0]++;
+		i++;
+	}while(i<2);
+	active  = 0;
+    close(fd);
+
+    return 1;
+}

BIN
mailbox/read_test