⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hc_subs.c

📁 一个通过无线设备传输文件程序主要涉及内容是网络通信和RS232设置
💻 C
字号:
/** Copyright (c) 2004,wuxi xietong tech corp* All rights reserved.** filename:hc_subfuncs.c* content :subfuncs for HC** version  :2.0* author   :hwz* date     :2004/03/01**/#include "common.h"#include "hc.h"#include "hc_display.h"#include <stdarg.h>/* For share memory */struct global_var	*gvar;/* For display interface */int 	unix_socket_cli  = -1;struct sockaddr_un dis_addr_un;struct dis_head_msg send_dis_msg;int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,                B38400, B19200, B9600, B4800, B2400, B1200, B300, };int name_arr[] = {38400,  19200,  9600,  4800,  2400,  1200,  300, 38400,                          19200,  9600, 4800, 2400, 1200,  300, };void set_speed(int fd, int speed){        int   i;         int   status;         struct termios   Opt;        tcgetattr(fd, &Opt);         for ( i= 0;  i < sizeof(speed_arr) / sizeof(int);  i++) { 	        if  (speed == name_arr[i]) {                             tcflush(fd, TCIOFLUSH);                             cfsetispeed(&Opt, speed_arr[i]);                         cfsetospeed(&Opt, speed_arr[i]);                           status = tcsetattr(fd, TCSANOW, &Opt);                          if  (status != 0) {                                        err_dump(PRINT_ERROR,"tcsetattr fd1");                                  return;                            }                           tcflush(fd,TCIOFLUSH);                  }        }}int set_parity(int fd,int databits,int stopbits,int parity){         struct termios options;         if  ( tcgetattr( fd,&options)  !=  0) {                 err_dump(PRINT_ERROR,"SetupSerial 1");                     return -1;          }        options.c_cflag &= ~CSIZE;         switch (databits) /*设置数据位数*/        {           case 7:                         options.c_cflag |= CS7;                break;        case 8:                     options.c_cflag |= CS8;                break;           default:                    err_dump(PRINT_ERROR,"Unsupported data size\n");                 return -1;          }        switch (parity)         {                   case 'n':                case 'N':                            options.c_cflag &= ~PARENB;   /* Clear parity enable */                        options.c_iflag &= ~INPCK;     /* Enable parity checking */                         break;                  case 'o':                   case 'O':                             options.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/                          options.c_iflag |= INPCK;             /* Disnable parity checking */                         break;                  case 'e':                  case 'E':                           options.c_cflag |= PARENB;     /* Enable parity */                            options.c_cflag &= ~PARODD;    /* 转换为偶效验*/                             options.c_iflag |= INPCK;      /* Disnable parity checking */                        break;                case 'S':                 case 's':  /*as no parity*/                           options.c_cflag &= ~PARENB;                        options.c_cflag &= ~CSTOPB;                        break;                  default:   		err_dump(PRINT_ERROR,"Unsupported parity\n");                            return -1;          }          /* 设置停止位*/          switch (stopbits)        {                   case 1:                            options.c_cflag &= ~CSTOPB;                          break;                  case 2:                            options.c_cflag |= CSTOPB;                          break;                default:                             err_dump(PRINT_ERROR,"Unsupported stop bits\n");                           return -1;         }   /* Set input parity option */         if (parity != 'n' && parity != 'N')                   options.c_iflag |= INPCK;         tcflush(fd,TCIFLUSH);        options.c_cc[VTIME] = 30;       /* 设置超时10 seconds*/           options.c_cc[VMIN] = 0;         /* Update the options and do it NOW */        	options.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON | IXOFF | IXANY);        options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG |IEXTEN);        options.c_oflag &= ~OPOST;	options.c_cflag |= CRTSCTS;                if (tcsetattr(fd,TCSANOW,&options) != 0)           {                 err_dump(PRINT_ERROR,"SetupSerial 3");                   return -1;          }         return 0;}int opendev(char *dev,mode_t mode){        int     fd;        fd = open(dev, mode);        if (-1 == fd){                                  err_dump(PRINT_ERROR,"Can't Open Serial Port");                return -1;                      }               else{                fcntl(fd, F_SETFL, FNDELAY);                return fd;        }}void hc_global_init(void){        int     shmid;                                                                                        ENTRY();	ASSERT( HC_SHM_SIZE>=sizeof(*gvar) );        shmid = shmget((key_t)HC_SHM_KEY, HC_SHM_SIZE, IPC_CREAT);        if( shmid<0 ){                ERR_DUMP();                exit(-1);        }        gvar = (struct global_var *)shmat(shmid, NULL, 0);        if( gvar==(struct global_var *)-1 ){                ERR_DUMP();                exit(-1);        }                setenv("TZ", "CST -8", 1);        setenv("PT", "HC", 1);}void hc_global_init2(){	ENTRY();	        memset((void *)gvar, 0, sizeof(*gvar));	ghc_hc_version.magic = HC_VERSION_MAGIC;	ghc_hc_version.version = dchc_get_ver();err_dump(PRINT_ERROR, "!!!! Hc software version = %d\n", ghc_hc_version.version);                /* Now can use ghc variable */        ghc_mtd_size = check_mtdblock_size();                                                                                        /* Get and set MAC/IP address?? */        mtd_read_hc_ip();	if( ghc_hc_ip.magic==HC_IP_MAGIC ){		ghc_ip_configure = 1;		dchc_set_mac(ghc_hc_ip.hc_ip);		dchc_set_ip(ghc_hc_ip.hc_ip);		system("ifconfig eth0 netmask 255.255.0.0 >>/dev/null");/*		sprintf(buf, "route add -host 172.29.%d.254 dev eth0 >>/dev/null", 			(ntohl(ghc_hc_ip.hc_ip)<<16)>>24 );		system(buf);		system("route add -net 172.29.192.0 netmask 255.255.255.0 dev eth0 >>/dev/null");		system("route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 >>/dev/null");		if( ntohl(ghc_hc_ip.hc_ip)%2 == 0 ){			system("route add default gw 172.29.192.1 >>/dev/null");			system("route add default gw 172.29.192.2 >>/dev/null");		}else{			system("route add default gw 172.29.192.2 >>/dev/null");			system("route add default gw 172.29.192.1 >>/dev/null");		}*/	}else				ghc_ip_configure = 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -