Программирование PocketBook без использования libinkview

 
Libroom Forum IndexPocketBookPocketBook Free
AuthorMessage

mamaich
Искушенный участник форума

Искушенный участник форума



Joined: 22 Mar 2010
Posts: 63



Posted: 29.03.2010 03:52    

Приведу найденную мной информацию по работе с железом PocketBook в обход официальной библиотеки.

Пока что приведу работу с контроллером e-ink Epson Broadsheet s1d13521. Данный контроллер, насколько я знаю, имеется в PocketBook 301+, 302.
Ссылка на информацию о железе: http://www.docin.com/p-41800526.html - онлайн чтение бесплатно, скачать в фиде PDFки стоит 2 электронных юаня.
Исходные тексты драйвера broadsheet использующегося в нашем устройстве не попадают под GPL, и в архиве с "сырцами линукса" лежат в виде .o файлов тут: \linux-2.6.18\drivers\video\epson. К счастью заголовочные файлы приведены полностью, а IDA очень неплохо работает с ARM.
Скорее всего "по историческим мотивам" libinkview.so не использует нативный интерфейс IOCTL для работы с broadsheet, а использует самописный довесок к драйверу в виде эмуляции команд контроллера PVI. Почему я решил что самописный - да потому что у более новых билдов линукса испольщуется опенсорсный драйвер broadsheet, в котором данный IOCTL отсутствует.
Команды реализованы в файле built-in.o, прототипы в s1d13521fb.h и s1d13521ioctl.h.

Привожу примеры кода.
Инициализация s1d13521, возврат 0 если данный чип не найден
Code:
static int console=0;
int InitS1d13521()
{
    struct fb_fix_screeninfo finfo;
    console = open("/dev/fb0", O_RDWR, 0);

    if ( ioctl(console, FBIOGET_FSCREENINFO, &finfo) < 0 )
       return 0;

    if(strcmp(finfo.id,"s1d13521")!=0)
       return 0;

    return 1;
}

Чтение/запись внутренних регистров (см доку у китайцев):
Code:
int IssueWriteReg(int Reg, int Data)
{
    s1d13521_ioctl_cmd_params params;
    params.param[0]=Reg; params.param[1]=Data;
    return IssueCmd(S1D13521_WR_REG,&params);
}
int IssueReadReg(int Reg)
{
    s1d13521_ioctl_cmd_params params;
    params.param[0]=Reg; params.param[1]=0;
    IssueCmd(S1D13521_RD_REG,&params);
    return params.param[1];
}
int IssueCmd(int Cmd,s1d13521_ioctl_cmd_params *params)
{
    return ioctl(console, Cmd, params);
}
int IssueWriteBuf(void *Buf, int Len)
{
    s1d13521_ioctl_hwc hwc;
    hwc.buffer=Buf;
    hwc.value=Len;
    return ioctl(console,S1D13521_MEMBURSTWRITE,&hwc);
}

Данные функции libinkview.so вообще не использует - я их привожу для желающих "поиграться напрямую с железом". У меня не получилось переслать картинку по MEMBURSTWRITE - после ее вызова девайс перестает что либо выводить на экран до выключения или ребута.
Вызов функций для вывода на экран картинки 800х600 должен выглядеть так:
Code:
    static s1d13521_ioctl_cmd_params cmd_params;
    cmd_params.param[0] = (0x2 << 4);
    IssueCmd(S1D13521_LD_IMG,&cmd_params);
    IssueWriteReg(0x154,0);
    IssueWriteBuf(Buff,800*600/2);
    IssueCmd(S1D13521_LD_IMG_END,&cmd_params);
    cmd_params.param[0] = (3 << 8);        // 0=init,1,2,3
    IssueCmd(S1D13521_UPD_FULL,&cmd_params);
    IssueCmd(S1D13521_WAIT_DSPE_TRG,&cmd_params);
    IssueCmd(S1D13521_WAIT_DSPE_FREND,&cmd_params);


Дополнение: описание всех IOCTL-ов PVI есть тут: http://sourceforge.net/projects/thinspace/files/thinspace/1.00/thinspa ce_api_reference_1_00.pdf/download


Last edited by mamaich on 12.04.2010 03:12; edited 1 time in total
 
View user's profile ^

Finom1
Член клуба The eBook

Член клуба The eBook



Joined: 08 May 2008
Posts: 1855


Location: Одесса

Posted: 29.03.2010 03:55    

Может глупый вопрос. А нафига? Smile
 
View user's profile ^

mamaich
Искушенный участник форума

Искушенный участник форума



Joined: 22 Mar 2010
Posts: 63



Posted: 29.03.2010 04:13    

Как я уже сказал, libinkview работает с экраном через эмуляцию PVI.
Вот функция по посылке команды:
Code:

#pragma pack(1)
struct CmdBitmap
{
    unsigned short left,top,right,bottom;
    unsigned char data[0];
};
#pragma pack()
int IssuePviCmd(int Cmd, int InLen, int OutLen, void* Buff)
{
    static TDisplayCommand *TDC=(TDisplayCommand*)malloc(sizeof(TAG_TDisplayCommandHeader)+800*60 0/2);
    TDC->Owner=0;
    TDC->Command=Cmd;
    TDC->BytesToWrite=InLen;
    TDC->BytesToRead=OutLen;
    if(InLen && Buff)
        memcpy(TDC->Data,Buff,InLen);
    int ret=ioctl(console,CMD_SendCommand,TDC);
    if(OutLen && Buff)
        memcpy(Buff,TDC->Data,OutLen);
    return ret;
}

Список всех команд приведен в s1d13521ioctl.h, начинаются на dc_. Координаты обновляемого "квадрата" на экране передаются в big endian, соответсвтенно байты надо менять местами например так:
Code:
int swap(int a)
{
    return (a/256)+(a%256)*256;
}

Вот пример очистки экрана:
Code:
    static char Buff[800*600];
    Buff[0]=1;  // 0,1,2,3 - черный/2 оттенка серого и белый
    IssuePviCmd(dc_EraseDisplay,1,1,&Buff);


Posted after 1 minute 7 seconds:

"Внутренний" формат буфера картинки у драйвера - 4 бита на пиксел. То есть в одном байте - 2 пиксела. Размер передаваемого буфера обязан быть кратен 4 байтам (он округляется в большую сторону).
Вот пример вывода картинки (работающий пример):
Code:
    CmdBitmap *Bmp=(CmdBitmap*)malloc(sizeof(CmdBitmap)+800*600);

    for(int i=4; i<600>left=swap(0);
        Bmp->top=swap(0);
        Bmp->right=swap(i-1);
        Bmp->bottom=swap(i-1);
        IssuePviCmd(dc_PartialImage,sizeof(CmdBitmap)+i*i/2,0,Bmp);
        IssuePviCmd(dc_StopNewImage,0,0,0);
        IssuePviCmd(dc_DisplayPartial,0,0,0);
        long long end=hw_timeinms();
        fprintf(F,"%d,%d\n",i,(int)(end-start));
        fflush(F);
    }

Команда IssuePviCmd(dc_DisplayPartial,0,0,0); - вывод чернобелой картинки (240 мс), команда IssuePviCmd(dc_DisplayPartialGU,0,0,0); - вывод картинки в 16 оттенков серого (800 с чем-то мсек).
Более подробно по командам:
IssuePviCmd(dc_PartialImage,...). Реализация - тупой memcpy() переданного буфера в соответствущее место "виртуальной видеопамяти", с установкой обновляемого участка экрана во внутренней структуре драйвера ST_PVI_CONFIG (поля StartX; StartY; Width; Height, при установке "переворачиваются" байты и вычисляется ширина/высота по формуле width=right-left+1). То естьданная команда не приводит к обновлению экрана и отрабатывает почти мгновенно.
Следующая команда IssuePviCmd(dc_StopNewImage,...) - просто заглушка, она ничего не делает в реальности, видать использовалась в PVI контроллере как сигнал об окончании передачи картинки.
IssuePviCmd(dc_DisplayPartial,0,0,0) - эта команда уже занимается отрисовкой "запомненной" ранее картинки. Она устанавливает регистры контроллера, смотрит обновляем ли мы весь экран или только участок, после чего шлет картинку в контроллер (как я понял может использоваться DMA), после чего говорит "обнови картинку, такой-то квадрат" и начинает тупо ждать завершения обновления. Ожидание производится провверкой бита в регистре, причем во время этого пустого цикла не догадываются даже yield делать. Я уже молчу, что могли бы сообщить процессору погонять пустые циклы (аналог команды HLT у х86) и вместо поллинга использовать прерывания. За счет этого могли бы отдать квант времени параллельным потокам или хотя бы поберечь батарейку. Но это так, на совести кривых рук кодеров.

Posted after 4 minutes 42 seconds:

FINoM wrote:
Может глупый вопрос. А нафига? Smile

См конец моего поста - кривые руки авторов (я думаю что китайцев, создавших EB600EM так как команда PocketBook показала нормальный код). В частности если переделать видеодрайвер, то мы можем сэкономить на батарейке либо отдавать время на полезную фоновую работу.

А вообще - я хотел понять для себя почему скорость обновления экрана не зависит от размера перерисовываемого участка. Были мысли что это баг в libinkview.so или драйвере broadsheet, но так как код - правильный, видать тут мы просто уперлись в особенность железа. Походу у еинка перерисовывается весь экран за раз, а то что мы выдаем как картинку служит своего рода "маской" для черного цвета.

Posted after 9 minutes 47 seconds:

Инфу выкладываю сюда, чтобы гугл проиндексировал - чтобы кто-нибудь, задавшийся аналогичными вопросами не тратил свое время а нашел мои выкладки.
Кстати, баг на форуме - тег code сожрал то что было в угловых скобках, хотя по идее он должен их нормально отрабатывать. То что выше выглядит как "for(int i=4; i<600>left=swap(0); " должно было быть "for(int i=4; i&lt600; i+=4) { memset(Bmp,(i/4)&1?0x0:0xff,sizeof(CmdBitmap)+800*600); long long start=hw_timeinms(); Bmp->left=swap(0);"
 
View user's profile ^

mnk
Бывалый участник форума

Бывалый участник форума



Joined: 30 Nov 2009
Posts: 134



Posted: 29.03.2010 13:33    

FINoM wrote:
Может глупый вопрос. А нафига?

В дополнение к тому, что сказал mamaich добавлю: inkview еще и достаточно убога в плане возможностей.

mamaich:
а еще бы информацию о кнопках/датчиках... Smile
 
View user's profile ^

Lamn
Искушенный участник форума

Искушенный участник форума



Joined: 09 Dec 2009
Posts: 43


Location: Москва

Posted: 29.03.2010 23:11    

FINoM wrote:
Может глупый вопрос. А нафига? Smile


Потому что libinkview - то еще убожество. Например, она "из коробки" не дает возможности поллить события. Плохо задокументирована. Плохо поддерживается (сколько там дней висит мой топик про отсуствие символов hw*?).

Вместо того, чтобы портировать (industry standard) SDL, авторы прошивки решили изобрести собственный велосипед. Очень хорошо, что нашелся человек, прилагающий усилия к исправлению этой ошибки менеджмента.
 
View user's profile ^

ufff
Искушенный участник форума

Искушенный участник форума



Joined: 28 Aug 2009
Posts: 56


Location: Petrozavodsk

Posted: 30.03.2010 11:49    

Lamn wrote:
Вместо того, чтобы портировать (industry standard) SDL, авторы прошивки решили изобрести собственный велосипед. Очень хорошо, что нашелся человек, прилагающий усилия к исправлению этой ошибки менеджмента.

На каких устройствах живет этот "industry standard" прямо "из коробки"? Smile Все лепят свои велосипеды, чтобы добиться максимальной производительности (SDL местами еще тот тормоз, так как сам является оберткой)...ну, и наверное, усложнить перенос на другие платформы Smile
 
View user's profile ^

mnk
Бывалый участник форума

Бывалый участник форума



Joined: 30 Nov 2009
Posts: 134



Posted: 30.03.2010 14:20    

ufff wrote:
...ну, и наверное, усложнить перенос на другие платформы

Думаю, это - главная задача "велосипедостроителей".
Если у всех будут одинаковые не только железки, но и софт, то... и цена станет одинаковой. Потребителю, конечно, хорошо. Но производителя это не устраивает. Smile
 
View user's profile ^

yuryfdr
Член клуба The eBook

Член клуба The eBook



Joined: 18 Jun 2009
Posts: 694



Posted: 30.03.2010 22:57    

Lamn wrote:
FINoM wrote:
Может глупый вопрос. А нафига? Smile


Потому что libinkview - то еще убожество. Например, она "из коробки" не дает возможности поллить события. Плохо задокументирована. Плохо поддерживается (сколько там дней висит мой топик про отсуствие символов hw*?).



я бы сказал - никак не задокументирована.
по поводу hw_* открыли бы эмуляторную, хотя бы часть, я думаю давно бы собрали работающую версию (и возможно без костыля wine).
а armную могли бы и как дрова nvidia на крайняк сделать.

в СДЛ, кстати гуя нет (кнопок и т.д.), на сколько я помню.
 
View user's profile ^

DmitryZ
Кандидат в члены клуба The eBook

Кандидат в члены клуба The eBook



Joined: 29 Dec 2006
Posts: 295



Posted: 31.03.2010 14:14    

Вообще-то SDL и inkview пересекаются в двух точках - низкоуровневая графика и обработка событий. Как можно микроволновку заменить "industry standard" стиральной машиной?
 
View user's profile ^

Lamn
Искушенный участник форума

Искушенный участник форума



Joined: 09 Dec 2009
Posts: 43


Location: Москва

Posted: 31.03.2010 15:41    

yuryfdr wrote:
в СДЛ, кстати гуя нет (кнопок и т.д.), на сколько я помню.
Это должно было быть либой поверх SDL.

Добавлено спустя 23 минуты 48 секунд:

DmitryZ wrote:
Вообще-то SDL и inkview пересекаются в двух точках - низкоуровневая графика и обработка событий.
Точно, они пересекаются, и приличный кусок функциональности inkview лежит именно в пересечении. Многим программам ничего кроме "низкоуровневой графики и обработки событий" не требуется. И очень многие программы "из коробки" умеют работать с SDL, что могло бы многократно упростить их портирование на PB.

DmitryZ wrote:
Как можно микроволновку заменить "industry standard" стиральной машиной?
Скорее, речь идет шатающейся избушке на курьих ножках. А могла бы быть избушка на "industry standard" бетонном фундаменте.
 
View user's profile ^

Antuan
Член клуба The eBook

Член клуба The eBook



Joined: 30 Sep 2009
Posts: 11643


Location: Киев

Posted: 31.03.2010 19:05    

Lamn wrote:
Скорее, речь идет шатающейся избушке на курьих ножках. А могла бы быть избушка на "industry standard" бетонном фундаменте.

Ну так избушка на курногах мобильная, а на фундаменте далеко не уедешь, да с места вообще не сдвинешь, ресурсы контроллера ведь не бесконечны, и какие собственно программы имеет смысл портировать на узкоспециализированное мобильное устройство?
_________________
PB 360° (v.15.3) | PB Pro 602 Grey (v.2.2.1a fastdrv) | PB A7 (v.1.3.1583) - подарок от PocketBook.
 
View user's profile ^

Lamn
Искушенный участник форума

Искушенный участник форума



Joined: 09 Dec 2009
Posts: 43


Location: Москва

Posted: 31.03.2010 23:00    

Antuan wrote:
ресурсы контроллера ведь не бесконечны
А почему вы думаете, что SDL использует ресурсы существенно менее эффективно, чем inkview? Авторы драйвера, например, плевать хотели на ресурсы: делают поллинг вместо того, чтобы ждать прерывания.

Antuan wrote:
какие собственно программы имеет смысл портировать на узкоспециализированное мобильное устройство?
Метро, калькулятор высокоточный, календарь-органайзер, кучу разных игрушек (ту же цивилизацию, к примеру), веб-броузер, да мало ли что.. А так каждый порт превращается в отдельный велосипед. Со всеми сопуствующими велосипедированию минусами: куцая функциональность, обилие багов, маленькое комьюнити...
 
View user's profile ^

Antuan
Член клуба The eBook

Член клуба The eBook



Joined: 30 Sep 2009
Posts: 11643


Location: Киев

Posted: 31.03.2010 23:14    

Lamn wrote:
А почему вы думаете, что SDL использует ресурсы существенно менее эффективно, чем inkview?

Универсально всегда будет хуже справляться с конкретной задачей чем узкоспециальное. Проще говоря швейцарский нож вещь красивая, но набор профессиональных инструментов, в котором каждый инструмент предначертан для конкретной задачи, все же удобнее в использовании.
Lamn wrote:
Метро,....

Есть, хоть и недоделанная.
Куча игрушек тоже есть, вся беда что они в основном на раз посмотреть, ну может быть пригодятся тем, кто много в дороге времени проводит, так что бы времечко убить, когда читать уже либо нечего, либо влом.
Lamn wrote:
календарь-органайзер, веб-броузер,

Вряд ли удастся портировать напрямую, очень уж экран специфичен, а органайзеру еще и вякалка нужна, иначе он теряет всякий смысл.
_________________
PB 360° (v.15.3) | PB Pro 602 Grey (v.2.2.1a fastdrv) | PB A7 (v.1.3.1583) - подарок от PocketBook.
 
View user's profile ^

Lamn
Искушенный участник форума

Искушенный участник форума



Joined: 09 Dec 2009
Posts: 43


Location: Москва

Posted: 01.04.2010 00:26    

Antuan wrote:
Универсально всегда будет хуже справляться с конкретной задачей чем узкоспециальное. Проще говоря швейцарский нож вещь красивая, но набор профессиональных инструментов, в котором каждый инструмент предначертан для конкретной задачи, все же удобнее в использовании.
Не соглашусь. В мире IT довольно много примеров, где хорошо проработанные универсальные решения оказываются эффективнее наколенных узкоспециализированных поделок. По той причине, что в них вложено в тысячи раз больше усилий, исследованы и учтены узкие места. Автор узкоспециализированного инструмента просто не в состоянии позволить себе сравнимых трудозатрат.

Посудите сами: вокруг нас сплошь и рядом переиспользуемые библиотеки, графические тулкиты и фреймворки, 3д- и физические движки, универсальные языки программирования. Каждый из этих инструментов делается сразу для широчайшего круга задач и аппаратных платформ, то есть весьма универсален.

И мне лично не пока не видно причин, по которым SDL работал бы на PB существенно менее эффективно, чем inkview.
 
View user's profile ^

Antuan
Член клуба The eBook

Член клуба The eBook



Joined: 30 Sep 2009
Posts: 11643


Location: Киев

Posted: 01.04.2010 01:18    

Lamn wrote:
графические тулкиты и фреймворки,

Вот вот, и приложения писанные под эти фреймворки весят в десятки если не сотни раз больше, чем написанные на языке пусть и высокого уровня(про ассемблер речи нет), но без этих фремворков.
Современные приложения выполняя все те же функции, что их версии годичной или двухгодичной давности, в некоторых случая становятся настоящими монстрами, и не смотря на с каждым годом растущую процессорную мощь, все равно тормозят безбожно.
Lamn wrote:
И мне лично не пока не видно причин, по которым SDL работал бы на PB существенно менее эффективно, чем inkview.

Причина одна, уже есть inkview, и переход не имеет особого смысла в первую очередь для потребителя(книга не швейцарский нож, это телефоны ими становятся, разве что минет не делают), и для производителя тоже лишний гимор. Мы же можем побаловаться, но и только.
_________________
PB 360° (v.15.3) | PB Pro 602 Grey (v.2.2.1a fastdrv) | PB A7 (v.1.3.1583) - подарок от PocketBook.
 
View user's profile ^

DmitryZ
Кандидат в члены клуба The eBook

Кандидат в члены клуба The eBook



Joined: 29 Dec 2006
Posts: 295



Posted: 02.04.2010 11:07    

Для современных устройств с сенсорным экраном действительно есть смысл использовать стандартные библиотеки, но уже не низкоуровневые, а полнофункциональные (тот же gtk). libinkview создавался для устройства с файловой системой cramfs размером 5.5 мб, и задача стояла реализовать в этом объеме всю необходимую функциональность. А о портировании чего-либо серьёзного на несенсорные устройства говорить нет смысла - все программы рассчитаны как минимум на управление мышью или полноценной клавой. Конечно, извратиться можно и с джойстиком.. но это именно чтобы поиграться пару дней.
 
View user's profile ^

mamaich
Искушенный участник форума

Искушенный участник форума



Joined: 22 Mar 2010
Posts: 63



Posted: 05.04.2010 03:24    

DmitryZ
Согласен. Без сенсорного экрана - ловить нечего. Потому я и охладел к доделыванию SDL. Джойстик - вещь весьма неудобная.
Хотя - как вариант заюзать USB хост, имеющийся в покетбуках и подключить к нему мышу.
Никто еще не разбирался как порт переключить? Судя по схеме на опенинкпот - переключатель на какое-то GPIO выведен, но схема - похоже для более старых девайсов. Драйвер УСБ хоста у нас в прошивке есть, дрова для поддержки HID девайсов, думаю, знатоки линукса без труда добавят. Переходник на УСБ хост с доп питанием сделать не проблема.

Добавлено:
Нету у нас УСБ хоста. В 301+ есть нераспаянный УСБ разъем рядом с кнопками громкости. Его видно на фотке: http://openinkpot.org/attachment/wiki/Device/EB600/Photos/NetronixEB60 0_Elonex_600eb.jpg
Вряд ли кто пытался его напаять самостоятельно.


Last edited by mamaich on 12.04.2010 03:03; edited 1 time in total
 
View user's profile ^

mamaich
Искушенный участник форума

Искушенный участник форума



Joined: 22 Mar 2010
Posts: 63



Posted: 12.04.2010 03:01    

Восстановил исходник pvi_io.c
В "сырцах" которые лежан на pocketbook-free от него есть только объектный файл, но по оставшемуся свап файлу .pvi_io.c.swo мне удалось реконструировать полный сырец данного драйвера. Сразу отмечу - это драйвер /dev/pvi_io а не /dev/pvi_ioc. Сырец от второго - был бы много интереснее, он позволяет среди всего прочего опрашивать GPIO, состояния кнопок, УСБ и тп.

Вот частичный сырец, для индексации гуглом:
Code:

...
#define      DEVICE_NAME       "pvi_io"
#define      DEVICE_MINJOR      190

#define      CM_SD_IN         117
#define    CM_PWR_ON2      112
#define    CM_AUDIO_PWR   113
#define      CET_PWR_BUTTON      110
#define    CM_USB_Plug_IN      108
#define    CM_AC_CK         109
#define      CM_nLED            101
#define      CM_nLED_CPU      102
#define      POWER_OFF_COMMAND      0xC0
#define      GET_LnBATT_CPU   0XC2
#define      GET_VBATT_TH      0XC3
#define      CM_SIGUSR1      104
//kay 20081110 for detecting SD write protect
#define      CM_SD_PROTECT      120

#define      GPIO_POWER_IO_A14   S3C2410_GPA14
#define      GPIO_POWER_IO_B5   S3C2410_GPB5

...

static int  ioctlDriver(struct inode *inode, struct file *filp, unsigned int command, unsigned long arg)
{
   unsigned long i = 0;
   unsigned int p = arg;//*(unsigned int *)arg;   
   if(!Driver_Count){
      printk("pvi_io : do not open\n");
      return -1;   
   }
   switch(command)
   {
      case POWER_OFF_COMMAND:
...
         break;
      case CM_SD_IN:
...
         break;
      case CM_USB_Plug_IN:
...
         break;
      case CET_PWR_BUTTON:
...
         break;
      case GET_LnBATT_CPU:
...
         break;
      case GET_VBATT_TH:
...
         break;
      case CM_AC_CK:
...
//         printk("Kernel---USB Adaptor Check GPF1 [p: %d]\n", p);
         break;
      case CM_PWR_ON2:
...
//         printk("Kernel---Power ON2 GPB5 [p: %d]\n", p);
         break;
      case CM_AUDIO_PWR:
...
//         printk("Kernel---Audio Power GPB9 [p: %d]\n", p);
         break;
      case CM_nLED:
...
//         printk("===Kernel---LED Stat(GPB8): %d===\n", p);
         break;         
      case CM_nLED_CPU:
...
//         printk("===Kernel---LED Tout StatGPB1: %d===\n", p);
         break;         
      case CM_SD_PROTECT:
...
         break;
      default:
         printk("pvi_io : do not get the command [%d]\n", command);
         return -1;
   }
   return 0;
}   

Полный сырец тут: http://rapidshare.com/files/374803099/pvi_io.c
Я не пробовал использовать данные IOCTLы, но судя по коду ими можно "поморгать" лампочкой, узнать состояние батарейки, УСБ и СД карты (в том числе состояние ее защиты от записи).
 
View user's profile ^

Nomad1
Developer

Developer



Joined: 13 Sep 2010
Posts: 1721



Posted: 22.01.2011 20:48    

Прошу прощения за оффтопик, но есть у меня такой вопрос к автору (или тем, кто в курсе): используются ли в драйвере s1d13521 для PB команды 0x5 SLP или 0x04 STBY для сбережения энергии? К примеру, в драйвере Nook вообще все операции записи на s1d13521 окружены парой RUN_SYS + SLP, т.е. все время бездействия экран находится в режиме глубокого сна. В данный момент я как раз работаю над определением важности этой операции - либо это эффективно, либо бесполезно из-за потерь на включение/выключение, либо вообще не существенно. Буду рад посоветоваться с коллегами по этому вопросу, ибо в первом варианте от этого может выиграть и PB, а во втором Nook.
_________________
Twitter: @NomadRunserver
 
View user's profile ^

Nomad1
Developer

Developer



Joined: 13 Sep 2010
Posts: 1721



Posted: 09.02.2011 21:12    

Исследование показало: вариант со слипом после каждой операции более экономичен, чем без него.
_________________
Twitter: @NomadRunserver
 
View user's profile ^
Libroom Forum IndexPocketBookPocketBook FreeAll times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

© Libroom, 2021