예제 #1
0
파일: freertos.c 프로젝트: OUWECAD/MOWE
/* 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();
  }

}
예제 #2
0
/**
 * @brief	Request a watering process
 */
void WATER_SendRequest(void)
{
	xTaskNotifyGive(m_waterTask);
}
예제 #3
0
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;
    }
}
예제 #4
0
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;
    }
}
예제 #5
0
void os_threadNotify(os_threadHandle_t handle)
{
    (void)xTaskNotifyGive(handle->threadHandle);
}
예제 #6
0
void pl_arcook_start(void)
{
    xTaskNotifyGive( xPlasmaTaskHandle);
	arcoOkSet(false);
}