{"id":15532949,"url":"https://github.com/matham/barst","last_synced_at":"2025-04-09T10:14:33.744Z","repository":{"id":17037953,"uuid":"19802228","full_name":"matham/barst","owner":"matham","description":"A server that controls lab hardware.","archived":false,"fork":false,"pushed_at":"2019-10-25T03:33:40.000Z","size":603,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-15T04:26:10.672Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/matham.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-05-15T01:39:22.000Z","updated_at":"2020-03-31T14:10:59.000Z","dependencies_parsed_at":"2022-09-24T12:46:38.217Z","dependency_job_id":null,"html_url":"https://github.com/matham/barst","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matham%2Fbarst","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matham%2Fbarst/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matham%2Fbarst/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matham%2Fbarst/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/matham","download_url":"https://codeload.github.com/matham/barst/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248018070,"owners_count":21034048,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-02T11:34:10.395Z","updated_at":"2025-04-09T10:14:33.713Z","avatar_url":"https://github.com/matham.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"Barst\n======\n\nBarst is a server/client architecture for reading/writing to\ndevices, such as switches or cameras commonly used in the CPL lab.\n\nIt allows one central server to control the devices, while clients\nrequest that data be sent or read from the devices.\n\nSee http://matham.github.io/barst/index.html for the complete\nserver documentation and https://matham.github.io/pybarst/index.html\nfor a Python client implementation.\n\nNote that the project does not link to any external code at compile time\nbut instead loads driver dlls dynamically at runtime. Therefore,\nthese dlls needs to be present and installed on the system before\nspecific devices can be supported.\n\nUsage\n-----\n\nUsers typically instantiate a server instance from a batch file with e.g.\n\n    start \"\" \"barst.exe\" \"\\\\.\\pipe\\CPL_test\" 1024 1024\n\nin a batch file. Once instantiated, users interact with the server using\nthe client API over the provided pipe.\n\n\nArchitecture\n------------\n\nEach device supported by the server requires that a ``CManager`` and ``CDevice``\ninterface to be implemented. This defines the operations supported by the device.\n\nA client first requests the manager for a particular device type, e.g. the ``MCDAQ``\n(Measurement Computing USB DAQ) using the main server pipe. The first time the manager\nis created on the server, it loads the required driver. Subsequently, the client\nsends a request to the manager to create an instance of a specific ``MCDAQ`` device.\n\nOnce the ``MCDAQ`` device exists, clients connect to it directly (each device gets its own\npipe) and send data requests to control or read from the device. Multiple clients\nmay safely send requests to the same device. Each device reads or writes data in its\nown thread.\n\nFor reading data from the device, there are generally two options:\n\n#. Read the device and send back data to the client upon request.\n#. The server contentiously reads data from the device and buffers it. It also\n   contentiously sends the data it read to the client who initiated the read\n   request.\n\nClients are responsible for closing the device when not needed anymore.\n\nData types\n-------------\n\nAll data requests over the pipe start with common structs. Each device manages\nthe pipe used by clients of the device and defines the structs used by clients.\n``cpl defs.h`` defines all the data types.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatham%2Fbarst","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatham%2Fbarst","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatham%2Fbarst/lists"}