📄 http.c
字号:
/*
* http.c
*
* Rafael V. Aroca <rva@grad.icmc.usp.br>
*
* Prepares HTML Pages in PIC memory and send these pages
* This file implements a "printfs filesystem"
*
* References for checksum computation:
* - http://www.netfor2.com/tcpsum.htm
* - http://www.netfor2.com/checksum.html
*
*/
#ifndef RTS
#define RTS PIN_C5
#define DTR PIN_C4
#endif
// Definicao de Casas
#define A1_8 0x60 // eq. 01100000
#define A9_16 0x64 // eq. 01100100
#define B1_8 0x70
#define B9_16 0x74
#define C1_8 0x40
#define C9_16 0x44
#define D1_8 0x50
#define D9_16 0x54
#define E1_8 0x80
#define E9_16 0x84
#define F1_8 0x90
#define F9_16 0x94
#define G1_8 0xA0
#define G9_16 0xA4
#define H1_8 0xB0
#define H9_16 0xB4
#define I1_8 0xE0
#define I9_16 0xE4
#define J1_8 0xF0
#define J9_16 0xF4
#define K1_8 0xC0
#define K9_16 0xC4
#define L1_8 0xD0
#define L9_16 0xD4
#define M1_8 0x00
#define M9_16 0x04
#define N1_8 0x10
#define N9_16 0x14
#define O1_8 0x20
#define O9_16 0x24
#define P1_8 0x30
#define P9_16 0x34
//Bright/DIM
#define B 0x88
#define D 0x98
// Definicao de dispositivos
#define ON1 0x0 // eq. 00000000
#define OFF1 0x20 // eq. 00100000
#define ON2 0x10
#define OFF2 0x30
#define ON3 0x08
#define OFF3 0x28
#define ON4 0x18
#define OFF4 0x38
#define ON5 0x40
#define OFF5 0x60
#define ON6 0x50
#define OFF6 0x70
#define ON7 0x48
#define OFF7 0x68
#define ON8 0x58
#define OFF8 0x78
void e_um()
{
output_high(DTR);
delay_us(700);
output_low(DTR);
delay_us(700);
}
void e_zero()
{
output_high(RTS);
delay_us(700);
output_low(RTS);
delay_us(700);
}
void e_reset()
{
output_high(RTS);
output_high(DTR);
delay_ms(10);
output_low(RTS);
output_low(DTR);
delay_ms(1);
}
void e_header()
{
//header 11010101 10101010
e_um();
e_um();
e_zero();
e_um();
e_zero();
e_um();
e_zero();
e_um();
e_um();
e_zero();
e_um();
e_zero();
e_um();
e_zero();
e_um();
e_zero();
}
void e_footter()
{
e_um();
e_zero();
e_um();
e_zero();
e_um();
e_um();
e_zero();
e_um();
}
void e_code(int8 casa, int8 acao)
{
// envia cabecalho
e_header();
// envia codigo da casa
if (bit_test(casa,7))
e_um();
else
e_zero();
if (bit_test(casa,6))
e_um();
else
e_zero();
if (bit_test(casa,5))
e_um();
else
e_zero();
if (bit_test(casa,4))
e_um();
else
e_zero();
if (bit_test(casa,3))
e_um();
else
e_zero();
if (bit_test(casa,2))
e_um();
else
e_zero();
if (bit_test(casa,1))
e_um();
else
e_zero();
if (bit_test(casa,0))
e_um();
else
e_zero();
// envia codigo da acao
if (bit_test(acao,7))
e_um();
else
e_zero();
if (bit_test(acao,6))
e_um();
else
e_zero();
if (bit_test(acao,5))
e_um();
else
e_zero();
if (bit_test(acao,4))
e_um();
else
e_zero();
if (bit_test(acao,3))
e_um();
else
e_zero();
if (bit_test(acao,2))
e_um();
else
e_zero();
if (bit_test(acao,1))
e_um();
else
e_zero();
if (bit_test(acao,0))
e_um();
else
e_zero();
// rodape
e_footter();
}
//To be called from a printf: stores in a memory position a byte of a web page
void outdataMem(int data) {
pageBuffer[memPos] = data;
memPos+=1;
}
//Reads a byte from a page in memory
int readMemData(int16 pos) {
return pageBuffer[pos];
}
//To save space: writes http header
void writeHttpHeader() {
printf(outdataMem, "HTTP/1.0 200 OK\r\n");
printf(outdataMem, "Content-type: text/html\r\n\r\n");
}
//Prepares a page, computing its checksum and putting it in memory to be sent later
void preparar_pagina(int8 html_request, int8 *html_request_data) {
int8 char0, char1, c, i;
int16 size, dir;
//int8 page1[20];
//strcpy(page1, "fan-on.cgi");
#ifdef DEBUG
printf("Preparing page: %s", html_request);
#endif
memPos=0;
//Verify page name with case insentive - not working for names > 1 char.....fix me
//printf("\n\r\n\r===== %u =====\n\r\n\r", stricmp(*html_request, page1));
// if (stricmp(*html_request, page1) == 0) {
//Temporarily we just compare the first letter of the page name
switch (html_request) {
case 'g':
writeHttpHeader();
printf(outdataMem, "<html><body>");
printf(outdataMem, "OK g");
printf(outdataMem, " ");
printf(outdataMem, " ");
printf(outdataMem, " ");
printf(outdataMem, "</body></html> \f");
lcd_pos_xy(1,2);
printf(lcd_escreve, "GeoShow On ");
#use rs232(baud=19200,parity=N,xmit=PIN_B6,rcv=PIN_B7,bits=8,errors)
printf("^CO$\r\n");
// printf("A\r\n");
// printf("A\r\n");
#use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,errors)
break;
case 'o':
writeHttpHeader();
printf(outdataMem, "<html><body>");
printf(outdataMem, "OK o");
printf(outdataMem, " ");
printf(outdataMem, " ");
printf(outdataMem, " ");
printf(outdataMem, "</body></html> \f");
lcd_pos_xy(1,2);
printf(lcd_escreve, "GeoShow Off ");
//fprintf(GEOSHOW, "^CF$\r\n");
#use rs232(baud=19200,parity=N,xmit=PIN_B6,rcv=PIN_B7,bits=8,errors)
printf( "^CF$\r\n");
#use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,errors)
//#13+#10
break;
case 'c':
writeHttpHeader();
printf(outdataMem, "<html><body>");
printf(outdataMem, "OK c");
printf(outdataMem, " ");
printf(outdataMem, " ");
printf(outdataMem, " ");
printf(outdataMem, "</body></html> \f");
e_code(A1_8, ON8);
lcd_pos_xy(1,2);
printf(lcd_escreve, "Luz 1 On ");
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -