diff --git a/libemg/_streamers/__init__.py b/libemg/_streamers/__init__.py index 79da57c6..65d10924 100644 --- a/libemg/_streamers/__init__.py +++ b/libemg/_streamers/__init__.py @@ -11,3 +11,4 @@ from libemg._streamers import _oymotion_windows_streamer from libemg._streamers import _emager_streamer from libemg._streamers import _leap_streamer +from libemg._streamers import __new_streaner \ No newline at end of file diff --git a/libemg/_streamers/__new_streaner.py b/libemg/_streamers/__new_streaner.py new file mode 100644 index 00000000..d5b554e8 --- /dev/null +++ b/libemg/_streamers/__new_streaner.py @@ -0,0 +1,23 @@ +from libemg.shared_memory_manager import SharedMemoryManager +from multiprocessing import Process + +""" +This class will inherit from the Process class. The goal is to read data and pass it to the Shared Memory object. +""" +class NewStreamer(Process): + def __init__(self, shared_memory_items: list = []): + Process.__init__(self, daemon=True) + self.shared_memory_items = shared_memory_items + # TODO: Pass in whatever parameters you will need here. + + """ + This function is required for the streamer to work. In this function you should have a while loop + that continuously listens for new data from the device and update the shared memory object. + """ + def run(self): + self.smm = SharedMemoryManager() + for item in self.shared_memory_items: + self.smm.create_variable(*item) + + #TODO: Fille out the rest (see any of the other streamers in the _streamers folder for examples) + diff --git a/libemg/streamers.py b/libemg/streamers.py index 2543d065..1d19a0d5 100644 --- a/libemg/streamers.py +++ b/libemg/streamers.py @@ -14,6 +14,28 @@ from libemg._streamers._emager_streamer import EmagerStreamer from libemg._streamers._sifi_bridge_streamer import SiFiBridgeStreamer from libemg._streamers._leap_streamer import LeapStreamer +from libemg._streamers.__new_streaner import NewStreamer + +def new_streamer(shared_memory_items = None): + """ + TODO: Update docs like other functions. + """ + # Need to make shared memory items to define the size of the shared memory buffer. This is a buffer + # of 5000 samples by 8 channels. + if shared_memory_items is None: + shared_memory_items = [] + shared_memory_items.append(["emg", (5000,8), np.double]) + shared_memory_items.append(["emg_count", (1,1), np.int32]) + + for item in shared_memory_items: + item.append(Lock()) + + # TODO: Update this + ns = NewStreamer(shared_memory_items) + ns.start() + return ns, shared_memory_items + + def sifibridge_streamer(version="1_1", shared_memory_items = None, diff --git a/streamer_test.py b/streamer_test.py new file mode 100644 index 00000000..f6394875 --- /dev/null +++ b/streamer_test.py @@ -0,0 +1,12 @@ +from libemg.streamers import new_streamer +from libemg.data_handler import OnlineDataHandler + +if __name__ == "__main__": + """ + This will test your new streamer by plotting it. + """ + _, sm = new_streamer() + odh = OnlineDataHandler(sm) + odh.visualize() + +