/****************************************************************************** * @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; }
/*------------------------------------------------------------------------------------*/ 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(); }
/****************************************************************************** * @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; }
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, ®Value); 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; }