📄 config.c
字号:
*/
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 + -