核心思想
取指->译码->执行
参考上篇
译码函数(与语音识别控制继电器相同)
FTP控制继电器(删的只剩框架)
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <wiringPi.h>
#include <wiringSerial.h>
int decoding(char *code)
{
return -1;
}
void netControl(int argc,char **argv)
{
int fd_Serial = serialOpen("/dev/ttyAMA0",9600);
if(fd_Serial == -1){
printf("open serial fail\n");
exit(-1);
}
int fd_Relay = open("/dev/relay",O_RDWR);
if(fd_Relay == -1){
perror("open");
exit(-1);
}
int s_fd;
int c_fd;
int cmd = 0x01;
char code[4] = {0};
struct sockaddr_in s_addr;
struct sockaddr_in c_addr;
memset(&s_addr,0,sizeof(struct sockaddr_in));
memset(&c_addr,0,sizeof(struct sockaddr_in));
s_fd = socket(AF_INET,SOCK_STREAM,0);
if(s_fd == -1){
perror("socket");
exit(-1);
}
s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(atoi(argv[2]));
inet_aton(argv[1],&s_addr.sin_addr);
bind(s_fd,(struct sockaddr *)&s_addr,sizeof(struct sockaddr_in));
listen(s_fd,10);
socklen_t len = sizeof(struct sockaddr_in);
while(1){
c_fd = accept(s_fd,(struct sockaddr *)&c_addr,&len);
if(c_fd == -1){
perror("accept");
continue;
}
if(fork() == 0){
printf("connet success from :%s\n",inet_ntoa(c_addr.sin_addr));
while(1){
memset(code,'\0',4);
read(c_fd,code,4);
cmd = decoding(code);
if(cmd == -1){
printf("cmd not exist\n");
continue;
}
if(cmd == 0xff){//客户端退出执行部分
close(c_fd);
printf("client exit\n");
exit(1);
}else{//继电器部分
}
}
}
}
}
int main(int argc,char **argv)
{
if(argc != 3){
printf("parameter error\n");
exit(-1);
}
if(-1 == wiringPiSetup())
{
printf("set up error\n");
exit(-1);
}
netControl(argc,argv);
return 0;
}