Home

Advertisement

   Journal    Friends    Archive    User Info    Memories
 

Зажги свою жизнь!

Dec. 11th, 2009 11:40 am Symbian TRK on device debug problem

Very often you can get message in the debugger during application launch:

Suspended: Signal 'Exception 0' received. Description: A code abort exception has occurred

The reason can be wrong resource file. Check that all icon files and strings it refers are present.

Leave a comment

Nov. 2nd, 2009 03:35 pm CVwsSessionWrapper, ActivateView and VIEWSRV 11

To avoid "cool" panic while repeatedly launching the same app with ActivateView, use CVwsSessionWrapper only when you don't have COE environment (for example, from console/background server thread etc.)

In all other cases use CCoeAppUi::ActivateViewL(), it's much safer and more efficient.

Leave a comment

Oct. 25th, 2009 02:29 am ! for std::auto_ptr inside if crashes winscw compiler on Symbian

<code>
std::auto_ptr&lt;CBase&gt; p;
if (!p) ;  // BANG!
</code> 

C:\S60\PDT_1.1\Carbide.c++\x86Build\Symbian_Tools\Command_Line_Tools>mwccsym2.exe

Nokia Codewarrior C/C++ Compiler for Windows/x86.
Copyright (c) 2008, Nokia Corporation
All rights reserved.
Version 3.2.5 build 473 (Build 473)
Runtime Built: Apr 30 2008 14:33:37

Usage: mwccsym2.exe [-options]... [files]... [@response]...

Please enter 'mwccsym2.exe -help' for information about options.

Tags: , ,

Leave a comment

Oct. 25th, 2009 02:29 am New Carbide C++ 2.1 - Faster than old one!

Go to Downloads at http://developer.symbian.org, install PDT v1.1 and update Carbide C++ 2.0.4 inside into 2.1.

Installing PDT also adds SBSv2 toolchain (next version of Symbian build system). Looks like it's a bit more faster and cooler (python scripting instead of Perl?)

And yes, from Carbide 2.0.4, you have built-in Symbian news feeds, like in Visual Studio start page :)

Leave a comment

Aug. 18th, 2009 03:13 pm If you got strange and unexpected KERN-EXEC 3 on Symbian device...

...And  code looks perfect, but after some changes it crashes again in different place, that can mean that...

You're have STACK OVERFLOW!

Be careful, this error is not reproduced under emulator - it automatically extends stack size. By default on the most devices it's 8Kb. If you really need big stacks (deep recursion, big local buffers/arrays), just increase it with EPOCSTACKSIZE parameter in the mmp file.

Here is the link-proof: http://wiki.forum.nokia.com/index.php/KIS000387_-_Small_default_stack_size_in_S60_3rd_Edition

Leave a comment

Jul. 4th, 2009 04:27 am Set CEikEdwin layout - retrieve text editor height

Example: you want 1-line text editor, and want to center it inside some parent CCoeControl. To do it, you should know the height of the 1 line of text. Here is the magic:


CParent::ConstructL(TRect const & aRect)
{
InitComponentArrayL();
// create editor
iEditor = new (ELeave) CEikEdwin();
iEditor->SetContainerWindowL(*this);
TInt flags = CEikEdwin::ENoWrap;
iEditor->ConstructL(flags, 0, 256, 1);

Components().AppendLC(iEditor);
CleanupStack::Pop();

iEditor->SetFocus(ETrue);
// set parent control size and position first
SetRect(aRect);

// at this point editor will have correct height set
TInt heightOfTextLine = iEditor->Size().iHeight;
}


Note: Don't forget to use AddToStackL(iParentWindowControl) and forward OfferKeyEventL() directly into the editor, it will work also on the touch devices.

Leave a comment

Jul. 2nd, 2009 02:49 pm Launch Virtual Keyboard on Symbian Touch 5th edition


CEikEdwin * editor;
...
MCoeFepAwareTextEditor_Extension1 * extension1 = editor->InputCapabilities().FepAwareTextEditor()->Extension1();
CAknEdwinState * aknEdwinState = static_cast<CAknEdwinState *> (extension1->State(KNullUid));
aknEdwinState->ReportAknEdStateEventL(MAknEdStateObserver::EAknActivatePenInputRequest);

Leave a comment

Jun. 5th, 2009 09:21 am Nokia 5800 battery life

Если не использовать bluetooth, или хотя бы поставить его в режим Hidden, то батарейки хватает на два-три дня. В режиме Shown-to-all батарея разряжается за сутки :(

С другими телефонами на Symbian S60 похожая картина.

Leave a comment

Apr. 12th, 2009 01:25 am Symbian C++ Floating Always On Top Window

Updated.
Code below... )

4 comments - Leave a comment

Mar. 27th, 2009 03:16 pm Symbian LString and L-Classes

Нововведения для Symbian, которые можно было сделать сто лет назад:

- LString, a string class that handles its own buffer management and cleanup

- LCleanedupX and LManagedX, a set of cleanup management helper templates

- CONSTRUCTORS_MAY_LEAVE, a helper macro that enables single-phase construction

- OR_LEAVE, a helper macro to cleanly convert error-returning code into leaving code

Leave a comment

Dec. 24th, 2008 10:39 am How to get Symbian Browser's HTTP User Agent string in C++

Довольно долго провозился, пытаясь решить эту задачу для платформы 3.2. В итоге ответ был найден: http://discussion.forum.nokia.com/forum/showthread.php?p=520495#post520495

Мало того, что это абсолютно нигде не задокументировано, так еще под разными платформами нужная строчка находится по разным индексам! Симбиан, я тебя ненавижу :)

Итоговый алгоритм получается примерно такой: из 4 строчек с индексами от 4 до 7 выбираем самую длинную...

Leave a comment

Nov. 25th, 2008 06:24 pm Boost для Symbian грядёт!

Я уже писал про STL в свеженьком touch-SDK от Nokia Symbian team (кстати, они используют STLPort, что не удивительно). Интересно не это, а то, что в свеженькой онлайновой документации упомянут boost! И даже есть примеры кода! Правда, в том SDK (5th edition, версия 0.9), что доступен для загрузки на официальном сайте Нокии, самого буста еще нет. Догадываюсь, что очень скоро можно будет качественно извращаться :)

Конечно же, компилятор под ARMv5 не тянет все возможности, и как у буста, так и у STL есть свои "нюансы", вроде неожиданных вылетов, неспособности компилятора собрать код и т.п. Но все же тенденция радует!

Кстати, Nokia вроде как допортировала QT под S60, в вики об этом появилась статья, правда, в ней не рабочие ссылки (пока?)

Так же Nokia наконец-то обновила дизайн своих discussion boards, вроде все стало шевелиться чуть быстрее, да и гамма стала весёленькой такой, позитивной :)

1 comment - Leave a comment

Oct. 27th, 2008 12:49 pm STL для Symbian

Думаю, ни для кого уже не секрет, что в новом SDK для S60 5th Edition, что с поддержкой тачскрина (Nokia 5800 - первая ласточка), уже НАКОНЕЦ-ТО интегрирована так необходимая любому нормальному С++ программисту библиотека STL. Но так как пока что до неё руки ещё не добрались, напишу о другом.

Что делать, если у вас проект под старые SDK? Вариант Copy-Paste из нового тоже имеет право быть :) Но есть другой проверенный способ - использовать порт STL для Symbian под названием uSTL!
Проверял ее на эмуляторе и реальных девайсах, под gcc и arm - жжот! Конечно же, есть несколько мелких нюансов :)

0. Библиотека базируется на одноименном проекте на сорсфорже - http://ustl.sourceforge.net/
1. Библиотека не на 100% соответствует стандарту С++
- There's currently no wstring, priority_queue, complex, deque, nor stringstream. (Nor the hash collections: hash_set, hash_map, hash_multimap, hash_multiset).
- There are no fstream classes and related functionality.
- The semantics of ustl::string's functions are not quite standard (some return void rather than a reference to self).
- In the collections, elements can move - don't keep any pointers to elements in the array.
- ustl::list is simply a wrapper for ustl::vector - it doesn't have the performance semantics required by the standard.
- Although ustl::ostringstream derives from ustl::ostream, you mustn't pass an ostringstream as an ostream (functions aren't virtual). Ostringstream and istringstream don't provide the horrible rdbuf() stuff to return char* buffers.
- Most of the obscure STL arithmetic functions (plus, function combinations, etc) are missing.
2. Для корректной инсталляции надо сделать небольшую магию по установке EPOCROOT, device и пачки переменных для WINSCW конфигурации (альтернатива - запустить консоль из-под Carbide C++, с уже готовым окружением)
3. Чтобы собрать под компилятором armv5, исходники надо чуток допилить в паре мест - почему-то компилятор неправильно резолвит имена некоторых методов. Ну для С++ программера это не проблема :)
4. Использование - очень простое:

#include <vector>
using namespace ustl;
vector<TInt> vec;

Только не забудьте прописать в system includes пути к libc и ustl, подключить либу estlib и статическую либу ustl. Ну и для борьбы с утечками в libc рекомендуют при завершении программы дёргать CloseSTDLIB();

Leave a comment

Oct. 3rd, 2008 10:16 am Symbian - кэширование и быстрая отрисовка PNG

Недавно возникла задачка - сделать шуструю анимацию кучи png-шных иконок, причем анимация не только движения, но и размера. Фишка в том, что загрузка картинок и их resize - операции далеко не мгновенные и асинхронные. Синхронными-то сделать их можно, но тогда для пользователя будет очень ощутимая задержка. Есть также волшебный метод отрисовки DrawBitmap[Masked], который сам динамически масштабирует прямо при отрисовке, но для анимации этой скорости не достаточно (грубо говоря - тормозит). Зато BitBlt[Masked] работает идеально.

Перепробовав несколько идей, пришел к довольно эффективному решению:
1. Синхронно при запуске приложения загружаем иконки оригинального размера.
2. Пишем умный метод отрисовки, принимающий размер картинки, который будет делать следующее:\
- Если картинки нужного размера в кеше нет, запускаем асинхронный процесс resize, рисуем из оригинала с помощью DrawBitmap
- Если картинка еще не до конца отресайзилась, рисуем DrawBitmap из оригинала
- Если в кеше есть картинка нужного размера - используем BitBlt

Результат - довольно плавная анимация, которая после нескольких секунд становится идеальной :)

P.S. для эффективной отрисовки SVG можно использовать другую фишку - AknIconUtils::SetSize(). Например, для удобной поддержки разных размеров картинок landscape/portrait, при отрисовке проверять текущий размер битмапки, если он не равен желаемому, делать SetSize(). Тогда не нужно писать всякий хитрый масштабирующий код в SizeChanged() еtc.

Tags:

Leave a comment

Aug. 22nd, 2008 11:36 am Symbian: определение модели телефона

Не секрет, что каждый девайс от Nokia обладает своими "уникальными особенностями". Например, недавно пришлось столкнуться с интересной проблемой - 6210 Navigator поддерживает автоматический разворот в landscape везде, кроме... Idle Screen (главный экран телефона).

Как определить конкретную модель Symbian-телефона

2 comments - Leave a comment

May. 16th, 2008 04:29 pm Symbian CActive

Всегда вызывайте Cancel() в деструкторах активных объектов, а внутри DoCancel() всегда проверяйте указатели-члены класса на NULL, т.к. вызов может произойти из деструктора при исключении во время ConstructL() или NewL()

6 comments - Leave a comment

Mar. 25th, 2008 04:25 pm Symbian... Again

------------------------------------------------------
KIS000531 - Compatibility_problem_with_binary-encoded_SVG_images

The /X option cannot supposedly be put anywhere on the mifconv command line.
It must be placed just before /32 (or similar framebuffer depth option).
For more info, see this FN discussion group thread:

http://discussion.forum.nokia.com/forum/showthread.php?t=110736

I use option /F together with a parameter file and the /X option seems to work when placed into the parameter file in the beginning of each line in just before the /c32,8 and the svg file name.
-------------------------------------------------------

Когда программисты научатся писать нормальные программы, а тестировщики - хорошо их тестировать? О чем можно говорить, если даже порядок следования параметров влияет на результат?.. И это - публичный SDK от Nokia...

10 comments - Leave a comment

Feb. 12th, 2008 12:41 pm Ориентация экрана в symbian и softkeys

Нокия, что же ты такая нокия...

Сейчас разработчикам (в основном полноэкранных) приложений под симбиан приходится учитывать то, что ориентация экрана может быть как landscape, так и обычная. Но это еще пол беды. Софткеи в обычном режиме (на данный момент!) всегда находятся снизу. А вот в landscape они могут быть как слева, так и справа. И, что самое прикольное, снизу (N61).
А еще прикольнее, что на одном девайсе (E90) эти самые софткеи поменяны местами относительно друг друга по сравнению с остальными моделями.

Вот и учитывайте это, господа программисты...

1 comment - Leave a comment

Jan. 28th, 2008 12:20 pm Бочка дёгтя в сторону Symbian

Классно... S60 вылетает при использовании API функции TextWidthInPixels() на китайском шрифте, при магичестком стечении обстоятельств. Решений проблемы нигде нет, есть только багрепорт.

А таких штук в Symbian... Море! Приведу еще пример. При отрисовке своего контрола, если в методе Draw() у вас встретился вызов GetNearestFontInPixels(), не удивляйтесь, если появится мерцание. Именно в момент этого вызова все, что отрисовалось раньше в Draw(), сбросится из буфера на экран. И сбросится второй раз после завершения вышего Draw().
Решение - прикольное. Заменить вызов на GetNearestFontInTwips()...

1 comment - Leave a comment

Jan. 19th, 2008 05:54 pm Symbian - недоделанные IDE

Все нижеописанное проверялось с SDK S60 3rd edition MR

Carbide C++ v1.1 - жутко педалит ГУИ и контекстные подсказки

Carbide C++ v1.2 - почему-то не делает инкрементальные билды, чаще, чем 1.1, лочит собранный .exe, и приходится закрывать эмулятор

Carbide.VS 3.0 - зависает при вызове mifconv.exe с большим списком svg файлов (лечится выполнением этой же команды вручную из консоли), при отладке не получится постоянно держать открытым эмулятор получилось :)

Да и вообще эмулятор - сплошной педальный глюк. Может запускаться через раз. Если получается запустить, это занимает секунд 20-30. При его запуске и работе, как оказалось (студия показала), постоянно сыпутся исключения. На оффоруме пишут, что это нормально, а для студии, которая ловит все эти исключения, для output придумали специальный фильтр...

В общем, сплошной ужас, глюк и кошмар :)

5 comments - Leave a comment

Back a Page

 

Advertisement