예제 #1
0
파일: Comm.cpp 프로젝트: serans/aaits
/**
 * @brief Sends a HTTP response
 */
void Comm::sendResponseCode( byte response_code ) {   
    printP(msg_protocol_name);
    Serial.print(" ");
    printP(msg_table[response_code]);    
    Serial.println();
    Serial.println();
}
예제 #2
0
파일: aWOT.cpp 프로젝트: cnc4less/aWOT
/* Sends a default error response for a failed request. */
void Response::fail() {
  P(failMsg1) = "HTTP/1.0 400 Bad Request" CRLF;
  P(failMsg2) = "Content-Type: text/html" CRLF
  CRLF SERVER_FAIL_MESSAGE;

  printP(failMsg1);
  m_printHeaders();
  printP(failMsg2);
}
예제 #3
0
uint8_t BayGPRSInterface::connect(void){
	if(_tx_error_count>20) softSwitch();
	uint8_t count=0;
	uint8_t res;
	if(res=init()) return res+1;
	setup_start:
	printlnP("AT+CIFSR");
	if(wait_for("ERROR",2000)){
		//has IP
		printP("AT+CIPSTART=\"TCP\",\"");
		print(_server);
		printP("\",");
		println(_port);
		if(wait_for("CONNECT",10000)) return 1;

		printlnP("AT+CIPSEND?");
		if(! wait_forPGM(PSTR(": "),200,4,_base64buffer)){
			_base64buffer[4]=0;
			_mtu=atoi(_base64buffer);
			_mtu-=(BayTCP_BUFFER+17);
		} else _mtu=500;


		printlnP("AT+CIPSEND");
		if(wait_for("> ",10000)) return 1;
		return 0;
	}

	count++;
	if(count>100)
		return 1;

	printlnP("AT+CIPMUX=0");
	//if(wait_forOK(400)) goto setup_start;

	printlnP("AT+CIPCLOSE");
	wait_forOK(200);
	printlnP("AT+CIPSHUT");
	wait_forOK(200);


	printP("AT+CSTT=\"");
	print(_apn);
	printP("\",\"");
	print(_prov_user);
	printP("\",\"");
	print(_prov_pw);
	printlnP("\"");
	if(wait_forOK(400)) goto setup_start;

	printlnP("AT+CIICR");
	if(wait_forOK(10000)) goto setup_start;

    goto setup_start;

}
예제 #4
0
파일: aWOT.cpp 프로젝트: cnc4less/aWOT
/* Sends a default error response for a unauthorized request. */
void Response::unauthorized() {
  P(failMsg1) =
  "HTTP/1.0 401 Unauthorized" CRLF
  "Content-Type: text/html" CRLF;
  P(failMsg2) = CRLF SERVER_AUTH_MESSAGE;

  printP(failMsg1);
  m_printHeaders();
  printP(failMsg2);
}
예제 #5
0
파일: aWOT.cpp 프로젝트: cnc4less/aWOT
/* Sends a default error response for a unauthorized request. */
void Response::forbidden() {
  P(failMsg1) =
  "HTTP/1.0 403 Forbidden" CRLF
  "Content-Type: text/html" CRLF;
  P(failMsg2) = CRLF SERVER_FORBIDDEN_MESSAGE;

  printP(failMsg1);
  m_printHeaders();
  printP(failMsg2);
}
예제 #6
0
파일: aWOT.cpp 프로젝트: cnc4less/aWOT
/* Sends a default error response for request targeted to an nonexistent resource. */
void Response::notFound() {
  P(failMsg1) =
  "HTTP/1.0 404 Not Found" CRLF
  "Content-Type: text/html" CRLF;
  P(failMsg2) = CRLF SERVER_NOT_FOUND_MESSAGE;

  printP(failMsg1);
  m_printHeaders();
  printP(failMsg2);
}
예제 #7
0
파일: aWOT.cpp 프로젝트: cnc4less/aWOT
/* Sends a default default error response for a failed request handling. */
void Response::serverError() {
  P(failMsg1) =
  "HTTP/1.0 500 Internal Server Error" CRLF
  "Content-Type: text/html" CRLF;
  P(failMsg2) = CRLF SERVER_SERVER_ERROR_MESSAGE;

  printP(failMsg1);
  m_printHeaders();
  printP(failMsg2);
}
예제 #8
0
uint8_t BayGPRSInterface::begin(long baud,uint8_t unlock_only){
	_baud=baud;
	i_begin(_baud);
	skipChars();
	printP("AT"); //Will autoconfigure BAUD-Rate - Auto BAUD-Rate did not work with Sleep-Mode!
	delay(100);
	println();
	printP("AT+IPR=");
	println(_baud);
	wait_forOK(200);
	return init(unlock_only);
}
예제 #9
0
void WebServer::httpNotAllowed() {
	P(failMsg) = "HTTP/1.0 405 Method not allowed"
	CRLF
	WEBDUINO_SERVER_HEADER
	"Content-Type: text/html";
	printP (failMsg);
	printCRLF();
	print("Allow: GET");
	printCRLF();

	printP (failMsg);
}
예제 #10
0
파일: aWOT.cpp 프로젝트: cnc4less/aWOT
/* Sends default status and headers indicating a successful request without any response body. */
void Response::noContent() {
  P(noContentMsg) = "HTTP/1.0 204 No Content" CRLF;

  printP(noContentMsg);
  m_printHeaders();
  m_printCRLF();
}
예제 #11
0
파일: Web.cpp 프로젝트: paulv888/Arduino
void postMessage(const byte deviceIdx) {

	if (DEBUG_MEMORY) printMem("Post ");

	if (client_send.connect(vlosite, 80)) {
		if (DEBUG_WEB) dbg.println("NewC");

		int len = 0;
		printP(COMMAND_IO_SEND, TXTPOST);
		len = printResponse(COMMAND_IO_SEND, deviceIdx, true);
		client_send.println(len);
		if (DEBUG_WEB) dbg.println(len);
		client_send.println();
		if (DEBUG_WEB) dbg.println();
		printResponse(COMMAND_IO_SEND, deviceIdx, false);
		client_send.println();

		delay (3);
		while (client_send.available()) {
			char c = client_send.read();
			if (DEBUG_WEB) dbg.print(c);
		}

	} else {
		if (DEBUG_WEB) dbg.println("Fail");
		showStatus(NET_ERROR, 0);
		Reset_AVR();
	}

	delay(1);
	if (DEBUG_WEB) dbg.println("Disc");
	client_send.stop();
}
예제 #12
0
void WebServer::outputCheckboxOrRadio(const char *element, const char *name,
                                      const char *val, const char *label,
                                      bool selected)
{
  P(cbPart1a) = "<label><input type='";
  P(cbPart1b) = "' name='";
  P(cbPart2) = "' value='";
  P(cbPart3) = "' ";
  P(cbChecked) = "checked ";
  P(cbPart4) = "/> ";
  P(cbPart5) = "</label>";

  printP(cbPart1a);
  print(element);
  printP(cbPart1b);
  print(name);
  printP(cbPart2);
  print(val);
  printP(cbPart3);
  if (selected)
    printP(cbChecked);
  printP(cbPart4);
  print(label);
  printP(cbPart5);
}
예제 #13
0
void WebServer::httpNoContent() {
	P(noContentMsg) =
	"HTTP/1.0 204 NO CONTENT" CRLF
	WEBDUINO_SERVER_HEADER
	CRLF
	CRLF;

	printP(noContentMsg);
}
예제 #14
0
void WebServer::noRobots(ConnectionType type)
{
  httpSuccess("text/plain");
  if (type != HEAD)
  {
    P(allowNoneMsg) = "User-agent: *" CRLF "Disallow: /" CRLF;
    printP(allowNoneMsg);
  }
}
예제 #15
0
void WebServer::httpServerError() {
	P(failMsg) = "HTTP/1.0 500 Internal Server Error"
	CRLF
	WEBDUINO_SERVER_HEADER
	"Content-Type: text/html"
	CRLF
	CRLF WEBDUINO_SERVER_ERROR_MESSAGE;

	printP (failMsg);
}
예제 #16
0
void WebServer::httpFail() {
	P(failMsg) = "HTTP/1.0 400 Bad Request"
	CRLF
	WEBDUINO_SERVER_HEADER
	"Content-Type: text/html"
	CRLF
	CRLF WEBDUINO_FAIL_MESSAGE;

	printP (failMsg);
}
예제 #17
0
파일: aWOT.cpp 프로젝트: cnc4less/aWOT
/* Sends redirection response. */
void Response::seeOther(const char *otherURL) {
  P(seeOtherMsg) =
  "HTTP/1.0 303 See Other" CRLF
  "Location: ";

  printP (seeOtherMsg);
  print(otherURL);
  m_printHeaders();
  m_printCRLF();
}
예제 #18
0
void WebServer::httpSeeOther(const char *otherURL) {
	P(seeOtherMsg) = "HTTP/1.0 303 See Other"
	CRLF
	WEBDUINO_SERVER_HEADER
	"Location: ";

	printP (seeOtherMsg);
	print(otherURL);
	printCRLF();
	printCRLF();
}
예제 #19
0
파일: 192p.c 프로젝트: RAJU009F/my-work
main()
	{
	
		int n;
		printf("Enter N:\n\n");
		scanf("%d",&n);
		printP(n);
	
	
	
	}
예제 #20
0
uint8_t BayGPRSInterface::changeIPR(long baud) {
	_baud = baud;
	long t_baud[] = { baud, 9600, 38400, 57600 };
	for (uint8_t i = 0; i < 4; i++) {
		i_begin(t_baud[i]);
		skipChars();
		printP("AT"); //Will autoconfigure BAUD-Rate - Auto BAUD-Rate did not work with Sleep-Mode!
		delay(100);
		println();
		printP("AT+IPR=");
		println(_baud);
		if (!wait_forOK(200)) {
			i_end();
			i_begin(_baud);
			return 0;
		}
		i_end();
	}
	return 1;

}
예제 #21
0
uint8_t BayGPRSInterface::setClock(const char* time){
	init();
	printP("AT+CCLK=\"");
	print(time);
	printlnP("\"");
//	SerialprintP("setting Clock to:");
//	Serial.print(time);
//	if(wait_forOK(1000)) SerialprintlnP("failed");
//	else SerialprintlnP("ok");
//	return 1;
	return wait_forOK(1000);
}
예제 #22
0
파일: aWOT.cpp 프로젝트: cnc4less/aWOT
/* Sends default status and headers indicating a creation of an resource. */
void Response::created(const char *contentType) {
  P(successMsg1) =
  "HTTP/1.0 201 Created" CRLF
  "Access-Control-Allow-Origin: *" CRLF
  "Content-Type: ";

  printP (successMsg1);
  print(contentType);
  m_printCRLF();
  m_printHeaders();
  m_printCRLF();
}
예제 #23
0
uint8_t BayGPRSInterface::sendSMS(const String &phone, const String &sms){
	init();
	printlnP("AT+CMGF=1");//humanreadable SMS
	if(wait_forOK(2000)) return 2;
	printP("AT+CMGS=\"");//Target phone number
	print(phone);
	printlnP("\"");
	if(wait_for("> ",2000)) return 2;
	print(sms);
	write(0x1a);
	if(wait_for("+CMGS: ",2000)) return 2;
	return 0;
}
예제 #24
0
void WebServer::httpUnauthorized() {
	P(failMsg) = "HTTP/1.0 401 Authorization Required"
	CRLF
	WEBDUINO_SERVER_HEADER
	"Content-Type: text/html"
	CRLF
	"WWW-Authenticate: Basic realm=\""
	WEBDUINO_AUTH_REALM
	"\""
	CRLF
	CRLF WEBDUINO_AUTH_MESSAGE;

	printP (failMsg);
}
예제 #25
0
void WebServer::httpCreated(const char *contentType, const char *extraHeaders) {
	P(successMsg1) = "HTTP/1.0 201 CREATED"
	CRLF
	WEBDUINO_SERVER_HEADER
	"Access-Control-Allow-Origin: *"
	CRLF
	"Content-Type: ";

	printP (successMsg1);
	print(contentType);
	printCRLF();
	if (extraHeaders)
	print(extraHeaders);
	printCRLF();
}
예제 #26
0
unsigned char EthernetSup::available() 
{
  unsigned char ret = 0;
  
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client)
  {
    boolean currentLineIsBlank = true;
    boolean isReferer = false;
    while (client.connected()) 
    {
      if (client.available()) 
      {
        char c = client.read();

        if (!isReferer)
        {
          findButtonId(client, c);
          findDimmerValue(client, c);
          isReferer = checkReferer(client, c);
        }

        if (c == '\n' && currentLineIsBlank) 
        {
          // send a standard http response header
          printP(client, http200);
          printP(client, contenttype);
          printP(client, connkeep);  
          printP(client, doctype);

          // Verificando o tipo de botao
          if (buttonIdx != -1)
          {
            if (buttonType[buttonIdx] == ONOFF_BUTTON)
            {
              buttonState[buttonIdx] = (buttonState[buttonIdx] ? 0 : 1);
            }
            else if (buttonType[buttonIdx] == DIMMER_BUTTON)
            {
              if (dimmerDirection[buttonIdx] == 1)
              {
                if (dimmerValue[buttonIdx] + dimmerStep[buttonIdx] < 255)
                  dimmerValue[buttonIdx] += dimmerStep[buttonIdx];
                else
                  dimmerValue[buttonIdx] = 255;
              }
              else if (dimmerDirection[buttonIdx] == 2)
              {
                if (dimmerValue[buttonIdx] - dimmerStep[buttonIdx] > 0)
                  dimmerValue[buttonIdx] -= dimmerStep[buttonIdx];
                else
                  dimmerValue[buttonIdx] = 0;
              }
            }
          }
          
          printP(client, head_ini);
          printP(client, stylesheet);
          printP(client, head_fim);
          printP(client, div_ini);
          
          for (int i = 0; i < MAX_BUTTONS; i++)
          {
            if (buttonType[i] != -1)
            {
              if (buttonType[i] == DIMMER_BUTTON)
              {
                printP(client, dimmer_ini1);
                client.print(buttonText[i]);

                // converting to percent
                int val1 = map(dimmerValue[i], 0, 255, 0, 100);
                client.print(val1, DEC);
                client.print("%");

                printP(client, dimmer_ini2);

                // link do dimmer UP
                printP(client, btnid);
                client.print(buttonId[i], DEC);
                printP(client, dimmerdown);
                printP(client, dimmer_mid11); 
                printP(client, colorgreen);
                printP(client, dimmer_mid12);
                printP(client, dimmer_space);
                printP(client, dimmer_space);
                client.print("-");
                printP(client, dimmer_space);
                printP(client, dimmer_space);
                printP(client, dimmer_mid2); 

                // link do dimmer DOWN
                printP(client, btnid);
                client.print(buttonId[i], DEC);
                printP(client, dimmerup);
                printP(client, dimmer_mid21);
                printP(client, colorgreen);
                printP(client, dimmer_mid22);
                printP(client, dimmer_space);
                printP(client, dimmer_space);
                client.print("+");
                printP(client, dimmer_space);
                printP(client, dimmer_space);
                printP(client, dimmer_fim); 
              }
              else
              {
                printP(client, button_ini);

                // link do botao
                printP(client, btnid);
                client.print(buttonId[i], DEC);
                printP(client, button_mid1);
                
                // cor do botao
                if (buttonState[i] == 1)
                {
                  printP(client, colorred);
                }
                else
                {
                  printP(client, colorblue);
                }
                printP(client, button_mid2);

                // texto do botao
                client.print(buttonText[i]);
                printP(client, button_fim);  
              }
            }
          }
          printP(client, div_fim);
          
          ret = 1;
          break;
        }

      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
  }
  
  return ret;
}
예제 #27
0
uint8_t BayGPRSInterface::init(uint8_t unlock_only){
	uint8_t count=0;
	init_start:
	uint8_t i=0;
	printP("AT"); //Wake up
	delay(200);
	println();
	wait_forOK(1000);
	printlnP("AT"); //Check communication
	if(! wait_forOK(200)){
		//communication ok!
		printlnP("ATE0"); //Command echo off
		wait_forOK(500);
		printlnP("AT+CSCLK=2"); //Auto-Sleepmode
		wait_forOK(500);
		//Check PIN
		printlnP("AT+CPIN?");
		while(wait_forPGM(PSTR("+CPIN: "),5000,7,_base64buffer)){
			printlnP("AT");
			wait_forOK(200);
			printlnP("AT+CFUN=0");
			//Disable
			wait_forOK(10000);
			printlnP("AT+CFUN=1");
			//delay(2000);
			//Enable
			wait_forOK(10000);
			printlnP("AT");
			wait_forOK(200);
			printlnP("AT+CPIN?");
			i++;
			if(i>2) return 6;
		}
		if(_base64buffer[5]=='U') return 3; //SIM PUK
		if(_base64buffer[5]=='I'){ //SIM PIN
			printlnP("AT");
			wait_forOK(200);
			printP("AT+CPIN=\"");
			print(_pin);
			println("\"");
			if(wait_forOK(30000)) {
			  return 2; //Wrong PIN
			}
			wait_for("SMS Ready",(unlock_only?5000:60000));
		}
		//Return here - Moden will try to connect and attach in the background!
		if(unlock_only) return 0;
		// Waiting for Modem to Connect
		for(i=0;i<127;i++){
			if(isRegistered()) break;
			delay(500);
		}
		if(i==127) return 4;
		for(i=0;i<127;i++){
			if(isAttached()) break;
			delay(500);
		}
		if(i==127) return 5;
		return 0;
	}

	softReset();
	softSwitch();
	i_begin(_baud);
	skipChars();
	printP("AT"); //Will autoconfigure BAUD-Rate - Auto BAUD-Rate did not work with Sleep-Mode!
	delay(100);
	println();
	printP("AT+IPR=");
	println(_baud);
	wait_forOK(200);
	count++;

	if(count>1) return 1;
	goto init_start;
}
예제 #28
0
파일: Web.cpp 프로젝트: paulv888/Arduino
int printResponse(const byte clientsel, const byte deviceIdx, const bool getLen = false) {

	int len = 0;

	len += printP(clientsel, TXTSBRACKETOPEN, getLen);

	// DeviceID
	len += printP(clientsel, TXTQUOTE, getLen);
	len += printP(clientsel, TXTDEVICEID, getLen);
	printP(clientsel, TXTQUOTE, getLen);
	len += printP(clientsel, TXTCOLON, getLen);
	len += printP(clientsel, TXTQUOTE, getLen);
	len += printV(clientsel, mdevices[deviceIdx].getDeviceID(), getLen);
	len += printP(clientsel, TXTQUOTE, getLen);

	// CommandID
	len += printP(clientsel, TXTCOMMA, getLen);
	len += printP(clientsel, TXTQUOTE, getLen);
	len += printP(clientsel, TXTCOMMAND , getLen);
	len += printP(clientsel, TXTQUOTE, getLen);
	len += printP(clientsel, TXTCOLON, getLen);
	len += printP(clientsel, TXTQUOTE, getLen);
	len += printVstr(clientsel, mdevices[deviceIdx].getCommand(), getLen);
	len += printP(clientsel, TXTQUOTE, getLen);

	// Status
	len += printP(clientsel, TXTCOMMA, getLen);
	len += printP(clientsel, TXTQUOTE, getLen);
	len += printP(clientsel, TXTSTATUS , getLen);
	len += printP(clientsel, TXTQUOTE, getLen);
	len += printP(clientsel, TXTCOLON, getLen);
	len += printP(clientsel, TXTQUOTE, getLen);
	len += printVstr(clientsel, mdevices[deviceIdx].getStatus(), getLen);
	len += printP(clientsel, TXTQUOTE, getLen);

	// Value
	if (mdevices[deviceIdx].commandValue != 0) {
		len += printP(clientsel, TXTCOMMA, getLen);
		len += printP(clientsel, TXTQUOTE, getLen);
		len += printP(clientsel, TXTVALUE , getLen);
		len += printP(clientsel, TXTQUOTE, getLen);
		len += printP(clientsel, TXTCOLON, getLen);
		len += printP(clientsel, TXTQUOTE, getLen);
		len += printVstr(clientsel, mdevices[deviceIdx].getValue(), getLen);
		len += printP(clientsel, TXTQUOTE, getLen);
	}

	// InOut
	len += printP(clientsel, TXTCOMMA, getLen);
	len += printP(clientsel, TXTQUOTE, getLen);
	len += printP(clientsel, TXTINOUT , getLen);
	len += printP(clientsel, TXTQUOTE, getLen);
	len += printP(clientsel, TXTCOLON, getLen);
	len += printP(clientsel, TXTQUOTE, getLen);
	len += printVstr(clientsel, "1", getLen);
	len += printP(clientsel, TXTQUOTE, getLen);

	// ExtData
	if (printVstr(clientsel, mdevices[deviceIdx].getExtData(), true) > 0) {
		len += printP(clientsel, TXTCOMMA, getLen);
		len += printP(clientsel, TXTQUOTE, getLen);
		len += printP(clientsel, TXTEXTDATA , getLen);
		len += printP(clientsel, TXTQUOTE, getLen);
		len += printP(clientsel, TXTCOLON, getLen);
		len += printVstr(clientsel, mdevices[deviceIdx].getExtData(), getLen);
	}

	len += printP(clientsel, TXTSBRACKETCLOSE, getLen);

	if (DEBUG_WEB) dbg.println();

	return len+1;			// WHYYYYYYYYYYYY was not needed before refactor on 1/13/2015
}
예제 #29
0
파일: Web.cpp 프로젝트: paulv888/Arduino
void printPage(const byte clientsel, const byte deviceIdx) {

	// Index
	printP(clientsel, TXTIND);
	printP(clientsel, TXTCOLON);
	printV(clientsel, deviceIdx);
	printP(clientsel, ANBSP);

	// DeviceID
	printP(clientsel, TXTDEVICEID);
	printP(clientsel, TXTCOLON);
	printV(clientsel, mdevices[deviceIdx].getDeviceID());

	// Type
	printP(clientsel, ANBSP);
	if (mdevices[deviceIdx].getType() != 0) {
		printP(clientsel, TXTTYPE);
		printP(clientsel, TXTCOLON);
		printV(clientsel, mdevices[deviceIdx].getType());
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}

	// CommandID
	printP(clientsel, TXTCOMMAND );
	printP(clientsel, TXTCOLON);
	printVstr(clientsel, mdevices[deviceIdx].getCommand());

	// Status
	printP(clientsel, ANBSP);
	printP(clientsel, TXTSTATUS );
	printP(clientsel, TXTCOLON);
	printVstr(clientsel, mdevices[deviceIdx].getStatus());

	// Value
	if (mdevices[deviceIdx].commandValue != 0) {
		printP(clientsel, ANBSP);
		printP(clientsel, TXTVALUE );
		printP(clientsel, TXTCOLON);
		printVstr(clientsel, mdevices[deviceIdx].getValue());
	}

	// ExtData
	if (printVstr(clientsel, mdevices[deviceIdx].getExtData(), true) > 0) {
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
		printP(clientsel, TXTEXTDATA );
		printP(clientsel, TXTCOLON);
		printVstr(clientsel, mdevices[deviceIdx].getExtData());
	}


	printP(clientsel, AOPEN);
	printP(clientsel, BR);
	printP(clientsel, SLASH);
	printP(clientsel, ACLOSE);
	if (EEPROMReadInt(PARAMS(deviceIdx, 1)) !=  FFFF) {
		// Parameter 1
		printP(clientsel, TXTPAR1);
		printP(clientsel, TXTCOLON);
		printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 1)));
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}
	if (EEPROMReadInt(PARAMS(deviceIdx, 2)) !=  FFFF) {
		// Parameter 2
		printP(clientsel, TXTPAR2);
		printP(clientsel, TXTCOLON);
		printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 2)));
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}
	if (EEPROMReadInt(PARAMS(deviceIdx, 3)) !=  FFFF) {
		// Parameter 3
		printP(clientsel, TXTPAR3);
		printP(clientsel, TXTCOLON);
		printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 3)));
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}
	if (EEPROMReadInt(PARAMS(deviceIdx, 4)) !=  FFFF) {
		// Parameter 3
		printP(clientsel, TXTPAR4);
		printP(clientsel, TXTCOLON);
		printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 4)));
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}
	if (EEPROMReadInt(PARAMS(deviceIdx, 5)) !=  FFFF) {
		// Parameter 5
		printP(clientsel, TXTPAR5);
		printP(clientsel, TXTCOLON);
		printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 5)));
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}

	// In deviceIdx
	if (mdevices[deviceIdx].getInput() != 0) {
		printP(clientsel, TXTDEVIND);
		printP(clientsel, TXTCOLON);
		printV(clientsel, mdevices[deviceIdx].getInput());
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}

	// Pin
	if (mdevices[deviceIdx].getPin() != 0) {
		printP(clientsel, TXTPIN);
		printP(clientsel, TXTCOLON);
		printV(clientsel, mdevices[deviceIdx].getPin());
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}


	if (DEBUG_WEB) dbg.println();

	return;
}
예제 #30
0
파일: Web.cpp 프로젝트: paulv888/Arduino
void updateWeb(){
//if (DEBUG_MEMORY) printMem(" Web 1 ");

	client_recv = server.available();
	byte cptr;
	const char *slash = "/";
	const char *space = " ";

	if (client_recv) {
		while (client_recv.connected()) {
			if (client_recv.available()) {
				char c = client_recv.read();
				
				//read char by char HTTP request
				if (cptr < MAX_STRING_LEN-1) {
					temp[cptr++] = c;
				} else {
					cptr = 0;
				}
				temp[cptr] = '\0';

				//if HTTP request has ended
				if (c == '\n') {
					if (DEBUG_WEB) dbg.println(temp); //print to serial monitor for debuging

					if (strstr(temp,"GET / ")) { 		// Root requested, then give page, else try to parse post parameters
						if (DEBUG_MEMORY) printMem("WebG ");
	    	     		printP(COMMAND_IO_RECV, HEADER_OK);
						client_recv.println();
	    	     		printP(COMMAND_IO_RECV, HEADERPG2);
	    	     		printP(COMMAND_IO_RECV, HEADERPG3);

						for (byte deviceIdx = 0 ; deviceIdx < DEVICE_COUNT ;  deviceIdx++ ) {
							mdevices[deviceIdx].readInput();
		    	     		printP(COMMAND_IO_RECV, AOPEN);
		    	     		printP(COMMAND_IO_RECV, H3);					// <H3>
		    	     		printP(COMMAND_IO_RECV, ACLOSE);
							switch (deviceIdx) {
							case 0:
								printP(COMMAND_IO_RECV, DEV_0);
								break;
							case 1:
								printP(COMMAND_IO_RECV, DEV_1);
								break;
							case 2:
								printP(COMMAND_IO_RECV, DEV_2);
								break;
							case 3:
								printP(COMMAND_IO_RECV, DEV_3);
								break;
							case 4:
								printP(COMMAND_IO_RECV, DEV_4);
								break;
							case 5:
								printP(COMMAND_IO_RECV, DEV_5);
								break;
							case 6:
								printP(COMMAND_IO_RECV, DEV_6);
								break;
							case 7:
								printP(COMMAND_IO_RECV, DEV_7);
								break;
							case 8:
								printP(COMMAND_IO_RECV, DEV_8);
								break;
							case 9:
								printP(COMMAND_IO_RECV, DEV_9);
								break;
							}
		    	     		printP(COMMAND_IO_RECV, AOPEN);
		    	     		printP(COMMAND_IO_RECV, SLASH);
		    	     		printP(COMMAND_IO_RECV, H3);					// </H3>
		    	     		printP(COMMAND_IO_RECV, ACLOSE);
		    	     		printP(COMMAND_IO_RECV, AOPEN);
		    	     		printP(COMMAND_IO_RECV, SPAN);					// <SPAN>
		    	     		printP(COMMAND_IO_RECV, ACLOSE);

							printPage(COMMAND_IO_RECV, deviceIdx);

		    	     		printP(COMMAND_IO_RECV, AOPEN);
		    	     		printP(COMMAND_IO_RECV, BR);
		    	     		printP(COMMAND_IO_RECV, SLASH);
		    	     		printP(COMMAND_IO_RECV, ACLOSE);
		    	     		printP(COMMAND_IO_RECV, AOPEN);
		    	     		printP(COMMAND_IO_RECV, SLASH);
		    	     		printP(COMMAND_IO_RECV, SPAN);					// </SPAN>
		    	     		printP(COMMAND_IO_RECV, ACLOSE);
						}
						printP(COMMAND_IO_RECV, HEADERPGEND);
					} else {												// parse

						// parse url POST /d/203/c/23/v/12 HTTP/1.1
						if (DEBUG_MEMORY) printMem("WebP ");
						int deviceID = 0;
						int commandID = 0;
						int commandValue = 0;
						//temp = strtok(temp, " "); // POST /d/203/c/23/v/12 HTTP/1.1
						char * token = strtok(temp, space); // POST /d/203/c/23/v/12 HTTP/1.1
						byte deviceIdx = ERROR;
						byte result = ERROR;
						if (strcmp(token,"POST") == 0) {
							token = strtok(NULL, space); // Second part
							token = strtok(token, slash); // d
							token = strtok(NULL, slash); // deviceID
							deviceID = atoi(token);
							token = strtok(NULL, slash); // c
							token = strtok(NULL, slash); // commandID
							commandID = atoi(token);
							token = strtok(NULL, slash); // v
							if (token != NULL) {
								token = strtok(NULL, slash); // value ?
								commandValue = atoi(token);
							}
							deviceIdx = findDeviceIndex(deviceID);
							if (DEBUG_WEB) dbg.print("Idx ");
							if (DEBUG_WEB) dbg.println(deviceIdx);

							if (deviceIdx != ERROR) {
								result = deviceCommandHandler(deviceIdx, commandID, false, commandValue);
							} // return error?
						}

						if ( deviceIdx == ERROR || result == ERROR) {
							printP(COMMAND_IO_RECV, HEADER_ERR);
							client_recv.println();
							printP(COMMAND_IO_RECV, HEADER_ERR_MESS);
						} else {
							printP(COMMAND_IO_RECV, HEADER_OK);
							client_recv.println();
							if ( result == HNDLR_WRITE_RESULT) printResponse(COMMAND_IO_RECV, deviceIdx, false);
						}
					}
					delay(1);
					//stopping client
					client_recv.stop();
					//clearing string for next read
					cptr = 0;
					temp[cptr] = '\0';
				}
			}
		}
	}
}