📄 login.c
字号:
/*******************************************************************************
文件名:login.c
版权所有:武汉易捷通信有限公司
版本:V1.0
作者:吴友山
描述:用户登陆。
日期:
*******************************************************************************/
#include <stdio.h>
#include <string.h>
#include "login.h"
#include "funconf.h"
#include "msgprint.h"
#include "config.h"
INT8 userLogin[10]; /*保存登陆的用户名称*/
BYTE userLoginType = 0;
extern INT8 s[MAXLENTH];
#define LOGIN_MAX_TIMES 8 /*最多登陆的次数。*/
#define USER_ADMINISTRATOR 0x9
#define USER_SUPER 0xa
#define USER_ERROR 0xff
static UINT8 loginChkName(void);
static UINT8 loginChkPwd(UINT8 flag);
/*******************************************************************************
函数:loginChkName
功能:检查输入的用户名是否正确。
参数:
输入--
输出--
返回:USER_ADMINISTRATOR:管理员。
USER_SUPER:超级用户。
USER_ERROR:既不是管理员又不是超级用户。
描述:
*******************************************************************************/
static UINT8 loginChkName(void)
{
INT8 username[10];
/*保存登陆的用户名称*/
strncpy(userLogin, s, 10);
//EERead(ADDR_USER_INFORMATION,(UINT8*)username, 10);
/*管理员*/
if(strcmp(s, username) == 0)
{
return USER_ADMINISTRATOR;
}
/*超级用户*/
if(strncmp(s, SuperUsrName, strlen(SuperUsrName)) == 0 )
{
return USER_SUPER;
}
return USER_ERROR;
}
/*******************************************************************************
函数:loginChkPwd
功能:检查输入的密码是否正确。
参数:
输入--flag=USER_ADMINISTRATOR:管理员用户。
USER_SUPER:超级用户。
输出--
返回:如果密码正确返回OK
如果不正确返回ERROR
描述:
*******************************************************************************/
static BOOL loginChkPwd(UINT8 flag)
{
UINT8 password[10];
//EERead(ADDR_USER_INFORMATION+10,(UINT8*)password, 10);
if (flag == USER_ADMINISTRATOR)
{
if (strcmp(s, (INT8*)password) == 0)
return OK;
else
return ERROR;
}
if (flag == USER_SUPER)
{
if(strncmp(s, SuperUsrPw, strlen(SuperUsrPw)) == 0)
return OK;
else
return ERROR;
}
return ERROR;
}
/*******************************************************************************
函数:loginMsg
功能:开机画面。
参数:
输入--
输出--
返回:
描述:
*******************************************************************************/
void loginMsg(void)
{
char r_char;
BYTE serialTime;
BYTE username[10];
BYTE password[10];
while ( 1 )
{
printf("\n\x1b\x5b\x32\x4a");
/*打印开机画面*/
charPrint( 79, '#' );
printf( "\n#" );
charPrint( 21, ' ' );
printf("Welcome to Edgin Access Network!");
charPrint( 26, ' ' );
printf("#\n#");
charPrint( 12, ' ' );
printf("Press Enter to login or Press 'H' to get the password");
charPrint( 12, ' ' );
printf("#\n");
charPrint( 29, '#' );
printf(" < Edgin Product > ");
charPrint( 30, '#' );
printf("\n");
userLoginType = 0;
userLogin[0] = 0;
while ( 1 )
{
r_char = getchar( );
/*用户输入回车则提示登陆,输入‘h’或‘H’
则得到管理用户的信息*/
if ( r_char == '\r' )
{
return;
}
else if (r_char == 'h' || r_char == 'H')
{
break;
}
else if (r_char == 26)/*Ctrl-Z进入到login的状态*/
{
userLoginType = 1;
return;
}
}
/*提示管理用户的初始密码*/
serialTime = 0;
while(serialTime<3)
{
printf("\nPlease input the sn:");
inputStr(INPUT_OTHER, 0);
serialTime++;
if (strncmp(s, SuperUsrName, 9)==0)
{
//EERead(ADDR_USER_INFORMATION, username, 10);
//EERead(ADDR_USER_INFORMATION+10, password, 10);
if (username[0] == 0xff)
{
username[0] = 0;
}
if (password[0] == 0xff)
{
password[0] = 0;
}
printf("\nusername: %s", username);
printf("\npassword: %s", password);
return;
}
}
}
}
/*******************************************************************************
函数:login
功能:用户登陆验证。如用户名跟密码。
参数:
输入--
输出--
返回:用户登陆错误的次数,如果返回值小于8表示登陆成
功,等于8则表示登陆失败。
描述:1、出厂时密码是全0xff,字符串长度为0。
*******************************************************************************/
UINT8 login(void)
{
UINT8 strnumber;
UINT8 login_times;/*登陆的次数。*/
UINT8 user_right;/*登陆的用户类型。*/
INT8 password[10];
login_times = 0;
//如果密码为空则直接进入
if (userLoginType == 0)
{
//EERead(ADDR_USER_INFORMATION+10,(UINT8*)password, 10);
strcpy(password,"epon");
if ((password[0]==0xff)||(strlen(password)==0))
{
return 1;
}
}
while(login_times < LOGIN_MAX_TIMES)
{
/*检测用户名*/
printf("\nlogin:");
strnumber = inputStr(LOGIN_FLAG, 0);
if(strnumber <= LOGINCMP_LEN)
{
user_right = loginChkName();
if(user_right != USER_ERROR)
{
/*检查密码*/
printf("\npassword:");
strnumber=inputStr(PASSWORD_FLAG, 0);
if(strnumber <= LOGINCMP_LEN)
{
if(loginChkPwd(user_right) == OK)
break;
}
}
}
login_times++;
}
return login_times;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -