12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #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;
- }
|