1use crate::time::Timestamp;
2use crate::types::{ObjectClass, UserEventArgRecordCount};
3use derive_more::{Binary, Deref, Display, Into, LowerHex, Octal, UpperHex};
4
5pub use isr::{IsrBeginEvent, IsrEvent, IsrResumeEvent};
6pub use low_power::{LowPowerBeginEvent, LowPowerEndEvent, LowPowerEvent};
7pub use parser::EventParser;
8pub use task::{TaskBeginEvent, TaskCreateEvent, TaskEvent, TaskReadyEvent, TaskResumeEvent};
9pub use user::UserEvent;
10
11pub mod isr;
12pub mod low_power;
13pub mod parser;
14pub mod task;
15pub mod user;
16
17#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Display)]
18#[display(fmt = "{_0:X?}")]
19pub struct EventRecord([u8; EventRecord::SIZE]);
20
21impl EventRecord {
22 pub(crate) const SIZE: usize = 4;
23
24 pub(crate) fn new(record: [u8; EventRecord::SIZE]) -> Self {
25 Self(record)
26 }
27
28 pub fn as_slice(&self) -> &[u8] {
29 &self.0
30 }
31
32 pub fn event_code(&self) -> EventCode {
33 EventCode(self.0[0])
34 }
35}
36
37#[derive(
39 Copy,
40 Clone,
41 Eq,
42 PartialEq,
43 Ord,
44 PartialOrd,
45 Hash,
46 Debug,
47 Into,
48 Display,
49 Binary,
50 Octal,
51 LowerHex,
52 UpperHex,
53)]
54#[display(fmt = "{_0:X}")]
55pub struct EventCode(u8);
56
57#[derive(
58 Copy,
59 Clone,
60 Eq,
61 PartialEq,
62 Ord,
63 PartialOrd,
64 Hash,
65 Debug,
66 Into,
67 Display,
68 Binary,
69 Octal,
70 LowerHex,
71 UpperHex,
72 Deref,
73)]
74#[display(fmt = "{}", "self.into_class()")]
75pub struct ObjectClassCode(pub(crate) u8);
76
77impl ObjectClassCode {
78 pub(crate) fn from_raw(ec: u8) -> Self {
80 Self(ec & 0x07)
81 }
82
83 pub(crate) fn into_raw(self) -> u8 {
84 self.0
85 }
86
87 pub fn into_class(self) -> ObjectClass {
88 use ObjectClass::*;
89 match self.0 {
90 0 => Queue,
91 1 => Semaphore,
92 2 => Mutex,
93 3 => Task,
94 4 => Isr,
95 5 => Timer,
96 6 => EventGroup,
97 _ => StreamBuffer,
99 }
100 }
101}
102
103#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Display)]
105pub enum EventType {
106 #[display(fmt = "NULL")]
107 Null,
108
109 #[display(fmt = "XPS")]
112 Xps,
113 #[display(fmt = "TASK_READY")]
114 TaskReady,
115 #[display(fmt = "NEW_TIME")]
116 NewTime,
117
118 #[display(fmt = "TS_ISR_BEGIN")]
122 TaskSwitchIsrBegin,
123 #[display(fmt = "TS_ISR_RESUME")]
124 TaskSwitchIsrResume,
125 #[display(fmt = "TS_TASK_BEGIN")]
126 TaskSwitchTaskBegin,
127 #[display(fmt = "TS_TASK_RESUME")]
128 TaskSwitchTaskResume,
129
130 #[display(fmt = "OBJCLOSE_NAME({_0})")]
132 ObjectCloseName(ObjectClassCode),
133
134 #[display(fmt = "OBJCLOSE_PROPERTY({_0})")]
136 ObjectCloseProperty(ObjectClassCode),
137
138 #[display(fmt = "CREATE_OBJECT({_0})")]
140 CreateObject(ObjectClassCode),
141
142 #[display(fmt = "SEND({_0})")]
144 Send(ObjectClassCode),
145
146 #[display(fmt = "RECEIVE({_0})")]
148 Receive(ObjectClassCode),
149
150 #[display(fmt = "SEND_FROM_ISR({_0})")]
152 SendFromIsr(ObjectClassCode),
153
154 #[display(fmt = "RECEIVE_FROM_ISR({_0})")]
156 ReceiveFromIsr(ObjectClassCode),
157
158 #[display(fmt = "CREATE_OBJECT_FAILED({_0})")]
160 CreateObjectFailed(ObjectClassCode),
161
162 #[display(fmt = "SEND_FAILED({_0})")]
164 SendFailed(ObjectClassCode),
165
166 #[display(fmt = "RECEIVE_FAILED({_0})")]
168 ReceiveFailed(ObjectClassCode),
169
170 #[display(fmt = "SEND_FROM_ISR_FAILED({_0})")]
172 SendFromIsrFailed(ObjectClassCode),
173
174 #[display(fmt = "RECEIVE_FROM_ISR_FAILED({_0})")]
176 ReceiveFromIsrFailed(ObjectClassCode),
177
178 #[display(fmt = "RECEIVE_BLOCK({_0})")]
180 ReceiveBlock(ObjectClassCode),
181
182 #[display(fmt = "SEND_BLOCK({_0})")]
184 SendBlock(ObjectClassCode),
185
186 #[display(fmt = "PEEK({_0})")]
188 Peek(ObjectClassCode),
189
190 #[display(fmt = "DELETE_OBJECT({_0})")]
192 DeleteObject(ObjectClassCode),
193
194 #[display(fmt = "TASK_DELAY_UNTIL")]
196 TaskDelayUntil,
197 #[display(fmt = "TASK_DELAY")]
198 TaskDelay,
199 #[display(fmt = "TASK_SUSPEND")]
200 TaskSuspend,
201 #[display(fmt = "TASK_RESUME")]
202 TaskResume,
203 #[display(fmt = "TASK_RESUME_FROM_ISR")]
204 TaskResumeFromIsr,
205 #[display(fmt = "TASK_PRIORITY_SET")]
206 TaskPrioritySet,
207 #[display(fmt = "TASK_PRIORITY_INHERIT")]
208 TaskPriorityInherit,
209 #[display(fmt = "TASK_PRIORITY_DISINHERIT")]
210 TaskPriorityDisinherit,
211
212 #[display(fmt = "PEND_FUNC_CALL")]
213 PendFuncCall,
214 #[display(fmt = "PEND_FUNC_CALL_FROM_ISR")]
215 PendFuncCallFromIsr,
216 #[display(fmt = "PEND_FUNC_CALL_FAILED")]
217 PendFuncCallFailed,
218 #[display(fmt = "PEND_FUNC_CALL_FROM_ISR_FAILED")]
219 PendFuncCallFromIsrFailed,
220 #[display(fmt = "MEM_MALLOC_SIZE")]
221 MemoryMallocSize,
222 #[display(fmt = "MEM_MALLOC_ADDRESS")]
223 MemoryMallocAddress,
224 #[display(fmt = "MEM_FREE_SIZE")]
225 MemoryFreeSize,
226 #[display(fmt = "MEM_FREE_ADDRESS")]
227 MemoryFreeAddress,
228
229 #[display(fmt = "USER_EVENT")]
235 UserEvent(UserEventArgRecordCount),
236
237 #[display(fmt = "XTS8")]
239 Xts8,
240 #[display(fmt = "XTS16")]
241 Xts16,
242 #[display(fmt = "EVENT_BEING_WRITTEN")]
243 EventBeingWritten,
244 #[display(fmt = "RESERVED_DUMMY_CODE")]
245 ReservedDummyCode,
246 #[display(fmt = "LOW_POWER_BEGIN")]
247 LowPowerBegin,
248 #[display(fmt = "LOW_POWER_END")]
249 LowPowerEnd,
250 #[display(fmt = "XID")]
251 Xid,
252 #[display(fmt = "XTS16L")]
253 Xts16l,
254
255 #[display(fmt = "TIMER_CREATE")]
257 TimerCreate,
258 #[display(fmt = "TIMER_START")]
259 TimerStart,
260 #[display(fmt = "TIMER_RESET")]
261 TimerReset,
262 #[display(fmt = "TIMER_STOP")]
263 TimerStop,
264 #[display(fmt = "TIMER_CHANGE_PERIOD")]
265 TimerChangePeriod,
266 #[display(fmt = "TIMER_DELETE_OBJECT")]
267 TimerDeleteObject,
268 #[display(fmt = "TIMER_START_FROM_ISR")]
269 TimerStartFromIsr,
270 #[display(fmt = "TIMER_RESET_FROM_ISR")]
271 TimerResetFromIsr,
272 #[display(fmt = "TIMER_STOP_FROM_ISR")]
273 TimerStopFromIsr,
274 #[display(fmt = "TIMER_CREATE_FAILED")]
275 TimerCreateFailed,
276 #[display(fmt = "TIMER_START_FAILED")]
277 TimerStartFailed,
278 #[display(fmt = "TIMER_RESET_FAILED")]
279 TimerResetFailed,
280 #[display(fmt = "TIMER_STOP_FAILED")]
281 TimerStopFailed,
282 #[display(fmt = "TIMER_CHANGE_PERIOD_FAILED")]
283 TimerChangePeriodFailed,
284 #[display(fmt = "TIMER_DELETE_FAILED")]
285 TimerDeleteFailed,
286 #[display(fmt = "TIMER_START_FROM_ISR_FAILED")]
287 TimerStartFromIsrFailed,
288 #[display(fmt = "TIMER_RESET_FROM_ISR_FAILED")]
289 TimerResetFromIsrFailed,
290 #[display(fmt = "TIMER_STOP_FROM_ISR_FAILED")]
291 TimerStopFromIsrFailed,
292
293 #[display(fmt = "EVENT_GROUP_CREATE")]
295 EventGroupCreate,
296 #[display(fmt = "EVENT_GROUP_CREATE_FAILED")]
297 EventGroupCreateFailed,
298 #[display(fmt = "EVENT_GROUP_SYNC_BLOCK")]
299 EventGroupSyncBlock,
300 #[display(fmt = "EVENT_GROUP_SYNC_END")]
301 EventGroupSyncEnd,
302 #[display(fmt = "EVENT_GROUP_WAIT_BITS_BLOCK")]
303 EventGroupWaitBitsBlock,
304 #[display(fmt = "EVENT_GROUP_WAIT_BITS_END")]
305 EventGroupWaitBitsEnd,
306 #[display(fmt = "EVENT_GROUP_CLEAR_BITS")]
307 EventGroupClearBits,
308 #[display(fmt = "EVENT_GROUP_CLEAR_BITS_FROM_ISR")]
309 EventGroupClearBitsFromIsr,
310 #[display(fmt = "EVENT_GROUP_SET_BITS")]
311 EventGroupSetBits,
312 #[display(fmt = "EVENT_GROUP_DELETE_OBJECT")]
313 EventGroupDeleteObject,
314 #[display(fmt = "EVENT_GROUP_SYNC_END_FAILED")]
315 EventGroupSyncEndFailed,
316 #[display(fmt = "EVENT_GROUP_WAIT_BITS_END_FAILED")]
317 EventGroupWaitBitsEndFailed,
318 #[display(fmt = "EVENT_GROUP_SET_BITS_FROM_ISR")]
319 EventGroupSetBitsFromIsr,
320 #[display(fmt = "EVENT_GROUP_SET_BITS_FROM_ISR_FAILED")]
321 EventGroupSetBitsFromIsrFailed,
322
323 #[display(fmt = "TASK_INSTANCE_FINISHED_NEXT_KSE")]
324 TaskInstanceFinishedNextKse,
325 #[display(fmt = "TASK_INSTANCE_FINISHED_DIRECT")]
326 TaskInstanceFinishedDirect,
327
328 #[display(fmt = "TASK_NOTIFY")]
330 TaskNotify,
331 #[display(fmt = "TASK_NOTIFY_TAKE")]
332 TaskNotifyTake,
333 #[display(fmt = "TASK_NOTIFY_TAKE_BLOCK")]
334 TaskNotifyTakeBlock,
335 #[display(fmt = "TASK_NOTIFY_FAILED")]
336 TaskNotifyTakeFailed,
337 #[display(fmt = "TASK_NOTIFY_WAIT")]
338 TaskNotifyWait,
339 #[display(fmt = "TASK_NOTIFY_WAIT_BLOCK")]
340 TaskNotifyWaitBlock,
341 #[display(fmt = "TASK_NOTIFY_WAIT_FAILED")]
342 TaskNotifyWaitFailed,
343 #[display(fmt = "TASK_NOTIFY_FROM_ISR")]
344 TaskNotifyFromIsr,
345 #[display(fmt = "TASK_NOTIFY_GIVE_FROM_ISR")]
346 TaskNotifyGiveFromIsr,
347
348 #[display(fmt = "TIMER_EXPIRED")]
349 TimerExpired,
350
351 #[display(fmt = "QUEUE_PEEK_BLOCK")]
353 QueuePeekBlock,
354 #[display(fmt = "SEMAPHORE_PEEK_BLOCK")]
355 SemaphortPeekBlock,
356 #[display(fmt = "MUTEX_PEEK_BLOCK")]
357 MutexPeekBlock,
358
359 #[display(fmt = "QUEUE_PEEK_FAILED")]
361 QueuePeekFailed,
362 #[display(fmt = "SEMAPHORE_PEEK_FAILED")]
363 SemaphortPeekFailed,
364 #[display(fmt = "MUTEX_PEEK_FAILED")]
365 MutexPeekFailed,
366
367 #[display(fmt = "STREAMBUFFER_RESET")]
369 StreambufferReset,
370 #[display(fmt = "MESSAGEBUFFER_RESET")]
371 MessagebufferReset,
372 #[display(fmt = "STREAMBUFFER_OBJCLOSE_NAME")]
373 StreambufferObjectCloseName,
374 #[display(fmt = "MESSAGEBUFFER_OBJCLOSE_NAME")]
375 MessagebufferObjectCloseName,
376 #[display(fmt = "STREAMBUFFER_OBJCLOSE_PROPERTY")]
377 StreambufferObjectCloseProperty,
378 #[display(fmt = "MESSAGEBUFFER_OBJCLOSE_PROPERTY")]
379 MessagebufferObjectCloseProperty,
380
381 #[display(fmt = "MEM_MALLOC_SIZE_FAILED")]
383 MemoryMallocSizeFailed,
384 #[display(fmt = "MEM_MALLOC_ADDRESS_FAILED")]
385 MemoryFreeAddressFailed,
386
387 #[display(fmt = "UNUSED_STACK")]
388 UnusedStack,
389
390 #[display(fmt = "UNKNOWN({_0})")]
392 Unknown(EventCode),
393}
394
395impl From<EventCode> for EventType {
396 fn from(ec: EventCode) -> Self {
397 use EventType::*;
398 match u8::from(ec) {
399 0x00 => Null,
400
401 0x01 => Xps,
402 0x02 => TaskReady,
403 0x03 => NewTime,
404
405 0x04 => TaskSwitchIsrBegin,
406 0x05 => TaskSwitchIsrResume,
407 0x06 => TaskSwitchTaskBegin,
408 0x07 => TaskSwitchTaskResume,
409
410 raw @ 0x08..=0x0F => ObjectCloseName(ObjectClassCode::from_raw(raw)),
411
412 raw @ 0x10..=0x17 => ObjectCloseProperty(ObjectClassCode::from_raw(raw)),
413
414 raw @ 0x18..=0x1F => CreateObject(ObjectClassCode::from_raw(raw)),
415
416 raw @ 0x20..=0x27 => Send(ObjectClassCode::from_raw(raw)),
417
418 raw @ 0x28..=0x2F => Receive(ObjectClassCode::from_raw(raw)),
419
420 raw @ 0x30..=0x37 => SendFromIsr(ObjectClassCode::from_raw(raw)),
421
422 raw @ 0x38..=0x3F => ReceiveFromIsr(ObjectClassCode::from_raw(raw)),
423
424 raw @ 0x40..=0x47 => CreateObjectFailed(ObjectClassCode::from_raw(raw)),
425
426 raw @ 0x48..=0x4F => SendFailed(ObjectClassCode::from_raw(raw)),
427
428 raw @ 0x50..=0x57 => ReceiveFailed(ObjectClassCode::from_raw(raw)),
429
430 raw @ 0x58..=0x5F => SendFromIsrFailed(ObjectClassCode::from_raw(raw)),
431
432 raw @ 0x60..=0x67 => ReceiveFromIsrFailed(ObjectClassCode::from_raw(raw)),
433
434 raw @ 0x68..=0x6F => ReceiveBlock(ObjectClassCode::from_raw(raw)),
435
436 raw @ 0x70..=0x77 => SendBlock(ObjectClassCode::from_raw(raw)),
437
438 raw @ 0x78..=0x7F => Peek(ObjectClassCode::from_raw(raw)),
439
440 raw @ 0x80..=0x87 => DeleteObject(ObjectClassCode::from_raw(raw)),
441
442 0x88 => TaskDelayUntil,
443 0x89 => TaskDelay,
444 0x8A => TaskSuspend,
445 0x8B => TaskResume,
446 0x8C => TaskResumeFromIsr,
447 0x8D => TaskPrioritySet,
448 0x8E => TaskPriorityInherit,
449 0x8F => TaskPriorityDisinherit,
450
451 0x90 => PendFuncCall,
452 0x91 => PendFuncCallFromIsr,
453 0x92 => PendFuncCallFailed,
454 0x93 => PendFuncCallFromIsrFailed,
455 0x94 => MemoryMallocSize,
456 0x95 => MemoryMallocAddress,
457 0x96 => MemoryFreeSize,
458 0x97 => MemoryFreeAddress,
459
460 raw @ 0x98..=0xA7 => UserEvent(UserEventArgRecordCount(raw - 0x98)),
461
462 0xA8 => Xts8,
463 0xA9 => Xts16,
464 0xAA => EventBeingWritten,
465 0xAB => ReservedDummyCode,
466 0xAC => LowPowerBegin,
467 0xAD => LowPowerEnd,
468 0xAE => Xid,
469 0xAF => Xts16l,
470
471 0xB0 => TimerCreate,
472 0xB1 => TimerStart,
473 0xB2 => TimerReset,
474 0xB3 => TimerStop,
475 0xB4 => TimerChangePeriod,
476 0xB5 => TimerDeleteObject,
477 0xB6 => TimerStartFromIsr,
478 0xB7 => TimerResetFromIsr,
479 0xB8 => TimerStopFromIsr,
480 0xB9 => TimerCreateFailed,
481 0xBA => TimerStartFailed,
482 0xBB => TimerResetFailed,
483 0xBC => TimerStopFailed,
484 0xBD => TimerChangePeriodFailed,
485 0xBE => TimerDeleteFailed,
486 0xBF => TimerStartFromIsrFailed,
487 0xC0 => TimerResetFromIsrFailed,
488 0xC1 => TimerStopFromIsrFailed,
489
490 0xC2 => EventGroupCreate,
491 0xC3 => EventGroupCreateFailed,
492 0xC4 => EventGroupSyncBlock,
493 0xC5 => EventGroupSyncEnd,
494 0xC6 => EventGroupWaitBitsBlock,
495 0xC7 => EventGroupWaitBitsEnd,
496 0xC8 => EventGroupClearBits,
497 0xC9 => EventGroupClearBitsFromIsr,
498 0xCA => EventGroupSetBits,
499 0xCB => EventGroupDeleteObject,
500 0xCC => EventGroupSyncEndFailed,
501 0xCD => EventGroupWaitBitsEndFailed,
502 0xCE => EventGroupSetBitsFromIsr,
503 0xCF => EventGroupSetBitsFromIsrFailed,
504
505 0xD0 => TaskInstanceFinishedNextKse,
506 0xD1 => TaskInstanceFinishedDirect,
507
508 0xD2 => TaskNotify,
509 0xD3 => TaskNotifyTake,
510 0xD4 => TaskNotifyTakeBlock,
511 0xD5 => TaskNotifyTakeFailed,
512 0xD6 => TaskNotifyWait,
513 0xD7 => TaskNotifyWaitBlock,
514 0xD8 => TaskNotifyWaitFailed,
515 0xD9 => TaskNotifyFromIsr,
516 0xDA => TaskNotifyGiveFromIsr,
517
518 0xDB => TimerExpired,
519
520 0xDC => QueuePeekBlock,
521 0xDD => SemaphortPeekBlock,
522 0xDE => MutexPeekBlock,
523
524 0xDF => QueuePeekFailed,
525 0xE0 => SemaphortPeekFailed,
526 0xE1 => MutexPeekFailed,
527
528 0xE2 => StreambufferReset,
529 0xE3 => MessagebufferReset,
530 0xE4 => StreambufferObjectCloseName,
531 0xE5 => MessagebufferObjectCloseName,
532 0xE6 => StreambufferObjectCloseProperty,
533 0xE7 => MessagebufferObjectCloseProperty,
534
535 0xE8 => MemoryMallocSizeFailed,
536 0xE9 => MemoryFreeAddressFailed,
537
538 0xEA => UnusedStack,
539
540 _ => Unknown(ec),
541 }
542 }
543}
544
545impl From<EventType> for EventCode {
546 fn from(et: EventType) -> Self {
547 use EventType::*;
548 let ec = match et {
549 Null => 0x00,
550
551 Xps => 0x01,
552 TaskReady => 0x02,
553 NewTime => 0x03,
554
555 TaskSwitchIsrBegin => 0x04,
556 TaskSwitchIsrResume => 0x05,
557 TaskSwitchTaskBegin => 0x06,
558 TaskSwitchTaskResume => 0x07,
559
560 ObjectCloseName(occ) => 0x08 + occ.into_raw(),
561
562 ObjectCloseProperty(occ) => 0x10 + occ.into_raw(),
563
564 CreateObject(occ) => 0x18 + occ.into_raw(),
565
566 Send(occ) => 0x20 + occ.into_raw(),
567
568 Receive(occ) => 0x28 + occ.into_raw(),
569
570 SendFromIsr(occ) => 0x30 + occ.into_raw(),
571
572 ReceiveFromIsr(occ) => 0x38 + occ.into_raw(),
573
574 CreateObjectFailed(occ) => 0x40 + occ.into_raw(),
575
576 SendFailed(occ) => 0x48 + occ.into_raw(),
577
578 ReceiveFailed(occ) => 0x50 + occ.into_raw(),
579
580 SendFromIsrFailed(occ) => 0x58 + occ.into_raw(),
581
582 ReceiveFromIsrFailed(occ) => 0x60 + occ.into_raw(),
583
584 ReceiveBlock(occ) => 0x68 + occ.into_raw(),
585
586 SendBlock(occ) => 0x70 + occ.into_raw(),
587
588 Peek(occ) => 0x78 + occ.into_raw(),
589
590 DeleteObject(occ) => 0x80 + occ.into_raw(),
591
592 TaskDelayUntil => 0x88,
593 TaskDelay => 0x89,
594 TaskSuspend => 0x8A,
595 TaskResume => 0x8B,
596 TaskResumeFromIsr => 0x8C,
597 TaskPrioritySet => 0x8D,
598 TaskPriorityInherit => 0x8E,
599 TaskPriorityDisinherit => 0x8F,
600
601 PendFuncCall => 0x90,
602 PendFuncCallFromIsr => 0x91,
603 PendFuncCallFailed => 0x92,
604 PendFuncCallFromIsrFailed => 0x93,
605 MemoryMallocSize => 0x94,
606 MemoryMallocAddress => 0x95,
607 MemoryFreeSize => 0x96,
608 MemoryFreeAddress => 0x97,
609
610 UserEvent(arc) => 0x98 + arc.0,
611
612 Xts8 => 0xA8,
613 Xts16 => 0xA9,
614 EventBeingWritten => 0xAA,
615 ReservedDummyCode => 0xAB,
616 LowPowerBegin => 0xAC,
617 LowPowerEnd => 0xAD,
618 Xid => 0xAE,
619 Xts16l => 0xAF,
620
621 TimerCreate => 0xB0,
622 TimerStart => 0xB1,
623 TimerReset => 0xB2,
624 TimerStop => 0xB3,
625 TimerChangePeriod => 0xB4,
626 TimerDeleteObject => 0xB5,
627 TimerStartFromIsr => 0xB6,
628 TimerResetFromIsr => 0xB7,
629 TimerStopFromIsr => 0xB8,
630 TimerCreateFailed => 0xB9,
631 TimerStartFailed => 0xBA,
632 TimerResetFailed => 0xBB,
633 TimerStopFailed => 0xBC,
634 TimerChangePeriodFailed => 0xBD,
635 TimerDeleteFailed => 0xBE,
636 TimerStartFromIsrFailed => 0xBF,
637 TimerResetFromIsrFailed => 0xC0,
638 TimerStopFromIsrFailed => 0xC1,
639
640 EventGroupCreate => 0xC2,
641 EventGroupCreateFailed => 0xC3,
642 EventGroupSyncBlock => 0xC4,
643 EventGroupSyncEnd => 0xC5,
644 EventGroupWaitBitsBlock => 0xC6,
645 EventGroupWaitBitsEnd => 0xC7,
646 EventGroupClearBits => 0xC8,
647 EventGroupClearBitsFromIsr => 0xC9,
648 EventGroupSetBits => 0xCA,
649 EventGroupDeleteObject => 0xCB,
650 EventGroupSyncEndFailed => 0xCC,
651 EventGroupWaitBitsEndFailed => 0xCD,
652 EventGroupSetBitsFromIsr => 0xCE,
653 EventGroupSetBitsFromIsrFailed => 0xCF,
654
655 TaskInstanceFinishedNextKse => 0xD0,
656 TaskInstanceFinishedDirect => 0xD1,
657
658 TaskNotify => 0xD2,
659 TaskNotifyTake => 0xD3,
660 TaskNotifyTakeBlock => 0xD4,
661 TaskNotifyTakeFailed => 0xD5,
662 TaskNotifyWait => 0xD6,
663 TaskNotifyWaitBlock => 0xD7,
664 TaskNotifyWaitFailed => 0xD8,
665 TaskNotifyFromIsr => 0xD9,
666 TaskNotifyGiveFromIsr => 0xDA,
667
668 TimerExpired => 0xDB,
669
670 QueuePeekBlock => 0xDC,
671 SemaphortPeekBlock => 0xDD,
672 MutexPeekBlock => 0xDE,
673
674 QueuePeekFailed => 0xDF,
675 SemaphortPeekFailed => 0xE0,
676 MutexPeekFailed => 0xE1,
677
678 StreambufferReset => 0xE2,
679 MessagebufferReset => 0xE3,
680 StreambufferObjectCloseName => 0xE4,
681 MessagebufferObjectCloseName => 0xE5,
682 StreambufferObjectCloseProperty => 0xE6,
683 MessagebufferObjectCloseProperty => 0xE7,
684
685 MemoryMallocSizeFailed => 0xE8,
686 MemoryFreeAddressFailed => 0xE9,
687
688 UnusedStack => 0xEA,
689
690 Unknown(raw) => raw.0,
691 };
692 EventCode(ec)
693 }
694}
695
696#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Display)]
697pub enum Event {
698 #[display(fmt = "TaskBegin({_0})")]
699 IsrBegin(IsrBeginEvent),
700 #[display(fmt = "IsrResume({_0})")]
701 IsrResume(IsrResumeEvent),
702
703 #[display(fmt = "TaskBegin({_0})")]
704 TaskBegin(TaskBeginEvent),
705 #[display(fmt = "TaskReady({_0})")]
706 TaskReady(TaskReadyEvent),
707 #[display(fmt = "TaskResume({_0})")]
708 TaskResume(TaskResumeEvent),
709 #[display(fmt = "TaskCreate({_0})")]
710 TaskCreate(TaskCreateEvent),
711
712 #[display(fmt = "LowPowerBegin({_0})")]
713 LowPowerBegin(LowPowerBeginEvent),
714 #[display(fmt = "LowPowerEnd({_0})")]
715 LowPowerEnd(LowPowerEndEvent),
716
717 #[display(fmt = "User({_0})")]
718 User(UserEvent),
719
720 #[display(fmt = "EventRecord({_0})")]
721 Unknown(Timestamp, EventRecord),
722}
723
724impl Event {
725 pub fn timestamp(&self) -> Timestamp {
726 use Event::*;
727 match self {
728 IsrBegin(e) => e.timestamp,
729 IsrResume(e) => e.timestamp,
730 TaskBegin(e) => e.timestamp,
731 TaskReady(e) => e.timestamp,
732 TaskResume(e) => e.timestamp,
733 TaskCreate(e) => e.timestamp,
734 LowPowerBegin(e) => e.timestamp,
735 LowPowerEnd(e) => e.timestamp,
736 User(e) => e.timestamp,
737 Unknown(t, _e) => *t,
738 }
739 }
740}
741
742#[cfg(test)]
743mod test {
744 use super::*;
745
746 #[test]
747 fn event_type_roundtrip() {
748 for raw in 0..=0xFF {
749 let ec = EventCode(raw);
750 let et = EventType::from(ec);
751 assert_eq!(ec, EventCode::from(et));
752 }
753 }
754
755 #[test]
756 fn obj_class_code_roundtrip() {
757 for raw in 0..=0x07 {
758 let occ = ObjectClassCode(raw);
759 let oc = occ.into_class();
760 assert_eq!(raw as usize, oc.into_usize());
761 }
762 }
763}