Proyecto de Tesis en Mecatrónica. Universidad Técnica del Norte. Ernesto Palacios <mecatronica.mid@gmail.com>
Dependencies: EthernetNetIf HTTPServer QEI_hw RPCInterface mbed
Diff: main.cpp
- Revision:
- 18:cf1e07d82630
- Parent:
- 17:a4f380bc2516
- Child:
- 19:c26cf8a48986
--- a/main.cpp Wed May 02 01:15:36 2012 +0000 +++ b/main.cpp Wed May 09 20:51:10 2012 +0000 @@ -6,22 +6,29 @@ #include "HTTPServer.h" #include "RPCFunction.h" #include "RPCVariable.h" -#include "SerialRPCInterface.h" - -Serial pc( USBTX, USBRX ); +//#include "SerialRPCInterface.h" -DigitalOut pin_son( p7 ); // SON -DigitalOut pin_dir( p26 ); // SIGN+ -InterruptIn pin_alm( p8 ); // ALM -AnalogOut aout( p18 ); // 0.0 a 1.0 float +Serial pc( USBTX, USBRX ); //Comunicacion Serial directa al computador +Serial RS_232(p9, p10); //Comunicacion Serial para MAX232 +Serial encoder(p28, p27); //Comunicacion Serial para tarjeta del encoder + +DigitalOut pin_son( p7 ); // SON +DigitalOut pin_dir( p26 ); // SIGN+ +InterruptIn pin_alm( p8 ); // ALM +AnalogOut aout( p18 ); // 0.0 a 1.0 float DigitalIn isHTTP( p15 ); // Modo Ethernet/Serial DigitalIn isFast( p16 ); // Serial Alta velocidad/Baja Velocidad +DigitalIn isPC ( p17 ); // Salida a compuador o MAX232 + +// Faltan las interrupciones del enconder. + +EthernetNetIf eth; +HTTPServer svr; + LocalFileSystem fs("local"); -//EthernetNetIf eth; -HTTPServer svr; // Anadir funciones al Protocolo RPC RPCFunction SetFQ (&setPTO_eth, "PTO"); @@ -35,8 +42,10 @@ int main() { +//**********************************************************************************************// if( isHTTP ) //Configura Red Ethernet { + Base::add_rpc_class<AnalogIn>(); Base::add_rpc_class<AnalogOut>(); Base::add_rpc_class<DigitalIn>(); @@ -49,112 +58,35 @@ Base::add_rpc_class<BusInOut>(); Base::add_rpc_class<Serial>(); - - //____________ *** ARCHIVO DE CONFIGURACION ***_______________________ // - printf("\n *** CONFIGURACION ETHERNET DE MBED ***\n"); - printf("Leyendo archivo de configuracion...\n\n"); - - FILE *fp = fopen("/local/config.txt", "r"); // Abre el archivo y lo guarda en fp - - if(!fp) // En caso de no encontrarse el archivo - { - printf("\nEl archivo /mbed/config.txt no puede ser abierto!\n"); - exit(1); - - } - else + printf("Setting up...\n"); + EthernetErr ethErr = eth.setup(); + if(ethErr) { - // Cadenas de caracteres desde el Archivo config.txt - char isDHCP [15]; //Modo Automatico o Manual - char empty [2]; // Linea vacia - char ip [40]; // Direccion IP - char mask [40]; // Mascara de Subred - char gate [40]; // Puerta de enlace - char dns [40]; // Direccion DNS - - // Valores 'int' para agregar a la configuracion manual - int DHCP; - int n_ip[4]; - int n_mask[4]; - int n_gate[4]; - int n_dns[4]; - - - // Leer linea a linea el archivo - fgets( isDHCP, 15, fp ); - fgets( empty, 2, fp ); - fgets( ip, 40, fp ); - fgets( mask, 40, fp ); - fgets( gate, 40, fp ); - fgets( dns, 40, fp ); - - - // Extraer los valores numericos - sscanf( isDHCP,"%*s %d",&DHCP ); - - sscanf( ip,"%*s %d.%d.%d.%d",&n_ip[0],&n_ip[1],&n_ip[2],&n_ip[3] ); - sscanf( mask,"%*s %d.%d.%d.%d",&n_mask[0],&n_mask[1],&n_mask[2],&n_mask[3] ); - sscanf( gate,"%*s %d.%d.%d.%d",&n_gate[0],&n_gate[1],&n_gate[2],&n_gate[3] ); - sscanf( dns,"%*s %d.%d.%d.%d",&n_dns[0],&n_dns[1],&n_dns[2],&n_dns[3] ); - - - if(DHCP) //En caso de modo DHCP - { - printf("\n Configurar red de manera automatica\n"); - EthernetNetIf eth; //Crea la interfaz - EthernetErr ethErr = eth.setup(); - if( ethErr ) - { - printf( "Error %d en la configuracion\n", ethErr ); - return -1; - } - - printf("Configuracion Correcta\n\n"); - } - else - { - sscanf( ip,"%*s %d.%d.%d.%d",&n_ip[0], &n_ip[1], &n_ip[2], &n_ip[3] ); - sscanf( mask,"%*s %d.%d.%d.%d",&n_mask[0],&n_mask[1],&n_mask[2],&n_mask[3] ); - sscanf( gate,"%*s %d.%d.%d.%d",&n_gate[0],&n_gate[1],&n_gate[2],&n_gate[3] ); - sscanf( dns,"%*s %d.%d.%d.%d",&n_dns[0], &n_dns[1], &n_dns[2], &n_dns[3] ); - printf(" %s %s %s %s %s\n " , isDHCP, ip, mask, gate, dns ); - - printf("\n Configurar red de manera manual\n"); - EthernetNetIf eth( - IpAddr( n_ip[0], n_ip[1], n_ip[2], n_ip[3]), //IP Address - IpAddr( n_mask[0],n_mask[1],n_mask[2],n_mask[3]), //Network Mask - IpAddr( n_gate[0],n_gate[1],n_gate[2],n_gate[3]), //Gateway - IpAddr( n_dns[0], n_dns[1], n_dns[2], n_dns[3] ) //DNS - ); - - EthernetErr ethErr = eth.setup(); - if( ethErr ) - { - printf( "Error %d en la configuracion\n", ethErr ); - return -1; - } - - printf("Configuracion Correcta\n\n"); - } - } - - printf("Cerrando archivo...\n"); - fclose(fp); - - FSHandler::mount("/local", "/files"); //Mount /webfs path on /files web path - FSHandler::mount("/local", "/"); //Mount /webfs path on web root path + printf("Error %d in setup.\n", ethErr); + return -1; + } + printf("Setup OK\n"); + + + FSHandler::mount("/local", "/files"); //Monta /local en /files que es el directorio web + FSHandler::mount("/local", "/"); //Mount /local en / que es el directorio raiz - + //Handles para la comunicacion svr.addHandler<SimpleHandler>("/hello"); svr.addHandler<RPCHandler>("/rpc"); svr.addHandler<FSHandler>("/files"); - svr.addHandler<FSHandler>("/"); //Default handler - //Example : Access to mbed.htm : http://a.b.c.d/mbed.htm or http://a.b.c.d/files/mbed.htm + svr.addHandler<FSHandler>("/"); + + svr.bind(80); // Puerto de comunicacion. + + printf("Listo para comunicacion...\n"); - svr.bind(80); - - printf("Listo para comunicacion...\n"); + // Para probar la correcta configuracion acceder a mbed.htm + // http://a.b.c.d/mbed.htm or http://a.b.c.d/files/mbed.htm + } +//**********************************************************************************************************// + else // Caso Contrario Anadir modo Serial {