Ejemplo n.º 1
0
static void ICACHE_FLASH_ATTR tcp_receive_cb(void *arg, char *pData, unsigned short len) {
	HttpdConnData c;
	char bfr[100] = { 0 };
	struct espconn *conn = (struct espconn*) arg;

	httpdParseHeader(pData, &c);
	TESTP("URL=%s\n", c.url);
	if (httpSetupMode && os_strncmp(c.url, "/setup", 5) == 0) {
		if (httpdFindArg(c.getArgs, "Action", bfr, sizeof(bfr)) >= 0) {
			TESTP("Action=%s\n", bfr);
			if (os_strncmp(bfr, "Update", 6) == 0) {
				if (httpdFindArg(c.getArgs, "MQTThost", bfr, sizeof(bfr)) >= 0) {
					TESTP("MQTThost=%s\n", bfr);
					if (7 < os_strlen(bfr) && os_strlen(bfr) < sizeof(sysCfg.mqtt_host)) {
						os_strcpy(sysCfg.mqtt_host, bfr);
					}
				}
				if (httpdFindArg(c.getArgs, "MQTTport", bfr, sizeof(bfr)) >= 0) {
					TESTP("MQTTport=%s\n", bfr);
					if (1 <= os_strlen(bfr) && os_strlen(bfr) <= 4) {
						sysCfg.mqtt_port = atoi(bfr);
					}
				}
				if (httpdFindArg(c.getArgs, "MQTTuser", bfr, sizeof(bfr)) >= 0) {
					TESTP("MQTTuser=%s\n", bfr);
					if (0 <= os_strlen(bfr) && os_strlen(bfr) < sizeof(sysCfg.mqtt_user)) {
						os_strcpy(sysCfg.mqtt_user, bfr);
					}
				}
				if (httpdFindArg(c.getArgs, "MQTTpass", bfr, sizeof(bfr)) >= 0) {
					TESTP("MQTTpass=%s\n", bfr);
					if (0 <= os_strlen(bfr) && os_strlen(bfr) < sizeof(sysCfg.mqtt_pass)) {
						os_strcpy(sysCfg.mqtt_pass, bfr);
					}
				}
				if (httpdFindArg(c.getArgs, "DevPrefix", bfr, sizeof(bfr)) >= 0) {
					TESTP("DevPrefix=%s\n", bfr);
					if (2 <= os_strlen(bfr) && os_strlen(bfr) < sizeof(sysCfg.deviceID_prefix)) {
						os_strcpy(sysCfg.deviceID_prefix, bfr);
						os_sprintf(sysCfg.device_id, "%s%lx", sysCfg.deviceID_prefix, system_get_chip_id());
					}
				}
				if (httpdFindArg(c.getArgs, "reboot", bfr, sizeof(bfr)) >= 0) {
					TESTP("reboot=%s\n", bfr);
					if (strcmp(bfr, "yes") == 0) {
						reboot = true;
					}
				}
				CFG_dirty();
			}
		}
		replyOK(conn);
	} else {
		replyFail(conn);
	}
}
Ejemplo n.º 2
0
void avrisp(int ReceivedByte){
	// is pmode active?
	if (ram.isp.pmode) LEDs_TurnOnLEDs(LEDS_PMODE);
	else LEDs_TurnOffLEDs(LEDS_PMODE);

	// is there an error?
	if (ram.isp.error) LEDs_TurnOnLEDs(LEDS_ERR);
	else LEDs_TurnOffLEDs(LEDS_ERR);

	// read in bytes from the CDC interface
	if (!(ReceivedByte < 0)){
		switch (ReceivedByte) {
		case STK_GET_SYNC:
			ram.isp.error = 0;
			replyOK();
			break;
		case STK_GET_SIGNON:
			if (getch() == CRC_EOP) {
				sendCDCbyte(STK_INSYNC);
				sendCDCbyte('A');
				sendCDCbyte('V');
				sendCDCbyte('R');
				sendCDCbyte(' ');
				sendCDCbyte('I');
				sendCDCbyte('S');
				sendCDCbyte('P');
				sendCDCbyte(STK_OK);
			}
			break;
		case STK_GET_PARM:
			get_parameters(getch());
			break;
		case STK_SET_PARM:
			set_parameters();
			replyOK();
			break;
		case STK_SET_PARM_EXT: // extended parameters - ignore for now
			fill(5);
			replyOK();
			break;

		case STK_PMODE_START:
			start_pmode();
			replyOK();
			break;
		case STK_SET_ADDR:
			ram.isp._addr = getch();
			ram.isp._addr += 256 * getch();
			replyOK();
			break;

		case STK_PROG_FLASH:
			//uint8_t low = getch();
			getch();
			//uint8_t high = getch();
			getch();
			replyOK();
			break;
		case STK_PROG_DATA:
			//uint8_t data = getch();
			getch();
			replyOK();
			break;

		case STK_PROG_PAGE:
			program_page();
			break;

		case STK_READ_PAGE:
			read_page();
			break;

		case STK_UNIVERSAL:
			universal();
			break;
		case STK_PMODE_END:
			ram.isp.error = 0;
			end_pmode();
			replyOK();
			break;

		case STK_READ_SIGN:
			read_signature();
			break;

			// expecting a command, not CRC_EOP
			// this is how we can get back in sync
		case CRC_EOP:
			ram.isp.error++;
			sendCDCbyte(STK_NOSYNC);
			break;

			// anything else we will return STK_UNKNOWN
		default:
			ram.isp.error++;
			if (CRC_EOP == getch())
				sendCDCbyte(STK_UNKNOWN);
			else
				sendCDCbyte(STK_NOSYNC);
		}
	}

}