Example #1
0
void check_password()
{
	SHA1Context sha;
	char pass_sha1[20];


	if (password_str_len <= 0)
	{
		if (restricted_screen_mode != RESTRICTED_SCREEN_FILTER_OPTION)
			filter_option_to_set = FILTER_OPTION_TO_SET_NONE;
		restricted_screen_mode = RESTRICTED_SCREEN_CHECK_PASSWORD;
		enter_password_screen(get_nls_text("enter_password"));
	}
	else
	{
		SHA1Reset(&sha);
		SHA1Input(&sha, (const unsigned char *) password_string, password_str_len);
		SHA1Result(&sha);
		memcpy(pass_sha1, sha.Message_Digest, 20);
		if (memcmp(pass_sha1, restriction_pass1, 20))
		{
			password_str_len = 0;
			if (restricted_screen_mode != RESTRICTED_SCREEN_CHANGE_PASSWORD)
				restricted_screen_mode = RESTRICTED_SCREEN_CHECK_PASSWORD;
			enter_password_screen(get_nls_text("try_again"));
		}
		else
		{
			if (restricted_screen_mode == RESTRICTED_SCREEN_CHANGE_PASSWORD)
			{
				password_str_len = 0;
				keyboard_set_mode(KEYBOARD_PASSWORD_CHAR);
				enter_password_screen(get_nls_text("enter_new_password"));
				restricted_screen_mode = RESTRICTED_SCREEN_SET_PASSWORD;
			}
			else if (filter_option_to_set == FILTER_OPTION_TO_SET_ON)
			{
				restriction_filter_off = 0;
				save_password(1);
				last_display_mode = DISPLAY_MODE_ARTICLE;
				display_mode = DISPLAY_MODE_ARTICLE;
				display_retrieved_article(saved_idx_article);
			}
			else if (filter_option_to_set == FILTER_OPTION_TO_SET_OFF)
			{
				restriction_filter_off = 1;
				save_password(2);
				last_display_mode = DISPLAY_MODE_ARTICLE;
				display_mode = DISPLAY_MODE_ARTICLE;
				display_retrieved_article(saved_idx_article);
			}
			else
			{
				display_mode = DISPLAY_MODE_ARTICLE;
				display_retrieved_article(saved_idx_article);
			}
		}
	}
}
Example #2
0
void filter_on_off(void)
{
	int i;
	unsigned char *pText;
	char str[256];

	guilib_fb_lock();
	memset(&framebuffer[(BLACK_SPACE_START - 6)* LCD_VRAM_WIDTH_PIXELS / 8], 0, 6 * LCD_VRAM_WIDTH_PIXELS / 8);
	memset(&framebuffer[BLACK_SPACE_START * LCD_VRAM_WIDTH_PIXELS / 8], 0xFF, (LCD_HEIGHT_LINES - BLACK_SPACE_START)* LCD_VRAM_WIDTH_PIXELS / 8);

	framebuffer[135 * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xFC;
	memset(&framebuffer[135 * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
	framebuffer[135 * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x3F;
	for (i = 136; i <= 155; i++)
	{
		framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xF8;
		memset(&framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
		framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x1F;
	}
	framebuffer[156 * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xFC;
	memset(&framebuffer[156 * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
	framebuffer[156 * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x3F;

	framebuffer[164 * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xFC;
	memset(&framebuffer[164 * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
	framebuffer[164 * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x3F;
	for (i = 165; i <= 184; i++)
	{
		framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xF8;
		memset(&framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
		framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x1F;
	}
	framebuffer[185 * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xFC;
	memset(&framebuffer[185 * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
	framebuffer[185 * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x3F;

	pText = get_nls_text("set_filter");
	extract_str_fitting_width(&pText, str, LCD_BUF_WIDTH_PIXELS - LCD_LEFT_MARGIN, SUBTITLE_FONT_IDX);
	if (strlen(str))
		render_string(SUBTITLE_FONT_IDX, LCD_LEFT_MARGIN, BLACK_SPACE_START + 10, str, strlen(str), 1);
	extract_str_fitting_width(&pText, str, LCD_BUF_WIDTH_PIXELS - LCD_LEFT_MARGIN, SUBTITLE_FONT_IDX);
	if (strlen(str))
		render_string(SUBTITLE_FONT_IDX, LCD_LEFT_MARGIN, BLACK_SPACE_START + 30, str, strlen(str), 1);
	extract_str_fitting_width(&pText, str, LCD_BUF_WIDTH_PIXELS - LCD_LEFT_MARGIN, SUBTITLE_FONT_IDX);
	if (strlen(str))
		render_string(SUBTITLE_FONT_IDX, LCD_LEFT_MARGIN, BLACK_SPACE_START + 50, str, strlen(str), 1);
	extract_str_fitting_width(&pText, str, LCD_BUF_WIDTH_PIXELS - LCD_LEFT_MARGIN, SUBTITLE_FONT_IDX);
	if (strlen(str))
		render_string(SUBTITLE_FONT_IDX, LCD_LEFT_MARGIN, BLACK_SPACE_START + 70, str, strlen(str), 1);
	pText = get_nls_text("keep_filter_on");
	render_string(SUBTITLE_FONT_IDX, -1, 137, pText, strlen(pText), 0);
	pText = get_nls_text("keep_filter_off");
	render_string(SUBTITLE_FONT_IDX, -1, 166, pText, strlen(pText), 0);
	guilib_fb_unlock();
	keyboard_set_mode(KEYBOARD_FILTER_ON_OFF);
}
Example #3
0
/* this is only called for the index page */
static void toggle_soft_keyboard(void)
{
	//guilib_fb_lock();
	int mode = keyboard_get_mode();

	/* Set the keyboard mode to what we want to change to. */
	if (mode == KEYBOARD_NONE || search_result_count()==0) {
		keyboard_set_mode(KEYBOARD_CHAR);
		if (mode == KEYBOARD_NONE)
			restore_search_list_page();
//		search_reload_ex();
		keyboard_paint();
	} else {
		keyboard_set_mode(KEYBOARD_NONE);
		search_reload_ex(SEARCH_RELOAD_KEEP_RESULT);
	}

	//guilib_fb_unlock();
}
Example #4
0
uint8_t model_save (char *name, float x, float y, int8_t button, float data, uint8_t action) {
	char tmp_str[200];
	reset_buttons();
	keyboard_set_callback(model_save_xml);
	if (strstr(ModelData[ModelActive].name, ".xml\0") > 0) {
		strncpy(tmp_str, ModelData[ModelActive].name, 199);
	} else {
		sprintf(tmp_str, "%s.xml", ModelData[ModelActive].name);
	}
	keyboard_set_text(tmp_str);
	keyboard_set_mode(setup.view_mode);
	return 0;
}
Example #5
0
void enter_password_screen(char *msg)
{
	int i;
	unsigned char *pText;

	display_mode = DISPLAY_MODE_RESTRICTED;
	keyboard_set_mode(KEYBOARD_PASSWORD_CHAR);
	guilib_fb_lock();
	keyboard_paint();
	memset(&framebuffer[(BLACK_SPACE_START - 6)* LCD_VRAM_WIDTH_PIXELS / 8], 0, 6 * LCD_VRAM_WIDTH_PIXELS / 8);
	memset(&framebuffer[BLACK_SPACE_START * LCD_VRAM_WIDTH_PIXELS / 8], 0xFF,
	       (LCD_HEIGHT_LINES - BLACK_SPACE_START - keyboard_height())* LCD_VRAM_WIDTH_PIXELS / 8);
	render_string(SUBTITLE_FONT_IDX, -1, 50, msg, strlen(msg), 1);

	framebuffer[82 * LCD_VRAM_WIDTH_PIXELS / 8 + 4] = 0xFC;
	memset(&framebuffer[82 * LCD_VRAM_WIDTH_PIXELS / 8 + 5], 0, 16);
	framebuffer[82 * LCD_VRAM_WIDTH_PIXELS / 8 + 21] = 0x07;

	framebuffer[82 * LCD_VRAM_WIDTH_PIXELS / 8 + 22] = 0x80;
	memset(&framebuffer[82 * LCD_VRAM_WIDTH_PIXELS / 8 + 23], 0, 2);
	framebuffer[82 * LCD_VRAM_WIDTH_PIXELS / 8 + 25] = 0x1F;

	for (i = 83; i <= 103; i++)
	{
		framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 4] = 0xF8;
		memset(&framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 5], 0, 16);
		framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 21] = 0x03;

		framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 22] = 0x00;
		memset(&framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 23], 0, 2);
		framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 25] = 0x0F;
	}

	framebuffer[104 * LCD_VRAM_WIDTH_PIXELS / 8 + 4] = 0xFC;
	memset(&framebuffer[104 * LCD_VRAM_WIDTH_PIXELS / 8 + 5], 0, 16);
	framebuffer[104 * LCD_VRAM_WIDTH_PIXELS / 8 + 21] = 0x07;

	framebuffer[104 * LCD_VRAM_WIDTH_PIXELS / 8 + 22] = 0x80;
	memset(&framebuffer[104 * LCD_VRAM_WIDTH_PIXELS / 8 + 23], 0, 2);
	framebuffer[104 * LCD_VRAM_WIDTH_PIXELS / 8 + 25] = 0x1F;

	pText = get_nls_text("ok");
	render_string(SUBTITLE_FONT_IDX, 180, 85, pText, strlen(pText), 0);
	guilib_fb_unlock();
}
Example #6
0
void edit_number(uint8_t mode, uint8_t type, void *ptr, float min, float max) {
	char tmp_str[1024];
	show_number = mode;
	number_type = type;
	number_min = min;
	number_max = max;
	number_value_ptr = ptr;
	if (number_type == NUMBER_TYPE_UINT8) {
		uint8_t *value = (uint8_t *)number_value_ptr;
		number_value = (float) * value;
		sprintf(tmp_str, "%0.0f", number_value);
	} else if (number_type == NUMBER_TYPE_INT8) {
		int8_t *value = (int8_t *)number_value_ptr;
		number_value = (float) * value;
		sprintf(tmp_str, "%0.0f", number_value);
	} else if (number_type == NUMBER_TYPE_UINT16) {
		uint16_t *value = (uint16_t *)number_value_ptr;
		number_value = (float) * value;
		sprintf(tmp_str, "%0.0f", number_value);
	} else if (number_type == NUMBER_TYPE_INT16) {
		int16_t *value = (int16_t *)number_value_ptr;
		number_value = (float) * value;
		sprintf(tmp_str, "%0.0f", number_value);
	} else if (number_type == NUMBER_TYPE_UINT32) {
		uint32_t *value = (uint32_t *)number_value_ptr;
		number_value = (float) * value;
		sprintf(tmp_str, "%0.0f", number_value);
	} else if (number_type == NUMBER_TYPE_INT32) {
		int32_t *value = (int32_t *)number_value_ptr;
		number_value = (float) * value;
		sprintf(tmp_str, "%0.0f", number_value);
	} else if (number_type == NUMBER_TYPE_FLOAT) {
		float *value = (float *)number_value_ptr;
		number_value = (float) * value;
		sprintf(tmp_str, "%f", number_value);
	}
	keyboard_set_callback(edit_number_set);
	if (number_type == NUMBER_TYPE_FLOAT) {
		keyboard_set_number(tmp_str, 1);
	} else {
		keyboard_set_number(tmp_str, 0);
	}
	keyboard_set_mode(mode);
}
Example #7
0
static void handle_touch(struct wl_input_event *ev)
{
	//int offset,offset_count,
	int article_link_number=-1;
	int enter_touch_y_pos_record;
	//int time_diff_search;
	int mode;
	struct keyboard_key * key;
	static int last_5_y[5];
	static unsigned long last_5_y_time_ticks[5];
	int i;

	DP(DBG_WL, ("%s() touch event @%d,%d val %d\n", __func__,
		ev->touch_event.x, ev->touch_event.y, ev->touch_event.value));

	mode = keyboard_get_mode();
	if (display_mode == DISPLAY_MODE_INDEX && (mode == KEYBOARD_CHAR || mode == KEYBOARD_NUM))
	{
		article_buf_pointer = NULL;
		key = keyboard_get_data(ev->touch_event.x, ev->touch_event.y);
		if (ev->touch_event.value == 0) {
			keyboard_key_reset_invert(KEYBOARD_RESET_INVERT_DELAY); // reset invert with delay
			enter_touch_y_pos_record = enter_touch_y_pos;
			enter_touch_y_pos = -1;
			touch_search = 0;
			press_delete_button = false;
			pre_key = NULL;
			if (key) {
				if (!touch_down_on_keyboard) {
					touch_down_on_keyboard = 0;
					touch_down_on_list = 0;
					goto out;
				}
				handle_search_key(key->key);
			}
			else {
				if (!touch_down_on_list || ev->touch_event.y < RESULT_START - RESULT_HEIGHT) {
					touch_down_on_keyboard = 0;
					touch_down_on_list = 0;
					goto out;
				}
				if(search_result_count()==0)
				   goto out;

				 //search_set_selection(last_selection);
				 //search_open_article(last_selection);
				 if(search_result_selected()>=0)
				 {
				    display_mode = DISPLAY_MODE_ARTICLE;
				    last_display_mode = DISPLAY_MODE_INDEX;
				    search_open_article(search_result_selected());
				 }
			}
			touch_down_on_keyboard = 0;
			touch_down_on_list = 0;
		} else {
			if(enter_touch_y_pos<0)  //record first touch y pos
			   enter_touch_y_pos = ev->touch_event.y;
			last_index_y_pos = ev->touch_event.y;
			start_search_time = ev->touch_event.ticks;
			last_delete_time = start_search_time;
			if (key) {
				if(key->key==8)//press "<" button
				{
				    press_delete_button = true;
			       }
				else if(key->key == -42)
				{
					mode = keyboard_get_mode();
					if(mode == KEYBOARD_CHAR)
						keyboard_set_mode(KEYBOARD_NUM);
					else if(mode == KEYBOARD_NUM)
						keyboard_set_mode(KEYBOARD_CHAR);
					guilib_fb_lock();
					keyboard_paint();
					guilib_fb_unlock();
				}

				if (!touch_down_on_keyboard && !touch_down_on_list)
					touch_down_on_keyboard = 1;

				if (pre_key && pre_key->key == key->key) goto out;

				if (touch_down_on_keyboard) {
					keyboard_key_invert(key);
					pre_key = key;
				}
			} else {
				if (!touch_down_on_keyboard && !touch_down_on_list)
					touch_down_on_list = 1;
				keyboard_key_reset_invert(KEYBOARD_RESET_INVERT_DELAY); // reset invert with delay
				pre_key = NULL;

				if (!search_result_count()) goto out;

				if(touch_search == 0)
				{
				    //last_search_y_pos = ev->touch_event.y;
				    touch_search = 1;
				}
				else
				{
				    if(search_result_selected()>=0 && abs(ev->touch_event.y-search_touch_pos_y_last)>5)
				    {
					invert_selection(search_result_selected(),-1, RESULT_START, RESULT_HEIGHT);
					search_set_selection(-1);
				    }
				    goto out;
				}

				int new_selection;
				if((ev->touch_event.y - RESULT_START)<0)
				    new_selection = -1;
				else
				    new_selection = ((unsigned int)ev->touch_event.y - RESULT_START) / RESULT_HEIGHT;

				if (new_selection == search_result_selected()) goto out;

				unsigned int avail_count = keyboard_get_mode() == KEYBOARD_NONE ?
					NUMBER_OF_FIRST_PAGE_RESULTS : NUMBER_OF_RESULTS_KEYBOARD;
				avail_count = search_result_count() > avail_count ? avail_count : search_result_count();
				if (new_selection >= avail_count) goto out;
				if (touch_down_on_keyboard) goto out;

				//invert_selection(search_result_selected(), new_selection, RESULT_START, RESULT_HEIGHT);
				invert_selection(-1, new_selection, RESULT_START, RESULT_HEIGHT);

				 last_selection = new_selection ;
				search_set_selection(new_selection);
				search_touch_pos_y_last = ev->touch_event.y;
			}
		}
	}
	else if (display_mode == DISPLAY_MODE_HISTORY && mode == KEYBOARD_CLEAR_HISTORY)
	{
		key = keyboard_get_data(ev->touch_event.x, ev->touch_event.y);
		if (ev->touch_event.value == 0) {
			#ifdef INCLUDED_FROM_KERNEL
			delay_us(100000 * 2);
			#endif
			keyboard_key_reset_invert(KEYBOARD_RESET_INVERT_NOW);
			enter_touch_y_pos_record = enter_touch_y_pos;
			enter_touch_y_pos = -1;
			touch_search = 0;
			press_delete_button = false;
			pre_key = NULL;
			if (key) {
				if (!touch_down_on_keyboard) {
					touch_down_on_keyboard = 0;
					touch_down_on_list = 0;
					goto out;
				}
				if (key->key == 'Y') {
					history_clear();
					keyboard_set_mode(KEYBOARD_NONE);
					history_reload();
				} else if (key->key == 'N') {
					keyboard_set_mode(KEYBOARD_NONE);
					guilib_fb_lock();
					draw_clear_history(1);
					guilib_fb_unlock();
				}
			}
			else {
				touch_down_on_keyboard = 0;
				touch_down_on_list = 0;
				goto out;
			}
		} else {
			if(enter_touch_y_pos<0)  //record first touch y pos
			   enter_touch_y_pos = ev->touch_event.y;
			last_index_y_pos = ev->touch_event.y;
			if (key) {
				if (!touch_down_on_keyboard)
					touch_down_on_keyboard = 1;

				if (pre_key && pre_key->key == key->key) goto out;

				if (touch_down_on_keyboard) {
					keyboard_key_invert(key);
					pre_key = key;
				}
			} else {
				touch_down_on_keyboard = 0;
				keyboard_key_reset_invert(KEYBOARD_RESET_INVERT_DELAY); // reset invert with delay
				pre_key = NULL;

			}
		}
	}
	else if (display_mode == DISPLAY_MODE_RESTRICTED)
	{
		key = keyboard_get_data(ev->touch_event.x, ev->touch_event.y);
		if (ev->touch_event.value == 0) {
			if (key->key == 'Y' || key->key == 'N' || key->key == 'P')
			{
				#ifdef INCLUDED_FROM_KERNEL
				delay_us(100000 * 2);
				#endif
				keyboard_key_reset_invert(KEYBOARD_RESET_INVERT_NOW);
			}
			else
				keyboard_key_reset_invert(KEYBOARD_RESET_INVERT_DELAY); // reset invert with delay
			enter_touch_y_pos_record = enter_touch_y_pos;
			enter_touch_y_pos = -1;
			touch_search = 0;
			press_delete_button = false;
			pre_key = NULL;
			if (key) {
				if (!touch_down_on_keyboard) {
					touch_down_on_keyboard = 0;
					goto out;
				}
				handle_password_key(key->key);
			}
			touch_down_on_keyboard = 0;
		} else {
			if(enter_touch_y_pos<0)  //record first touch y pos
			   enter_touch_y_pos = ev->touch_event.y;
			last_index_y_pos = ev->touch_event.y;
			start_search_time = ev->touch_event.ticks;
			last_delete_time = start_search_time;
			if (key) {
				if(key->key==8)//press "<" button
				{
				    press_delete_button = true;
			       }
				else if(key->key == -42)
				{
					mode = keyboard_get_mode();
					if(mode == KEYBOARD_PASSWORD_CHAR)
						keyboard_set_mode(KEYBOARD_PASSWORD_NUM);
					else if(mode == KEYBOARD_PASSWORD_NUM)
						keyboard_set_mode(KEYBOARD_PASSWORD_CHAR);
					guilib_fb_lock();
					keyboard_paint();
					guilib_fb_unlock();
				}

				if (!touch_down_on_keyboard)
					touch_down_on_keyboard = 1;

				if (pre_key && pre_key->key == key->key) goto out;

				if (touch_down_on_keyboard) {
					keyboard_key_invert(key);
					pre_key = key;
				}
			} else {
				keyboard_key_reset_invert(KEYBOARD_RESET_INVERT_NOW);
				pre_key = NULL;

				search_touch_pos_y_last = ev->touch_event.y;
			}
		}
	} else {
		if (ev->touch_event.value == 0) {
			unsigned long diff_ticks = 0;
			long diff_y = 0;

			for (i = 4; i > 0; i--)
			{
				if (last_5_y[i])
				{
					diff_y = ev->touch_event.y - last_5_y[i];
					diff_ticks = time_diff(ev->touch_event.ticks, last_5_y_time_ticks[i]);
					break;
				}
			}

			if (diff_ticks <= 0 || abs(article_moved_pixels) > SMOOTH_SCROLL_ACTIVATION_OFFSET_HIGH_THRESHOLD ||
				abs(article_moved_pixels) < SMOOTH_SCROLL_ACTIVATION_OFFSET_LOW_THRESHOLD)
				finger_move_speed = 0;
			else
			{
				// Event timesing is not good for short period due to the events are queued without timestamp
				finger_move_speed = -(float)diff_y * ((float)seconds_to_ticks(1) / (float)diff_ticks);
				if (abs(finger_move_speed) > SMOOTH_SCROLL_ACTIVATION_SPPED_THRESHOLD)
				{
					if (finger_move_speed > 0)
					{
						if (display_mode == DISPLAY_MODE_ARTICLE)
							finger_move_speed = ARTICLE_SMOOTH_SCROLL_SPEED_FACTOR *
								(finger_move_speed - SMOOTH_SCROLL_ACTIVATION_SPPED_THRESHOLD);
						else
							finger_move_speed = LIST_SMOOTH_SCROLL_SPEED_FACTOR *
								(finger_move_speed - SMOOTH_SCROLL_ACTIVATION_SPPED_THRESHOLD);
					}
					else
					{
						if (display_mode == DISPLAY_MODE_ARTICLE)
							finger_move_speed = ARTICLE_SMOOTH_SCROLL_SPEED_FACTOR *
								(finger_move_speed + SMOOTH_SCROLL_ACTIVATION_SPPED_THRESHOLD);
						else
							finger_move_speed = LIST_SMOOTH_SCROLL_SPEED_FACTOR *
								(finger_move_speed + SMOOTH_SCROLL_ACTIVATION_SPPED_THRESHOLD);
					}
				}
				else
					finger_move_speed = 0;
			}

			if (finger_move_speed != 0)
			{
				time_scroll_article_last = ev->touch_event.ticks;
			}

			article_moved = false;
			if (finger_move_speed == 0 && b_show_scroll_bar)
			{
				b_show_scroll_bar = 0;
				show_scroll_bar(0); // clear scroll bar
			}
			article_scroll_pixel = INITIAL_ARTICLE_SCROLL_PIXEL;
			article_moved_pixels = 0;
			touch_y_last_unreleased = 0;
			start_move_time = 0;

			article_link_number = get_activated_article_link_number();
			if(article_link_number>=0)
			{
				if (link_to_be_inverted >= 0)
				{
					if (link_currently_inverted >= 0)
						invert_link(link_currently_inverted);
					invert_link(link_to_be_inverted);
				}
				if (finger_move_speed == 0)
				{
					init_invert_link();
					last_display_mode = display_mode;
					display_mode = DISPLAY_MODE_ARTICLE;
					open_article_link_with_link_number(article_link_number);
				}
				else
				{
					if (link_currently_inverted >= 0)
						invert_link(link_currently_inverted);
					init_invert_link();
				}
				return;
			}

			reset_article_link_number();
			article_touch_down_handled = 0;
		} else {
			finger_move_speed = 0;

			if(touch_y_last_unreleased == 0)
			{
				touch_y_last_unreleased = ev->touch_event.y;
				last_unreleased_time = ev->touch_event.ticks;
				reset_article_link_number();
				article_moved_pixels = 0;
				last_5_y[0] = ev->touch_event.y;
				last_5_y_time_ticks[0] = ev->touch_event.ticks;
				for (i = 1; i < 5; i++)
					last_5_y[i] = 0;

			}
			else
			{
				article_moved_pixels += touch_y_last_unreleased - ev->touch_event.y;
				if(abs(touch_y_last_unreleased - ev->touch_event.y) >=article_scroll_pixel)
				{
					if (finger_move_speed == 0)
						display_article_with_pcf(touch_y_last_unreleased - ev->touch_event.y);
					touch_y_last_unreleased = ev->touch_event.y;
					for (i = 4; i >= 1; i--)
					{
						last_5_y[i] = last_5_y[i-1];
						last_5_y_time_ticks[i] = last_5_y_time_ticks[i-1];
					}
					last_5_y[0] = ev->touch_event.y;
					last_5_y_time_ticks[0] = ev->touch_event.ticks;
					b_show_scroll_bar = 1;
					article_scroll_pixel = 1;
				}
				else if (article_moved_pixels < article_scroll_pixel &&
					time_diff(get_time_ticks(), last_unreleased_time) > seconds_to_ticks(0.075))
				{
					article_moved_pixels = 0;
					touch_y_last_unreleased = ev->touch_event.y;
					last_unreleased_time = ev->touch_event.ticks;
					last_5_y[0] = ev->touch_event.y;
					last_5_y_time_ticks[0] = ev->touch_event.ticks;
					for (i = 1; i < 5; i++)
						last_5_y[i] = 0;
				}

				if (abs(article_moved_pixels) > ARTICLE_MOVED_THRESHOLD)
				{
					article_moved = true;
					reset_article_link_number();
				}
			}

			if (!article_moved)
			{
				article_link_number =isArticleLinkSelected(ev->touch_event.x,ev->touch_event.y);
				if (article_link_number >= 0)
					set_article_link_number(article_link_number, ev->touch_event.ticks);
				else
					reset_article_link_number();
			}

			if (!article_touch_down_handled) {
				article_touch_down_pos.x = ev->touch_event.x;
				article_touch_down_pos.y = ev->touch_event.y;
				article_touch_down_handled = 1;
			}
		}
	}
out:
	return;
}
Example #8
0
static void handle_key_release(int keycode)
{
//	static long idx_article = 0;
	static int first_time_random = 0;
	int mode;

	finger_move_speed = 0;
	keyboard_key_reset_invert(KEYBOARD_RESET_INVERT_NOW); // reset invert immediately
	DP(DBG_WL, ("O handle_key_release()\n"));
	mode = keyboard_get_mode();
	if (keycode == WL_INPUT_KEY_POWER) {
#ifdef INCLUDED_FROM_KERNEL
		if (history_list_save(HISTORY_SAVE_POWER_OFF))
		{
			delay_us(200000);
		}
#endif
	} else if (keycode == WL_INPUT_KEY_SEARCH) {
		article_buf_pointer = NULL;
		/* back to search */
		if (display_mode == DISPLAY_MODE_INDEX) {
			toggle_soft_keyboard();
		} else {
			search_set_selection(-1);
			display_mode = DISPLAY_MODE_INDEX;
			keyboard_set_mode(KEYBOARD_CHAR);
			repaint_search();
		}
	} else if (keycode == WL_INPUT_KEY_HISTORY) {
		if (display_mode != DISPLAY_MODE_HISTORY) {
			article_buf_pointer = NULL;
			history_reload();
			display_mode = DISPLAY_MODE_HISTORY;
			keyboard_set_mode(KEYBOARD_NONE);
		} else {
			if (keyboard_get_mode() == KEYBOARD_CLEAR_HISTORY)
			{
				keyboard_set_mode(KEYBOARD_NONE);
				guilib_fb_lock();
				//keyboard_paint();
				draw_clear_history(1);
				guilib_fb_unlock();
			} else if (history_get_count() > 0) {
				keyboard_set_mode(KEYBOARD_CLEAR_HISTORY);
				guilib_fb_lock();
				//keyboard_paint();
				draw_clear_history(0);
				guilib_fb_unlock();
			}
		}
	} else if (keycode == WL_INPUT_KEY_RANDOM) {
		if (first_time_random < 4)
			first_time_random++;
		if (first_time_random == 3)
		{
			first_time_random = 4;
			if (init_article_filter())
				return;
		}
		article_buf_pointer = NULL;
		display_mode = DISPLAY_MODE_ARTICLE;
		last_display_mode = DISPLAY_MODE_INDEX;
		random_article();
	} else if (display_mode == DISPLAY_MODE_INDEX) {
		article_buf_pointer = NULL;
		if (keycode == WL_KEY_RETURN) {
			int cur_selection = search_current_selection();
			retrieve_article(cur_selection);
#ifdef PROFILER_ON
		} else if (keycode == WL_KEY_HASH) {
			/* activate if you want to run performance tests */
			/* perf_test(); */
			malloc_status_simple();
			prof_print();
#endif
		} else {
			handle_search_key(keycode);
		}
	} else if (display_mode == DISPLAY_MODE_ARTICLE) {
		article_buf_pointer = NULL;
		if (keycode == WL_KEY_BACKSPACE) {
			if (last_display_mode == DISPLAY_MODE_INDEX) {
				display_mode = DISPLAY_MODE_INDEX;
				repaint_search();
			} else if (last_display_mode == DISPLAY_MODE_HISTORY) {
				display_mode = DISPLAY_MODE_HISTORY;
				history_reload();
			}
		}
	}
}
Example #9
0
void first_time_password(int flag)
{
	int i;
	unsigned char *pText;
	char str[256];
	int width;

	guilib_fb_lock();
	memset(&framebuffer[(BLACK_SPACE_START - 6)* LCD_VRAM_WIDTH_PIXELS / 8], 0, 6 * LCD_VRAM_WIDTH_PIXELS / 8);
	memset(&framebuffer[BLACK_SPACE_START * LCD_VRAM_WIDTH_PIXELS / 8], 0xFF, (LCD_HEIGHT_LINES - BLACK_SPACE_START)* LCD_VRAM_WIDTH_PIXELS / 8);

	framebuffer[149 * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xFC;
	memset(&framebuffer[149 * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
	framebuffer[149 * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x3F;
	for (i = 150; i <= 168; i++)
	{
		framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xF8;
		memset(&framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
		framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x1F;
	}
	framebuffer[169 * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xFC;
	memset(&framebuffer[169 * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
	framebuffer[169 * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x3F;

	if (flag)
	{
		pText = get_nls_text("protection");
		width = extract_str_fitting_width(&pText, str, LCD_BUF_WIDTH_PIXELS - LCD_LEFT_MARGIN, SUBTITLE_FONT_IDX);
		if (strlen(str))
			render_string(SUBTITLE_FONT_IDX, LCD_LEFT_MARGIN, BLACK_SPACE_START + 10, str, strlen(str), 1);
		width = extract_str_fitting_width(&pText, str, LCD_BUF_WIDTH_PIXELS - LCD_LEFT_MARGIN, SUBTITLE_FONT_IDX);
		if (strlen(str))
			render_string(SUBTITLE_FONT_IDX, LCD_LEFT_MARGIN, BLACK_SPACE_START + 30, str, strlen(str), 1);
		extract_str_fitting_width(&pText, str, LCD_BUF_WIDTH_PIXELS - LCD_LEFT_MARGIN, SUBTITLE_FONT_IDX);
		if (strlen(str))
			render_string(SUBTITLE_FONT_IDX, LCD_LEFT_MARGIN, BLACK_SPACE_START + 50, str, strlen(str), 1);
		extract_str_fitting_width(&pText, str, LCD_BUF_WIDTH_PIXELS - LCD_LEFT_MARGIN, SUBTITLE_FONT_IDX);
		if (strlen(str))
			render_string(SUBTITLE_FONT_IDX, LCD_LEFT_MARGIN, BLACK_SPACE_START + 70, str, strlen(str), 1);
	}
	else
	{
		pText = get_nls_text("restricted");
		extract_str_fitting_width(&pText, str, LCD_BUF_WIDTH_PIXELS - LCD_LEFT_MARGIN, SUBTITLE_FONT_IDX);
		if (strlen(str))
			render_string(SUBTITLE_FONT_IDX, LCD_LEFT_MARGIN, BLACK_SPACE_START + 10, str, strlen(str), 1);
		extract_str_fitting_width(&pText, str, LCD_BUF_WIDTH_PIXELS - LCD_LEFT_MARGIN, SUBTITLE_FONT_IDX);
		if (strlen(str))
			render_string(SUBTITLE_FONT_IDX, LCD_LEFT_MARGIN, BLACK_SPACE_START + 30, str, strlen(str), 1);
		extract_str_fitting_width(&pText, str, LCD_BUF_WIDTH_PIXELS - LCD_LEFT_MARGIN, SUBTITLE_FONT_IDX);
		if (strlen(str))
			render_string(SUBTITLE_FONT_IDX, LCD_LEFT_MARGIN, BLACK_SPACE_START + 50, str, strlen(str), 1);
		extract_str_fitting_width(&pText, str, LCD_BUF_WIDTH_PIXELS - LCD_LEFT_MARGIN, SUBTITLE_FONT_IDX);
		if (strlen(str))
			render_string(SUBTITLE_FONT_IDX, LCD_LEFT_MARGIN, BLACK_SPACE_START + 70, str, strlen(str), 1);
	}
	pText = get_nls_text("set_password");
	render_string(SUBTITLE_FONT_IDX, -1, 151, pText, strlen(pText), 0);
	guilib_fb_unlock();
	display_mode = DISPLAY_MODE_RESTRICTED;
	keyboard_set_mode(KEYBOARD_RESTRICTED);
	restricted_screen_mode = RESTRICTED_SCREEN_FIRST_TIME_PASSWORD;
}
Example #10
0
void handle_password_key(char keycode)
{
	switch (restricted_screen_mode)
	{
	case RESTRICTED_SCREEN_FIRST_TIME_PASSWORD:
	case RESTRICTED_SCREEN_SET_PASSWORD:
	case RESTRICTED_SCREEN_CONFIRM_PASSWORD:
	case RESTRICTED_SCREEN_CHECK_PASSWORD:
	case RESTRICTED_SCREEN_CHANGE_PASSWORD:
		if (keycode == 'Y') {
			if (restricted_screen_mode == RESTRICTED_SCREEN_FIRST_TIME_PASSWORD)
			{
				password_str_len = 0;
				keyboard_set_mode(KEYBOARD_PASSWORD_CHAR);
				enter_password_screen(get_nls_text("set_password"));
				restricted_screen_mode = RESTRICTED_SCREEN_SET_PASSWORD;
			}
			else if (restricted_screen_mode == RESTRICTED_SCREEN_SET_PASSWORD && password_str_len > 0)
			{
				restricted_screen_mode = RESTRICTED_SCREEN_CONFIRM_PASSWORD;
				strcpy(password1, password_string);
				password_str_len = 0;
				if (restriction_filter_off == -1)
					enter_password_screen(get_nls_text("re_enter_password"));
				else
					enter_password_screen(get_nls_text("re_enter_new_password"));
			}
			else if (restricted_screen_mode == RESTRICTED_SCREEN_CONFIRM_PASSWORD && password_str_len > 0)
			{
				if (strcmp(password1, password_string))
				{
					password_str_len = 0;
					restricted_screen_mode = RESTRICTED_SCREEN_SET_PASSWORD;
					enter_password_screen(get_nls_text("passwords_not_match"));
				}
				else
				{
					restriction_filter_off = 0;
					save_password(1);
					restricted_screen_mode = RESTRICTED_SCREEN_FILTER_ON_OFF;
					filter_on_off();
				}
			}
			else if (password_str_len > 0)
			{
				check_password();
			}
		} else if (keycode == WL_KEY_BACKSPACE) {
			password_remove_char();
		} else if (is_supported_search_char(keycode)) {
			password_add_char(tolower(keycode));
		}
		break;
	case RESTRICTED_SCREEN_FILTER_ON_OFF:
		if (keycode == 'Y') {
			restriction_filter_off = 0;
			if (init_filtering)
			{
				init_filtering = 0;
				search_set_selection(-1);
				display_mode = DISPLAY_MODE_INDEX;
				keyboard_set_mode(wiki_default_keyboard());
				repaint_search();
			}
			else
			{
				display_mode = DISPLAY_MODE_ARTICLE;
				display_retrieved_article(saved_idx_article);
			}
		} else if (keycode == 'N') {
			restriction_filter_off = 1;
			save_password(2);
			if (init_filtering)
			{
				init_filtering = 0;
				search_set_selection(-1);
				display_mode = DISPLAY_MODE_INDEX;
				keyboard_set_mode(wiki_default_keyboard());
				repaint_search();
			}
			else
			{
				display_mode = DISPLAY_MODE_ARTICLE;
				display_retrieved_article(saved_idx_article);
			}
		}
		break;
	case RESTRICTED_SCREEN_FILTER_OPTION:
		if (keycode == 'Y') {
			filter_option_to_set = FILTER_OPTION_TO_SET_ON;
			password_str_len = 0;
			check_password();
		}
		else if (keycode == 'N') {
			filter_option_to_set = FILTER_OPTION_TO_SET_OFF;
			password_str_len = 0;
			check_password();
		}
		if (keycode == 'P') {
			password_str_len = 0;
			keyboard_set_mode(KEYBOARD_PASSWORD_CHAR);
			enter_password_screen(get_nls_text("enter_old_password"));
			restricted_screen_mode = RESTRICTED_SCREEN_CHANGE_PASSWORD;
		}
		break;
	default:
		break;
	}
}
Example #11
0
void filter_option(void)
{
	int i;
	unsigned char *pText;

	display_mode = DISPLAY_MODE_RESTRICTED;
	keyboard_set_mode(KEYBOARD_FILTER_OPTION);
	restricted_screen_mode = RESTRICTED_SCREEN_FILTER_OPTION;
	guilib_fb_lock();
	memset(&framebuffer[(BLACK_SPACE_START - 6)* LCD_VRAM_WIDTH_PIXELS / 8], 0, 6 * LCD_VRAM_WIDTH_PIXELS / 8);
	memset(&framebuffer[BLACK_SPACE_START * LCD_VRAM_WIDTH_PIXELS / 8], 0xFF, (LCD_HEIGHT_LINES - BLACK_SPACE_START)* LCD_VRAM_WIDTH_PIXELS / 8);

	pText = get_nls_text("filter_options");
	render_string(TITLE_FONT_IDX, -1, 60, pText, strlen(pText), 1);

	framebuffer[106 * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xFC;
	memset(&framebuffer[106 * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
	framebuffer[106 * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x3F;
	for (i = 107; i <= 126; i++)
	{
		framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xF8;
		memset(&framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
		framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x1F;
	}
	framebuffer[127 * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xFC;
	memset(&framebuffer[127 * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
	framebuffer[127 * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x3F;

	framebuffer[135 * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xFC;
	memset(&framebuffer[135 * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
	framebuffer[135 * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x3F;
	for (i = 136; i <= 155; i++)
	{
		framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xF8;
		memset(&framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
		framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x1F;
	}
	framebuffer[156 * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xFC;
	memset(&framebuffer[156 * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
	framebuffer[156 * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x3F;

	framebuffer[164 * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xFC;
	memset(&framebuffer[164 * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
	framebuffer[164 * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x3F;
	for (i = 165; i <= 185; i++)
	{
		framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xF8;
		memset(&framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
		framebuffer[i * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x1F;
	}
	framebuffer[186 * LCD_VRAM_WIDTH_PIXELS / 8 + 1] = 0xFC;
	memset(&framebuffer[186 * LCD_VRAM_WIDTH_PIXELS / 8 + 2], 0, 26);
	framebuffer[186 * LCD_VRAM_WIDTH_PIXELS / 8 + 28] = 0x3F;

	pText = get_nls_text("turn_filter_on");
	render_string(SUBTITLE_FONT_IDX, -1, 108, pText, strlen(pText), 0);
	pText = get_nls_text("turn_filter_off");
	render_string(SUBTITLE_FONT_IDX, -1, 137, pText, strlen(pText), 0);
	pText = get_nls_text("change_password");
	render_string(SUBTITLE_FONT_IDX, -1, 166, pText, strlen(pText), 0);
	guilib_fb_unlock();
	keyboard_set_mode(KEYBOARD_FILTER_OPTION);
}
Example #12
0
static uint8_t model_ip_edit (char *name, float x, float y, int8_t button, float data, uint8_t action) {
	keyboard_set_callback(model_ip_set);
	keyboard_set_text(ModelData[ModelActive].netip);
	keyboard_set_mode(setup.view_mode);
	return 0;
}