?? httpserv.c
字號:
//-----------------------------------------------------------------
// 名稱: 用IE訪問AVR以太網應用系統
//-----------------------------------------------------------------
// 功能: 本例運行時,客戶端通過IE瀏覽器可以查詢LED狀態,啟停電機,
// 設置管理員密碼等.
//
//-----------------------------------------------------------------
//MAC地址,如果EEPROM包含了有效配置則忽略此行
#define MY_MAC "\x00\x06\x98\x30\x00\x35"
//IP地址(如果啟用了DHCP則忽略)
#define MY_IPADDR "192.168.1.100"
//IP網絡掩碼(如果啟用了DHCP則忽略)
#define MY_IPMASK "255.255.255.0"
//網關IP(如果啟用了DHCP則忽略)
#define MY_IPGATE "192.168.1.1"
//是否使用DHCP
#define USE_DHCP
//定義文件系統設備
#ifndef MY_FSDEV
#define MY_FSDEV devUrom
#endif
#include <cfg/os.h>
#include <string.h>
#include <io.h>
#include <fcntl.h>
#include <dev/board.h>
#include <dev/urom.h>
#include <dev/irqreg.h>
#include <arch/avr32/ihndlr.h>
#include <avr/eeprom.h>
#include <sys/version.h>
#include <sys/thread.h>
#include <sys/timer.h>
#include <sys/heap.h>
#include <sys/confnet.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <net/route.h>
#include <pro/httpd.h>
#include <pro/dhcp.h>
//服務器線程堆棧大小
#ifndef HTTPD_SERVICE_STACK
#define HTTPD_SERVICE_STACK ((580 * NUT_THREAD_STACK_MULT) + NUT_THREAD_STACK_ADD)
#endif
static char *html_mt = "text/html";
static char admin_password[16] = "root:"; //管理員帳號密碼
//-----------------------------------------------------------------
// 根據LED與MOTOR狀態構造創建WEB頁
//-----------------------------------------------------------------
void create_status_webpage(FILE *stream, int led, int motor)
{
u_char i;
//待輸出狀態WEB頁的HTML標記
static char *html_x[] =
{
"<html><head><style type='text/css'>", //此行開始的0~9行為固定部分
".title_style {font-family: '黑體';font-size: 24px; }",
".red_style {font-family: '黑體';font-size: 60px;color: #FF0000;}",
".blk_style {font-family: '黑體';font-size: 60px;color: #000000;}",
"</style></head><body><br />",
"<table width='630' height='160' border='1' align='center'>",
"<tr><td width='290' height='49'><div align='center'>",
"<span class='title_style'>LED狀態</span></div></td><td width='326'>",
"<div align='center'><span class='title_style'>電機狀態</span>",
"</div></td></tr><tr><td height='98'>",
"<div align='center' class='%s'>%s</div></td><td>", //10.LED狀態格式串
"<div align='center' class='%s'>%s</div></td></tr>",//11.MOTOR狀態格式串
"</table></body></html>" //12.結尾部分
};
//將固定的HTML標記寫入stream(0~9行).
//向流中寫入紅色"ON"字符串標記
//否則向流中寫入黑色"OFF"字符串標記
//向流中寫入紅色"Running..."字符串標記
//否則向流中寫入黑色"*STOP*"字符串標記的
//輸出結尾部分
}
//-----------------------------------------------------------------
// LED狀態查詢與電機控制函數
// 該函數必須由NutRegisterCgi()注冊,當客戶端請求cgi-bin/mcu_control.cgi時
// 自動被NutHttpProcessRequest()調用.
//-----------------------------------------------------------------
static int mcu_control(FILE * stream, REQUEST * req)
{
//led及motor狀態
int led, motor;
//參數名及參數值變量,根據參數決定返回LED狀態或啟停電機
char *para_name, *para_value;
//三個用戶請求超鏈接格式
//admin/mcu_control.cgi?para=GETLEDSTATUS
//admin/mcu_control.cgi?para=STARTMOTOR
//admin/mcu_control.cgi?para=STOPMOTOR
//讀取所接收到的參數名及參數值
//根據不同參數值完成不同操作
if (!strcmp(para_name,"para"))
{
}
//LED狀態由PF6位判斷(注意led與motor的狀態判斷返回值是相反的.)
//MOTOR狀態由PF0判斷
//以下兩行發送HTTP頭部,創建HTTP響應
//發送HTTP及版本行
//發送Content-Type, Content-Lenght等
//根據LED與MOTOR狀態構造返回WEB頁
//刷新返回的流
}
//-----------------------------------------------------------------
// 設置管理員密碼
// 該函數必須由NutRegisterCgi()注冊,當客戶端請求
// admin/cgi-bin/setpassword.cgi時,該函數將自動
// 被NutHttpProcessRequest()調用.
//-----------------------------------------------------------------
static int setpassword(FILE * stream, REQUEST * req)
{
u_char save_OK = 0; //是否保存成功
char *pwd1, *pwd2; //兩次輸入的密碼字符串指針
//調用獲取參數API,根據文本框的名稱pass1與pass2分別獲取兩個密碼
//檢查兩次輸入的密碼是否相同,且長度是否在10以內
if ( !strcmp(pwd1,pwd2) && strlen(pwd1) > 0 && strlen(pwd1) < 11)
{
}
//以下兩行發送HTTP頭部,創建HTTP響應
//待輸出密碼保存成功與否信息WEB頁的HTML標記
static char* html_x[] =
{
"<html><head><title>設置管理員密碼</title></head>",
"<body><br><H1>返回信息:</H1><br>",
"<font color='%s'>%s</font><br></body></html>"
};
//根據save_OK輸出藍色的保存成功信息或紅色的保存失敗信息.
}
//-----------------------------------------------------------------
// HTTP服務線程(循環等待客戶連接,處理HTTP請求并斷開連接)
//-----------------------------------------------------------------
THREAD(Service, arg)
{
}
//-----------------------------------------------------------------
// 外部中斷INT7控制LED開關
//-----------------------------------------------------------------
static void External_Interrupt7_IRQ(void *arg)
{
}
//-----------------------------------------------------------------
// 主程序(Nut/OS在初始化后自動調用該入口函數)
//-----------------------------------------------------------------
int main(void)
{
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -