:orphan:

SLM-200
=======

**From:** Santec Corporation

**Class:** :py:class:`herosdevices.hardware.santec.slm200.SLM200`


**Driver Quality Index:** beta


Driver for a Santec SLM200 spatial light modulator.

The images can be transferred to the SLM200 via USB or DVI. This driver, however, only supports
communication via USB. Since image upload via USB takes roughly 150ms, this driver is limited to
around 6Hz of refresh rate. Precise and externally synchronized timing is only possible in USB mode.

In USB mode (also called memory mode) images can be pushed via USB and stored in one of 128 memory
slots. The image slot displayed on the SLM can be set randomly by the driver or an advance from one
slot to the next can be triggered by a software trigger, and internal timer, or a logic signal
(Trigger IN SMB jack).

The SLM contains an FPGA that the computer communicates with by writing to an output FIFO/pipe
and reading from an input FIFO/pipe. These two FIFOs are transparently accessed through the FTDI
driver (D3xx) which provides methods to read and write these FIFOs/pipes.

This driver is reverse engineered by looking at the data the vendor software sends via USB.
This was achieved by looking at the API calls to the functions FT_WritePipe and FT_ReadPipe
in the D3XX.dll which handles the communication with the FTDI USB3.0 chip (FT601).

.. tabs:: 


   .. tab:: Arguments
   
   
      Bold arguments are mandatory. For more information on the listed arguments refer to the class             documentation: :py:class:`herosdevices.hardware.santec.slm200.SLM200` If parameters appear in this             list but not in the class definition, please recursively check the linked base classes for the             definition of the parameter.
      
      
      .. list-table:: 
         :widths: 50 50 50 100
         :header-rows: 1
      
         * - Argument
           - Type
           - Default Value
           - Description
         * - **serial_number**
           - **<class 'str'>**
           - 
           - 
         * - **config_dict**
           - **<class 'dict'>**
           - 
           - Configuration dictionary, see EXAMPLE_CONFIG
         * - default_config
           - str | None
           - None
           - 
         * - keep_device_open
           - <class 'bool'>
           - True
           - Keep the device open after it is first opened
         * - channel
           - <class 'int'>
           - 0
           - 
      

   .. tab:: Example JSON for BOSS
   
      The following JSON strings can be used to start a HERO device representation of             :py:class:`SLM200 <herosdevices.hardware.santec.slm200.SLM200>` using             `BOSS <https://boss-eb4966.gitlab.io/>`_.
      
      
      .. code-block:: json
      
         {
             "_id": "my_SLM200",
             "classname": "herosdevices.hardware.santec.slm200.SLM200",
             "arguments": {
                 "serial_number": "<class 'str'>",
                 "config_dict": "<class 'dict'>",
                 "default_config": null,
                 "keep_device_open": true,
                 "channel": 0
             }
         }
      
      :sup:`generated from signature`
   .. tab:: Inheritance
   
   
      .. inheritance-diagram:: herosdevices.hardware.santec.slm200.SLM200
      
