void CExpressivePixelsApp::value()

in Firmware/ExpressivePixelsCore/EPXApp_JSON.cpp [73:269]


void CExpressivePixelsApp::value(char *value)
{
	//DEBUGLOGLN("JSON key %s", m_PayloadJSONListnerTracking_Key.c_str());
	if(!m_bAuthenticated)
	{
		if (stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *) JSONKEY_AUTHENTICATIONRESPONSE) == 0)
			Authenticate(epx_strupr(value));
	}
	else
	{
		m_PayloadJSONListnerTracking_Value = value;
		if (stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_CONSOLECOMMAND) == 0)
			m_TTYValue = m_PayloadJSONListnerTracking_Value;
		/**** COMMAND Key ****/	
		else if(stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_COMMAND) == 0 ||
			stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_CMD) == 0)
		{
			if (stricmp(m_PayloadJSONListnerTracking_Value.c_str(), (const char *)COMMAND_CONSOLE_COMMAND) == 0)
				m_PayloadActiveCommand = PAYLOADCOMMAND_TTY;
			else if (stricmp(m_PayloadJSONListnerTracking_Value.c_str(), (const char *)COMMAND_CLEAR_DISPLAY) == 0)
				m_PayloadActiveCommand = PAYLOADCOMMAND_CLEARDISPLAY;
			else if (stricmp(m_PayloadJSONListnerTracking_Value.c_str(), (const char *)COMMAND_SETDEVICENAME) == 0)
				m_PayloadActiveCommand = PAYLOADCOMMAND_SETDEVICENAME;			
			else if (stricmp(m_PayloadJSONListnerTracking_Value.c_str(), (const char *)COMMAND_SETKEY) == 0)
				m_PayloadActiveCommand = PAYLOADCOMMAND_SETKEY;
			else if (stricmp(m_PayloadJSONListnerTracking_Value.c_str(), (const char *)COMMAND_CONNECT_HEADERRQ) == 0)
				m_PayloadActiveCommand = PAYLOADCOMMAND_CONNECT_HEADERRQ;
			else if (stricmp(m_PayloadJSONListnerTracking_Value.c_str(), (const char *)COMMAND_ENUMERATE_ANIMATIONS) == 0 ||
					 stricmp(m_PayloadJSONListnerTracking_Value.c_str(), (const char *)COMMAND_ENUMERATE_ANIMATIONS2) == 0)
				m_PayloadActiveCommand = PAYLOADCOMMAND_ENUMERATE_ANIMATIONS;
			else if (stricmp(m_PayloadJSONListnerTracking_Value.c_str(), (const char *)COMMAND_PREVIEW_COLOR) == 0)
				m_PayloadActiveCommand = PAYLOADCOMMAND_PREVIEW_COLOR;
			else if (stricmp(m_PayloadJSONListnerTracking_Value.c_str(), (const char *)COMMAND_DISPLAY_BRIGHTNESS) == 0)
				m_PayloadActiveCommand = PAYLOADCOMMAND_DISPLAY_BRIGHTNESS;
			else if (stricmp(m_PayloadJSONListnerTracking_Value.c_str(), (const char *)COMMAND_UPLOAD_FRAME8) == 0)
				m_PayloadActiveCommand = PAYLOADCOMMAND_UPLOAD_FRAME8;
			else if (stricmp(m_PayloadJSONListnerTracking_Value.c_str(), (const char *)COMMAND_UPLOAD_ANIMATION8) == 0)
				m_PayloadActiveCommand = PAYLOADCOMMAND_UPLOAD_ANIMATION8;
			else if (stricmp(m_PayloadJSONListnerTracking_Value.c_str(), (const char *)COMMAND_UPLOAD_PIXEL8) == 0)
				m_PayloadActiveCommand = PAYLOADCOMMAND_UPLOAD_PIXEL8;
			else if (stricmp(m_PayloadJSONListnerTracking_Value.c_str(), (const char *)COMMAND_STORE_ANIMATION8) == 0)
			{
				_transStart = millis();
				m_PayloadActiveCommand = PAYLOADCOMMAND_STORE_ANIMATION8;
			}
			else if (stricmp(m_PayloadJSONListnerTracking_Value.c_str(), (const char *)COMMAND_REMOVE_ANIMATION) == 0)
				m_PayloadActiveCommand = PAYLOADCOMMAND_REMOVE_ANIMATION;
			else if (stricmp(m_PayloadJSONListnerTracking_Value.c_str(), (const char *)COMMAND_PLAY_STORED_ANIMATION8) == 0)
				m_PayloadActiveCommand = PAYLOADCOMMAND_PLAY_STORED_ANIMATION8;		
			else if (stricmp(m_PayloadJSONListnerTracking_Value.c_str(), (const char *)COMMAND_PLAY_STORED_ANIMATION8_BYNAME) == 0)
				m_PayloadActiveCommand = PAYLOADCOMMAND_PLAY_STORED_ANIMATION8_BYNAME;
			else if (stricmp(m_PayloadJSONListnerTracking_Value.c_str(), (const char *)COMMAND_REQUEST_THUMBNAIL) == 0)
				m_PayloadActiveCommand = PAYLOADCOMMAND_REQUEST_THUMBNAIL;		
			memset(m_szPayloadCommandValue, 0x00, sizeof(m_szPayloadCommandValue));
		}
		else if (strcasecmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_TRANSACTIONID) == 0)
			m_PayloadActiveTransactionID = atoi(value);
		else if (strcasecmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_DEVICENAME) == 0)
			strncpy(m_szPayloadCommandValue, value, MAX_COMMAND_VALUE);		
		else if(strcasecmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_KEY) == 0)
			strncpy(m_szPayloadCommandValue, value, MAX_COMMAND_VALUE);
		else if (m_PayloadActiveCommand == PAYLOADCOMMAND_DISPLAY_BRIGHTNESS && stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_BRIGHTNESS) == 0)
			m_nPayloadCommandValue = atoi(m_PayloadJSONListnerTracking_Value.c_str());
		else if (m_PayloadActiveCommand == PAYLOADCOMMAND_PREVIEW_COLOR && stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_PREVIEWCOLOR) == 0 && strlen(value) == 6)
			strncpy(m_szPayloadCommandValue, value, epxmin(strlen(value), MAX_COMMAND_VALUE - 1));
		else if ((m_PayloadActiveCommand == PAYLOADCOMMAND_REMOVE_ANIMATION || m_PayloadActiveCommand == PAYLOADCOMMAND_REQUEST_THUMBNAIL) && stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_ID) == 0)
			strncpy(m_szPayloadCommandValue, value, epxmin(strlen(value), MAX_COMMAND_VALUE - 1));
		else if (m_PayloadActiveCommand == PAYLOADCOMMAND_PLAY_STORED_ANIMATION8 || m_PayloadActiveCommand == PAYLOADCOMMAND_PLAY_STORED_ANIMATION8_BYNAME)
		{
			if (stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *) JSONKEY_FORCEDLOOPCOUNT) == 0)
				m_nPayloadCommandValue = atoi(value);
			if (stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *) JSONKEY_RUNUNTILCOMPLETE) == 0)
				m_nPayloadCommandValue2 = atoi(value);
			else
			{
				if (m_PayloadActiveCommand == PAYLOADCOMMAND_PLAY_STORED_ANIMATION8 && stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_ID) == 0)
					strncpy(m_szPayloadCommandValue, value, epxmin(strlen(value), MAX_COMMAND_VALUE - 1));	
				else if (m_PayloadActiveCommand == PAYLOADCOMMAND_PLAY_STORED_ANIMATION8_BYNAME && stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_NAME) == 0)
					strncpy(m_szPayloadCommandValue, value, epxmin(strlen(value), MAX_COMMAND_VALUE - 1));
			}
		}
		else if (m_PayloadActiveCommand == PAYLOADCOMMAND_UPLOAD_FRAME8)
		{
			if (stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_PIXELSHEXLENGTH) == 0)
			{
				m_StagedAnimation.framesHexLength = atoi(value);
				m_StagedAnimation.Meta.cbFrames = m_StagedAnimation.framesHexLength / 2;
				m_StagedAnimation.pRAMFrames = (uint8_t *)TMALLOC(m_StagedAnimation.Meta.cbFrames);
				m_PayloadParseCommandSequenceFillPos = 0;
			}
			else if (stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_PIXELSHEX) == 0)
			{			
				m_PayloadParseCommandSequenceFillPos = 0;
				m_CAppStorage.SequenceWriteCacheFlush(&m_StagedAnimation);
			}
		}		
		else if (m_PayloadActiveCommand == PAYLOADCOMMAND_UPLOAD_ANIMATION8 || m_PayloadActiveCommand == PAYLOADCOMMAND_STORE_ANIMATION8)
		{		
			//DEBUGLOGLN("KEY %s VALUE %s", m_PayloadJSONListnerTracking_Key.c_str(), value);
			CompletionTrackingEnable();
			if (stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_ID) == 0)
			{
				// Play Now gets unique zero ID
				if(m_PayloadActiveCommand == PAYLOADCOMMAND_UPLOAD_ANIMATION8)
					strcpy(m_StagedAnimation.szID, (char *) PLAYNOWID);
				else
				// ID opens the file	
					strcpy(m_StagedAnimation.szID, value);

				uint8_t guidLen = strlen(m_StagedAnimation.szID);
				m_CAppStorage.SequenceWriteSection(&m_StagedAnimation, SEQUENCETOKEN_GUIDLEN, &guidLen, sizeof(guidLen));
				m_CAppStorage.SequenceWriteSection(&m_StagedAnimation, SEQUENCETOKEN_GUID, (uint8_t *) m_StagedAnimation.szID, guidLen);
			}
			else
			{
				// Only write if the file has been opened
				if(m_StagedAnimation.pFile != NULL)
				{
					if (stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_PALETTEHEXLENGTH) == 0)
					{
						m_StagedAnimation.palleteHexLength = atoi(value);
						m_StagedAnimation.Meta.cbPallete = (m_StagedAnimation.palleteHexLength / 3) / 2;
						m_CAppStorage.SequenceWriteSection(&m_StagedAnimation, SEQUENCETOKEN_PALLETESIZE, (uint8_t *) &m_StagedAnimation.Meta.cbPallete, sizeof(m_StagedAnimation.Meta.cbPallete));
						m_CAppStorage.SequenceWriteToken(&m_StagedAnimation, SEQUENCETOKEN_PALLETEBYTES);
						m_PayloadParsePaletteBytePos = 0;
						m_PayloadParseCommandSequenceFillPos = 0;
					}
					else if (stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_LOOPCOUNT) == 0)
					{
						m_StagedAnimation.Meta.loopCount = atoi(value);					
						m_CAppStorage.SequenceWriteSection(&m_StagedAnimation, SEQUENCETOKEN_LOOPCOUNT, &m_StagedAnimation.Meta.loopCount, sizeof(m_StagedAnimation.Meta.loopCount));
					}
					else if (stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_FRAMERATE) == 0)
					{
						m_StagedAnimation.Meta.frameRate = atoi(value);
						m_CAppStorage.SequenceWriteSection(&m_StagedAnimation, SEQUENCETOKEN_FRAMERATE, &m_StagedAnimation.Meta.frameRate, sizeof(m_StagedAnimation.Meta.frameRate));
					}
					else if (stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_FRAMECOUNT) == 0)
					{
						m_StagedAnimation.Meta.frameCount = atoi(value);
						m_CAppStorage.SequenceWriteSection(&m_StagedAnimation, SEQUENCETOKEN_FRAMECOUNT, (uint8_t *) &m_StagedAnimation.Meta.frameCount, sizeof(m_StagedAnimation.Meta.frameCount));
					}
					else if (stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_UTCTIMESTAMP) == 0)
					{
						m_StagedAnimation.utcTimeStamp = atoi(value);
						m_CAppStorage.SequenceWriteSection(&m_StagedAnimation, SEQUENCETOKEN_UTCTIMESTAMP, (uint8_t *) &m_StagedAnimation.utcTimeStamp, sizeof(m_StagedAnimation.utcTimeStamp));
					}
					else if (stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_NAME) == 0)
					{
						uint8_t nameLen = strlen(value);
					
						m_StagedAnimation.pszName = (char *) TMALLOC(nameLen + 1);
						strcpy(m_StagedAnimation.pszName, value);
						m_CAppStorage.SequenceWriteSection(&m_StagedAnimation, SEQUENCETOKEN_NAMELEN, &nameLen, sizeof(nameLen));
						m_CAppStorage.SequenceWriteSection(&m_StagedAnimation, SEQUENCETOKEN_NAME, (uint8_t *) value, nameLen);
					}		
					else if (stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_FRAMESHEXLENGTH) == 0)
					{
						m_StagedAnimation.framesHexLength = atoi(value);
						m_StagedAnimation.Meta.cbFrames = m_StagedAnimation.framesHexLength / 2;
						m_CAppStorage.SequenceWriteSection(&m_StagedAnimation, SEQUENCETOKEN_FRAMESBYTELEN, (uint8_t *) &m_StagedAnimation.Meta.cbFrames, sizeof(m_StagedAnimation.Meta.cbFrames));
						m_CAppStorage.SequenceWriteToken(&m_StagedAnimation, SEQUENCETOKEN_FRAMESBYTES);
						m_PayloadParseCommandSequenceFillPos = 0;
					}
					else if (stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_FRAMESHEX) == 0)
					{
						m_PayloadParseCommandSequenceFillPos = 0;
						m_CAppStorage.SequenceWriteCacheFlush(&m_StagedAnimation);
						_transEnd = millis();
						DEBUGLOGLN("TRANSTIME %d", _transEnd - _transStart);
					}
				}
			}		
		}
		else if (m_PayloadActiveCommand == PAYLOADCOMMAND_UPLOAD_PIXEL8)
		{
			if (stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_PIXELINDEX) == 0)
				m_nPayloadCommandValue = atoi(value);
			else if (stricmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_PIXELHEX) == 0)
				strncpy(m_szPayloadCommandValue, value, epxmin(strlen(value), MAX_COMMAND_VALUE - 1));
		}	
		/***********************************/
		/* Simple String Protocol commands */
		/***********************************/
		else if(strcasecmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_PLAY) == 0)
		{
			m_PayloadActiveCommand = PAYLOADCOMMAND_PLAY_STORED_ANIMATION8_BYNAME;
			strncpy(m_szPayloadCommandValue, value, epxmin(strlen(value), MAX_COMMAND_VALUE - 1));			
		}		
		else if(strcasecmp(m_PayloadJSONListnerTracking_Key.c_str(), (const char *)JSONKEY_BRIGHTNESS) == 0)
		{
			m_PayloadActiveCommand = PAYLOADCOMMAND_DISPLAY_BRIGHTNESS;
			m_nPayloadCommandValue = atoi(m_PayloadJSONListnerTracking_Value.c_str());
		}

	}
}