![]() |
#151 |
JSR FFD2
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 305
Karma: 1045
Join Date: Aug 2008
Location: Rotterdam, Netherlands, Europe, Sol 3
Device: iliad
|
![]() |
![]() |
![]() |
![]() |
#152 |
Guru
![]() ![]() ![]() ![]() ![]() ![]() Posts: 976
Karma: 687
Join Date: Nov 2007
Device: Dell X51v; iLiad v2
|
Is there any improvement in speed in xepdmgr 1.9i? I have a feeling that the speed of screen refresh is improved. I am not quite sureabout the fact, since the improvement in speed is very tiny, and maybe it's just my imagination.
|
![]() |
![]() |
Advert | |
|
![]() |
#153 | |
Evangelist
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 423
Karma: 1517132
Join Date: Jun 2006
Location: Madrid, Spain
Device: quaderno, remarkable2, yotaphone2, prs950, iliad, onhandpc, newton
|
Quote:
![]() So, in short, it shouldn't be any faster... |
|
![]() |
![]() |
![]() |
#154 |
Guru
![]() ![]() ![]() ![]() ![]() ![]() Posts: 976
Karma: 687
Join Date: Nov 2007
Device: Dell X51v; iLiad v2
|
|
![]() |
![]() |
![]() |
#155 |
Guru
![]() ![]() ![]() ![]() ![]() ![]() Posts: 976
Karma: 687
Join Date: Nov 2007
Device: Dell X51v; iLiad v2
|
Antartica,
I am trying to create a simple program so that I can call it to do a full-screen refresh in shell. The following code are borrowed from your xepdmgr. I can compile it with gcc without problem, but I haven't really tried it on my iLiad. Please comment on the following code if it will provide what I want. Thank you so much. Code:
#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/ioctl.h> /* ioctl numbers */ #define FBIO_UPLOAD_WAVEFORM 0x40007606 #define FBIO_ERASE_WHITE 0x40087602 #define FBIO_DISPLAY 0x40087601 #define FBIO_DISPLAYPARTIAL 0xfff /* ioctl structures parameters */ #define WAVEFORM_4BPP_IMAGE 1 #define WAVEFORM_DRAW 4 #define WAVEFORM_FAST_BLACK_WHITE 6 #define WAVEFORM_TYPING 9 /* ioctl structures */ struct display_update_info { int waveform; int sequence; }; int main(int argc, char *argv[], char *envp[]){ struct display_update_info Update; int error; Update.waveform = WAVEFORM_4BPP_IMAGE; Update.sequence = 0; int fd; if((fd=open("/dev/fb0",O_RDWR))!=-1){ ioctl(fd, FBIO_ERASE_WHITE, &Update); } return(0); } |
![]() |
![]() |
Advert | |
|
![]() |
#156 | |
Evangelist
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 423
Karma: 1517132
Join Date: Jun 2006
Location: Madrid, Spain
Device: quaderno, remarkable2, yotaphone2, prs950, iliad, onhandpc, newton
|
Quote:
Code:
... int fd; if((fd=open("/dev/fb0",O_RDWR))!=-1){ ioctl(fd, FBIO_ERASE_WHITE, &Update); close(fd); } return(0); } BUT bear in mind that xepdmgr cannot be used without X; OTOH plain displayMgr can. |
|
![]() |
![]() |
![]() |
#157 |
Evangelist
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 423
Karma: 1517132
Join Date: Jun 2006
Location: Madrid, Spain
Device: quaderno, remarkable2, yotaphone2, prs950, iliad, onhandpc, newton
|
Ups! I've just realized that the ioctl that you have selected is for clearing the screen, not for updating it. You have to use FBIO_DISPLAY to do a screen refresh (it has the same parameters as the ioctl to clear the screen, so the change to your code is smallish):
Code:
ioctl(fd, FBIO_DISPLAY, &Update); |
![]() |
![]() |
![]() |
#158 |
Guru
![]() ![]() ![]() ![]() ![]() ![]() Posts: 976
Karma: 687
Join Date: Nov 2007
Device: Dell X51v; iLiad v2
|
Thanx. I didn't really try my above code on my iLiad. The displayMgrClient that you mentioned can fulfill my objective.
BTW, does it means that the function that I copied from xepdmgr is buggy? Last edited by ericshliao; 10-25-2009 at 09:56 AM. |
![]() |
![]() |
![]() |
#159 |
Evangelist
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 423
Karma: 1517132
Join Date: Jun 2006
Location: Madrid, Spain
Device: quaderno, remarkable2, yotaphone2, prs950, iliad, onhandpc, newton
|
No; I've looked up the sources and the function that does the refresh in xepdmgr_einkfb.c uses the correct ioctl.
|
![]() |
![]() |
![]() |
#160 | |
Junior Member
![]() Posts: 3
Karma: 10
Join Date: Dec 2009
Device: none
|
XEPD Manager for TinyX + Wxwidgets apps
Hai,
I request you to send me some tutorials/examples regarding usage and understanding on X EPD to use it in applications. I having some query's on X EPD Manager: Can We use it for screen refresh in applications using WX widgets and TinyX server. can we use it in applications which are ported on hardware having dual screen. Regards, tango. Quote:
|
|
![]() |
![]() |
![]() |
#161 | |
Evangelist
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 423
Karma: 1517132
Join Date: Jun 2006
Location: Madrid, Spain
Device: quaderno, remarkable2, yotaphone2, prs950, iliad, onhandpc, newton
|
Quote:
Code:
$ xdpyinfo | grep DAMAGE About WX widgets: xepdmgr is toolkit-agnostic, so that is also covered. You can use it for wxwidgets applications. About using xepdmgr in hardware different from the iliad: you will have to adapt the code, as it uses ioctls specific of the iliad to signal the e-ink driver to refresh. The dual screen setup is not a problem. If only one of the screens is e-ink, just have different X servers for each screen (so each has its own display, i.e. :0 and :1). Specifically you will have to 1. adapt the xepdmgr_einkfb.c file for your e-ink driver 2. insert the following code in xepdmgr.c to omit the dependencies to irex libraries (code taken from the DUMMY_BUILD target): Code:
/* Setup some macros so that we can build without irex libraries */ static int dummy_var; #define initServer(ptr_udp_fd,b) ((*(ptr_udp_fd))=0) #define dmMessageParser(a,b) 1 #define dmDisplay(a,b) dummy_var=0 #define erIpcStartClient(a,b) ((*(b))=0) #define clDisplayUpdated(a) dummy_var=0 #define busySetBusy(a,b) dummy_var=0 4. Build xepdmgr ("make xepdmgr") 5. In the target hardware, use xepdmgr in "server mode", that is, launching it as "./xepdmgr :0". Hope that helps. NOTES: - there is an alternative implementation in lua by Hansel called "xx" elsewhere in the forums. May be worthwhile to take a look at it. - the "meat" of xepdmgr is just using the damage extension of the X server to have the information of when something has changed in the display and what portion of the display to update. You can roll your own update maanager easily having the code of xepdmgr and xx as a guide. BTW, out of curiosity, if you are allowed to say it: to what e-reader are you intending to port it? Happy hacking ![]() |
|
![]() |
![]() |
![]() |
#162 | |
Junior Member
![]() Posts: 3
Karma: 10
Join Date: Dec 2009
Device: none
|
Send Xdamage events to xepdmgr
Hi Antartica,
I want to send damage events to "xepdmgr" with (x,y) coordinates and (width,height) of the damaged region.The present "xepdmgrclient.c" is sending only property event. I found in xepdmgr is capable of receiving damage events. I am not clear in sending damage event to xepdmgr, whether any changes required in xepdmgr server side also. note: I am exploring "xepdmgr-1.0-iliad" code. Regards, tango. Quote:
|
|
![]() |
![]() |
![]() |
#163 | ||
Evangelist
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 423
Karma: 1517132
Join Date: Jun 2006
Location: Madrid, Spain
Device: quaderno, remarkable2, yotaphone2, prs950, iliad, onhandpc, newton
|
Quote:
xpedmgr gets the damage events directly from the X server. xepdmgrclient implements a protocol to send some messages to xepdmgr to optimize the screen refresh, but it is not needed for the basic operation. xepdmgrclient exists because it is very common for a reader application to update the entire screen with a new page of content and wanting to display it ASAP, not wanting the timeout to pool requests that xepdmgr uses in its "autonomous" operation. Also xepdmgrclient makes possible to avoid double-refreshes by signaling xpedmgr to "freeze" the display while doing some slow screen update, and "thaw" it after the drawing has finalised, hence updating the display only once (this is only useful for screen updates that are longer to perform than the xepdmgr timeouts, that are 500ms in the current 1.9i implementation). Quote:
https://www.mobileread.com/forums/sho...&postcount=146 If you have additional questions, don't hesitate to ask. Best regards, Antartica. |
||
![]() |
![]() |
![]() |
#164 | |
Junior Member
![]() Posts: 3
Karma: 10
Join Date: Dec 2009
Device: none
|
Refresh not happening properly on xll with xcb
Dear Antartica,
We are using X EPD Manager 1.3 version on X11(compiled with xcb option). The version of xcb is 1.1. In this case the refresh is not happening properly. (The screen will be refrehed partly initially later fully. In case of pop up windows of our application, each window is refreshed twice) I request you to suggest where is the problem. Thanks and Regards, P.Ravi Sankar. Quote:
|
|
![]() |
![]() |
![]() |
#165 | |
Evangelist
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 423
Karma: 1517132
Join Date: Jun 2006
Location: Madrid, Spain
Device: quaderno, remarkable2, yotaphone2, prs950, iliad, onhandpc, newton
|
Quote:
Code:
#define REFRESHTIMEOUTMS 500 Code:
#define REFRESHTIMEOUTMS 750 Rationale: After receiving a damaged area from the X server, xepdmgr waits for more damaged areas for REFRESHTIMEOUTMS milliseconds, and if no more damaged areas are received in that time period it refreshes the screen. Larger values for REFRESHTIMEOUTMS makes double-refreshes improbable, but provoke worse responsiveness. Requiring values higher than 1500 is a symptom that something is wrong, either in the app (too slow) or in xepdmgr (a timing bug?). |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Psychological Approach | shalini_singh | Lounge | 5 | 09-09-2009 04:33 AM |
New to Sony Reader - Best Approach | kougei | Sony Reader | 11 | 12-23-2008 10:42 PM |
iLiad xepdmgr algorithms dicussion thread | Antartica | iRex Developer's Corner | 14 | 11-17-2008 10:36 AM |
emelFM2 0.41 with xepdmgr | ericshliao | iRex | 0 | 10-06-2008 10:25 AM |
iLiad libX11.so.6, auto refresh | hansel | iRex Developer's Corner | 7 | 09-20-2008 08:40 AM |