1:Receiver:
#include<stdio.h>
#include<stdlib.h>
#include <sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
#include <linux/ioctl.h>
#include <linux/keyboard.h>
#include <linux/kd.h>
#include <linux/vt.h>
#include <termios.h>
#include <sys/un.h>
#include <sys/socket.h>
#define BUFFER_SIZE 0xFC00
#define CMMB_CHANGE_CHANNEL _IO('t', 0x01)
#define CMMB_CHANGE_FRENQUENCE _IO('t', 0x02)
char pre_buffer[]={0xA0,0xA0,0xA0,0xA0};
char letter = 'A';
int in_fd;
char *buffer;
int init_send_socket(struct sockaddr_un * addr,char * path)
{
int sockfd,len;
sockfd = socket(AF_UNIX,SOCK_DGRAM,0);
if(sockfd < 0){
printf("error when socket/n");
return 0;
}
bzero(addr,sizeof(struct sockaddr_un));
addr->sun_family=AF_UNIX;
strcpy(addr->sun_path,path);
return sockfd;
}
int open_socket(char *input_file)
{
char *filename;
int len;
if(input_file)
filename = input_file;
else
filename = NULL;
printf("filename:%s/n",filename);
if(!filename) {
return -1;
}
int sockfd;
struct sockaddr_un addr;
sockfd=socket(AF_UNIX,SOCK_DGRAM,0);
if(sockfd<0)
{
printf("sockfd = %d/n", sockfd);
return -1;
}
bzero(&addr,sizeof(struct sockaddr_un));
addr.sun_family = AF_UNIX;
strcpy(addr.sun_path, filename);
unlink(filename);
len = strlen(addr.sun_path) + sizeof(addr.sun_family);
if(bind(sockfd,(struct sockaddr *)&addr,len)<0)
{
printf("bind error!/n");
return -1;
}
printf("sockfd = %d/n", sockfd);
return sockfd;
}
int getData(void)
{
int n=0;
fd_set readfds;
struct timeval tv;
int retval;
int fd;
static int flag = 1;
FD_ZERO(&readfds);
FD_SET(in_fd,&readfds);
//FD_SET(0,&readfds);
tv.tv_sec=0;
tv.tv_usec = 100;
retval = select(in_fd+1,&readfds,NULL,NULL,&tv);
if(retval>0){
for(fd=0;fd<in_fd+1;fd++)
{
if(FD_ISSET(fd,&readfds))
{
if(fd==in_fd)
{
printf("fd = %d/n", fd);
n=recvfrom(in_fd,buffer,BUFFER_SIZE, 0, NULL, NULL);
if(n < 0)
{
printf("Receive data from socket error!!!/n");
perror("Failure to receive data./n");
}
else if(n == 0)
{
printf("Receive data from socket success, ret = %d/n", n);
}
else
{
printf("Receive data from socket success, ret = %c/n", buffer[0]);
}
return n;
}
}
}
}
flag = flag*(-1);
if(flag == 1)
printf("#");
else
printf("&");
printf("No data be received!/n");
return 0;
}
int main(int argc, char **argv)
{
int fd_cmmb;
int fd_file;
FILE *fp;
FILE *fp_config;
char config;
int ret = 0;
//char *buffer;
unsigned short freq;
int packets = 20;
char *file_name;
int i;
char key_value;
buffer = (char *)malloc(BUFFER_SIZE);
int g_socket = 0;
int socket_len;
int fd_socket;
struct sockaddr_un addr;
int fd_keyb;
static int channel = 1;
int switch_channel = 0;
int program[10]={1, 2, 4};
int program_index = 0;
const int valid_program_num = 3;
char *in_file;
in_file=argv[1];
//fd_cmmb=open("1.mfs", O_RDONLY);
/*
fd_cmmb=open(in_file, O_RDONLY);
if(fd_cmmb<0){
printf("open /dev/mxc_cmmb_inno error./n");
return 0;
}
*/
/*
fd_socket = init_send_socket(&addr, "/tmp/socket");
if(fd_socket < 0){
printf("init send socket error/n");
return 0;
}
else
{
printf("");
}
socket_len = strlen(addr.sun_path) + sizeof(addr.sun_family);
*/
#if 0
while(1){
/*
ret = read(fd_cmmb,buffer,BUFFER_SIZE);
*(buffer) = 0xa0;
*(buffer + 1) = 0xa0;
*(buffer + 2) = 0xa0;
*(buffer + 3) = 0xa0;
printf("read size = 0x%X/n", ret);
if(ret > 0){
ret = sendto(fd_socket, buffer, ret, 0, (struct sockaddr*)(&addr), socket_len);
}
else
{
seek(fd_cmmb,SEEK_SET);
//break;
}
//sleep(1);
*/
/*
letter = 0;
ret = 0;
ret = recvfrom(fd_socket,buffer,BUFFER_SIZE, 0, NULL, NULL);
if(ret < 0)
{
printf("Receive data from socket error!!!/n");
}
else if(ret == 0)
{
printf("Receive data from socket success, ret = %d/n", ret);
}
else
{
printf("Receive data from socket success, ret = %c/n", ret);
}
usleep(1000);//per 400 microsecond.
*/
}
#endif
in_fd = open_socket("/opt/socket");
if(in_fd < 0)
{
printf("Open /opt/socket failure!/n");
return ;
}
else
{
printf("Open /opt/socket successfully!/n");
}
while(1)
{
getData();
sleep(1);
}
free(buffer);
//close(fd_cmmb);
//close(fd_file);
//fclose(fp);
return 0;
}
2:Sender:
#include<stdio.h>
#include<stdlib.h>
#include <sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
#include <linux/ioctl.h>
#include <linux/keyboard.h>
#include <linux/kd.h>
#include <linux/vt.h>
#include <termios.h>
#include <sys/un.h>
#include <sys/socket.h>
#define BUFFER_SIZE 0xFC00
#define CMMB_CHANGE_CHANNEL _IO('t', 0x01)
#define CMMB_CHANGE_FRENQUENCE _IO('t', 0x02)
char pre_buffer[]={0xA0,0xA0,0xA0,0xA0};
char letter = 'A';
int init_send_socket(struct sockaddr_un * addr,char * path)
{
int sockfd,len;
sockfd = socket(AF_UNIX,SOCK_DGRAM,0);
if(sockfd < 0){
printf("error when socket/n");
return sockfd;
}
bzero(addr,sizeof(struct sockaddr_un));
addr->sun_family=AF_UNIX;
strcpy(addr->sun_path,path);
return sockfd;
}
int main(int argc, char **argv)
{
int fd_cmmb;
int fd_file;
FILE *fp;
FILE *fp_config;
char config;
int ret;
char *buffer;
unsigned short freq;
int packets = 20;
char *file_name;
int i;
char key_value;
buffer = (char *)malloc(BUFFER_SIZE);
int g_socket = 0;
int socket_len;
int fd_socket;
struct sockaddr_un addr;
int fd_keyb;
static int channel = 1;
int switch_channel = 0;
int program[10]={1, 2, 4};
int program_index = 0;
const int valid_program_num = 3;
char *in_file;
in_file=argv[1];
//fd_cmmb=open("1.mfs", O_RDONLY);
/*
fd_cmmb=open(in_file, O_RDONLY);
if(fd_cmmb<0){
printf("open /dev/mxc_cmmb_inno error./n");
return 0;
}
*/
fd_socket = init_send_socket(&addr, "/opt/socket");
printf("fd_socket = %d/n", fd_socket);
if(fd_socket < 0){
printf("init send socket error/n");
return 0;
}
socket_len = strlen(addr.sun_path) + sizeof(addr.sun_family);
printf("socket_len = %d/n", socket_len);
getchar();
while(1){
/*
ret = read(fd_cmmb,buffer,BUFFER_SIZE);
*(buffer) = 0xa0;
*(buffer + 1) = 0xa0;
*(buffer + 2) = 0xa0;
*(buffer + 3) = 0xa0;
printf("read size = 0x%X/n", ret);
if(ret > 0){
ret = sendto(fd_socket, buffer, ret, 0, (struct sockaddr*)(&addr), socket_len);
}
else
{
seek(fd_cmmb,SEEK_SET);
//break;
}
//sleep(1);
*/
buffer[0] = (letter++ )>= 'Z'?'A':letter-1;
letter = letter > 'Z'?'A': letter;
printf("send letter: %c/n", buffer[0]);
ret = sendto(fd_socket, buffer, 1, 0, (struct sockaddr*)(&addr), socket_len);
printf("ret=%d/n", ret);
if(ret < 0)
{
perror("Failure to send data./n");
}
//usleep(1000);//per 400 microsecond.
sleep(1);
}
free(buffer);
//close(fd_cmmb);
//close(fd_file);
//fclose(fp);
return 0;
}
3:Test Demo:
#include<stdio.h>
#include<stdlib.h>
#include <sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
#include <linux/ioctl.h>
#include <linux/keyboard.h>
#include <linux/kd.h>
#include <linux/vt.h>
#include <termios.h>
#include <sys/un.h>
#include <sys/socket.h>
#define BUFFER_SIZE 0xFC00
#define CMMB_CHANGE_CHANNEL _IO('t', 0x01)
#define CMMB_CHANGE_FRENQUENCE _IO('t', 0x02)
char pre_buffer[]={0xA0,0xA0,0xA0,0xA0};
int init_send_socket(struct sockaddr_un * addr,char * path)
{
int sockfd,len;
sockfd = socket(AF_UNIX,SOCK_DGRAM,0);
if(sockfd < 0){
printf("error when socket/n");
return 0;
}
bzero(addr,sizeof(struct sockaddr_un));
addr->sun_family=AF_UNIX;
strcpy(addr->sun_path,path);
return sockfd;
}
int main(int argc, char **argv)
{
int fd_cmmb;
int fd_file;
FILE *fp;
FILE *fp_config;
char config;
int ret;
char *buffer;
unsigned short freq;
int packets = 20;
char *file_name;
int i;
char key_value;
buffer = (char *)malloc(BUFFER_SIZE);
int g_socket = 0;
int socket_len;
int fd_socket;
struct sockaddr_un addr;
int fd_keyb;
static int channel = 1;
int switch_channel = 0;
int program[10]={1, 2, 4};
int program_index = 0;
const int valid_program_num = 3;
char *in_file;
in_file=argv[1];
//fd_cmmb=open("1.mfs", O_RDONLY);
fd_cmmb=open(in_file, O_RDONLY);
if(fd_cmmb<0){
printf("open /dev/mxc_cmmb_inno error./n");
return 0;
}
fd_socket = init_send_socket(&addr, "/tmp/cmmbsocket");
if(fd_socket < 0){
printf("init send socket error/n");
return 0;
}
socket_len = strlen(addr.sun_path) + sizeof(addr.sun_family);
while(1){
ret = read(fd_cmmb,buffer,BUFFER_SIZE);
*(buffer) = 0xa0;
*(buffer + 1) = 0xa0;
*(buffer + 2) = 0xa0;
*(buffer + 3) = 0xa0;
printf("read size = 0x%X/n", ret);
if(ret > 0){
ret = sendto(fd_socket, buffer, ret, 0, (struct sockaddr*)(&addr), socket_len);
}
else
{
seek(fd_cmmb,SEEK_SET);
//break;
}
sleep(1);
}
free(buffer);
close(fd_cmmb);
//close(fd_file);
//fclose(fp);
return 0;
}