?? http.c
字號:
//
//********************************************************************************************
BYTE http_get_variable ( BYTE *rxtx_buffer, WORD dlength, PGM_P val_key, BYTE *dest )
{
WORD data_p;
PGM_P key;
BYTE match=0, temp;
key = val_key;
// get data position
data_p = tcp_get_hlength( rxtx_buffer ) + sizeof(ETH_HEADER) + sizeof(IP_HEADER);
// Find '?' in rx buffer, if found '?' in rx buffer then let's find variable key (val_key)
for ( ; data_p<dlength; data_p++ )
{
if ( rxtx_buffer [ data_p ] == '?' )
break;
}
// not found '?' in buffer
if ( data_p == dlength )
return 0;
// find variable key in buffer
for ( ; data_p<dlength; data_p++ )
{
temp = pgm_read_byte ( key );
// end of variable keyword
if ( rxtx_buffer [ data_p ] == '=' && match != 0 )
{
if ( temp == '\0' )
{
data_p++;
break;
}
}
// variable keyword match with rx buffer
if ( rxtx_buffer [ data_p ] == temp )
{
key++;
match++;
}
else
{
// no match in rx buffer reset match and find again
key = val_key;
match = 0;
}
}
// if found variable keyword, then store variable value in destination buffer ( dest )
if ( match != 0 )
{
match = 0;
for ( ;; )
{
// end of variable value break from loop
if ( rxtx_buffer [ data_p ] == '&' || rxtx_buffer [ data_p ] == ' ' )
{
dest [ match ] = '\0';
break;
}
dest [ match ] = rxtx_buffer [ data_p ];
match++;
data_p++;
}
}
// return with variable value length
return match;
}
//********************************************************************************************
//
// Function : hex2int
// Description : convert a single hex digit character to its integer value
//
//********************************************************************************************
unsigned char hex2int(char c)
{
if (c >= '0' && c <='9')
return((unsigned char)c - '0');
if (c >= 'a' && c <='f')
return((unsigned char)c - 'a' + 10);
if (c >= 'A' && c <='F')
return((unsigned char)c - 'A' + 10);
return 0;
}
//********************************************************************************************
//
// Function : urldecode
// Description : decode a url string e.g "hello%20joe" or "hello+joe" becomes "hello joe"
//
//********************************************************************************************
void urldecode(unsigned char *urlbuf)
{
unsigned char c;
unsigned char *dst;
dst=urlbuf;
while ((c = *urlbuf))
{
if (c == '+') c = ' ';
if (c == '%')
{
urlbuf++;
c = *urlbuf;
urlbuf++;
c = (hex2int(c) << 4) | hex2int(*urlbuf);
}
*dst = c;
dst++;
urlbuf++;
}
*dst = '\0';
}
//*****************************************************************************************
//
// Function : http_put_request
// Description : put http request to tx buffer contain 2-variables pwd and temp.
// webserver receive pwd, temp and save to text file by PHP script on webserver.
//
//*****************************************************************************************
WORD http_put_request ( BYTE *rxtx_buffer )
{
BYTE temp_value;
WORD dlength;
BYTE generic_buf[64];
temp_value = adc_read_temp();
print_decimal ( generic_buf, 2, temp_value );
generic_buf[ 2 ] = '\0';
dlength = tcp_puts_data_p ( rxtx_buffer, PSTR ( "GET /avrnet/save.php?pwd=secret&temp=" ), 0 );
dlength = tcp_puts_data ( rxtx_buffer, (BYTE *)generic_buf, dlength );
dlength = tcp_puts_data_p ( rxtx_buffer, PSTR ( " HTTP/1.0\r\n" ), dlength );
dlength = tcp_puts_data_p ( rxtx_buffer, PSTR ( "Host: 10.1.1.76\r\n" ), dlength );
dlength = tcp_puts_data_p ( rxtx_buffer, PSTR ( "User-Agent: AVR ethernet\r\n" ), dlength );
dlength = tcp_puts_data_p ( rxtx_buffer, PSTR ( "Accept: text/html\r\n" ), dlength );
dlength = tcp_puts_data_p ( rxtx_buffer, PSTR ( "Keep-Alive: 300\r\n" ), dlength );
dlength = tcp_puts_data_p ( rxtx_buffer, PSTR ( "Connection: keep-alive\r\n\r\n" ), dlength );
return dlength;
}
//*****************************************************************************************
//
// Function : http_home
// Description : prepare the webpage by writing the data to the tcp send buffer
//
//*****************************************************************************************WORD http_home( BYTE *rxtx_buffer ){ WORD dlen, adc0_value;
BYTE temp_value;
BYTE count_time_temp[3];
BYTE generic_buf[64];
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n" ), 0 ); dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "<title>" ), dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, (PGM_P)web_title, dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "</title>" ), dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "<a href=\"http://www.avrportal.com/\" target=\"_blank\"><b><font color=\"#000099\" size=\"+1\">" ), dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, (PGM_P)web_title, dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "</font></b></a><br>" ), dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, (PGM_P)tag_hr, dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "LED 1 : " ), dlen );
if ( (LED_PORT & _BV ( LED_PIN1 )) )
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "<font color=red>OFF" ), dlen );
else
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "<font color=green>ON" ), dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "</font> [ <a href=\"./?l1=" ), dlen );
if ( (LED_PORT & _BV ( LED_PIN1 )) )
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "1\">ON" ), dlen );
else
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "0\">OFF" ), dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "</a> ], LED 2 : " ), dlen );
if ( (LED_PORT & _BV ( LED_PIN2 )) )
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "<font color=red>OFF" ), dlen );
else
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "<font color=green>ON" ), dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "</font> [ <a href=\"./?l2=" ), dlen );
if ( (LED_PORT & _BV ( LED_PIN2 )) )
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "1\">ON" ), dlen );
else
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "0\">OFF" ), dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "</a> ]<br><br>" ), dlen );
// read adc0
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "ACD0 = " ), dlen );
adc0_value = adc_read ( 0 );
print_decimal ( generic_buf, 4, adc0_value );
generic_buf[ 4 ] = '\0';
dlen = tcp_puts_data ( rxtx_buffer, (BYTE *)generic_buf, dlen );
// read temp
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "<br><br>Temparature = " ), dlen );
temp_value = adc_read_temp();
print_decimal ( generic_buf, 2, temp_value );
generic_buf[ 2 ] = '\0';
dlen = tcp_puts_data ( rxtx_buffer, (BYTE *)generic_buf, dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "°C<br>" ), dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, (PGM_P)tag_form, dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "<INPUT TYPE=\"hidden\" NAME=\"tc\" VALUE=\"1\">Send Temparature in <INPUT TYPE=\"checkbox\" NAME=\"en\"" ), dlen );
eeprom_read_block ( count_time_temp, ee_count_time, 3 );
if ( count_time_temp[0] )
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "CHECKED" ), dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "> Enable " ), dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "<INPUT TYPE=\"text\" NAME=\"h\" size=\"2\" maxlength=\"2\" VALUE=\"" ), dlen );
print_decimal ( generic_buf, 2, count_time_temp[1] );
generic_buf[ 2 ] = '\0';
dlen = tcp_puts_data ( rxtx_buffer, (BYTE *)generic_buf, dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "\"> Hours <INPUT TYPE=\"text\" NAME=\"m\" size=\"2\" maxlength=\"2\" VALUE=\"" ), dlen );
print_decimal ( generic_buf, 2, count_time_temp[2] );
generic_buf[ 2 ] = '\0';
dlen = tcp_puts_data ( rxtx_buffer, (BYTE *)generic_buf, dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "\"> Minutes<input type=\"submit\" value=\"OK\"></form>" ), dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, (PGM_P) tag_form, dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "<input name=\"aip\" type=\"text\" size=\"15\" maxlength=\"15\" value=\"" ), dlen );
print_ip ( generic_buf, (BYTE*)&avr_ip, 0 );
dlen = tcp_puts_data ( rxtx_buffer, (BYTE *)generic_buf, dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "\"> <input type=\"submit\" value=\"AVR IP\"></form>" ), dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, (PGM_P)tag_form, dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "<input name=\"sip\" type=\"text\" size=\"15\" maxlength=\"15\" value=\"" ), dlen );
print_ip ( generic_buf, (BYTE*)&server_ip, 0 );
dlen = tcp_puts_data ( rxtx_buffer, (BYTE *)generic_buf, dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "\"> <input type=\"submit\" value=\"Server IP\"></form>" ), dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, (PGM_P) tag_form, dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "<input name=\"lcd1\" type=\"text\" size=\"16\" maxlength=\"16\"> LCD Line 1<br>" ), dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "<input name=\"lcd2\" type=\"text\" size=\"16\" maxlength=\"16\"> LCD Line 2<br>" ), dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "<input type=\"submit\" value=\"Write LCD\"></form>" ), dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, (PGM_P)tag_hr, dlen );
dlen = tcp_puts_data_p ( rxtx_buffer, PSTR ( "<a href=\"./\"><b><font color=\"#000099\" size=\"+1\">Refresh</font></b></a>" ), dlen );
return(dlen);}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -