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

📄 config.c

📁 本程序是一个RS232转网口的。是一个透明传输的模块
💻 C
📖 第 1 页 / 共 3 页
字号:
*/
unsigned char Set_Model_Id(unsigned char com) reentrant         
{ 
    return(Parse_Normal_Value(com,ID_MODELID,10));
}

/*
*****************************************************************************************************
*FUNC:  产品波特率
*NOTE:   
*****************************************************************************************************
*/
unsigned char Set_BaudRate(unsigned char com) reentrant         
{
    return(Parse_Normal_Value(com,ID_BAUDRATE,1));        
}

/*
*****************************************************************************************************
*FUNC:  心跳包间隔时间
*NOTE:  须重起才有效 
*****************************************************************************************************
*/
unsigned char Set_Heart_Time(unsigned char com) reentrant         
{  
    return(Parse_Normal_Value(com,ID_HEARTTIME,1));
}


/*
*****************************************************************************************************
*FUNC:  
*NOTE:  须重起才有效 
*****************************************************************************************************
*/
unsigned char Set_Dhcp_Mode(unsigned char com) reentrant         
{ 
    return(Parse_Normal_Value(com,ID_DHCPMODE,1));
}


/*
*****************************************************************************************************
*FUNC:   串口校验位
*NOTE:  
*****************************************************************************************************
*/ 
unsigned char Set_Comc(unsigned char com) reentrant       
{
    return(Parse_Normal_Value(com,ID_COMC,1));
}

/*
*****************************************************************************************************
*FUNC:  设置PING的IP地址
*NOTE:  
*****************************************************************************************************
*/
unsigned char Set_Ping_Ip(unsigned char com) reentrant           
{
    unsigned char ack=0;
    
    ack = Parse_Ip(com, ID_PINGIP,ping_ip_address.bytes);
    if (ack == TRUE) { 
        PingRequest();
        ArpRequest(ping_ip_address);   //测试ARP网关是否有回应
    } 
    return ack;
}

/*
*****************************************************************************************************
*FUNC:  查询当前网络状态
*NOTE:  68 99 99 99 99 99 99 68 01 02 44 e9
*****************************************************************************************************
*/ 
unsigned char Query_Log(unsigned char com) reentrant       
{

#if 0
	if (com == UART_COM) {
	    Uart0Putf("\r\n--------   模块日志   --------");
        Uart0Putf("\r\n\r\n连续在线时间:  ");TimeToStr(OnLineTime);Uart0Puts(TimeString);
	    Uart0Putf("\r\n\r\n心跳包发送次数:");Uart0Putf(VerLastTime);
	} else if (com == REMOTE_COM) {

	}
#endif
    com = com ;
    return TRUE;
}
/*
*****************************************************************************************************
*FUNC: 显示连接状态
*NOTE:  
*****************************************************************************************************
*/
#if 0
void DspTCPStat()
{
	unsigned char xdata Config[255];
	Config[0]='s';
	Config[1]='t';
	Config[2]='a';
	Config[3]='t';
	Config[4]='\0';	
	PrintByte(conxn[0].state);
	PrintByte(conxn[0].pUnAcked->bUsed);
	PrintLong(conxn[0].my_sequence);
	PrintLong(conxn[0].his_sequence);
	PrintLong(rxdnet.tcpframe.acknumber);
	PrintLong(rxdnet.tcpframe.seqnumber);	
}
#endif

/*
*****************************************************************************************************
*FUNC:  查询当前网络配置
*NOTE:  IpToStr(DHCPReg.myip)
        IpToStr(DHCPReg.gatewayip) 
		IpToStr(DHCPReg.maskip)        DHCPMode
*****************************************************************************************************
*/
unsigned char code SotfVer[5]="V1.0";
unsigned char code VerLastTime[30]="2008.4.3 12:52";

unsigned char Query_Net_Config(unsigned char com) reentrant      
{
    unsigned char dhcpmode=0;
    char code *pmyip       = "\r\n\r\n指派本地 IP:   ";
	char code *pgatewayip  = "\r\n\r\n指派网关 IP:   ";
    char code *pmaskip     = "\r\n\r\n指派子网掩码:  ";
    char code *pseverip    = "\r\n\r\n指派DHCP IP:   ";
	char code *pdns_m      = "\r\n\r\n指派DNS 主 IP: ";
    char code *pdns_s      = "\r\n\r\n指派DNS 副 IP: ";
	char code *ptime       = "\r\n\r\n有效租期时间:  ";
	char code *pbound[2]   = {"未绑定,IP未知", "已绑定,IP可用"};
	char code *pConnect[2]   = {"掉线", "在线"};

	if (ConfigReg.reg.DhcpModeStr[0] != '0') {     //说明DHCP自动指派是开启状态
        dhcpmode = 1;                              //限制在上面数组范围内
	} else {
        dhcpmode = 0;                              //DHCP关闭状态不需要做DHCP请求bBound为已连成功
	}

	com = com;
	Uart0Putf("\r\n--------   以太网转RS232模块内部参数   --------");
    Uart0Putf("\r\n\r\n软件版本:             ");Uart0Putf(SotfVer);
	Uart0Putf("\r\n\r\n最后修改时间:         ");Uart0Putf(VerLastTime);
	Uart0Putf("\r\n\r\n福建敏讯上润电气科技有限公司");
	Uart0Putf("\r\n\r\n--------------  IP详细信息  ------------------");
	Uart0Putf("\r\n\r\n地址类型:      ");   Uart0Putf(pDhcpMode[dhcpmode]);
	if (dhcpmode > 0) {                                                    //自动分配模式      
		Uart0Putf("\r\n\r\nIP状态:        ");Uart0Putf(pbound[bBound]);    //自动分配模式,判断IP是否已绑定
		if (bBound) { 
            Uart0Putf(pmyip)      ;IpToStr(my_ip_address)            ;Uart0Puts(IpString);
			Uart0Putf(pgatewayip) ;IpToStr(gateway_ip_address)       ;Uart0Puts(IpString);
			Uart0Putf(pmaskip)    ;IpToStr(mask_ip_address)          ;Uart0Puts(IpString);
			Uart0Putf(pseverip)   ;IpToStr(DHCPReg.severip)          ;Uart0Puts(IpString);
			Uart0Putf(pdns_m)     ;IpToStr(DHCPReg.dns_m)            ;Uart0Puts(IpString);
			Uart0Putf(pdns_s)     ;IpToStr(DHCPReg.dns_s)            ;Uart0Puts(IpString);
            Uart0Putf(ptime)      ;TimeToStr(DHCPReg.timer100.dwords);Uart0Puts(TimeString);
        }  
    } else {
	    Uart0Putf("\r\n\r\n模块内IP地址: ");Uart0Puts(ConfigRegPtr[1]);	
	    Uart0Putf("\r\n\r\n网关 IP 地址: ");Uart0Puts(ConfigRegPtr[4]);
	    Uart0Putf("\r\n\r\n子网掩码地址: ");Uart0Puts(ConfigRegPtr[5]);
	}

	Uart0Putf("\r\n\r\n--------------  其它配置参数  ----------------");
	Uart0Putf("\r\n\r\n模块ID:       ");Uart0Puts(ConfigRegPtr[6]);
    Uart0Putf("\r\n\r\n本地网卡地址: ");Uart0Puts(ConfigRegPtr[0]);	
	Uart0Putf("\r\n\r\n服务器IP地址: ");Uart0Puts(ConfigRegPtr[2]);
	Uart0Putf("\r\n\r\n服务器端口号: ");Uart0Puts(ConfigRegPtr[3]);
	Uart0Putf("\r\n\r\n模块内部端口: ");HexToDec(LocalPort);Uart0Puts(Data_Length);
	Uart0Putf("\r\n\r\n波特率:       ");Uart0Putf(pBaudRate[*ConfigRegPtr[7]-0x31]);
	Uart0Putf("\r\n\r\n检验位:       ");Uart0Putf(pComcBit[*ConfigRegPtr[ID_COMC]-0x30]);
	Uart0Putf("\r\n\r\n心跳包时间:   ");Uart0Putf(pHeartTime[*ConfigRegPtr[8]-0x31]);Uart0Putf("分钟");
	Uart0Putf("\r\n\r\n模块连接状态: ");Uart0Putf(pConnect[bConnect]); 
	Uart0Putf("\r\n\r\n连续在线时间: ");TimeToStr(OnLineTime);Uart0Puts(TimeString);
	Uart0Putf("\r\n\r\n发送心跳个数: ");HexToDec(SentHeartTime);Uart0Puts(Data_Length);
	Uart0Putf("\r\n-----------------------------------------------");
    return TRUE;
}

/*
*****************************************************************************************************
*FUNC:  单片机复位重起前处理的事务
*NOTE:  
*****************************************************************************************************
*/
void CloseHook(void)
{
	if ((ModelStatu == MODEL_RUN_STATU) && bConnect) {  //在运行状态下,先关链路
        tcp_send(&TCPSend,FLG_RST, 20, IndexOfClient);  //这里一定要加RST
    }
    if (bBound && DHCPMode) {                           //DHCP模式及已申请到,重起前释放 
        (*DHCPReg.on_release)();                        //释放该IP信息
	}
}

/*
*****************************************************************************************************
*FUNC:  单片机复位重起
*NOTE:  先保存数据后重启,或直接重启
*****************************************************************************************************
*/
void McuRst(unsigned char type )                        //保存数据后重起 或不保存直接重起
{
    CloseHook();                                        //重起前关链路及释放IP等
	if (type == SAVE_EXIT) {
        WriteFlash(ConfigReg.bytes,FLASH_DATA_NUM);     //写FALSH
	    DelayHMSM(0,0,1,0);                             //延时
	} 
    MCURST();                                           //真正的复位
}

/*
*****************************************************************************************************
*FUNC:  单片机复位重起
*NOTE:  (void (code*) (void))指针类型 把0强制为
*****************************************************************************************************
*/
unsigned char xdata HintToRemote[14]="模块重启中...";
void Hint2Remote(void)reentrant
{
    conxn[IndexOfClient].pUnAcked->bUsed = FALSE;
    tcp_senddata(&TCPSend,HintToRemote,14+20,IndexOfClient,0);   //加上20字节tcp头部
}
unsigned char Mcu_Restart(unsigned char com) reentrant           
{
	if ((com == UART_COM) || (com == REMOTE_COM)) {
	    if (com == UART_COM){
	        HintMsg(5,NULL);
		} else if (bConnect){
            Hint2Remote();
		}
        McuRst(SAVE_EXIT);                              //保存数据并重起
		return TRUE;
    }	
}

/*
*****************************************************************************************************
*FUNC:  恢复出厂值并重起
*NOTE:  
*****************************************************************************************************
*/
unsigned char Config_Default(unsigned char com) reentrant
{

	if ((com == UART_COM) || (com == REMOTE_COM)) {
	    if (com == UART_COM){
	        HintMsg(15,NULL);
		} else if (bConnect){
			Hint2Remote();
		}
        ParameterInit(1);                               //参数初始化        
        McuRst(SAVE_EXIT);                              //保存数据并重起                             
        return TRUE;
	}
}


/*
*****************************************************************************************************
*FUNC:
*NOTE:  
    1: 处于配置状态:ModelStatu = MODEL_CONFIG_STATU时,所有配置命令都有效
	2: 处于运行状态:ModelStatu = MODEL_RUN_STATU时,查询跟复位命令有效
*****************************************************************************************************
*/
void ParseUartCmd(unsigned char xdata *buf,unsigned int length)  //如果是配置命令,解析命令
{
    unsigned char ack;
    unsigned char start=0;
	
	if (ModelStatu == MODEL_RUN_STATU) {                 //运行状态从查询命令开始查找匹配
        start = UART_QUERY_START;
	} else {
        start = 0;
		TimerSec[T_EXIT_CONFIG] = EXIT_CONFIG_SEC;       //如果时间之内运行配置任何参数,退出时间恢复
	}

	for (; start<UART_CONFIG_NUM; start++) {
	    ComparePtr = 0;
	    if ((ComparePtr=StrCompare(buf,ConfigTable[start].string,length)) > 0) {
		    if (ConfigTable[start].exec_func) {
			    ComparePtr += ConfigTable[start].start;   //ComparePtr指向有效数据位
			    ack = (*(ConfigTable[start].exec_func))(UART_COM);
 			    OutAckMsg(ack,ConfigTable[start].name,UART_COM);
			}
			break;
		}
    }
}

/*
*****************************************************************************************************
*FUNC:
*NOTE:  
*****************************************************************************************************
*/
void ParseRemoteCmd(unsigned char xdata *buf,unsigned int length) //如果是配置命令,解析命令
{
    unsigned char i,ack;

	for (i=0; i<UART_CONFIG_NUM; i++) {
	    if ((i == ID_PINGIP) || (i == ID_NETSTATU) || (i == ID_NETCONFIG)){
            continue;                                       //远程命令跳过PING,状态查询,网络查询
		}
		ComparePtr = 0;
	    if ((ComparePtr=StrCompare(buf,ConfigTable[i].string,length)) > 0) {
		    if (ConfigTable[i].exec_func) {
			    ComparePtr += ConfigTable[i].start;         //ComparePtr指向有效数据位
			    ack = (*(ConfigTable[i].exec_func))(REMOTE_COM);
 			    OutAckMsg(ack,ConfigTable[i].name,REMOTE_COM);
			}
			break;
		}
    }
}

/*
*****************************************************************************************************
*                     HTTP 提交配置部份  

VALUE_NULL
SUMBIT_ERROR
USER_ERROR
PASSWORD_ERROR
//WriteFlash(ConfigReg.bytes,FLASH_DATA_NUM);      //HTTP配置完成后不写入FALSH,只有发重起命令后才有效
*****************************************************************************************************
*/
unsigned char xdata HttpAckCode[HTTP_CONFIG_NUM+2]=    //10个配置信息+1个用户名+1个密码
{
    0,0,0,0,0,0,0,0,0,0,0,0,0
};


unsigned char RemoteRestart;                           //HTTP控制重启

void ParseHttpCmd(unsigned char xdata *buf,unsigned int length)
{
    unsigned char i;

	RemoteRestart = REMOTE_RESTART_IDEL;
	if (StrCompare(buf,"RSTSub",length)) {
        if (StrCompare(buf,"RSTPW=admin",length)) {
		    RemoteRestart = REMOTE_RESTART_TRUE;
		} else {
            RemoteRestart = REMOTE_RESTART_FALSE;
		}
		return;
	} 
    
	if (StrCompare(buf,"USER=wideplus",length) == NULL) {
        HttpAckCode[0] = USER_ERROR;
		return;
	} else {
        HttpAckCode[0] = VALUE_NULL;             //为空不处理
	}
    
	if (StrCompare(buf,"PASSWORD=12345",length) == NULL) {
        HttpAckCode[1] = PASSWORD_ERROR;
		return;
	} else {
        HttpAckCode[1] = VALUE_NULL;
	}
    
	for (i=0; i<HTTP_CONFIG_NUM; i++) {
	    ComparePtr = 0;
        if (ComparePtr = StrCompare(buf,ConfigTable[i].string,length)) {      //匹配字符查找
		    if (ConfigTable[i].exec_func) {
			    ComparePtr += ConfigTable[i].start;                           //ComparePtr指向有效数据位
			    HttpAckCode[i+2] = (*(ConfigTable[i].exec_func))(HTTP_COM);   //执行相应函数 
			} 
		} else {
            HttpAckCode[i+2] = SUMBIT_ERROR;
		}
	}
}

⌨️ 快捷键说明

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