moblin: hvordan til at skrive et stik af med din chauffør

, artikel kilde moblin dokumentation, den 1. juli 2009, 12:21 er, du ved, der ikke er en standard - chauffør delsystem for sensor, såsom skjulte eller input - system.jonathan cameron [denne e - mail - adresse er beskyttet fra spambots.du har brug for javascript mulighed for at betragte den] kæmper for at kontrollere hans iio (industri - /o) til leverandører, som er en chauffør system for sensor.jeg ved ikke, hvornår kernel accepterer det, eller når sensoren chauffør forfattere vil følge det, hertil vores ramme har arbejdet med forskellige kørere i lang tid.det er derfor, vi har brug for en chauffør, stik af systemet. den nuværende pulgin system - koden er kun en indledende version eller med andre ord en prototype.men det grundlæggende skelet er klar, du kan udvide det for din virksomhed.depotplastre er altid weclome. skrive et modul er meget enkel i sensor rammer, kun to funktioner er nødvendige.,, gint sf__init (sfmodule * m), ugyldige sf__exit (sfmodule * m),&#sfmodule føre definerer områder, der kræves af sensor dæmon, generelt bør de ikke direkte, rør det.men nogle felter kan indeholde nyttige oplysninger for din modul, pls treate dem som readonly. se nedenfor: /* *, * sfmodule: * @ navn: navn i modul.det er gruppens navn i modul. conf. *, for eksempel i stikprøven module.conf der er [modul als simulator] * så modul als simulator er behandlet som modul navn., * @ type: type modul.se&#moduletype, * @ userdata: placering af modul redde sin private oplysninger.du kan direkte * evaluere det., * @ gmodule:&#gmodule opbygges.rør den ikke, * @ kerne:&#sfcore.rør den ikke, * @ keyfile:&#gkeyfile indeholder parametre i modul.pls brug nøglen funktion * sæt for at få din parameter og ikke fri., * @ lokalitet: viser sf_init() af din modul.rør ikke ved, * @ udgang: viser sf_exit() af din modul.rør ikke ved, * /, typedef føre _sfmodule {, ¬†¬†¬† gchar * navn, ¬†¬†¬† moduletype type, ¬†¬†¬† gpointer userdata;, ¬†¬†¬† gmodule * gmodule;, ¬†¬†¬† sfcore * kerne;, ¬†¬†¬† guint indeks, ¬†¬†¬† gkeyfile * keyfile;, ¬†¬†, ¬†¬†¬† sfmoduleinit lokalitet;, ¬†¬†¬† sfmoduleexit udpassage,} sfmodule; alle værker af initailization skulle være afsluttet i sf__init() og returnere 0 til at angive en succes eller - 1 til at angive en fejl, sf__init() er ansvarlig for at frigøre ressourcer, der er bevilget i sig selv under den første periode i sin fejl, klare.sf__exit() kaldes, når modul slipper af med alle midler, der er afsat i modul bør frigives her.,, nuværende modul kaldes * chauffør moudle *, betyder det, at det bør være en sensor chauffør eller repræsentere en sensor, med andre ord.funktionelle moduler vil blive indført senere, hvis der er et reelt behov.du kan skabe en struktureret, du føler, f.eks.:,, føre my_accelerometer {, ¬†¬†¬†¬†¬† sfsensordev forælder, ¬†¬†¬†¬†.............,,,,&#sfsensordev er moderselskab til genstand for alle føler structs, skal det altid som den første element. sf_sensordev_new () er den funktion, der tildeles hukommelse og påbegynd&#sfsensordev for din opbygges, se under: /* *, * sf_sensordev_new: * @ c: en&#sfcore objekt., * @ type:&#sfsensortype angiver typen af sensor, * @ ops: en række opgaver, som omhandlet i modul for, * forvaltning af ramme.se&#devops, * @ størrelse: størrelse af&#sfsensordev at skabe, *, * at skabe en ny&#sfsensordev opbygges.størrelsen er fastsat, at skabe * struktur, der stammer fra&#sfsensordev, der indeholder yderligere oplysninger om størrelsen, * vedtaget i skal være mindst 7 (sfsensordev); * * tilbage: en nyoprettet&#sfsensordev, * /¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†, sfsensordev * sf_sensordev_new (sfcore * c, sfsensortype type, devops * 'guint størrelse), for @ c, kan du finde&#sfcore fra&#sfmodule - > kerne.# sftype defineres som følger:,, typedef enum {s, ¬†¬†¬† type_invaild = - 1, ¬†¬†¬† type_min,, ¬†¬†¬† type_accel = 1, ¬†¬†¬† type_gryo = 1 < < 1, ¬†¬†¬† type_thermal = 1 < < 2, ¬†, ¬†¬†¬† type_comapss = 1 < < 3, ¬†¬†¬† type_als = 1 < < 4, ¬†¬†¬†¬†¬†, ¬†¬†¬† type_max,, sfsensortype;,,&#devops kun har to funktioner:,, føre _devops {, ¬†¬†¬† gint (* dev_set_active) (sfsensordev * se, devactivelevel niveau), ¬†¬†¬† ugyldig (* dev_msg_process) (sfsensordev * se, gint kode, gpointer data, guint datalen, gpointer ret_val);,,,, dev_set_active() anvendes til at give /deaktiver sensor.virkningen af, at /deaktiver er modul bestemt, at jeg er ligeglad.pls tilbage, 0 til at angive en succes eller - 1, når en fejl sker dog denne funktion bør ikke være slået fejl.# devactivelevel defineres som følger:,, /* *, * devactivelevel: * @ dev_stop: hold op med at indsprøjte data /omstændigheder * @ dev_active: begynder at indsprøjte data /omstændigheder * /, typedef enum {, ¬†¬†¬† dev_stop,, ¬†¬†¬† dev_active,, devactivelevel;, bemærke, at dev_set_active() er obligatorisk requirment så pls altid giver det da du kan gennemføre et tomrum funktion., dev_msg_process() er en del af modul kommunikationsmekanisme.rammer gennemfører en kommunikationskanal, baseret på asynkron køer af rapkæftet.,, /* ¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†, ¬†¬†¬†¬† * dev_msg_process: ¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†, ¬†¬†¬†¬† * @ se: en&#sfsensordev objekt ¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†, ¬†¬†¬†¬† * @ kode: mulighed kode angiver, hvad der skal blive henrettet. ¬†¬†¬†¬† * @ data: data, som afsenderen ¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† bestod i, ¬†¬†¬†¬† * @ datalen: længden af data ¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†, ¬†¬†¬†¬† * @ ret_val: et sted at opbevare tilbage værdi.bemærk, at minde ¬†¬†¬†¬† * bør tildeles af afsender, så memcpy() vender tilbage til @ ret_val, ¬†¬†¬†¬† * er okay. ¬†¬†¬†¬† *, ¬†¬†¬†¬† * klare budskab fra ramme eller andre moduler. ¬†¬†¬†¬† *, ¬†¬†¬†¬† * < note > < para - >, ¬†¬†¬†¬† * afsender kan kalde sf_asyncmsg_send_sync() til at sende en besked og blok, ¬†¬†¬†¬† * indtil et signal om gennemførelsen er modtaget.det, der sker, når, ¬†¬†¬†¬† * afsender venter på en tilbagevenden værdi.så sover ikke i denne funktion, ¬†¬†¬†¬† * andet hele rammen kan blive blokeret. ¬†¬†¬†¬† * < /para > < /note >, ¬†¬†¬†¬† * /, ¬†¬†¬† ugyldig (* dev_msg_process) (sfsensordev * se, gint kode, gpointer data, guint datalen, gpointer ret_val) og her opiton kode er defineret i sensor. h:,, typedef enum {, ¬†¬†¬† msg_exit_thread,, ¬†¬†¬† msg_stream_register,, ¬†¬†¬† msg_stream_unregistered,, ¬†¬†¬† /* als besked * /, ¬†¬†¬† msg_als_set_range,, ¬†¬†¬† msg_als_get_range,, devmsgcode;,, at føje deres specifikke kode, du er nødt til at udvide denne opregning.bemærker, at der er nogle beskeder til rammer, at modul bør ikke bryder sig om.på grund af budskab her vil blokere, når der ikke er noget at modtage, det skal styres på en enkelt tråd.for at forenkle arbejdet, sf_sensordev_run_msg_process() vil være vegne i dig til at skabe tråd.,, /* *, * sf_sensordev_run_msg_process: * @ se: en&#sfsensordev objekt, *, * at skabe en tråd til at klare budskab, * /¬†¬†¬†¬†¬†¬†, ugyldige sf_sensordev_run_msg_process (sfsensordev * se); denne funktion skal sættes i sf__init() siden din dev_msg_process () kan være ugyldige.som tidligere nævnt er der nogle meddelelser behandles af egne rammer, så skal du ringe til sf_sensordev_run_msg_process() i din sf__init()., at stoppe besked proces, ring til sf_sensordev_stop_msg_process().,, /* *, * sf_sensordev_stop_msg_process: * @ se: en&#sfsensordev objekt, * * stoppe besked proces og genvinde tråd., * /, ugyldige sf_sensordev_stop_msg_process (sfsensordev * se);, kan de skabe tråd af sig selv, hvis der er noget i dit modul skal håndteres i et enkelt tråd.i dette tilfælde skal de direkte påberåbe sig sf_sensordev_process_msg() at behandle besked.,, /* *, * sf_sensordev_process_msg: * @ se: en&#sfsensordev objekt, * @ timeout: periode.et - 1 viser, at blokere indtil besked, * foreligger., * * tilbage: 0 tyder på en msg_exit_thread er blevet det, betyder det, at du bør * end din tråd.1 betyder, at gå til håndtering af besked., * * /, gint sf_sensordev_process_msg (sfsensordev * se, glong timeout), henvises der til modul /simulator. c for at se, hvordan man kan skabe en tråd, selv at forarbejde besked, til at sende et budskab til modul, ring til sf_asyncmsg_send() eller sf_asyncmsg_send_sync().se defintions: /* *, * sf_asyncmsg_send: * @ q: en&#gasyncqueue objekt, * @ kode: en mulighed - kode * @ data: data videre til modtageren, * @ len: længden af data, * *, sende en besked til ejer af @ q *, * < note > < para - > *, denne funktion sende besked til asynkron tilstand., * sf_asyncmsg_send_sync() er synkrone version., * < /para > < /note > * /, ugyldige sf_asyncmsg_send (gasyncqueue * q, gint kode, gpointer data, guint len), * *, * sf_asyncmsg_send_sync: * @ q: en&#gasyncqueue objekt, * @ kode: en mulighed - kode * @ data: data videre til modtageren, * @ len: længden af data, * @ ret_val: placering opbevarer tilbage værdi.afsenderen er ansvarlig for, * fordeling og frigøre hukommelse., * * sende besked i synkron tilstand og bringe tilbage værdi tilbage til * afsender, hvis der er nogen., * /, ugyldige sf_asyncmsg_send_sync (gasyncqueue * q, gint kode, gpointer data, ¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† guint len, gpointer ret_val), for&#sfsensordev den&#gasyncqueue er&#sfsensordev - > inq.,, det sidste, rammer anvender en auto produceret headerfilen at løse navn konflikt fra sf__init() /sf__exit().tilføje header navn i src /makefile.am som følger:,, symdef_files = \\, ¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† moduler /modul /simulator symdef. h > det, ¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† moduler /modul als simulator symdef. h, okay, indtil nu, du skal have en oversigt over, hvordan man skriver en chauffør modul.nogle detaljer er ikke vist her, f.eks. de hjælper stemmeafgivningen data.som en kinesisk, skrevet på engelsk, er altid en stor udfordring.alligevel henvise til prøvens kode er den hurtigste måde at lære detaljer.se, modul /simulator. c og modul als - simulator. c. og depotplastre er altid velkommen.,, sensor rammer,



Previous:
Next Page: