最近在学习以太网,看了好几个开发板的例子,上面都是通过网页来控制LED,我只关心它怎么处理接收的数据的,但是看了程序有点看不懂,麻烦懂的指点一下,不胜感激。程序如下:
cmd = analyse_get_url((char *) &(buf[dat_p + 5]));
// for possible status codes see:
if (cmd ==(u8)-1)
{
plen = fill_tcp_data_p(buf, 0, PSTR("HTTP/1.0 401 Unauthorized\r\nContent-Type: text/html\r\n\r\n<h1>401 Unauthorized</h1>"));
goto SENDTCP;
}
if (cmd == 1)
{
PC8 = 0; PC9 = 0; PC10 = 0; PC11 = 0;
GPIO_SetBits(GPIOD,GPIO_Pin_8);
GPIO_SetBits(GPIOD,GPIO_Pin_9);
GPIO_SetBits(GPIOD,GPIO_Pin_10);
GPIO_SetBits(GPIOD,GPIO_Pin_11);
i = 1;
}
if (cmd == 0)
{
//LED1OFF();
PC8 = 1; PC9 = 1; PC10 = 1; PC11 = 1;
GPIO_ResetBits(GPIOD,GPIO_Pin_8);
GPIO_ResetBits(GPIOD,GPIO_Pin_9);
GPIO_ResetBits(GPIOD,GPIO_Pin_10);
GPIO_ResetBits(GPIOD,GPIO_Pin_11);
i = 0;
}
// takes a string of the form password/commandNumber and analyse it
// return values: -1 invalid password, otherwise command number
// -2 no command given but password valid
u8 analyse_get_url(char* str)//判断字符串与密码是否相同,是否符合规范
{
u8 i = 0;
if (verify_password(str) == 0)
{
return((u8)-1);
}
// find first "/"
// passw not longer than 9 char:
while (*str && i<10 && *str>',' && *str < '{')
{
if (*str == '/')
{
str++;
break;
}
i++;
str++;
}
if (*str <0x3a && *str> 0x2f) //是否为0-9
{
// is a ASCII number, return it
return(*str - 0x30); // 0+0x30=‘0’
}
return((u8)-2);
}
其中在 cmd = analyse_get_url((char *) &(buf[dat_p + 5]))中为什么只判断buf中的dat_p+5这一位,当我别的位就是报头吗? analyse_get_url(char* str)函数应该是返回一个数字吧? 我要是想看看所有的数据怎么办,? 我也不知道我说的明不明白。有调过网口的给点建议吧,谢谢了。
|