Advanced Distributed Systems module at HSLU
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

108 lines
3.3 KiB

/*
* application.s
*
* Created on: 25.11.2022
* Author: jonas
*/
#include "challenge_app.h"
#include "platform.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "myMqtt.h"
#include "wifi.h"
/* LOCAL Var */
/* identifies robot Mode for the challenge: true = robot is stationary, false = robot is moveable */
static bool robotModeStationary = false;
static TaskHandle_t appTaskHandle; /* task handle */
#define TAG "CHALLENGE_APP" /* tag for logging with ESP_LOG */
static void appTask(void *pv){
if(pv != NULL){
printf("task argument: %s\n", (char*)pv);
}
printf("Application was started");
fflush(stdout);
while(WiFi_isConnected() == false){
vTaskDelay(pdMS_TO_TICKS(1000));
}
// wifi now connected
printf("Application task detected that WiFi is connected\n");
if(MyMqtt_Init()){
vTaskDelay(pdMS_TO_TICKS(1000));
printf("5s done\n");
MyMqtt_Subscribe("scada/status");
printf("Application endless task was started\n");
fflush(stdout);
// endless loop
for(;;){
MyMqtt_Publish("scada/status", "Testmessage from ESP");
vTaskDelay(pdMS_TO_TICKS(10000));
}
} else {
printf("Init of MyMqtt failed! Quitting application task.\n");
}
}
BaseType_t res;
void Challenge_App_Init(void){
res = xTaskCreate(appTask, "ChallengeAppTask", 4096/sizeof(StackType_t), (void*)"ARG_0", tskIDLE_PRIORITY, &appTaskHandle);
if(res != pdPASS){
ESP_LOGE(TAG, "Creating appTask failed");
}
}
static void Challenge_App_SetMode(bool modeStationary){
robotModeStationary = modeStationary;
ESP_LOGI(TAG, "Changed robot mode to %s", robotModeStationary?(unsigned char*)"stationary":(unsigned char*)"mobile");
}
/*********/
/* SHELL */
/*********/
#if PL_CONFIG_USE_SHELL
static uint8_t PrintStatus(const McuShell_StdIOType *io) {
McuShell_SendStatusStr((unsigned char*)"challenge", (unsigned char*)"ESP32 Challenge status\r\n", io->stdOut);
McuShell_SendStatusStr((unsigned char*)" robotMode", robotModeStationary?(unsigned char*)"stationary\r\n":(unsigned char*)"mobile\r\n", io->stdOut);
return ERR_OK;
}
static uint8_t PrintHelp(const McuShell_StdIOType *io) {
McuShell_SendHelpStr((unsigned char*)"challenge", (unsigned char*)"Group of ESP32 Challenge commands\r\n", io->stdOut);
McuShell_SendHelpStr((unsigned char*)" help|status", (unsigned char*)"Shows Challenge help or status\r\n", io->stdOut);
return ERR_OK;
}
uint8_t Challenge_ParseCommand(const unsigned char* cmd, bool *handled, const McuShell_StdIOType *io) {
if (McuUtility_strcmp((char*)cmd, (char*)McuShell_CMD_HELP)==0 || McuUtility_strcmp((char*)cmd, (char*)"challenge help")==0) {
*handled = TRUE;
return PrintHelp(io);
} else if (McuUtility_strcmp((char*)cmd, (char*)McuShell_CMD_STATUS)==0 || McuUtility_strcmp((char*)cmd, (char*)"challenge status")==0) {
*handled = TRUE;
return PrintStatus(io);
}
else if (McuUtility_strcmp((char*)cmd, (char*)"challenge setMode stationary")==0 ||
McuUtility_strcmp((char*)cmd, (char*)"challenge setMode s")==0) {
*handled = TRUE;
Challenge_App_SetMode(true); // set stationary
} else if (McuUtility_strcmp((char*)cmd, (char*)"challenge setMode mobile")==0 ||
McuUtility_strcmp((char*)cmd, (char*)"challenge setMode m")==0 ) {
*handled = TRUE;
Challenge_App_SetMode(false); // set mobile
}
return ERR_OK;
}
#endif /* PL_CONFIG_USE_SHELL */