Napi Qt okosságok: vegyesválogatott 

1) Amikor a QTimerek szórakoznak.

Történt a marsjáróvezérlő programmal, hogy elkezdett néha lefagyni a navigáció. Némi debug után arra jutottam, hogy bizony néhány QTimer nem emittál timeOut() szignált. Hosszas szívózás után rájöttem a dolog nyitjára. A program több saját készítésű könyvtárat használ. (Képletöltő, képfeldolgozó, rovervezérlő). Ez sok szíváshoz vezet, azonban symlinkek nélkül így sikerült megoldanom a földbázis és a marsbázis közös komponenseinek kezelését. A rovervezérlő könyvtárban elkövettem azt az hibát, hogy nem QTimert használtam, hanem a QObject startTimer() és timerEvent(QTimerEvent *event) metódusait az időzítésre. Ez önnmagában nem hiba, sőt átláthatóbb kódot eredményezhet bizonyos esetekben. Azonban a killTimer(int timerid) függvényt csak ésszel szabad használni. A hiba pontos okát nem tudtam feltárni, de annyi bizonyos:

A) killTimer() -t nem hívunk meg nem megfelelően inicializált értékkel

B) killTimer() -t egy timerId-vel csak egyszer hívunk meg.


2) Amikor a windowsos build elbukik mert nem találja a LIBS+= -lsettings -L=../../libs/bin után a settings libet, holott az ott van.

A QtCreator újonnan szeret létrehozni egy shadow build könyvtárat, amiben a fordítás egy desktop nevű könyvtárban történik. Így nem
-L=../../libs/bin -el kell linkelni, hanem egyel fentebbi könyvtárba.


3) Miután sikerrel lefordítottuk a stuffot az alkamazás
QWidget: Must construct a QApplication before a QPaintDevice hibával elszáll.

Az alkalmazásunk és a libjeink azonos módban legyenek fordítva (debug vagy release)

És hogy legyen valami színes is a végére, ami unalmas, és semmitmondó mivel itthonról írok:

A marsbázis fut fostalicska OS-en is némi hekkelés árán.

BTW:
Még : 14 nap van hátra.
Az pontosan annyi mint: 336 óra.
Azaz 20160 perc

[ hozzászólás ] ( 1 megtekintés ) [ 0 trackbackek ] permalink ( 3.1 / 607 )
Csatlakozás Bluetooth-soros adapterhez Linux alól 

Csak azért, hogy meglegyen, mert a tavalyi versenyen használt technológia képességeit idén újra fel kellett fedeznem.

Tehát adott egy Bluegiga WT12 modul, egy olcsó USB-s BT dongle, és egy Ubuntu 9.04

Első lépés (opcionális):


sudo /etc/init.d/bluetooth start


Majd:


lucifer@lapos:~$ hcitool scan
Scanning ...
00:07:80:81:A5:84 SECRC1571
lucifer@lapos:~$


Állapítsuk meg milyen szolgáltatások futnak az eszközön:
Ehhez kérni fogja a kódot, amit a felbukkanó grafikus dialógusban megadhatunk neki.


lucifer@lapos:~$ sdptool browse 00:07:80:85:A5:84
Browsing 00:07:80:81:A5:84 ...
Service Name: Bluetooth Serial Port
Service RecHandle: 0x10000
Service Class ID List:
UUID 128: 00001101-0000-1000-8000-00805f9b34fb
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 1
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100



Mint látjuk a soros port szlgáltatás az 1. csatornán van.

Ezt követően regisztáljuk a szolgáltatást.

lucifer@lapos:~$ sdptool add --channel=1 SP
Serial Port service registered


Majd csatlakozzunk az eszközünkhöz:



lucifer@lapos:~$ sudo rfcomm connect /dev/rfcomm0 00:07:80:81:A5:84 1
[sudo] password for lucifer:
Connected /dev/rfcomm0 to 00:07:80:81:A5:84 on channel 1
Press CTRL-C for hangup



Ennyi. Innentől van egy /dev/rfcomm0 sorosportunk amit ugyanúgy használhatunk mint egy sima sorosportot.

// A MAC címek természetesen FAKE-k, illetve ha használni akarod, akkor a sajátodat kell beírogatnod.

Update:

Ha sima mezei userként is szeretnéd használni a /dev/rfcomm0 portot, akkor add hozzá magad a dialout csoporthoz például a következő parancs segítségével:

sudo usermod -a -G dialout $USER



Ha pedig random Device or resource is busy hibaüzeneteket kapunk a port megnyitásakor, akkor töröljük a modemmanagert.

[ hozzászólás ] ( 2 megtekintés ) [ 0 trackbackek ] permalink ( 3 / 1292 )

<< <Előző | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |

 
számláló