<ahref="chevents_8c.html">Go to the documentation of this file.</a><divclass="fragment"><preclass="fragment"><aname="l00001"></a>00001 <spanclass="comment">/*</span>
<aname="l00062"></a>00062 <spanclass="preprocessor">#include "<aclass="code"href="ch_8h.html"title="ChibiOS/RT main include file.">ch.h</a>"</span>
<aname="l00078"></a>00078 <aclass="code"href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42"title="Enters the kernel lock mode.">chSysLock</a>();
<aname="l00079"></a>00079 elp-><aclass="code"href="struct_event_listener.html#aa4ac59cdfd75a6fe0dc9e5ab0ba3d77b"title="Next Event Listener registered on the Event Source.">el_next</a> = esp-><aclass="code"href="struct_event_source.html#aa081acf7f4043f7f636c0ba3b52b5c71"title="First Event Listener registered on the Event Source.">es_next</a>;
<aname="l00080"></a>00080 esp-><aclass="code"href="struct_event_source.html#aa081acf7f4043f7f636c0ba3b52b5c71"title="First Event Listener registered on the Event Source.">es_next</a> = elp;
<aname="l00081"></a>00081 elp-><aclass="code"href="struct_event_listener.html#a965d367958c83624054f5c76c3551a8c"title="Thread interested in the Event Source.">el_listener</a> = currp;
<aname="l00082"></a>00082 elp-><aclass="code"href="struct_event_listener.html#aae3b5064b1781d6aae314f0ae57e25c4"title="Event flags mask associated by the thread to the Event Source.">el_mask</a> = mask;
<aname="l00083"></a>00083 <aclass="code"href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e"title="Leaves the kernel lock mode.">chSysUnlock</a>();
<aname="l00102"></a>00102 p = (<aclass="code"href="struct_event_listener.html"title="Event Listener structure.">EventListener</a> *)esp;
<aname="l00103"></a>00103 <aclass="code"href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42"title="Enters the kernel lock mode.">chSysLock</a>();
<aname="l00104"></a>00104 <spanclass="keywordflow">while</span> (p-><aclass="code"href="struct_event_listener.html#aa4ac59cdfd75a6fe0dc9e5ab0ba3d77b"title="Next Event Listener registered on the Event Source.">el_next</a> != (<aclass="code"href="struct_event_listener.html"title="Event Listener structure.">EventListener</a> *)esp) {
<aname="l00105"></a>00105 <spanclass="keywordflow">if</span> (p-><aclass="code"href="struct_event_listener.html#aa4ac59cdfd75a6fe0dc9e5ab0ba3d77b"title="Next Event Listener registered on the Event Source.">el_next</a> == elp) {
<aname="l00106"></a>00106 p-><aclass="code"href="struct_event_listener.html#aa4ac59cdfd75a6fe0dc9e5ab0ba3d77b"title="Next Event Listener registered on the Event Source.">el_next</a> = elp-><aclass="code"href="struct_event_listener.html#aa4ac59cdfd75a6fe0dc9e5ab0ba3d77b"title="Next Event Listener registered on the Event Source.">el_next</a>;
<aname="l00109"></a>00109 p = p-><aclass="code"href="struct_event_listener.html#aa4ac59cdfd75a6fe0dc9e5ab0ba3d77b"title="Next Event Listener registered on the Event Source.">el_next</a>;
<aname="l00110"></a>00110 }
<aname="l00111"></a>00111 <aclass="code"href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e"title="Leaves the kernel lock mode.">chSysUnlock</a>();
<aname="l00120"></a><aclass="code"href="group__events.html#ga76f41b9668c3f1adafc516a8f92b9cad">00120</a><aclass="code"href="group__types.html#gabff0c32475baf20ea8c5c710d6e8b708"title="Event Mask, recommended fastest unsigned.">eventmask_t</a><aclass="code"href="group__events.html#ga76f41b9668c3f1adafc516a8f92b9cad"title="Clears the pending events specified in the mask.">chEvtClear</a>(<aclass="code"href="group__types.html#gabff0c32475baf20ea8c5c710d6e8b708"title="Event Mask, recommended fastest unsigned.">eventmask_t</a> mask) {
<aname="l00121"></a>00121 <aclass="code"href="group__types.html#gabff0c32475baf20ea8c5c710d6e8b708"title="Event Mask, recommended fastest unsigned.">eventmask_t</a> m;
<aname="l00122"></a>00122
<aname="l00123"></a>00123 <aclass="code"href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42"title="Enters the kernel lock mode.">chSysLock</a>();
<aname="l00124"></a>00124
<aname="l00125"></a>00125 m = <aclass="code"href="group__scheduler.html#ga1a5fddde56420e8accd0c09c1abb32a7"title="Current thread pointer access macro.">currp</a>->p_epending & mask;
<aname="l00139"></a><aclass="code"href="group__events.html#ga94f14b6063f42b9be79a7dabde18232d">00139</a><aclass="code"href="group__types.html#gabff0c32475baf20ea8c5c710d6e8b708"title="Event Mask, recommended fastest unsigned.">eventmask_t</a><aclass="code"href="group__events.html#ga94f14b6063f42b9be79a7dabde18232d"title="Pends a set of event flags on the current thread, this is much faster than using chEvtBroadcast() or ...">chEvtPend</a>(<aclass="code"href="group__types.html#gabff0c32475baf20ea8c5c710d6e8b708"title="Event Mask, recommended fastest unsigned.">eventmask_t</a> mask) {
<aname="l00155"></a><aclass="code"href="group__events.html#ga75a812ae99ce83a3689f51d797a038de">00155</a><spanclass="keywordtype">void</span><aclass="code"href="group__events.html#ga75a812ae99ce83a3689f51d797a038de"title="Pends a set of event flags on the specified Thread.">chEvtSignal</a>(<aclass="code"href="struct_thread.html"title="Structure representing a thread.">Thread</a> *tp, <aclass="code"href="group__types.html#gabff0c32475baf20ea8c5c710d6e8b708"title="Event Mask, recommended fastest unsigned.">eventmask_t</a> mask) {
<aname="l00159"></a>00159 <aclass="code"href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42"title="Enters the kernel lock mode.">chSysLock</a>();
<aname="l00160"></a>00160 <aclass="code"href="group__events.html#ga6c219038c3e618e2142c6e1601997907"title="Pends a set of event flags on the specified Thread.">chEvtSignalI</a>(tp, mask);
<aname="l00161"></a>00161 <aclass="code"href="group__scheduler.html#ga4e38b4bee3d2330f6a0f1cdb7660af20"title="Performs a reschedule if a higher priority thread is runnable.">chSchRescheduleS</a>();
<aname="l00162"></a>00162 <aclass="code"href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e"title="Leaves the kernel lock mode.">chSysUnlock</a>();
<aname="l00171"></a><aclass="code"href="group__events.html#ga6c219038c3e618e2142c6e1601997907">00171</a><spanclass="keywordtype">void</span><aclass="code"href="group__events.html#ga6c219038c3e618e2142c6e1601997907"title="Pends a set of event flags on the specified Thread.">chEvtSignalI</a>(<aclass="code"href="struct_thread.html"title="Structure representing a thread.">Thread</a> *tp, <aclass="code"href="group__types.html#gabff0c32475baf20ea8c5c710d6e8b708"title="Event Mask, recommended fastest unsigned.">eventmask_t</a> mask) {
<aname="l00181"></a>00181 <aclass="code"href="group__scheduler.html#ga535d58cfb3436c8d4e4586c31c062298"title="Inserts a thread in the Ready List.">chSchReadyI</a>(tp)-><aclass="code"href="struct_thread.html#a72cd0424b6098ca241fac1f74d21b56a"title="State-specific fields.">p_u</a>.<aclass="code"href="struct_thread.html#ad5792c30fbd60df0de223b0f398fc6d7"title="Thread wakeup code.">rdymsg</a> = RDY_OK;
<aname="l00190"></a><aclass="code"href="group__events.html#ga44015af4dd20f74b0f73824ff1c1b2f4">00190</a><spanclass="keywordtype">void</span><aclass="code"href="group__events.html#ga44015af4dd20f74b0f73824ff1c1b2f4"title="Signals all the Event Listeners registered on the specified Event Source.">chEvtBroadcast</a>(<aclass="code"href="struct_event_source.html"title="Event Source structure.">EventSource</a> *esp) {
<aname="l00191"></a>00191
<aname="l00192"></a>00192 <aclass="code"href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42"title="Enters the kernel lock mode.">chSysLock</a>();
<aname="l00193"></a>00193 <aclass="code"href="group__events.html#gaa24d9bed5b676b577200c4a8ebe3b8a3"title="Signals all the Event Listeners registered on the specified Event Source.">chEvtBroadcastI</a>(esp);
<aname="l00194"></a>00194 <aclass="code"href="group__scheduler.html#ga4e38b4bee3d2330f6a0f1cdb7660af20"title="Performs a reschedule if a higher priority thread is runnable.">chSchRescheduleS</a>();
<aname="l00195"></a>00195 <aclass="code"href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e"title="Leaves the kernel lock mode.">chSysUnlock</a>();
<aname="l00204"></a><aclass="code"href="group__events.html#gaa24d9bed5b676b577200c4a8ebe3b8a3">00204</a><spanclass="keywordtype">void</span><aclass="code"href="group__events.html#gaa24d9bed5b676b577200c4a8ebe3b8a3"title="Signals all the Event Listeners registered on the specified Event Source.">chEvtBroadcastI</a>(<aclass="code"href="struct_event_source.html"title="Event Source structure.">EventSource</a> *esp) {
<aname="l00211"></a>00211 <aclass="code"href="group__events.html#ga6c219038c3e618e2142c6e1601997907"title="Pends a set of event flags on the specified Thread.">chEvtSignalI</a>(elp-><aclass="code"href="struct_event_listener.html#a965d367958c83624054f5c76c3551a8c"title="Thread interested in the Event Source.">el_listener</a>, elp-><aclass="code"href="struct_event_listener.html#aae3b5064b1781d6aae314f0ae57e25c4"title="Event flags mask associated by the thread to the Event Source.">el_mask</a>);
<aname="l00212"></a>00212 elp = elp-><aclass="code"href="struct_event_listener.html#aa4ac59cdfd75a6fe0dc9e5ab0ba3d77b"title="Next Event Listener registered on the Event Source.">el_next</a>;
<aname="l00256"></a><aclass="code"href="group__events.html#ga77651e22578713ebe355c1213286c2e9">00256</a><aclass="code"href="group__types.html#gabff0c32475baf20ea8c5c710d6e8b708"title="Event Mask, recommended fastest unsigned.">eventmask_t</a><aclass="code"href="group__events.html#ga77651e22578713ebe355c1213286c2e9"title="Waits for exactly one of the specified events.">chEvtWaitOne</a>(<aclass="code"href="group__types.html#gabff0c32475baf20ea8c5c710d6e8b708"title="Event Mask, recommended fastest unsigned.">eventmask_t</a> mask) {
<aname="l00264"></a>00264 <aclass="code"href="group__scheduler.html#ga97c1c514b755a1e71caf2f19c1ccf986"title="Puts the current thread to sleep into the specified state.">chSchGoSleepS</a>(<aclass="code"href="group__threads.html#gacd5f28475be26c300aa3444b9bad8feb"title="Thread state: Waiting in chEvtWaitXXX().">THD_STATE_WTOREVT</a>);
<aname="l00265"></a>00265 m = ctp-><aclass="code"href="struct_thread.html#aa571d2963bd8100fa210715dc5669522"title="Pending events mask.">p_epending</a>& mask;
<aname="l00283"></a><aclass="code"href="group__events.html#gabd731d3ed2f037b2409e370676575f8d">00283</a><aclass="code"href="group__types.html#gabff0c32475baf20ea8c5c710d6e8b708"title="Event Mask, recommended fastest unsigned.">eventmask_t</a><aclass="code"href="group__events.html#gabd731d3ed2f037b2409e370676575f8d"title="Waits for any of the specified events.">chEvtWaitAny</a>(<aclass="code"href="group__types.html#gabff0c32475baf20ea8c5c710d6e8b708"title="Event Mask, recommended fastest unsigned.">eventmask_t</a> mask) {
<aname="l00291"></a>00291 <aclass="code"href="group__scheduler.html#ga97c1c514b755a1e71caf2f19c1ccf986"title="Puts the current thread to sleep into the specified state.">chSchGoSleepS</a>(<aclass="code"href="group__threads.html#gacd5f28475be26c300aa3444b9bad8feb"title="Thread state: Waiting in chEvtWaitXXX().">THD_STATE_WTOREVT</a>);
<aname="l00292"></a>00292 m = ctp-><aclass="code"href="struct_thread.html#aa571d2963bd8100fa210715dc5669522"title="Pending events mask.">p_epending</a>& mask;
<aname="l00315"></a>00315 <aclass="code"href="group__scheduler.html#ga97c1c514b755a1e71caf2f19c1ccf986"title="Puts the current thread to sleep into the specified state.">chSchGoSleepS</a>(<aclass="code"href="group__threads.html#ga1227eb701b7ecaa8e8cd03edeeb79a92"title="Thread state: Waiting in chEvtWaitAllTimeout().">THD_STATE_WTANDEVT</a>);
<aname="l00345"></a><aclass="code"href="group__events.html#ga2944a7fc82e7cc15537f5a7c04f457d3">00345</a><aclass="code"href="group__types.html#gabff0c32475baf20ea8c5c710d6e8b708"title="Event Mask, recommended fastest unsigned.">eventmask_t</a><aclass="code"href="group__events.html#ga2944a7fc82e7cc15537f5a7c04f457d3"title="Waits for exactly one of the specified events.">chEvtWaitOneTimeout</a>(<aclass="code"href="group__types.html#gabff0c32475baf20ea8c5c710d6e8b708"title="Event Mask, recommended fastest unsigned.">eventmask_t</a> mask, <aclass="code"href="group__types.html#gae3e32a98d431a02106616da3071832dd"title="System Time, recommended fastest unsigned.">systime_t</a> time) {
<aname="l00352"></a>00352 <spanclass="keywordflow">if</span> (<aclass="code"href="group__scheduler.html#gad1ac15e9e5fc17810a94a779257f3d29"title="Zero time specification for some syscalls with a timeout specification.">TIME_IMMEDIATE</a> == time) {
<aname="l00353"></a>00353 <aclass="code"href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e"title="Leaves the kernel lock mode.">chSysUnlock</a>();
<aname="l00357"></a>00357 <spanclass="keywordflow">if</span> (<aclass="code"href="group__scheduler.html#ga306e564f678c1a39139639490c77e78b"title="Puts the current thread to sleep into the specified state with timeout specification.">chSchGoSleepTimeoutS</a>(<aclass="code"href="group__threads.html#gacd5f28475be26c300aa3444b9bad8feb"title="Thread state: Waiting in chEvtWaitXXX().">THD_STATE_WTOREVT</a>, time) <<aclass="code"href="group__scheduler.html#gae1c86078318e11c2fa57ee3c2ec69f61"title="Default thread wakeup low level message.">RDY_OK</a>) {
<aname="l00358"></a>00358 <aclass="code"href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e"title="Leaves the kernel lock mode.">chSysUnlock</a>();
<aname="l00386"></a><aclass="code"href="group__events.html#gaf690406ccc833e2c9235e7e2041a6715">00386</a><aclass="code"href="group__types.html#gabff0c32475baf20ea8c5c710d6e8b708"title="Event Mask, recommended fastest unsigned.">eventmask_t</a><aclass="code"href="group__events.html#gaf690406ccc833e2c9235e7e2041a6715"title="Waits for any of the specified events.">chEvtWaitAnyTimeout</a>(<aclass="code"href="group__types.html#gabff0c32475baf20ea8c5c710d6e8b708"title="Event Mask, recommended fastest unsigned.">eventmask_t</a> mask, <aclass="code"href="group__types.html#gae3e32a98d431a02106616da3071832dd"title="System Time, recommended fastest unsigned.">systime_t</a> time) {
<aname="l00387"></a>00387 <aclass="code"href="struct_thread.html"title="Structure representing a thread.">Thread</a> *ctp = currp;
<aname="l00388"></a>00388 <aclass="code"href="group__types.html#gabff0c32475baf20ea8c5c710d6e8b708"title="Event Mask, recommended fastest unsigned.">eventmask_t</a> m;
<aname="l00389"></a>00389
<aname="l00390"></a>00390 <aclass="code"href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42"title="Enters the kernel lock mode.">chSysLock</a>();
<aname="l00393"></a>00393 <spanclass="keywordflow">if</span> (<aclass="code"href="group__scheduler.html#gad1ac15e9e5fc17810a94a779257f3d29"title="Zero time specification for some syscalls with a timeout specification.">TIME_IMMEDIATE</a> == time) {
<aname="l00394"></a>00394 <aclass="code"href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e"title="Leaves the kernel lock mode.">chSysUnlock</a>();
<aname="l00398"></a>00398 <spanclass="keywordflow">if</span> (<aclass="code"href="group__scheduler.html#ga306e564f678c1a39139639490c77e78b"title="Puts the current thread to sleep into the specified state with timeout specification.">chSchGoSleepTimeoutS</a>(<aclass="code"href="group__threads.html#gacd5f28475be26c300aa3444b9bad8feb"title="Thread state: Waiting in chEvtWaitXXX().">THD_STATE_WTOREVT</a>, time) <<aclass="code"href="group__scheduler.html#gae1c86078318e11c2fa57ee3c2ec69f61"title="Default thread wakeup low level message.">RDY_OK</a>) {
<aname="l00399"></a>00399 <aclass="code"href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e"title="Leaves the kernel lock mode.">chSysUnlock</a>();
<aname="l00430"></a>00430 <spanclass="keywordflow">if</span> (<aclass="code"href="group__scheduler.html#gad1ac15e9e5fc17810a94a779257f3d29"title="Zero time specification for some syscalls with a timeout specification.">TIME_IMMEDIATE</a> == time) {
<aname="l00431"></a>00431 <aclass="code"href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e"title="Leaves the kernel lock mode.">chSysUnlock</a>();
<aname="l00435"></a>00435 <spanclass="keywordflow">if</span> (<aclass="code"href="group__scheduler.html#ga306e564f678c1a39139639490c77e78b"title="Puts the current thread to sleep into the specified state with timeout specification.">chSchGoSleepTimeoutS</a>(<aclass="code"href="group__threads.html#ga1227eb701b7ecaa8e8cd03edeeb79a92"title="Thread state: Waiting in chEvtWaitAllTimeout().">THD_STATE_WTANDEVT</a>, time) <<aclass="code"href="group__scheduler.html#gae1c86078318e11c2fa57ee3c2ec69f61"title="Default thread wakeup low level message.">RDY_OK</a>) {
<aname="l00436"></a>00436 <aclass="code"href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e"title="Leaves the kernel lock mode.">chSysUnlock</a>();
Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by <ahref="http://www.doxygen.org/index.html"><imgsrc="doxygen.png"alt="doxygen"align="middle"border="0"></a> 1.7.1</small></address>