/* PxTask function */ void PxTask(void * argument) { char cRxedChar = '\0'; uint8_t port; port = (int8_t)(unsigned) argument; /* Infinite loop */ for( ;; ) { /* Read one character at a time. */ if (portStatus[port] == FREE) readPxMutex(port, &cRxedChar, sizeof( cRxedChar ), cmd50ms, cmd50ms); if(cRxedChar == '\r') { cRxedChar = '\0'; PcPort = port; portStatus[port] = CLI; /* Activate the CLI task */ xTaskNotifyGive(xCommandConsoleTask); } else if (cRxedChar != 0) { cRxedChar = '\0'; } taskYIELD(); } }
/** * @brief Request a watering process */ void WATER_SendRequest(void) { xTaskNotifyGive(m_waterTask); }
static void ui_load_menu(void) { uint32_t menu_pos_floor; switch(active_menu) { case MAIN_MENU: ui_print_mac_address_string(screen[0]); menu_pos_floor = (menu_pos/3) * 3; strncpy(screen[1], main_menu_text[menu_pos_floor], LCD_COLUMNS); strncpy(screen[2], main_menu_text[menu_pos_floor+1], LCD_COLUMNS); strncpy(screen[3], main_menu_text[menu_pos_floor+2], LCD_COLUMNS); screen[(menu_pos%3)+1][0] = CURSOR_GLYPH; xTaskNotifyGive(s_screen_task_handle); break; case GPS_MENU: strncpy(screen[0], gps_menu_title, LCD_COLUMNS); strncpy(screen[MENU_LINE_1], gps_menu_modes[menu_mode], LCD_COLUMNS); strncpy(screen[2], gps_menu_text[1], LCD_COLUMNS); strncpy(screen[3], gps_menu_text[2], LCD_COLUMNS); screen[(menu_pos%3)+1][0] = CURSOR_GLYPH; xTaskNotifyGive(s_screen_task_handle); break; case SENSOR_MODE_MENU: strncpy(screen[0], sensor_menu_title, LCD_COLUMNS); strncpy(screen[MENU_LINE_1], sensor_menu_modes[menu_mode], LCD_COLUMNS); strncpy(screen[2], sensor_menu_text[1], LCD_COLUMNS); strncpy(screen[3], sensor_menu_text[2], LCD_COLUMNS); screen[(menu_pos%3)+1][0] = CURSOR_GLYPH; xTaskNotifyGive(s_screen_task_handle); break; case DOWNLINK_MENU: strncpy(screen[0], downlink_menu_title, LCD_COLUMNS); strncpy(screen[1], downlink_msgs[0], LCD_COLUMNS); strncpy(screen[2], downlink_msgs[1], LCD_COLUMNS); if(buzz_en == true) { strncpy(screen[MENU_LINE_3], "\x7EOptions: Buzz on ", LCD_COLUMNS); } else { strncpy(screen[MENU_LINE_3], "\x7EOptions: Buzz off ", LCD_COLUMNS); } xTaskNotifyGive(s_screen_task_handle); break; case GPS_DIAG_MENU: strncpy(screen[0], gps_diag_menu_title, LCD_COLUMNS); strncpy(screen[1], gps_diag_menu_text[0], LCD_COLUMNS); strncpy(screen[2], gps_diag_menu_text[1], LCD_COLUMNS); strncpy(screen[3], gps_diag_menu_text[2], LCD_COLUMNS); xTaskNotifyGive(s_screen_task_handle); break; case SENSOR_DIAG_MENU: strncpy(screen[0], sensor_diag_menu_title, LCD_COLUMNS); strncpy(screen[1], sensor_diag_menu_text[0], LCD_COLUMNS); strncpy(screen[2], sensor_diag_menu_text[1], LCD_COLUMNS); strncpy(screen[3], sensor_diag_menu_text[2], LCD_COLUMNS); xTaskNotifyGive(s_screen_task_handle); break; case NETWORK_DIAG_MENU: strncpy(screen[0], network_diag_menu_title, LCD_COLUMNS); strncpy(screen[1], network_diag_menu_text[0], LCD_COLUMNS); strncpy(screen[2], network_diag_menu_text[1], LCD_COLUMNS); strncpy(screen[3], network_diag_menu_text[2], LCD_COLUMNS); xTaskNotifyGive(s_screen_task_handle); break; case UART_PASS_DIAG_MENU: strncpy(screen[0], uart_pass_diag_menu_title, LCD_COLUMNS); strncpy(screen[1], uart_pass_diag_menu_text[0], LCD_COLUMNS); strncpy(screen[2], uart_pass_diag_menu_text[1], LCD_COLUMNS); strncpy(screen[3], uart_pass_diag_menu_text[2], LCD_COLUMNS); xTaskNotifyGive(s_screen_task_handle); break; case DRIVE_MODE_DIAG_MENU: strncpy(screen[0], drive_mode_diag_menu_title, LCD_COLUMNS); strncpy(screen[1], drive_mode_diag_menu_text[0], LCD_COLUMNS); strncpy(screen[2], drive_mode_diag_menu_text[1], LCD_COLUMNS); ui_menu_load_drive_mode_enabled(); xTaskNotifyGive(s_screen_task_handle); break; case ACK_MODE_DIAG_MENU: strncpy(screen[0], ack_mode_diag_menu_title, LCD_COLUMNS); strncpy(screen[1], ack_mode_diag_menu_text[0], LCD_COLUMNS); strncpy(screen[2], ack_mode_diag_menu_text[1], LCD_COLUMNS); ui_menu_load_ack_mode_enabled(); xTaskNotifyGive(s_screen_task_handle); break; default: EFM_ASSERT(false); break; } }
static void ui_increment_menu_position(void) { // Increment menu position switch(active_menu) { case GPS_DIAG_MENU: case SENSOR_DIAG_MENU: case NETWORK_DIAG_MENU: case UART_PASS_DIAG_MENU: case DRIVE_MODE_DIAG_MENU: case ACK_MODE_DIAG_MENU: // no cursor in these menus--do nothing break; case DOWNLINK_MENU: // line is displayed on the bottom of the screen menu_pos++; if(menu_pos > menus[active_menu].cursor_max) { menu_pos = menus[active_menu].cursor_min; } if(menu_pos == 0) // buzzer enable/disable { if(buzz_en == true) { strncpy(screen[MENU_LINE_3],"\x7EOptions: Buzz on ",LCD_COLUMNS); } else { strncpy(screen[MENU_LINE_3],"\x7EOptions: Buzz off ",LCD_COLUMNS); } } else { strncpy(screen[MENU_LINE_3],downlink_menu_text[menu_pos],LCD_COLUMNS); } xTaskNotifyGive(s_screen_task_handle); break; case MAIN_MENU: case GPS_MENU: case SENSOR_MODE_MENU: default: // Increment cursor, load new screen (if necessary) screen[(menu_pos%3)+1][0] = ' '; menu_pos++; if(menu_pos > menus[active_menu].cursor_max) { menu_pos = menus[active_menu].cursor_min; } // See if we've rolled onto a new screen if(menus[active_menu].num_lines > 3) // does this menu have more than one screen? { if((menu_pos%3) == 0) // yes, we have rolled to a new screen { ui_load_menu(); // reload the menu } } screen[(menu_pos%3)+1][0] = CURSOR_GLYPH; xTaskNotifyGive(s_screen_task_handle); break; } }
void os_threadNotify(os_threadHandle_t handle) { (void)xTaskNotifyGive(handle->threadHandle); }
void pl_arcook_start(void) { xTaskNotifyGive( xPlasmaTaskHandle); arcoOkSet(false); }