Ejemplo n.º 1
0
/******************************************************************************
  * @brief  参数模块从eeprom中读取
  * @param  eeAddr:EE中存储参数的首地址
  			destStr:读出参数存放的首地址,这里按照字节读取
			numByte:读取参数的字节长度
  * @retval TRUE:成功  FALSE:失败 
******************************************************************************/
Std_ReturnType Para_Read_block(INT32U eeAddr,INT8U * destStr,INT32U numByte)
{
	memset(destStr,0, numByte);
	EE_read(eeAddr,(INT8U*)destStr,numByte);
	if(*(destStr + numByte -1) == Para_Calc_checksum(destStr,numByte-1))
		return TRUE;
	else
		return FALSE;
}
Ejemplo n.º 2
0
/*------------------------------------------------------------------------------------*/
void pv_cmdRdEE(void)
{
	// read ee address length
	// address: argv[2]
	// length: argv[3]

s08 retS = FALSE;

	memset(cmd_printfBuff, '\0', sizeof(cmd_printfBuff));
	retS = EE_read( (u16)(atoi(argv[2])), cmd_printfBuff, atoi(argv[3]) );
	if ( retS ) {
		// El string leido lo devuelve en cmd_printfBuff por lo que le agrego el CR.
		snprintf_P( &cmd_printfBuff[atoi(argv[3])], sizeof(cmd_printfBuff),PSTR( "\r\n\0"));
		FreeRTOS_write( &pdUART1, cmd_printfBuff, sizeof(cmd_printfBuff) );
	}
	retS ? pv_snprintfP_OK() : 	pv_snprintfP_ERR();
}
Ejemplo n.º 3
0
/******************************************************************************
  * @brief  参数模块写入eeprom中
  * @param  eeAddr:EE中存储参数的首地址
  			destStr:写入参数存放的首地址,这里按照字节写入
			numByte:写入参数的字节长度
  * @retval TRUE:成功  FALSE:失败
******************************************************************************/
Std_ReturnType Para_Save_block(INT32U eeAddr,INT8U * sourceStr,INT32U numByte)
{		
	Std_ReturnType sta;
	INT8U	chk,echk;

	chk = Para_Calc_checksum(sourceStr,numByte-1);
	*(sourceStr + numByte -1) = chk;
	sta = EE_write(eeAddr,(INT32U*)sourceStr,numByte);
	if(sta != TRUE)
		return FALSE;
	if(EE_read((eeAddr+numByte-1),&echk,1)==TRUE)
	{
		if(chk==echk)
			return TRUE;
		else
			return FALSE;	
	}	
	else
		return FALSE;
}
Ejemplo n.º 4
0
void sp5K_readFunction(void)
{

u08 devId, address, regValue, pin, channel, pcbChannel, adcChannel;
u08 length = 10;
s08 retS;
u08 mcp_address;
RtcTimeType rtcDateTime;
u08 i;
u16 adcRetValue;
char eeRdBuffer[EERDBUFLENGHT];
u16 eeAddress;
u08 pos;
frameDataType rdFrame;
u16 recCount;
double I,M,D;
u08 bdGetStatus;
u16 rcdIndex;
u08 b[9];

	memset( cmd_printfBuff, NULL, CHAR128);
	makeargv();

	// RTC
	// Lee la hora del RTC.
	if (!strcmp_P( strupr(argv[1]), PSTR("RTC\0"))) {
		retS = rtcGetTime(&rtcDateTime);
		if (retS ) {
			pos = snprintf_P( &cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("%02d/%02d/%04d "),rtcDateTime.day,rtcDateTime.month, rtcDateTime.year );
			pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("%02d:%02d:%02d\r\n\0"),rtcDateTime.hour,rtcDateTime.min, rtcDateTime.sec );
		} else {
			snprintf_P( &cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// DCD
	if (!strcmp_P( strupr(argv[1]), PSTR("DCD\0"))) {
		retS = MCP_queryDcd(&pin);
		if (retS ) {
			pos = snprintf_P( &cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			if ( pin == 1 ) { pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("DCD ON\r\n\0")); }
			if ( pin == 0 ) { pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("DCD OFF\r\n\0")); }
		} else {
			snprintf_P( &cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// RI
	if (!strcmp_P( strupr(argv[1]), PSTR("RI\0"))) {
		retS = MCP_queryRi(&pin);
		if (retS ) {
			pos = snprintf_P( &cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			if ( pin == 1 ) { pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("RI ON\r\n\0")); }
			if ( pin == 0 ) { pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("RI OFF\r\n\0")); }
		} else {
			snprintf_P( &cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// DIN0
	if (!strcmp_P( strupr(argv[1]), PSTR("DIN0\0"))) {
		retS = MCP_queryDin0(&pin);
		if (retS ) {
			pos = snprintf_P( &cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("DIN0 %d\r\n\0"), pin);
		} else {
			snprintf_P( &cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// DIN1
	if (!strcmp_P( strupr(argv[1]), PSTR("DIN1\0"))) {
		retS = MCP_queryDin1(&pin);
		if (retS ) {
			pos = snprintf_P( cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("DIN1 %d\r\n\0"), pin);
		} else {
			snprintf_P( cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(cmd_printfBuff);
		return;
	}

	// TERMSW
	if (!strcmp_P( strupr(argv[1]), PSTR("TERMSW\0"))) {
		retS = MCP_queryTermPwrSw(&pin);
		if (retS ) {
			pos = snprintf_P( cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			if ( pin == 1 ) { pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("TERMSW ON\r\n\0")); }
			if ( pin == 0 ) { pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("TERMSW OFF\r\n\0")); }
		} else {
			snprintf_P( cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// MCP
	// read mcp 0|1|2 addr
	if (!strcmp_P( strupr(argv[1]), PSTR("MCP\0"))) {
		devId = atoi(argv[2]);
		address = atoi(argv[3]);

		if ( devId == 0 ) { mcp_address = MCP_ADDR0; }
		if ( devId == 1 ) { mcp_address = MCP_ADDR1; }
		if ( devId == 2 ) { mcp_address = MCP_ADDR2; }

		retS = MCP_read( address, mcp_address, 1, &regValue);
		if (retS ) {
			// Convierto el resultado a binario.
			pos = snprintf_P( cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			strcpy(b,byte_to_binary(regValue));
			pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("mcp %d: reg=[%d] data=[0X%03x] [%s] \r\n\0"),devId, address,regValue, b);
		} else {
			snprintf_P( &cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(&cmd_printfBuff);
		return;
	}
	// *****************************************************************************************************
	// SOLO PARA USO EN MODO SERVICE.
	if ( systemVars.wrkMode != WK_SERVICE) {
		snprintf_P( &cmd_printfBuff,CHAR128,PSTR("WARNING: Debe pasar a modo SERVICE !!!\r\n"));
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// ADC
	// read adc channel
	// El canal es de 0..3/0..7 y representa el canal fisico en el conector, NO
	// EL PROPIO CANAL DEL A/D

	if (!strcmp_P( strupr(argv[1]), PSTR("ADC\0"))) {

		pcbChannel = atoi(argv[2]);

		if ( NRO_CHANNELS == 3 ) {
			switch (pcbChannel ) {
			case 0:
				adcChannel = 3;
				break;
			case 1:
				adcChannel = 5;
				break;
			case 2:
				adcChannel = 7;
				break;
			case 3:
				adcChannel = 1;		// Bateria
				break;
			}
		}

		retS = ADS7828_convert( adcChannel, &adcRetValue );

		if (retS ) {
			pos = snprintf_P( &cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("adc_%d(%d)=[%d]\r\n\0"),pcbChannel, adcChannel, adcRetValue);
		} else {
			snprintf_P( &cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// FRAME
	// Lee todos los canales y presenta el frame.
	if (!strcmp_P( strupr(argv[1]), PSTR("FRAME\0"))) {
		SIGNAL_tkDataReadFrame();
		return;
	}

	// EEPROM
	// read ee addr length
	if (!strcmp_P( strupr(argv[1]), PSTR("EE\0"))) {
		eeAddress = atol(argv[2]);
		length = atoi(argv[3]);
		// Buffer control.
		if (length > EERDBUFLENGHT) {
			length = EERDBUFLENGHT;
		}
		retS = EE_read( eeAddress, length, &eeRdBuffer);
		if (retS ) {
			pos = snprintf_P( &cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("addr=[%d] data=[%s]\r\n\0"),eeAddress,eeRdBuffer);
		} else {
			snprintf_P( &cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// MEMORY DUMP
	if (!strcmp_P( strupr(argv[1]), PSTR("MEMORY\0"))) {

		recCount = 0;

		for (;;) {

			vTaskDelay( (portTickType)(50 / portTICK_RATE_MS) );
			rcdIndex = BD_getRDptr();
			bdGetStatus =  BD_get( &rdFrame, rcdIndex);
			// BD vacia
			if (bdGetStatus == 0) {
				break;
			}

			recCount++;

			// Armo el frame
			memset( cmd_printfBuff, NULL, CHAR128);
			pos = 0;
			pos = snprintf_P( &cmd_printfBuff, CHAR128, PSTR("(%d/%d)>" ), recCount, rcdIndex);
			pos += snprintf_P( &cmd_printfBuff[pos], CHAR128,PSTR( "%04d%02d%02d,"),rdFrame.rtc.year,rdFrame.rtc.month, rdFrame.rtc.day );
			pos += snprintf_P( &cmd_printfBuff[pos], CHAR128, PSTR("%02d%02d%02d,"),rdFrame.rtc.hour,rdFrame.rtc.min, rdFrame.rtc.sec );
			// Valores analogicos
			for ( channel = 0; channel < NRO_CHANNELS; channel++) {
				pos += snprintf_P( &cmd_printfBuff[pos], CHAR128, PSTR("%s=%.2f"),systemVars.aChName[channel],rdFrame.analogIn[channel] );
				pos += snprintf_P( &cmd_printfBuff[pos], CHAR128, PSTR(","));
			}
			// Valores digitales.
			pos += snprintf_P( &cmd_printfBuff[pos], CHAR128, PSTR("%s=%.2f,"), systemVars.dChName[0], rdFrame.din0_pCount );
			pos += snprintf_P( &cmd_printfBuff[pos], CHAR128,PSTR( "%s=%.2f"), systemVars.dChName[1], rdFrame.din0_pCount );
#ifdef CHANNELS_3
			// Bateria
			pos += snprintf_P( &cmd_printfBuff[pos], CHAR128, PSTR(",bt=%.2f"), rdFrame.batt );
#endif
			pos += snprintf_P( &cmd_printfBuff[pos], CHAR128,PSTR("<\r\n\0") );

			// Imprimo
			sp5K_printStr(&cmd_printfBuff);

			BD_delete(-1);
			taskYIELD();
		}

		snprintf_P( &cmd_printfBuff,CHAR128,PSTR("OK\r\n\0"));
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// CMD NOT FOUND
	if (xSemaphoreTake( sem_CmdUart, MSTOTAKECMDUARTSEMPH ) == pdTRUE ) {
		rprintfProgStrM(CMD_UART, "ERROR\r\n");
		rprintfProgStrM(CMD_UART, "CMD NOT DEFINED\r\n");
		xSemaphoreGive( sem_CmdUart );
	}
	return;


}