void sp5K_writeFunction(void) { u08 dateTimeStr[11]; char tmp[3]; RtcTimeType rtcDateTime; char *p; u08 devId, address, regValue; u08 value = 0; s08 retS = FALSE; u08 mcp_address = 0; u08 length = 0; u08 *nro = NULL; u08 *msg = NULL; u08 timeout; char phase; u08 chip; u16 sleepTime; memset( cmd_printfBuff, NULL, CHAR128); makeargv(); // Parametros: if (!strcmp_P( strupr(argv[1]), PSTR("PARAM\0"))) { // PASSWD if (!strcmp_P( strupr(argv[2]), PSTR("PASSWD\0"))) { memset(systemVars.passwd, '\0', sizeof(systemVars.passwd)); memcpy(systemVars.passwd, argv[3], sizeof(systemVars.passwd)); systemVars.passwd[PASSWD_LENGTH - 1] = '\0'; pv_snprintfP_OK(); return; } // APN if (!strcmp_P( strupr(argv[2]), PSTR("APN\0"))) { memset(systemVars.apn, '\0', sizeof(systemVars.apn)); memcpy(systemVars.apn, argv[3], sizeof(systemVars.apn)); systemVars.apn[APN_LENGTH - 1] = '\0'; pv_snprintfP_OK(); return; } // SERVER PORT if (!strcmp_P( strupr(argv[2]), PSTR("PORT\0"))) { memset(systemVars.serverPort, '\0', sizeof(systemVars.serverPort)); memcpy(systemVars.serverPort, argv[3], sizeof(systemVars.serverPort)); systemVars.serverPort[PORT_LENGTH - 1] = '\0'; pv_snprintfP_OK(); return; } // SERVER IP if (!strcmp_P( strupr(argv[2]), PSTR("IP\0"))) { memset(systemVars.serverAddress, '\0', sizeof(systemVars.serverAddress)); memcpy(systemVars.serverAddress, argv[3], sizeof(systemVars.serverAddress)); systemVars.serverAddress[IP_LENGTH - 1] = '\0'; pv_snprintfP_OK(); return; } // SERVER SCRIPT // write param script cgi-bin/oseApp/scripts/oseSp5K001.pl if (!strcmp_P( strupr(argv[2]), PSTR("SCRIPT\0"))) { memset(systemVars.serverScript, '\0', sizeof(systemVars.serverScript)); memcpy(systemVars.serverScript, argv[3], sizeof(systemVars.serverScript)); systemVars.serverScript[SCRIPT_LENGTH - 1] = '\0'; pv_snprintfP_OK(); return; } // MagP ( magnitud por pulso ) if (!strcmp_P( strupr(argv[2]), PSTR("MAGP\0"))) { retS = setParamMagP(argv[3], argv[4]); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // dname X ( digital name X ) if (!strcmp_P( strupr(argv[2]), PSTR("DNAME\0"))) { retS = setParamDname(argv[3], argv[4]); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // aname X ( analog name X ) if (!strcmp_P( strupr(argv[2]), PSTR("ANAME\0"))) { retS = setParamAname(argv[3], argv[4]); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // imin X if (!strcmp_P( strupr(argv[2]), PSTR("IMIN\0"))) { retS = setParamImin(argv[3], argv[4]); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // imax X if (!strcmp_P( strupr(argv[2]), PSTR("IMAX\0"))) { retS = setParamImax(argv[3], argv[4]); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // Mmin X if (!strcmp_P( strupr(argv[2]), PSTR("MMIN\0"))) { retS = setParamMmin(argv[3], argv[4]); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // Mmax X if (!strcmp_P( strupr(argv[2]), PSTR("MMAX\0"))) { retS = setParamMmax(argv[3], argv[4]); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // offmmin X if (!strcmp_P( strupr(argv[2]), PSTR("OFFMMIN\0"))) { retS = setParamOffset(0,argv[3], argv[4]); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // offmmax X if (!strcmp_P( strupr(argv[2]), PSTR("OFFMMAX\0"))) { retS = setParamOffset(1,argv[3], argv[4]); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } /* DebugLevel */ if (!strcmp_P( strupr(argv[2]), PSTR("DEBUGLEVEL\0"))) { retS = setParamDebugLevel(argv[3]); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } /* LogLevel */ if (!strcmp_P( strupr(argv[2]), PSTR("LOGLEVEL\0"))) { retS = setParamLogLevel(argv[3]); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // dlgId if (!strcmp_P( strupr(argv[2]), PSTR("DLGID\0"))) { memcpy(systemVars.dlgId, argv[3], sizeof(systemVars.dlgId)); systemVars.dlgId[DLGID_LENGTH - 1] = '\0'; pv_snprintfP_OK(); return; } /* TimerPoll */ if (!strcmp_P( strupr(argv[2]), PSTR("TIMERPOLL\0"))) { retS = setParamTimerPoll(argv[3]); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } /* TimerDial */ if (!strcmp_P( strupr(argv[2]), PSTR("TIMERDIAL\0"))) { retS = setParamTimerDial(argv[3]); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } /* Wrkmode */ if (!strcmp_P( strupr(argv[2]), PSTR("WRKMODE\0"))) { retS = setParamWrkMode(argv[3],argv[4]); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } /* Pwrmode */ if (!strcmp_P( strupr(argv[2]), PSTR("PWRMODE\0"))) { retS = setParamPwrMode(argv[3]); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } /* // MONITOR // write param monitor [sqe|frame] if (!strcmp_P( strupr(argv[2]), PSTR("MONITOR\0"))) { retS = setParamMonitor(argv[3]); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } */ } // CONSIGNA if (!strcmp_P( strupr(argv[2]), PSTR("CONSIGNA\0"))) { retS = setParamConsigna(argv[3], argv[4]); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // ALL SystemVars ( save ) if (!strcmp_P( strupr(argv[1]), PSTR("SAVE\0"))) { retS = saveSystemParamsInEE( &systemVars ); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // RTC if (!strcmp_P( strupr(argv[1]), PSTR("RTC\0"))) { /* YYMMDDhhmm */ memcpy(dateTimeStr, argv[2], 10); // year tmp[0] = dateTimeStr[0]; tmp[1] = dateTimeStr[1]; tmp[2] = '\0'; rtcDateTime.year = atoi(tmp); // month tmp[0] = dateTimeStr[2]; tmp[1] = dateTimeStr[3]; tmp[2] = '\0'; rtcDateTime.month = atoi(tmp); // day of month tmp[0] = dateTimeStr[4]; tmp[1] = dateTimeStr[5]; tmp[2] = '\0'; rtcDateTime.day = atoi(tmp); // hour tmp[0] = dateTimeStr[6]; tmp[1] = dateTimeStr[7]; tmp[2] = '\0'; rtcDateTime.hour = atoi(tmp); // minute tmp[0] = dateTimeStr[8]; tmp[1] = dateTimeStr[9]; tmp[2] = '\0'; rtcDateTime.min = atoi(tmp); retS = rtcSetTime(&rtcDateTime); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // Si no estoy en modo service no puedo hacer estas tareas administrativas. if ( systemVars.wrkMode != WK_SERVICE) { snprintf_P( &cmd_printfBuff,CHAR128,PSTR("WARNING: Debe pasar a modo SERVICE !!!\r\n\0")); sp5K_printStr(&cmd_printfBuff); return; } // MCP // write mcp 0|1|2 addr value if (!strcmp_P( strupr(argv[1]), PSTR("MCP\0"))) { devId = atoi(argv[2]); address = atoi(argv[3]); regValue = strtol(argv[4],NULL,2); if ( devId == 0 ) { mcp_address = MCP_ADDR0; } if ( devId == 1 ) { mcp_address = MCP_ADDR1; } if ( devId == 2 ) { mcp_address = MCP_ADDR2; } retS = MCP_write( address, mcp_address, 1, ®Value); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // EEPROM if (!strcmp_P( strupr(argv[1]), PSTR("EE\0"))) { address = atoi(argv[2]); p = argv[3]; while (*p != NULL) { p++; length++; if (length > CMDLINE_BUFFERSIZE ) break; } retS = EE_write( address, length, argv[3] ); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // LED // write led 0|1 if (!strcmp_P( strupr(argv[1]), PSTR("LED\0"))) { value = atoi(argv[2]); retS = MCP_setLed( value ); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // gprsPWR if (!strcmp_P( strupr(argv[1]), PSTR("GPRSPWR\0"))) { value = atoi(argv[2]); retS = MCP_setGprsPwr( value ); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // gprsSW if (!strcmp_P( strupr(argv[1]), PSTR("GPRSSW\0"))) { value = atoi(argv[2]); retS = MCP_setGprsSw( value ); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // termPWR if (!strcmp_P( strupr(argv[1]), PSTR("TERMPWR\0"))) { value = atoi(argv[2]); retS = MCP_setTermPwr( value ); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // sensorPWR if (!strcmp_P( strupr(argv[1]), PSTR("SENSORPWR\0"))) { value = atoi(argv[2]); retS = MCP_setSensorPwr( value ); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // analogPWR if (!strcmp_P( strupr(argv[1]), PSTR("ANALOGPWR\0"))) { value = atoi(argv[2]); retS = MCP_setAnalogPwr( value ); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // SMS if (!strcmp_P(argv[1], PSTR("SMS\0"))) { nro = argv[2]; msg = cmdlineGetArgStr(3); rprintfStr(GPRS_UART, "AT+CMGS=\"+\0" ); rprintfStr(GPRS_UART, nro ); rprintfStr(GPRS_UART, "\r\0"); // Espero el prompt > para enviar el mensaje. timeout = 10; xUartQueueFlush(GPRS_UART); while (timeout > 0) { vTaskDelay( (portTickType)( 1000 / portTICK_RATE_MS )); if (strstr( &xUart0RxedCharsBuffer.buffer, ">") != NULL) { break; } timeout--; } rprintfStr(GPRS_UART, msg ); rprintfStr(GPRS_UART, "\r"); rprintfStr(CMD_UART, &xUart0RxedCharsBuffer.buffer ); rprintfCRLF(CMD_UART); rprintfStr(GPRS_UART, "\032"); return; } // ATCMD if (!strcmp_P(argv[1], PSTR("ATCMD\0"))) { msg = argv[2]; timeout = atoi(argv[3]); if (timeout == 0) timeout = 1; xUartQueueFlush(GPRS_UART); rprintfStr(GPRS_UART, msg); rprintfStr(GPRS_UART, "\r\0"); rprintfStr(CMD_UART, "sent>\0"); rprintfStr(CMD_UART, msg); rprintfCRLF(CMD_UART); while (timeout > 0) { vTaskDelay( (portTickType)( 1000 / portTICK_RATE_MS )); timeout--; } rprintfStr(CMD_UART, &xUart0RxedCharsBuffer.buffer ); rprintfCRLF(CMD_UART); return; } #ifdef CHANNELS_3 // Valves: Phase // write ph A1 1 if (!strcmp_P( strupr(argv[1]), PSTR("PH\0"))) { phase = toupper( argv[2][0] ); //(s0)++; chip = argv[2][1] - 0x30; value = atoi(argv[3]); retS = setValvesPhase(phase,chip, value); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // Valves: Enable // write en A1 1 if (!strcmp_P( strupr(argv[1]), PSTR("EN\0"))) { phase = toupper( argv[2][0] ); //(s0)++; chip = argv[2][1] - 0x30; value = atoi(argv[3]); retS = setValvesEnable(phase,chip, value); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // Valves: Reset if (!strcmp_P( strupr(argv[1]), PSTR("VRESET\0"))) { value = atoi(argv[2]); retS = setValvesReset( value ); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // Valves: Sleep if (!strcmp_P( strupr(argv[1]), PSTR("VSLEEP\0"))) { value = atoi(argv[2]); retS = setValvesSleep( value ); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // Valves: Pulse [A/B][1/2] {+|-} {ms} if (!strcmp_P( strupr(argv[1]), PSTR("VPULSE\0"))) { phase = toupper( argv[2][0] ); chip = argv[2][1] - 0x30; value = toupper( argv[3][0] ); sleepTime = atol(argv[4]); if ( sleepTime > 5000 ) { sleepTime = 5000; } retS = setValvesPulse( phase, chip, value, sleepTime ); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // Valves: OPEN if (!strcmp_P( strupr(argv[1]), PSTR("OPEN\0"))) { phase = toupper( argv[2][0] ); chip = argv[2][1] - 0x30; retS = setValvesOpen( phase, chip ); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // Valves: CLOSE if (!strcmp_P( strupr(argv[1]), PSTR("CLOSE\0"))) { phase = toupper( argv[2][0] ); chip = argv[2][1] - 0x30; retS = setValvesClose( phase, chip ); if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } // Valves: Consigna if (!strcmp_P( strupr(argv[1]), PSTR("CONSIGNA\0"))) { if (!strcmp_P( strupr(argv[2]), PSTR("DIA\0"))) { retS = setConsignaDia(); } if (!strcmp_P( strupr(argv[2]), PSTR("NOCHE\0"))) { retS = setConsignaNoche(); } if ( retS ) { pv_snprintfP_OK(); } else { pv_snprintfP_ERR(); } return; } #endif // 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; }
// LED KEEPALIVE static void ac_systemLeds(t_ledActions action) { // Todas las funciones las englobo en este modulo. static s08 f_KALisOn = FALSE; static s08 f_KALCallback = FALSE; //u32 tickCount; switch (action ) { case INIT_LED: sbi(LED_KA_DDR, LED_KA_BIT); // El pin del led de KA ( PD6 ) es una salida. sbi(LED_MODEM_DDR, LED_MODEM_BIT); // El pin del led de KA ( PD6 ) es una salida. // Activo el timer del led. sTimerCreate(TRUE, keepAliveLed_TimerCallBack , &xTimer_keepAliveLed ); sTimerChangePeriod(xTimer_keepAliveLed, 2 ); sTimerStart(xTimer_keepAliveLed); // Prendo. ac_systemLeds(PRENDER_LED); f_KALCallback = FALSE; break; case PRENDER_LED: // Solo lo prendo si hay una terminal prendida if ( terminal_isPrendida() ) { f_KALisOn = TRUE; // Flag que indica que los leds estan prendido. MCP_setLed(1); // Led placa logica cbi(LED_KA_PORT, LED_KA_BIT); // Led placa analogica ( kalive ) // El led del modem prende solo si este esta prendido. if ( !gprsAllowSleep() ) { // Led placa analogica ( modem ) cbi(LED_MODEM_PORT, LED_MODEM_BIT); } } break; case APAGAR_LED: f_KALisOn = FALSE; MCP_setLed(0); // Led placa logica sbi(LED_KA_PORT, LED_KA_BIT); // Led placa analogica ( kalive ) sbi(LED_MODEM_PORT, LED_MODEM_BIT); // Led placa analogica ( modem ) break; case CALLBACK_LED: f_KALCallback = TRUE; break; case TOGGLE_LED: // Primero lo apago siempre if ( f_KALisOn ) { ac_systemLeds(APAGAR_LED); } else { // Lo prendo solo cuando lo indica el callback if ( f_KALCallback ) { f_KALCallback = FALSE; ac_systemLeds(PRENDER_LED); } } break; } }