Hallo EntwicklerInnen, im derzeitigen REFLEX-Repository https://bitbucket.org/reflex-dev/reflex/src wird der Code folgendermaßen eingeteilt:
:controller: Hardwareunterstützung für einzelne Mikrocontroller :devices: Plattformunabhängige Gerätetreiber :lib: Plattformunabhängige Zusatzfunktionen :platform: Treiber und Komponenten für unterschiedliche Umgebungen eines Controllers :system: Kernfunktionalität Ich habe nun in den Teilen `devices`, `lib` und `system` sämtlichen Quellcode durchforstet und auf seine Verwendung geprüft. Das Ergebnis findet ihr im Anhang. Einige Teile sind verwaist und werden nirgendwo mehr benutzt. Einige Teile sind nicht ausreichend dokumentiert und ihr Sinn ist unklar. In `lib` befinden sich sowohl essentielle Systemfunktionen, als auch eine Sammlung von Komponenten und Zusatzfunktionen. In `system` befindet sich wiederum Code, der nichts im Kern zu suchen hat. Ich habe versucht, einzelne Dateien nach Zusammengehörigkeit zu gruppieren und Vorschläge über die weitere Verwendung zu unterbreiten, was in einigen Fällen auch wegschmeißen bedeutet. Ich möchte aber auf keinen Fall leichtfertig wertvolle Arbeit entwerten und bitte euch daher um Rückmeldungen. Sämtliche Teile habe ich auch als Tickets eingeplegt und können online unter https://bitbucket.org/reflex-dev/reflex/issues kommentiert werden. Mit besten Grüßen Richard Source Code Files and Folders ============================= .. contents:: Easy Radio driver ----------------- *Files* - `devices/include/reflex/io/EasyRadio.h` *Usage* - none found *Remarks* - documentation not usable *Proposal* - remove EEPROM_24xx512 driver --------------------- *Files* - `devices/include/reflex/io/EEPROM_24xx512.h` - `devices/src/reflex/io/EEPROM_24xx512.cc` *Usage* - `examples/I2CMasterDemo/platform/EZ430-chronos/include/NodeConfiguration.h` - `examples/I2CMasterDemo/include/DataLogCompare.h` *Remarks* - platform independent driver implementation - contains a quite usable documentation - but documentation not fully doxygen-compliant *Proposal* - keep - rework and test documentation I2C driver ---------- *Files* - `devices/include/reflex/io/I2C.h` *Usage* - `platform/EZ430-chronos/include/reflex/io/SCP1000_I2C.h` - `examples/I2CMasterDemo/platform/EZ430-chronos/include/NodeConfiguration.h` - `controller/MSP430X/include/reflex/io/I2C_Master.h` - `controller/MSP430X/include/reflex/usci/USCI_I2C_Master.h` *Remarks* - quite good documentation, but not fully doxygen compliant - more explanations needed as this is a general interface which could be used for any platform *Proposal* - keep - rework documentation Abstract Radio module --------------------- *Files* - `devices/include/reflex/io/Radio.h` *Usage* - `devices/include/reflex/io/EasyRadio.h` *Remarks* - seems to be an orphan driver interface *Proposal* - remove Compact Flash Adapter Driver ---------------------------- *Files* - devices/include/reflex/CFAdapter.h - devices/src/reflex/CFAdapter.cc *Usage* - none *Remarks* - driver only used by Karsten - depends on a file `SizedFiFoBuffer` which does not exist *Proposal* - remove Stacktrace Debug Printer ------------------------ *Files* - `lib/include/misc/stacktrace.h` *Usage* - `platform/OMNeTPP/include/reflex/debug/PlatformAssert.h` *Remarks* - depends on linux environment - only used for OMNeTPP *Proposal* - move to `platform/OMNeTPP/include/reflex/debug/stacktrace.h` Component Update ---------------- *Files* - `lib/include/reflex/componentUpdate/Command.h` - `lib/include/reflex/componentUpdate/ComponentManager.h` - `lib/src/reflex/componentUpdate/ComponentManager.cc` - `doc/ComponentUpdate.tex` *Usage* - `examples/update` *Remarks* - documentation only available for LaTeX - only used in an example application for EZ430-chronos - functionality is hard to test and very specific *Proposal* - merge driver with example application - convert documentation to doxygen ADT: BCD -------- *Files* - `lib/include/reflex/data_types/BCD.h` - `lib/src/reflex/data_types/BCD.cc` *Usage* - `controller/MSP430X/include/reflex/rtc/Registers.h` - `platform/EM430/src/reflex/power/Battery.cc` - `platform/EZ430-chronos/include/reflex/io/Display.h` *Remarks* - documentation does not explain the purpose and usage of this adt - seems to be only used for EZ-chronos *Proposal* - move to MSP430X controller support package ADT: BitField ------------- *Files* - `lib/include/data_types/BitField.h` *Usage* - `controller/atmega/include/reflex/io/ExternalInterrupt.h` - has been used in a driver for an ethernet controller as well, which has been removed *Remarks* - documentation is usable, but deserves improvement *Proposal* - keep ADT: ChainLink -------------- *Files* - `lib/include/reflex/data_types/ChainLink.h` *Usage* - `lib/src/reflex/memory/FreeList.cc` - `lib/src/reflex/data_types/FiFoQueue.cc` - `lib/src/reflex/data_types/Queue.cc` - `lib/include/reflex/memory/SizedPool.h` - `lib/include/reflex/memory/Buffer.h` - `lib/include/reflex/memory/FreeList.h` - `lib/include/reflex/data_types/ChainLink.h` - `lib/include/reflex/data_types/List.h` - `lib/include/reflex/data_types/Queue.h` - `lib/include/reflex/data_types/FifoQueue.h` - all activity types and schedulers - `system/include/reflex/powerManagement/PowerManageAble.h` - `controller/atmega/include/reflex/io/ADChannel.h` *Remarks* - essential adt *Proposal* - keep in core - better documentation, but only for core-developers - no doxygen documentation ADT: Converter -------------- *Files* - `lib/include/reflex/data_types/Converter.h` *Usage* - `lib/include/reflex/data_types/Partial.h` *Remarks* - not well documented *Proposal* - move to the same place as ADT Partial - integrate into ADT Partial if necessary - remove from doxygen documentation ADT: Encode ----------- *Files* - `lib/include/reflex/data_types/Encode.h` *Usage* - `lib/include/reflex/data_types/BCD.h` - `platform/EM430/src/reflex/power/Battery.cc` - `platform/EZ430-chronos/include/reflex/io/Display.h` *Remarks* - purpose and usage is undocumented - seems to be only used for platforms EM430 and ez-chronos *Proposal* - move to MSP430X controller support package ADT: Automatic endianness containers ------------------------------------ *Files* - `lib/include/reflex/data_types/Endianness.h` *Usage* - none *Remarks* - documentation contains code example *Proposal* - keep - purpose of this code is a little bit unclear - documentation should point out the application to network buffers ADT: FifoQueue -------------- *Files* - `lib/include/reflex/data_types/FifoQueue.h` - `lib/src/reflex/data_types/FifoQueue.cc` *Usage* - `platform/AIF430/include/reflex/io/T123A.h` - `system/include/reflex/scheduling/FifoScheduler.h` - `system/include/reflex/sinks/Queue.h` - `system/include/reflex/powerManagement/PowerManager.h` *Remarks* - essential ADT - FifoQueue is a misnomer, since it means just Queue *Proposal* - merge functionality with Queue ADT: Flags ---------- *Files* - `lib/include/reflex/data_types/Flags.h` *Usage* - `lib/include/reflex/xml/XmlHandler.h` - `controller/atmega/include/reflex/io/PinChangeInterrupt.h` - `controller/atmega/include/reflex/io/IOPort.h` *Remarks* - well documented *Proposal* - keep ADT: Helper ----------- *Files* - `lib/include/reflex/data_types/Helper.h` *Usage* - `lib/include/reflex/data_types/ReadOnly.h` - `lib/include/reflex/data_types/Register.h` - `controller/MSP430X/include/reflex/io/Registers.h` *Remarks* - purpose of this file is unclear *Proposal* - move to MSP430X controller support package ADT: List --------- *Files* - `lib/include/reflex/data_types/List.h` *Usage* - none *Remarks* - no documentation - seems to be an unfinished implementation - mixes linked list and iterator *Proposal* - drop ADT: Partial ------------ *Files* - `lib/include/reflex/data_types/Partial.h` *Usage* - `lib/include/reflex/data_types/BCD.h` - `lib/include/reflex/data_types/Register.h` - `controller/MSP430X/include/reflex/rtc/Registers.h` - `controller/MSP430X/include/reflex/adc/ADC12_A.h` - `controller/MSP430X/include/reflex/adc/ADC12_A.h` *Remarks* - causes doxygen to crash - documentation insufficient, purpose and usage not clear *Proposal* - move to MSP430X controller support package ADT: Queue ---------- *Files* - `lib/include/reflex/data_types/Queue.h` - `lib/src/reflex/data_types/Queue.cc` *Usage* - `lib/include/reflex/data_types/FifoQueue.h` *Remarks* - does not include essential queue methods enqueue and dequeue - these methods are instead implemented in ``FifoQueue`` - documentation does not exist - it's unclear, what code should be covered by runtime asserts *Proposal* - keep and merge with ``FifoQueue`` - improve documentation, maybe steal from Qt http://qt-project.org/doc/qt-5/qqueue.html ADT: ReadOnly / WriteOnly ------------------------- *Files* - `lib/include/reflex/data_types/ReadOnly.h` - `lib/include/reflex/data_types/WriteOnly.h` *Usage* - `controller/MSP430X/include/reflex/rtc/Registers.h` - `controller/MSP430X/include/reflex/lcd/Registers.h` - `controller/MSP430X/include/reflex/timer/Registers.h` - `controller/MSP430X/include/reflex/MachineDefinitions.h` - `controller/MSP430X/include/reflex/io/Registers.h` - `controller/MSP430X/include/reflex/io/Ports.h` - `controller/MSP430X/include/reflex/adc/Registers.h` - `controller/MSP430X/include/reflex/usci/Registers.h` - `controller/MSP430X/include/reflex/sys/Registers.h` - `controller/MSP430/include/reflex/io/Port.h` *Remarks* - seems to be only used for MSP430(x) - WriteOnly isn't used at all *Proposal* - move to MSP430X controller support package if support for MSP430 (without X) is omitted ADT: Register ------------- *Files* - `lib/include/data_types/Register.h` *Usage* - `lib/include/reflex/data_types/ReadOnly.h` - `controller/MSP430X/include/reflex/io/Registers.h` *Remarks* - purpose and benefit over simple small integer types is not well documented - seems to be only used on MSP430X *Proposal* - move to MSP430X controller support package ADT: Singleton ------------------------------------- *Files* - `lib/include/reflex/data_types/Singleton.h` *Usage* - `lib/include/reflex/timer/VirtualTimer.h` - `platform/EM430/include/reflex/io/Button_S2.h` - `platform/EZ430-chronos/include/reflex/io/SCP1000.h` - `platform/EZ430-chronos/include/reflex/io/Buttons.h` - `platform/EZ430-chronos/include/reflex/io/CMA3000.h` - `platform/EZ430-chronos/include/reflex/io/SCP1000_I2C.h` - `platform/EZ430-chronos/include/reflex/io/Button.h` - `platform/EZ430-chronos/include/reflex/io/SHT7x.h` - `examples/unitTest/include/TestEnvironment.h` - `controller/MSP430X/include/reflex/io/SoftUART.h` - `controller/atmega/include/reflex/io/ADConverter.h` - `controller/atmega/include/reflex/io/ADChannel.h` *Remarks* - well documented - essential adt *Proposal* - keep ADT: Static ----------- *Files* - `lib/include/reflex/data_types/Static.h` *Usage* - `platform/OMNeTPP/include/reflex/debug/OmnetDebug.h` - `system/include/reflex/interrupts/InterruptDispatcher.h` - `system/include/reflex/sinks/Sink.h` *Remarks* - unfinished documentation and implementation - unlike Singleton it does not provide constructor parameters *Proposal* - keep, but improve documentation SizeOf Debug Printer -------------------- *Files* - `lib/include/reflex/debug/SizeOf.h` *Usage* - `lib/include/reflex/data_types/Partial.h` - `lib/include/reflex/data_types/Register.h` - `examples/updateDataSend/platform/EZ430-chronos/include/NodeConfiguration.h` - `examples/update/platform/EZ430-chronos/include/NodeConfiguration.h` *Proposal* - remove includes in other files since this should be only used during development - merge with other debug files from system ADT: Type Markers ------------------------------------- *Files* - `lib/include/reflex/data_types/TypeMarkers.h` *Usage* - none *Remarks* - unfinished implementation *Proposal* - remove Event Channel Reflection API ---------------------------- *Files* - `lib/include/reflex/io/Echo.h` - `lib/include/reflex/io/InteractiveElement.h` - `lib/include/reflex/io/IOManager.h` - `lib/include/reflex/io/OutputElement.h` - `lib/src/reflex/io/Echo.cc` - `lib/src/reflex/io/InteractiveElement.cc` - `lib/src/reflex/io/IOManager.cc` - `lib/src/reflex/io/OutputElement.cc` *Usage* - none *Remarks* - although some documentation exists, it does not explain the the concept behind and for what it is good - nobody has touched that for years *Proposal* - remove OutputChannel ------------------------------------- *Files* - `lib/include/reflex/io/OutputChannel.h` - `lib/src/reflex/io/OutputChannel.cc` *Usage* - `examples/update` - `examples/HelloWorld` - `examples/radiobeacon` - `examples/TmoteUpdate` - `examples/VirtualTimers` - `examples/unitTest` - `howto` *Remarks* - does not fit very well into the event-flow model - some of the methods check buffer size, some not; may lead to unexpected behaviour *Proposal* - should rather be a formatter object for arbitrary content in any memory and not bound to buffers -> `StringFormatter` - but sprintf which is available on many platforms can probably do a better job, or a light-weight implementation of sprintf could be copied from somewhere (license?!) Generic Spi driver ------------------ *Files* - `lib/include/reflex/io/Spi.h` *Usage* - `controller/atmega/include/reflex/io/SpiHardware.h` *Remarks* - documentation needs some spell corrections - driver only used on atmega *Proposal* - keep, since it's also one of the view better documented classes Buffers & Pools --------------- *Files* - `lib/include/reflex/memory/Buffer.h` - `lib/include/reflex/memory/BufferPointer.h` - `lib/include/reflex/memory/FreeList.h` - `lib/include/reflex/memory/Pool.h` - `lib/include/reflex/memory/PoolManager.h` - `lib/include/reflex/memory/SizedPool.h` - `lib/src/reflex/memory/Buffer.cc` - `lib/src/reflex/memory/FreeList.cc` - `lib/src/reflex/memory/Pool.cc` - `lib/src/reflex/memory/PoolManager.cc` *Usage* - `examples/update` - `examples/HelloWorld` - `examples/radiobeacon` - `examples/updateDataSend` - `examples/PingPong` - `lib/include/reflex/net/*` - `lib/include/reflex/xml/*` - different hardware drivers on all platforms - `OutputChannel` - `howto/doc/ReflexHowto.tex` and some code examples *Remarks* - contains documentation, but overall concept is not explained well - error-prone due to ambigious API *Proposal* - keep, since it's widely used and essential for many components in order to work - maybe move to seperate buffer module - remove application dependencies; find a solution for `PoolManager` similar to `VirtualizedTimer` - remove orphan `BufferPointer.h` file Memory operations ----------------- *Files* - `lib/include/reflex/memory/memcmp.h` - `lib/include/reflex/memory/memcpy.h` - `lib/include/reflex/memory/memmove.h` - `lib/include/reflex/memory/memset.h` *Usage* - `lib/src/reflex/memory/Buffer.cc` - `system/include/reflex/SystemStatusBlock.h` - `controller/MSP430X/src/reflex/memory/memcpy.cc` - `controller/MSP430X/include/reflex/rtc/Registers.h` - `controller/MSP430/src/reflex/memory/Flash.cc` *Remarks* - functions rather belong into libc (e.g. gnu binutils) - gcc for avr, msp430 and linux support libc *Proposal* - remove, since this doubles functionality from libc - for platforms without libc, these functions could be implemented in a distinct package or on the platform itself - remove memcpy from system status block or remove SystemStatusBLock from core - remove memset from InterruptDispatcher or remove InterruptDispatcher from core Placement new/delete Operator ------------------------------------- *Files* - `lib/include/reflex/memory/new.h` *Usage* - `lib/include/reflex/memory/FreeList.h` - `lib/include/reflex/data_types/Singleton.h` - `examples/unitTest/include/TestSuite.h` - `controller/MSP430X/include/reflex/pmm/PMM.h` *Remarks* - discussion needed, whether to keep this in kernel or not *Proposal* - rework implementation of new / delete in FreeList because dependency should not be necessary Random Generator ---------------- *Files* - `lib/include/reflex/misc/random/Random.h` - `lib/include/reflex/misc/random/XORSHIFT16b.h` *Usage* - none *Remarks* - none *Proposal* - remove Delay Component --------------- *Files* - 'lib/include/reflex/misc/Delay.h' - 'lib/include/reflex/misc/Delay.cc' *Usage* - none *Remarks* - purpose and usage is unclear from the documentation *Proposal* - keep, but move to a component library - merge .cc and .h file Distributor Component --------------------- *Files* - `lib/include/reflex/misc/Distributor.h` - `lib/include/reflex/misc/Distributor.cc` *Usage* *Remarks* - purpose and usage and behaviour is unclear from the documentation *Proposal* - keep, but move to a component library - merge .h and .cc file Logarithm Calculation Class --------------------------- *Files* - `lib/include/reflex/misc/Logarithm.h` *Usage* - `lib/include/reflex/xml/XmlConverterInteger.h` *Remarks* - not very well documented - seems to be only used in XML library *Proposal* - remove from doxygen documentation - move to separate XML library Prescaler.h ----------- *Files* - `lib/include/reflex/misc/Prescaler.h` - `lib/src/reflex/misc/Prescaler.h` *Usage* - `lib/include/reflex/net/CAMac.h` - `examples/TmoteUpdate/1/include/HelloWorld.h` - `examples/TmoteUpdate/2/include/HelloWorld.h` - `examples/XmlBlinker/include/XmlBlinker.h` *Remarks* - documentation is short *Proposal* - move to separate component library Timetable --------- *Files* - `lib/include/reflex/misc/Timetable.h` - `lib/src/reflex/misc/Timetable.cc` *Usage* - none *Remarks* - purpose unclear - seems to be an outdated implementation *Proposal* - remove CAMac Component --------------- *Files* - `lib/include/reflex/net/CAMac.h` - `lib/src/reflex/net/CAMac.cc` *Usage* - none *Remarks* - does not contain any documentation - purpose unknown *Proposal* - remove Manchester Coder Component -------------------------- *Files* - `lib/include/reflex/net/ManchesterCoder.h` - `lib/src/reflex/net/ManchesterCoder.cc` *Usage* - none *Remarks* - does not contain any documentation - purpose unknown *Proposal* - remove Serial Packetizer ----------------- *Files* - `lib/include/reflex/net/Packetizer.h` - `lib/src/reflex/net/Packetizer.cc` *Usage* - none *Remarks* - even though it contains some documentation, it seems to be unused *Proposal* - remove Packet (De-)Multiplexer ----------------------- *Files* - `lib/include/reflex/net/PacketMuxDemux.h` *Usage* - none *Remarks* - no documentation *Proposal* - remove Timer Functor Component ----------------------- *Files* - `lib/include/reflex/timer/TimerFunctor.h` *Usage* - none *Remarks* - none *Proposal* - remove Virtual Timer ------------- *Files* - `lib/include/reflex/timer/VirtualizedTimer.h` - `lib/include/reflex/timer/VirtualTimer.h` - `lib/include/reflex/timer/VTimerBase.h` - `lib/src/reflex/timer/VirtualizedTimer.cc` - `lib/src/reflex/timer/VirtualTimer.cc` - `system/include/reflex/timer/HardwareTimer.h` *Usage* - various drivers on various platforms - various examples *Remarks* - essential for most applications - dependencies to all platforms in order to work (HardwareTimer, VirtualTimerSupport) - underlaying hardware timer is currently fixed for each platform. But this should be up to the application. *Proposal* - move platform-independent parts to separate virtual timer library - move hardware timer to controller support package - implement virtual timer support in a way that it can be configured during application startup e.g. ``VirtualTimer::core()->setHardwareTimer(hwTimer);``. Any platform is free to provide helper classes / methods for convenience. Demangle -------- *Files* - `lib/include/reflex/utils/Demangle.h` *Usage* - none *Remarks* - purpose and functionality unclear *Proposal* - remove XML Event Channel Wrappers -------------------------- *Files* - `lib/include/reflex/xml/*` - `lib/src/reflex/xml/*` - `lib/include/reflex/memory/DefaultMemoryPolicy.h` - `controller/XXX/include/reflex/memory/MemoryPolicy.h` *Usage* - XMLBlinker example *Remarks* - platform dependent through memory policy -- a way for transparent access to flash memory on different architectures - well documented *Proposal* - move to separate XML library - try to use named address spaces for harvard architectures Assertions ---------- *Files* - `system/include/reflex/debug/Assert.h` - `system/include/reflex/debug/StaticAssert.h` *Usage* - everywhere *Remarks* - static asserts are a built-in feature of C++11 compilers - platform-specific asserts are not possible for the kernel if we compile the kernel before platform package has been loaded *Proposal* - replace ``STATIC_ASSERT`` with built-in ``static_assert`` - start discussion about assertions on mailing list Configurable Driver Objects --------------------------- *Files* - `system/include/reflex/driverConfiguration/AccelerationSensorConfiguration.` - `system/include/reflex/driverConfiguration/ConfigurableDriver.h` - `system/include/reflex/driverConfiguration/ConfigurableObject.h` - `system/include/reflex/driverConfiguration/RadioConfiguration.h` - `system/include/reflex/driverConfiguration/RTCConfiguration.h` *Usage* - `controller/MSP430X/include/reflex/rf/RADIO.h` - `controller/MSP430X/include/reflex/rtc/RTC_A.h` - `platform/EZ430-chronos/include/reflex/io/CMA3000.h` *Remarks* - documentation is not bad, but needs to better point out the big picture - seems to be only used in MSP430X, example is missing *Proposal* - move to MSP430X controller support package or into a separate package if somebody wants to maintain it Interrupt Dispatcher -------------------- *Files* - `system/include/reflex/interrupts/InterruptDispatcher.h` *Usage* - `controller/MSP430X/include/reflex/rtc/Registers.h` - `controller/MSP430X/include/reflex/timer/Timer0_A5.h` - `controller/MSP430X/include/reflex/timer/Registers.h` - `controller/MSP430X/include/reflex/io/Ports.h` - `controller/MSP430X/include/reflex/adc/Registers.h` - `controller/MSP430X/include/reflex/usci/Registers.h` - `controller/MSP430X/include/reflex/sys/Registers.h` - `controller/MSP430X/include/reflex/sys/SYS.h` - `platform/EZ430-chronos/include/reflex/io/SCP1000.h` - `platform/EZ430-chronos/include/reflex/io/Buttons.h` - `platform/EZ430-chronos/include/reflex/io/CMA3000.h` - `platform/EZ430-chronos/include/reflex/io/SCP1000_I2C.h` - `platform/EZ430-chronos/include/reflex/io/SHT7x.h` *Remarks* - contains some documentation, but not enough to fully understand it - specific implementation under the assumption to use MSP430X - seems to be only used on MSP430X *Proposal* move to MSP430X controller support package Interrupt Subsystem ------------------- *Files* - `system/include/reflex/interrupts/InterruptFunctor.h` - `system/include/reflex/interrupts/InterruptGuardian.h` - `system/include/reflex/interrupts/InterruptHandler.h` - `system/include/reflex/interrupts/InterruptLock.h` *Usage* - everywhere *Remarks* - ``InterruptGuardian`` depends on the maximum number of interrupt handlers which is defined in the controller support package - ``InterruptGuardian`` needs direct access to the scheduler to call ``enterScheduling()`` and ``leaveScheduling()`` - ``InterruptHandler`` is interwoven with power management which is problematic (see issue #10) - the documentation of ``InterruptLock`` not enough to understand it - the general concept of interrupt locking applies only to single-core systems which is not a problem at the moment *Proposal* - remove machine dependency by using a pointer to the interrupt table and taking table size via constructor. This is not less efficiant than the current implementation - move implementation of ``registerInterruptHandler()`` and ``unregisterInterruptHandler()`` to the platform independent part - move init functionality to platform independent constructor - seperate interrupt handling from power mangement - improve documentation of ``InterruptLock`` Scheduling List Implementation ------------------------------ *Files* - `system/include/reflex/lib/TList.h` *Usage* - `system/include/reflex/scheduling/PrioritySchedulerNonPreemptive.h` (sorted) - `system/include/reflex/scheduling/EDFScheduler_simple.h` (sorted) - `system/include/reflex/scheduling/PriorityScheduler.h` (sorted, unsorted) - `system/include/reflex/scheduling/TimeTriggeredScheduler.h` (sorted/unsorted) - `system/include/reflex/scheduling/EDFSchedulerNonPreemprive.h` (sorted) - `system/include/reflex/scheduling/EDFScheduler.h` (sorted/unsorted) - `system/include/reflex/scheduling/PriorityScheduler_simple.h` (sorted) *Remarks* - a list implementation only used inside the scheduler framework - implements sorted and unsorted behaviour, which makes the API messy *Proposal* - split API in sorted and unsorted behaviour: ``LinkedList``, ``SortedLinkedList`` - harmonize API with STL or Qt - integrate list with other abstract data types - base the Queue (``LinkedQueue``) implementation on ``LinkedList`` Proto Threads --------------------- *Files* - `system/include/reflex/scheduling/LocalContinuation.h` - `system/include/reflex/scheduling/LocalContinuationSwitch.h` - `system/include/reflex/scheduling/ProtoThread.h` - `system/include/reflex/scheduling/ProtoThreadFunctor.h` - `system/include/reflex/scheduling/ProtoThreadSemaphore.h` - `system/include/reflex/scheduling/ProtoThreadTimer.h` - `system/include/reflex/scheduling/ProtoThreadWait.h` *Usage* - `platform/EZ430-chronos/include/reflex/io/SCP1000.h` / `.cc` - `platform/EZ430-chronos/include/reflex/io/CMA3000.h` / `.cc` *Remarks* - good documentation - seems to be only used on ED430-chronos *Proposal* - move to separate library Scheduling Framework -------------------- keep as is Event Channels -------------- keep as is Clock ----- *Files* - `system/include/reflex/timer/Clock.h` - `system/src/reflex/timer/Clock.cc` *Usage* - `system/include/reflex/scheduling/EDFScheduler_simple.h` - `system/include/reflex/scheduling/EDFSchedulerNonPreemptive.h` - `system/include/reflex/scheduling/EDFSchedulerNonPreemptive.h` *Remarks* - application dependency to ``MAXTIME`` - nearly the same functionality as ``Prescaler`` *Proposal* - integrate into the schedulers as this has been done in time-triggered scheduler as well Over-the-air Update on TMoteSky ------------------------------- *Files* - `system/include/reflex/update/*` - `system/src/reflex/update/*` - `system/include/reflex/SystemStatusBlock.h` - `system/src/reflex/SystemStatusBlock.cc` *Usage* - `controller/MSP430/include/reflex/update/*` - `examples/TmoteUpdate/*` - `controller/SKELETON/include/reflex/System.h` - `controller/MSP430X/include/reflex/System.h` - `controller/MSP430/include/reflex/System.h` *Remarks* - overall concept not documented - not platform-independent, implemented only for MSP430 - ``SystemStatusBlock`` pollutes every ``System`` object even though it is not used *Proposal* - remove or move the code to separate library / example Unknown Updater --------------- *Files* - `system/include/reflex/updater/BSL_Update.h` - `system/include/reflex/updater/UpdateTypes.h` - `system/src/reflex/updater/BSL_Update.cc` - `system/utils/wirelessUpdate/uploaderv1.0.py` *Usage* - `controller/MSP430X/include/reflex/System.h` - `controller/MSP430X/src/reflex/rf/RADIO.cc` - `examples/updateDataSend/include/UpdateDataSend.h` *Remarks* - undocumented, purpose and functionality is unclear *Proposal* - remove
