📄 test.c
字号:
/****************************************Copyright (c)**************************************************
** 广州周立功单片机发展有限公司
** 研 究 所
** 产品一部
**
** http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: test.c
**创 建 人: 陈明计
**最后修改日期: 2004年4月23日
**描 述: ppp协议测试程序
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 陈明计
** 版 本: v1.0
** 日 期: 2004年4月23日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "config.h"
extern void Ping(void *Pdata);
extern uint8 NCPFlag;
extern uint8 IPCPFlag;
void TaskStart (void *data);
void Open(void *data);
void Close(void *data);
OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; /* Tasks stacks */
OS_STK TaskStartStk[TASK_STK_SIZE];
uint8 DestIp[4];
const char SerivePhone[] = "#2"; /* 服务器电话号码 */
/* 用户名及密码 */
uint8 PAPPassword[] = { PPP_FRAM_TYPE__PAP / 256, PPP_FRAM_TYPE__PAP % 256,
0x01,0x10,
0x00,15,
//长度 = 15 + 0x00 * 256 = (4 + 1) + (5 + 1) + 2 + 2 = sizeof(PAPPassword) - 2;
4,'T','E','S','T',
//用户名为TEST,长度为4
5,'1','2','3','4','5'};
//密码为12345,长度为5
/*********************************************************************************************************
** 函数名称: OSPutch
** 功能描述: 显示字符
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块:
**
** 作 者: 陈明计
** 日 期: 2004年4月23日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void OSPutch(uint8 ch)
{
static uint8 x = 1, y = 1;
if(ch == 0x0d || ch == 0x0a)
{
x = 1;
y++;
}
else
{
PC_DispChar (x - 1, y - 1, ch, DISP_FGND_WHITE);
x++;
}
if (x > 80)
{
x = 1;
y++;
}
if (y > 25)
{
y = 1;
PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);
}
}
/*********************************************************************************************************
** 函数名称: OSPutch
** 功能描述: 显示字符串
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块:
**
** 作 者: 陈明计
** 日 期: 2004年4月23日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void OSPuts(char *s)
{
while (*s != 0)
{
OSPutch((uint8)*s++);
}
}
/*********************************************************************************************************
** 函数名称: main
** 功能描述: c语言的主函数,由它启动多任务环境
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: OSInit,OSTaskCreate,OSStart
**
** 作 者: 陈明计
** 日 期: 2004年4月23日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
int main(void)
{
PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* Clear the screen */
OSInit(); /* Initialize uC/OS-II */
OSTaskCreate(TaskStart, NULL, &TaskStartStk[TASK_STK_SIZE - 1], 0);
OSStart();
return 0; /* Start multitasking */
}
/*********************************************************************************************************
** 函数名称: TaskStart
** 功能描述: μCOS-II的第一个任务,接受及处理命令
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块:
**
** 作 者: 陈明计
** 日 期: 2004年4月23日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void TaskStart (void *pdata)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
uint8 i,j;
char s[200],ch;
int16 key;
unsigned int temp;
pdata = pdata; /* 避免编译警告 */
TargetInit(); /* 目标板初始化 */
ModemInit(115200);
PPPDriverInit();
PPPCreate(&ModemDrive);
for (;;)
{
i = 0;
while (i < 199)
{
if (PC_GetKey(&key) == TRUE)
{
ch = (int8)((uint16)key % 256);
OSPutch((uint8)ch);
if (ch == 0x0d || ch == 0x0a)
{
break;
}
s[i++] = (int8)(key % 256);
}
OSTimeDly(OS_TICKS_PER_SEC / 20);
}
s[i] = 0;
if (strcmp(s, "open") == 0)
{
OSTaskDel(21);
OSTaskCreate(Open, NULL, &TaskStk[0][TASK_STK_SIZE - 1], 20);
}
if (strcmp(s, "close") == 0)
{
OSTaskDel(20);
OSTaskCreate(Close, NULL, &TaskStk[1][TASK_STK_SIZE - 1], 21);
}
ch = s[4];
s[4] = 0;
if (strcmp(s, "ping") == 0)
{
s[4] = ch;
i = 0;
j = 0;
sscanf(s + 5, "%u", &temp);
DestIp[0] = temp;
while (s[i] != 0)
{
if (s[i] == '.')
{
s[i] = 0x20;
j++;
sscanf(s + i + 1, "%u", &temp);
DestIp[j] = temp;
}
i++;
}
s[i++] = 0x20;
s[i] = 0;
if (j >= 3)
{
OSTaskDel(22);
OSTaskCreate(Ping, (void *)DestIp, &TaskStk[2][TASK_STK_SIZE - 1], 22);
}
}
}
}
/*********************************************************************************************************
** 函数名称: Open
** 功能描述: 建立链接
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块:
**
** 作 者: 陈明计
** 日 期: 2004年4月23日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Open(void *Pdata)
{
Pdata = Pdata;
OSPuts("Modem Open ...");
ModemOpen();
OSPuts("Pass\n");
OSPuts("PPP Open...");
PPPOpen();
while(1)
{
if (PPPGetState() == PPP_STATE_OPEN)
{
break;
}
OSTimeDly(OS_TICKS_PER_SEC / 20);
}
OSPuts("Pass\nPassword...");
while(1)
{
if (NCPFlag == NCP_AT_NETWORK)
{
break;
}
OSTimeDly(OS_TICKS_PER_SEC / 20);
}
OSPuts("Pass\nConfig ip...");
while(1)
{
if (IPCPFlag == IPCP_STATE_OPENED)
{
break;
}
OSTimeDly(OS_TICKS_PER_SEC / 20);
}
OSPuts("Pass\nOpen OK\n");
OSTaskDel(OS_PRIO_SELF);
}
/*********************************************************************************************************
** 函数名称: Close
** 功能描述: 关闭连接
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块:
**
** 作 者: 陈明计
** 日 期: 2004年4月23日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Close(void *Pdata)
{
Pdata = Pdata;
OSPuts("PPP Close ...");
PPPClose();
OSPuts("Pass\nModem Close ...");
ModemDialDown();
while(1)
{
if (PPPGetState() == PPP_STATE_INITIAL)
{
break;
}
OSTimeDly(OS_TICKS_PER_SEC / 20);
}
OSPuts("Pass\nClose OK\n");
OSTaskDel(OS_PRIO_SELF);
}
//----------------------------------------------------------------------------------
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -