📄 topology3_s1.c
字号:
#include "../layers/physical/serial_connect.h"#include "../debug/debug.h"#include "../layers/network/packet.h"#include <stdio.h> /* Standard input/output definitions */#include <string.h> /* String function definitions */#include <unistd.h> /* UNIX standard function definitions */#include <fcntl.h> /* File control definitions */#include <errno.h> /* Error number definitions */#include <termios.h> /* POSIX terminal control definitions */#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#include <pthread.h>/******************************************************************* * argv[1] is the serial port, run this program like: * ptest /dev/tts/2 *******************************************************************/#define MICA1_BAUDRATE B19200 /* MICA1 baudrate */#define MICA2_BAUDRATE B57600 /* MICA2 baudrate */#define DEFAULT_BAUDRATE B57600 /* Default is MICA2 */char *serial_port;int sfd,flag=0;char mote = 2;int sockfd, portno;struct sockaddr_in serv_addr;struct hostent *server;//networkPkt p;/* Open serial channel to mote */ void open_serial() { struct termios tio; sfd = open(serial_port, O_RDWR|O_NOCTTY); if (sfd < 0) { fprintf(stderr,"Cannot open serial device %s\n", serial_port); exit(-1); } /* Serial port setting */ bzero(&tio, sizeof(tio)); tio.c_iflag &= ~(IGNPAR | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON); tio.c_cflag &= ~(CSIZE | PARENB); if (mote == 1) tio.c_cflag |= MICA1_BAUDRATE | CS8 | CLOCAL | CREAD; else if (mote == 2) tio.c_cflag |= MICA2_BAUDRATE | CS8 | CLOCAL | CREAD; else tio.c_cflag |= DEFAULT_BAUDRATE | CS8 | CLOCAL | CREAD; /* Raw output_file */ tio.c_oflag &= ~OPOST; tio.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); /* Flush buffer; parameters take effect immediately */ tcflush(sfd, TCIFLUSH); tcsetattr(sfd, TCSANOW, &tio); /* Enable non-blocking IO */ fcntl(sfd, F_SETFL, O_NONBLOCK);}/* Display error messages */void error(char *msg){ perror(msg); exit(0);}/* The client will send a packet to the server in other stargate with IP Address: 10.1.1.3 */void client(networkPkt *p){ int n; networkPkt p1; p1.hdr.address = p->hdr.address; p1.hdr.port = p->hdr.port; p1.hdr.group = p->hdr.group; p1.hdr.length = p->hdr.length; p1.data[0] = p->data[0]; p1.data[1] = p->data[1]; p1.data[2] = p->data[2]; p1.data[3] = p->data[3]; p1.data[4] = p->data[4]; p1.data[5] = p->data[5]; p1.data[6] = p->data[6]; p1.data[7] = p->data[7]; p1.data[8] = p->data[8]; if(flag == 0) { flag = 1; portno = 8888; sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) error("ERROR opening socket"); server = gethostbyname("10.1.1.3"); if (server == NULL) { fprintf(stderr,"ERROR, no such host\n"); exit(0); } bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = htons(portno); if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0) error("ERROR connecting"); } n = write(sockfd,&p1,sizeof(p1)); if (n < 0) error("ERROR writing to socket"); printf("Packet sent successfully to other Stargate through WiFi as follows:\n"); printf("The message is:\n"); printPacket(DBG_USR, CRITICAL, stdout, &p1);}int main(int argc, char *argv[]) { networkPkt p; frame f; int insync = 0; char temp = '\0'; int rc,t=0; pthread_t threads; setupDebug(DBG_ALL, CRITICAL); serial_port=argv[1]; open_serial(); while(1) // wait for any packet recieved by the serial port via the radio channel of mote { if (readNetworkPkt(sfd, &p) != SUCCESS) { printf("COULD NOT READ PACKET!!!!\n"); } else { printf("Packet successfully read from MOTE\n"); printPacket(DBG_USR, CRITICAL, stdout, &p); client(&p); } } closeSerialPort(sfd); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -