LUNA: a USB multitool & nMigen library

Related tags

Hardware luna
Overview

LUNA: a USB multitool & nMigen library Simulation Status Documentation Status

LUNA r0.2 side view

LUNA Library

LUNA is a full toolkit for working with USB using FPGA technology; and provides hardware, gateware, and software to enable USB applications.

Some things you can use LUNA for, currently:

  • Protocol analysis for Low-, Full-, or High- speed USB. LUNA provides both hardware designs and gateware that allow passive USB monitoring. When combined with the ViewSB USB analyzer toolkit, LUNA hardware+gateware can be used as a full-featured USB analyzer.
  • Creating your own Low-, Full-, High-, or (experimentally) Super- speed USB device. LUNA provides a collection of nMigen gateware that allows you to easily create USB devices in gateware, software, or a combination of the two.
  • Building USB functionality into a new or existing System-on-a-Chip (SoC). LUNA is capable of generating custom peripherals targeting the common Wishbone bus; allowing it to easily be integrated into SoC designs; and the library provides simple automation for developing simple SoC designs.

Some things you'll be able to use LUNA for in the future:

  • Man-in-the-middle'ing USB communications. The LUNA toolkit will be able to act as a USB proxy, transparently modifying USB data as it flows between a host and a device.
  • USB reverse engineering and security research. The LUNA toolkit will serve as an ideal backend for tools like FaceDancer; allowing easy emulation and rapid prototyping of compliant and non-compliant USB devices.

LUNA Hardware

The LUNA project also includes eponymous multi-tool hardware. This hardware isn't yet suited for end-users; but hardware development has reached a point where current-revision boards (r0.2+) make good development platforms for early community developers.

Building this board yourself isn't for the faint of heart -- as it requires placing two BGA components, including a large FPGA. Still, if you're proficient with rework and FPGA development, feel free to join in the fun!

Project Structure

This project is broken down into several directories:

  • luna -- the primary LUNA python toolkit; generates gateware and provides USB functionality
    • luna/gateware -- the core gateware components for LUNA; and utilities for stitching them together
  • examples -- simple LUNA-related examples; mostly gateware-targeted, currently
  • docs -- sources for the LUNA Sphinx documentation
  • contrib -- contributed/non-core components; such as udev rules
  • applets -- pre-made gateware applications that provide useful functionality on their own (e.g., are more than examples)

Project Documentation

LUNA's documentation is captured on Read the Docs. Raw documentation sources are in the docs folder.

Related Projects

LUNA hardware is supported by two firmware projects:

  • Apollo, the firmware that runs on LUNA hardware's debug controller, and which is responsible for configuring its FPGA.
  • Saturn-V, a DFU bootloader created for LUNA hardware.
Comments
  • Enumeration trouble, part 1

    Enumeration trouble, part 1

    I'm having trouble with a long USB 2.0 configuration descriptor -- 75 bytes.

    Initially, I was seeing my Linux host complaining in dmesg about being unable to read the descriptor, after I'd added another interface with two alternate settings. Here's how the problematic descriptor looks:

    with descriptors.DeviceDescriptor() as d:
        d.idVendor  = 0x16d0
        d.idProduct = 0x0f3b
        d.iManufacturer = "ShareBrained"
        d.iProduct      = "Tedium X8"
        d.iSerialNumber = "deadbeef"
        d.bNumConfigurations = 1
    
    with descriptors.ConfigurationDescriptor() as c:
    
        with c.InterfaceDescriptor() as i:
            i.bInterfaceNumber = 0
    
            with i.EndpointDescriptor() as e:
                e.bEndpointAddress = USBDirection.IN.to_endpoint_address(1)
                e.wMaxPacketSize   = 64
                e.bmAttributes     = USBTransferType.INTERRUPT
                e.bInterval        = 4
    
        with c.InterfaceDescriptor() as i:
            i.bInterfaceNumber = 1
            i.bAlternateSetting = 0
    
        with c.InterfaceDescriptor() as i:
            i.bInterfaceNumber = 1
            i.bAlternateSetting = 1
    
            with i.EndpointDescriptor() as e:
                e.bEndpointAddress = USBDirection.IN.to_endpoint_address(2)
                e.wMaxPacketSize   = (1 << 11) | 24
                e.bmAttributes     = USBTransferType.ISOCHRONOUS
                e.bInterval        = 1
    
        with c.InterfaceDescriptor() as i:
            i.bInterfaceNumber = 2
            i.bAlternateSetting = 0
    
        with c.InterfaceDescriptor() as i:
            i.bInterfaceNumber = 2
            i.bAlternateSetting = 1
    
            with i.EndpointDescriptor() as e:
                e.bEndpointAddress = USBDirection.OUT.to_endpoint_address(3)
                e.wMaxPacketSize   = (1 << 11) | 24
                e.bmAttributes     = USBTransferType.ISOCHRONOUS
                e.bInterval        = 1
    

    I built a test case based on FullDeviceTest that demonstrates the problem in simulation:

    # Read our configuration descriptor (with subordinates).
    try_config_length = 33
    handshake, data = yield from self.get_descriptor(DescriptorTypes.CONFIGURATION, length=try_config_length)
    self.assertEqual(handshake, USBPacketID.ACK)
    self.assertEqual(bytes(data), self.descriptors.get_descriptor_bytes(DescriptorTypes.CONFIGURATION)[:try_config_length])
    

    If I set try_config_length to 32 or less, the test case passes. If 33 or larger, it fails. Examining the simulation output in GTKWave, I tracked the apparent culprit to this line in ConstantStreamGenerator, which appears to be sized wrong (5 bits wide) for the intent of max_length_width, which I take to express the number of bits used to represent max_length. Indeed, if I change that line from:

    bytes_sent     = Signal.like(self._max_length_width)
    

    ...to:

    bytes_sent     = Signal(self._max_length_width)
    

    ...the test case passes. That is, until I reach try_config_length of 64, which fails for a different reason which I imagine is a separate issue.

    ...
      File "./enumerate_test.py", line 155, in test_enumeration
        handshake, data = yield from self.get_descriptor(DescriptorTypes.CONFIGURATION, length=try_config_length)
      File "/home/jboone/src/fpga/luna/luna/gateware/test/usb2.py", line 512, in get_descriptor
        descriptor = yield from self.control_request_in(0x80,
      File "/home/jboone/src/fpga/luna/luna/gateware/test/usb2.py", line 434, in control_request_in
        pid, packet = yield from self.in_transfer(data_pid=USBPacketID.DATA1)
      File "/home/jboone/src/fpga/luna/luna/gateware/test/usb2.py", line 350, in in_transfer
        pid, packet = yield from self.in_transaction(
      File "/home/jboone/src/fpga/luna/luna/gateware/test/usb2.py", line 323, in in_transaction
        self.assertEqual(pid, data_pid.byte())
    AssertionError: 75 != <USBPacketID.128|64|DATA0|ACK|OUT: 195>
    

    If I were to guess, this is a wMaxPacketSize0 issue, but that's just intuition speaking, not real data.

    I'm holding off submitting a pull request, because I'm skeptical my ConstantStreamGenerator change is the extent of what's necessary. I just don't grasp the code well enough yet to know that the change I made was the appropriate one, as the meaning of max_length and max_length_width seem a bit muddled in my brain...

    bug 
    opened by jboone 17
  • Question: alternate protocol support

    Question: alternate protocol support

    Could LUNA be extended with other protocol analysis (SPI, I2C,MIPI etc..) using the 16 user defined I/O ports as generic I/O ports and bring those pins to the outside of the enclusure on a header ? This would make LUNA a very lucrative alternative to other $1000+ USB2.0 and multiprotocol analyzers. Not being familair with LUNA yet, suppose this would be grabbing a bunch of samples into the buffer and send them to the host software that for example Sigrok/PulseView or other open source software could analyze ?

    question 
    opened by symdeb 10
  • Case silkscreen feedback

    Case silkscreen feedback

    Yesterday, a photo of the case that was posted in the Discord channel. I was told to post my feedback regarding the silkscreen design here, so I'm doing that now.

    I'll preface these statements by saying that I'm not a designer and don't have any experience in that area--these are just the issues that I, as a (future) user, had with the design. So, please don't grant these statements any undue authority. Also, these are just my opinions, so please feel free to ignore them if you think they're wrong.

    Issues

    Text orientation

    My first issue is that the text is oriented in three directions, and somewhat inconsistently so. For instance, the "Host" and "Sideband" labels are rotated 90 degrees clockwise, and the "Target" label is rotated 90 degrees in the opposite direction. That all makes sense, since it means you can easily read the labels while looking at the ports you're plugging cables into. But then the labels for the "DFU" and "Reset" buttons have no rotation, despite the buttons being on the same sides of the case as those ports whose labels are rotated 90 degrees. I can understand the thought process behind that--the expectation is that the device would primarily be oriented with the ports on the left and right sides, and the user can easily read the "DFU" and "Reset" labels in that orientation and then just feel for the buttons. But to have text that's so close together oriented perpendicularly, as in the case of the "Sideband" and "DFU" labels, is somewhat confusing, and doesn't look very good. But then rotating "DFU" to be in line with "Host and "Sideband" would put it in conflict with the "Debug" LED labels, so something would need to be done about those, too.

    Indicators for each port's size

    Without port width indicators like the "Target" label has (the lines the the left and right of the text), it's non-obvious where each port starts and ends. e.g., it'd be nice to see something like ┌──Host──┐┌Sideband┐ (or ┌──Host──┬Sideband┐ or whatever) to make that more clear.

    LED labeling

    Similarly, the "Debug" and "FPGA" labels could use some separation from and better indication of what LEDs they cover. For instance, maybe the LED spots could have a line covering all them, and then put the "Debug"/"FPGA" labels above that line. Maybe something like this (but with the text actually underlined as well):

    __Debug__   ___FPGA____
    ● ● ● ● ●   ● ● ● ● ● ●
    A B C D E   5 4 3 2 1 0
    

    Or, if labels start to get cluttered, the LED labels could be put in a "call out" (I don't know if that's the right term), where a line goes over the top of the LED spaces and links to a different area where the actual labels are. Kind of like what you might see on some PCBs with densely-packed clusters of components.

    Clutter

    The design is simultaneously "too cluttered" and "has too much negative space". What I mean by that is, first, it seems the logos for the Luna itself and GSG were placed to fill as much of the space as they could, while leaving a large empty space in the middle. That's not to say I'd like to see that space filled--rather, I think it would be better to decrease the sizes of both logos, and also possibly even condense them into one (GSG logo plus "LUNA" text, and nothing else) or put them on the back of the case. Speaking of which...

    The CE mark should not be on the front of the case. I realize that it was probably placed there since it may cost less to only mark the top side of the case, but whether or not something is CE-certified is generally not something I need to stare at every day. Instead, what I as a user find useful to see are the following (in no particular order):

    • The port labels (so I know what to plug where, without having to consult the manual).
    • The LED labels (again, so I don't have to consult the manual to know what they mean).

    So if it's at all possible, I would suggest putting the full Luna logo and the CE mark on the back of the case, and then, since the GSG name is already a part of the Luna logo, skip the GSG gears entirely. Or, the GSG logo could be kept on the front side, but centered.

    Design mockup

    A picture's worth a thousand words, so here's a sloppy mockup I did of a "fixed" design:

    Luna-Silkscreen

    The two big circles are where the GSG logo would go. The design is not to scale (again, it's a sloppy mockup), and so maybe some of these design decisions might not work exactly, but I think this does a decent job illustrating my suggestions. I'm still not really happy with the labeling for the FPGA LEDs, since having all the digits in a horizontal line makes me want to read them like a single number, but I can't really think of a much better way to do that that wouldn't end up making some other aspect of the design worse.

    Anyways, I'm eager to hear what people think about my comments/mockup.

    enhancement user experience 
    opened by cyrozap 8
  • (Fomu) examples/soc/:

    (Fomu) examples/soc/: "nmigen.build.res.ResourceError: Resource uart#0 does not exist"

    This may well be a user error, but this is what I attempted:

    With LUNA_PLATFORM=luna.gateware.platform.fomu:FomuPVT

    In luna/examples/soc/hello/

    $ python3 -m hello_world_soc
    module: luna.gateware.platform.fomu  name: FomuPVT
    INFO    | __init__    | Building and uploading gateware to attached Fomu PVT/Production...
    INFO    | simplesoc   | Physical address allocations:
    INFO    | simplesoc   |     00000000-00001000: <luna.gateware.soc.memory.WishboneROM object at 0x7f026399c5b0>
    INFO    | simplesoc   |     00001000-00002000: <luna.gateware.soc.memory.WishboneRAM object at 0x7f026399c910>
    INFO    | simplesoc   |     00002000-00002004: (rec uart_divisor r_data r_stb w_data w_stb)
    INFO    | simplesoc   |     00002004-00002008: (rec uart_rx_data r_data r_stb)
    INFO    | simplesoc   |     00002008-0000200c: (rec uart_rx_rdy r_data r_stb)
    INFO    | simplesoc   |     0000200c-00002010: (rec uart_rx_err r_data r_stb)
    INFO    | simplesoc   |     00002010-00002014: (rec uart_tx_data w_data w_stb)
    INFO    | simplesoc   |     00002014-00002018: (rec uart_tx_rdy r_data r_stb)
    INFO    | simplesoc   |     00002020-00002024: (rec uart_ev_status r_data r_stb)
    INFO    | simplesoc   |     00002024-00002028: (rec uart_ev_pending r_data r_stb w_data w_stb)
    INFO    | simplesoc   |     00002028-0000202c: (rec uart_ev_enable r_data r_stb w_data w_stb)
    INFO    | simplesoc   |     00002040-00002044: (rec timer_reload r_data r_stb w_data w_stb)
    INFO    | simplesoc   |     00002044-00002048: (rec timer_en r_data r_stb w_data w_stb)
    INFO    | simplesoc   |     00002048-0000204c: (rec timer_ctr r_data r_stb w_data w_stb)
    INFO    | simplesoc   |     00002050-00002054: (rec timer_ev_status r_data r_stb)
    INFO    | simplesoc   |     00002054-00002058: (rec timer_ev_pending r_data r_stb w_data w_stb)
    INFO    | simplesoc   |     00002058-0000205c: (rec timer_ev_enable r_data r_stb w_data w_stb)
    INFO    | simplesoc   |     00002060-00002064: (rec leds_output r_data r_stb w_data w_stb)
    INFO    | simplesoc   | 
    INFO    | simplesoc   | IRQ allocations:
    INFO    | simplesoc   |     0: uart
    INFO    | simplesoc   |     1: timer
    INFO    | simplesoc   | 
    INFO    | simplesoc   | 
    Traceback (most recent call last):
      File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
        return _run_code(code, main_globals, None,
      File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
        exec(code, run_globals)
      File "/home/tim/greatscottgadgets/luna/examples/soc/hello/hello_world_soc.py", line 103, in <module>
        top_level_cli(design, cli_soc=design.soc)
      File "/home/tim/greatscottgadgets/luna/luna/__init__.py", line 140, in top_level_cli
        products = platform.build(fragment,
      File "/home/tim/icebreaker/icebreaker-nmigen-examples/env/src/nmigen/nmigen/build/plat.py", line 95, in build
        plan = self.prepare(elaboratable, name, **kwargs)
      File "/home/tim/icebreaker/icebreaker-nmigen-examples/env/src/nmigen/nmigen/build/plat.py", line 135, in prepare
        fragment = Fragment.get(elaboratable, self)
      File "/home/tim/icebreaker/icebreaker-nmigen-examples/env/src/nmigen/nmigen/hdl/ir.py", line 39, in get
        obj = obj.elaborate(platform)
      File "/home/tim/greatscottgadgets/luna/examples/soc/hello/hello_world_soc.py", line 92, in elaborate
        uart_io = platform.request("uart", 0)
      File "/home/tim/icebreaker/icebreaker-nmigen-examples/env/src/nmigen/nmigen/build/res.py", line 62, in request
        resource = self.lookup(name, number)
      File "/home/tim/icebreaker/icebreaker-nmigen-examples/env/src/nmigen/nmigen/build/res.py", line 57, in lookup
        raise ResourceError("Resource {}#{} does not exist"
    nmigen.build.res.ResourceError: Resource uart#0 does not exist
    
    software technical support 
    opened by tcal-x 6
  • usb2.control: Support PING protocol in data OUT and status OUT stages.

    usb2.control: Support PING protocol in data OUT and status OUT stages.

    USB2.0 8.5.1 states:

    High-speed devices must support an improved NAK mechanism for Bulk OUT and Control endpoints and transactions. Control endpoints must support this protocol for an OUT transaction in the data and status stages. The control Setup stage must not support the PING protocol.

    We observe that hosts running Linux 5.18 sometimes issues PING tokens during control requests, and not handling them means those requests are unable to complete, resulting in the device failing to enumerate correctly.

    This patch solves the issue by always returning ACK to PING tokens received during data OUT and status OUT stages. In most cases ACK is the correct response since we're ready to handle data, and in the few cases it's not, we'll just fall back to letting the request handler return a NAK to the following data packet.

    opened by zyp 5
  • Add GetDescriptorHandlerSingleMemory

    Add GetDescriptorHandlerSingleMemory

    GetDescriptorHandlerSingleMemory handles GET_DESCRIPTOR calls and stores all descriptors in a single memory. It uses the same interface as GetDescriptorHandler and is a drop-in replacement.

    opened by twam 5
  •  Implement Isochronous OUT Endpoint / Add Examples for USB Audio 2 (Audio + MIDI)

    Implement Isochronous OUT Endpoint / Add Examples for USB Audio 2 (Audio + MIDI)

    The MIDI example works if I restrict it to one output only, otherwise the descriptor would get too large (see https://github.com/greatscottgadgets/luna/issues/86)

    opened by hansfbaier 5
  • add pip depends support

    add pip depends support

    Just a thought, but by adding git repositories to setup.py, downstream projects can simply specify luna as a dependency, and pip install will take care of the rest.

    Here is an example of a use case I have in mind. https://github.com/BracketMaster/nmigen-tinyfpgabx/blob/master/requirements.txt#L1

    opened by BracketMaster 5
  • design an r0.3

    design an r0.3

    Some potential changes for r0.3:

    • [x] Re-spec 3V3 regulator to reduce ripple; or at the least, remove its bypass capacitor.
    • [x] Improve grounding / thermal connections for the USB PHYs.
    • [x] Potentially switch between the active-high and active-low versions of our load switches / switch the load configuration to reduce leakage.
    • [x] Replace the USB PHY pull-up resistors with pull-down ones.
    • [x] Replace the 60MHz oscillator with the cheaper / lower-jitter SIT1602BC-73-33E-60.000000E.
    • [x] Re-evaluate availability and see if switching the 1V1 regulator to its larger package (EF vs EE) makes sense.
    • [x] Clean up redundant input caps (C6, C40, C47) on 3V3 regulator (U3).
    • [x] Remove redundant C45.
    • [x] Change R17, R19, R21 to 5%.
    • [x] Add TC2030-NL footprint for SWD.
    • [x] Improve pin 1 marking of oscillator Y1 footprint.
    • [x] Add "Substitution" BOM field ("any equivalent" for most passives).
    • [x] Select LED components and matching series resistors.
    • [x] Move LED silkscreen labels closer to LEDs.
    • [x] Connect PROGRAM_N to a nearby 3V3 FPGA I/O to allow for easier Debug Controller-less operation.
    • [x] Potentially swap the SAMD21 with a SAMD11, for cost reduction.
    • [x] Potentially move to USB-C connectors, instead of microUSB.
    documentation enhancement hardware 
    opened by ktemkin 5
  • USBInTransferManager does not toggle DATA when sending ZLP

    USBInTransferManager does not toggle DATA when sending ZLP

    ZLP is sent with the DATAX PID, which is supposed to be toggled from the previous value. It seems USBInTransferManager is not doing that.

    When sending ZLP, we do need to toggle DATA, but we don't need to swap the buffers. Right now, these two functions are done by the same signal. Hence we need to split them.

    bug 
    opened by ronyrus 4
  • Trying to run interactive-test.py on r0.2 luna board

    Trying to run interactive-test.py on r0.2 luna board

    There's a non-zero chance of user error here. This is what I attempted (from memory):

    • I created and entered a virtual environment (python -m venv)
    • In nmigen/nmigen/, I ran python3 ./setup.py install
    • In greatscottgadgets/luna/, I ran pip3 install poetry, poetry install
    • I connected a cable from my laptop's USB port to the Luna board's "Debug/Alt Port"
      • There was a slow-blinking green LED, and a row of dim red (w/ one green) LEDs
    • I ran poetry run applets/interactive-test.py
      • The green LED(s) momentarily ran a bouncing back and forth pattern
      • The row of red LEDs got brighter
      • This output was returned on the terminal:
    INFO    | __init__    | Building and uploading gateware to attached LUNA r0.2...
    INFO    | __init__    | Upload complete.
    INFO    | selftest    | Connected to onboard debugger; hardware revision r0.2 (s/n: eebbd5a905b435050213e29382f031ff).
    INFO    | selftest    | Running tests...
    
    
    Automated tests:
            Debug module:   ✗ FAILED        (register 1 was 63, not expected 1413829460)
            Host PHY:       ✗ FAILED        (PHY register 0 was 3182280431, not expected 36)
            HyperRAM:       ✗ FAILED        (RAM register 0 was 3182280431, not one of expected (3201, 3206))
            Sideband PHY:   ✗ FAILED        (PHY register 0 was 3182280431, not expected 36)
            Target PHY:     ✗ FAILED        (PHY register 0 was 3182280431, not expected 36)
    
    opened by tcal-x 4
  • design r0.6

    design r0.6

    • [ ] change IC1 (FPGA) from 256 caBGA to 381 caBGA package, retaining ability to switch back to 256 caBGA later
    • [ ] change U8, U9, U11 (USB PHYs) to USB3320
    • [ ] rename Sideband port to "Control" and use as primary port for control of both FPGA and Apollo)
    • [ ] rename Host port to "Aux" for auxiliary functions including MitM
    • [ ] enhance Target-C PD/CC I/O with FUSB302B or similar Type-C controller
    • [ ] connect shields of all USB connectors together
    • [ ] disconnect USB shields from GND except through ferrites or 0 ohm resistors (populated by default)
    • [ ] replace U1, U12, U13 (Target VBUS switches) with FET solution
    • [ ] add Target VBUS voltage and current monitoring
    • [ ] replace d1, D8 (5V diode OR) with FET solution
    • [ ] move HyperRAM to FPGA pins in a DQS group if possible for both 381 caBGA and 256 caBGA variants
    • [ ] increase clearance around U6 (microcontroller) to allow future replacement if necessary
    • [ ] restore 1.8 V supply as an assembly option, supporting either 1.8 V or 3.3 V HyperRAM
    • [ ] add pin straps for hardware version detection
    • [ ] increase LED spacing
    • [ ] add USB switch to Control port
    • [ ] improve microcontroller D+/D- routing/reference plane
    • [ ] maybe remove J5 (FPGA JTAG) if it is in the way
    • [ ] maybe move Pmod connectors to the same side to support 24-pin Pmods
    • [ ] maybe remove unpopulated SMA connectors
    • [ ] maybe replace SMA connectors with high speed edge connector
    • [ ] maybe add test points for DFU button, SBU signals
    enhancement hardware 
    opened by mossmann 0
  • Failed to run command poetry install

    Failed to run command poetry install

    I followed the documentation and installed the dependencies, but an error was reported when I ran the command poetry install. It seems that the version of lambdasoc cannot match. What should I do?

    kevin@kevin-virtual-machine:~/workspace/luna$ poetry install Installing dependencies from lock file

    Because lambdasoc (0.1.dev27+gefd5442) @ git+https://github.com/ktemkin/lambdasoc.git@HEAD depends on nmigen (*) which doesn't match any versions, lambdasoc is forbidden. So, because luna depends on lambdasoc (0.1.dev27+gefd5442) @ git+https://github.com/ktemkin/lambdasoc.git, version solving failed.

    opened by bigniudiy 1
  • Question: Luna as a USB-UART bridge

    Question: Luna as a USB-UART bridge

    Hello! I was wondering if Luna can be used out of the box as USB-UART bridge with an example. Do you think it's possible to generate a DTR and a RTS signals? Essencially I want to use the ECP5 to act like a USB-UART bridge to interface a ESP32 with a computer. It'd be amazing if it'd be possible to flash firmware via the USB-UART bridge to the ESP32 too! And the ESP32 can use DTR and RTS signals to put itself it bootloader mode, like so: image Do you think it's possible? Thanks a lot ;)

    question 
    opened by francis2tm 1
  • Find Substitution for AP22811, as it is FAULTY

    Find Substitution for AP22811, as it is FAULTY

    The AP22811 have been marked as NOT RECOMMENDED FOR NEW DESIGN by Diodes lately, shall we consider use its successor, AP22818, as USB power switch at U1, U12, U13? Edit: both of them are NOT suitable for luna's design, see my latter comment.

    bug hardware 
    opened by Seas0 11
Releases(hw-r0.4)
Owner
Great Scott Gadgets
Great Scott Gadgets
Hotplugger: Real USB Port Passthrough for VFIO/QEMU!

Hotplugger: Real USB Port Passthrough for VFIO/QEMU! Welcome to Hotplugger! This app, as the name might tell you, is a combination of some scripts (py

DARKGuy (Alemar) 66 Nov 24, 2022
LifeSaver automatically, periodically saves USB flash drive data into the PC

LifeSaver automatically, periodically saves USB flash drive data into the PC. Theoriticaly it will work with any any connected drive ex - Hard Disk ,SSD ... But, can't handle Backing up multipatition drives. I can guess, but cannot be sure of, how it will react to multipartiton system.

siddharth dhaka 4 Sep 26, 2021
Monitor Live USB Plug In & Plug Out Events

I/O - Live USB Monitoring Author: Jonathan Scott @jonathandata1 Date: 3/13/2021 CURRENT VERSION 1.0 This is just a simple bash script that calls a pyt

Jonathan Scott 17 Dec 3, 2022
USB Rubber Ducky with the Rasberry Pi pico microcontroller

pico-ducky Install Install and have your USB Rubber Ducky working in less than 5 minutes. Download CircuitPython for the Raspberry Pi Pico. Plug the d

AnOnYmOus001100 3 Oct 8, 2022
Turn your Raspberry Pi Pico into a USB Rubber Ducky

pico-ducky Turn your Raspberry Pi Pico into a USB Rubber Ducky Install Requirements CircuitPython for the Raspberry Pi Pico adafruit-circuitpython-bun

Konstantinos 5 Nov 8, 2022
Turns a compatible Raspberry Pi device into a smart USB drive for PS4/PS5.

PSBerry A WIP project for Raspberry Pi, which turns a compatible RPI device into a smart USB drive for PS4/PS5. Allows for save management of PS4 game

Filip Tomaszewski 2 Jan 15, 2022
Example code to sending USB Gadget multimedia keys via Python

Send Multimedia USB HID Keys via Python As an USB Gadget in Linux This gives a simple script with zero dependencies that can easily run on any Linux d

DevOps Nirvana 2 Jan 2, 2023
A simple portable USB MIDI controller based on Raspberry-PI Pico and a 16-button keypad, written in Circuit Python

RPI-Pico-16-BTn-MIDI-Controller-using-CircuitPython A simple portable USB MIDI controller based on Raspberry-PI Pico, written in Circuit Python. Link

Rounak Dutta 3 Dec 4, 2022
Sticklog2heatmap - Draw a heatmap of RC sticks from OpenTX logs or USB HID device

sticklog2heatmap Draw a heatmap of RC sticks from OpenTX logs or USB HID device

null 2 Feb 2, 2022
Unofficial Playdate reverse-engineering notes/tools - covers file formats, server API and USB commands

Unofficial Playdate reverse-engineering notes/tools - covers file formats, server API and USB commands ⚠️ This documentation is unofficial and is not

James 106 Dec 31, 2022
Scapy: the Python-based interactive packet manipulation program & library. Supports Python 2 & Python 3.

Scapy Scapy is a powerful Python-based interactive packet manipulation program and library. It is able to forge or decode packets of a wide number of

SecDev 8.3k Jan 8, 2023
a library for using WS2812b leds (aka neopixels) with Raspberry Pi Pico

pico_ws2812b a library for using WS2812b leds (aka neopixels) with Raspberry Pi Pico You'll first need to save the ws2812b.py file to your device (for

null 76 Nov 25, 2022
The ABR Control library is a python package for the control and path planning of robotic arms in real or simulated environments.

The ABR Control library is a python package for the control and path planning of robotic arms in real or simulated environments. ABR Control provides API's for the Mujoco, CoppeliaSim (formerly known as VREP), and Pygame simulation environments, and arm configuration files for one, two, and three-joint models, as well as the UR5 and Kinova Jaco 2 arms. Users can also easily extend the package to run with custom arm configurations. ABR Control auto-generates efficient C code for generating the control signals, or uses Mujoco's internal functions to carry out the calculations.

Applied Brain Research 277 Jan 5, 2023
Example for Calculating Robot Dynamics Using Pinocchio Library

A Example for Calculating Robot Dynamics Using Pinocchio Library Developed by: Xinyang Tian. Platform: Linux + Pinocchio. In this work, i use Pinocchi

Rot_Tianers 33 Dec 28, 2022
A python library written for the raspberry pi.

A python package for using certain components on the raspberry pi.

Builder212 1 Nov 9, 2021
Robot Framework keyword library wrapper for atlassian-python-api

Robot Framework keyword library wrapper for atlassian-python-api

Marcin Koperski 3 Jul 29, 2022
Ingeniamotion is a library that works over ingenialink and aims to simplify the interaction with Ingenia's drives.

Ingeniamotion Ingeniamotion is a library that works over ingenialink and aims to simplify the interaction with Ingenia's drives. Requirements Python 3

Ingenia Motion Control 7 Dec 15, 2022
Python library for the Phomemo m02s bluetooth thermal printer

Phomemo M02S Python library This is a basic Python library for controlling the Phomemo M02S bluetooth thermal printer. It probably only works on Mac &

Stargirl Flowers 28 Nov 7, 2022
Python library to interact with the GCE Electronics IPX800 device

A python library to control a GCE-Electronics IPX800 V4 device through its API.

Marc-Aurèle Brothier 2 Oct 20, 2021