{"id":42996487,"url":"https://github.com/manafishrov/firmware","last_synced_at":"2026-05-10T21:04:23.135Z","repository":{"id":277329455,"uuid":"918586533","full_name":"manafishrov/firmware","owner":"manafishrov","description":"Firmware running on the underwater Manafish ROV for operating its thrusters and camera.","archived":false,"fork":false,"pushed_at":"2026-04-27T07:07:03.000Z","size":6294,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-27T09:07:53.639Z","etag":null,"topics":["firmware","nixos","python","raspberry-pi","websockets"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/manafishrov.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-01-18T10:23:05.000Z","updated_at":"2026-04-27T07:06:51.000Z","dependencies_parsed_at":"2025-03-07T14:20:00.962Z","dependency_job_id":"23216db0-7ceb-49dd-9d4c-f798403e133b","html_url":"https://github.com/manafishrov/firmware","commit_stats":null,"previous_names":["lektr/cyberfish-firmware","lektr/manafish-firmware","manafishrov/firmware"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/manafishrov/firmware","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manafishrov%2Ffirmware","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manafishrov%2Ffirmware/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manafishrov%2Ffirmware/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manafishrov%2Ffirmware/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/manafishrov","download_url":"https://codeload.github.com/manafishrov/firmware/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manafishrov%2Ffirmware/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32581077,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["firmware","nixos","python","raspberry-pi","websockets"],"created_at":"2026-01-31T03:33:52.424Z","updated_at":"2026-05-03T19:06:08.756Z","avatar_url":"https://github.com/manafishrov.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Firmware\n\nThe Manafish firmware is designed to run on a Raspberry Pi 3b with an IMX477\ncamera module. It provides the firmware for controlling and using the Manafish\nROV.\n\n## Building the SD Image\n\nTo build the SD image you need to have `nix` installed on an aarch64-linux\nplatform or proper emulation support for the aarch64-linux platform. Also add\nthe caches for the `nixos-raspberrypi` flake to the build system so the build\nfinishes in a reasonable time:\n\n```sh\nnix build .#pi3-imx477\n```\n\nWhen you have built the image you can list it out with the following command:\n\n```sh\nls -lh result/sd-image\n```\n\nThis will include the size of the image in the output. The image is compressed\nwith zstd.\n\n## Flashing\n\nWe need to plug in the SD card and find out what the device path is for the\nSD card.\n\nOn linux:\n\n```sh\nlsblk\n```\n\nOn darwin:\n\n```sh\ndiskutil list\n```\n\nOn darwin it is usually `/dev/diskX` where `X` is a number for example\n`/dev/disk6` (use `/dev/rdiskX` when flashing for better performance).\n\n### Unmount the SD Card\n\nBefore flashing, make sure the SD card is unmounted.\n\nOn linux:\n\n```sh\nsudo umount /dev/sdX*\n```\n\nOn darwin:\n\n```sh\ndiskutil unmountDisk /dev/diskX\n```\n\n### Flashing the SD Card\n\nTo flash the image to the SD card you can use the following command, make sure\nto replace `/dev/XXX` with the correct device path for your SD card:\n\n```sh\nzstd -dc result/sd-image/*.zst | sudo dd of=/dev/XXX bs=4M status=progress conv=fsync\n```\n\nFlashing the SD card on windows is a little more complicated. It is not possible\nto build the image on Windows and the commands will not work. Instead start by\ndownloading the image you want to use form the release page on GitHub. The\nimage will be in a `.zst` file format.\n\nMake sure you have 7-Zip installed, and right-click the `sd-image` zst file and\nselect \"Extract Here\" to extract the image file.\n\nNext make sure you have Rufus installed, and open it.\nSelect the SD card from the \"Device\" dropdown.\nClick \"Select\" and choose the extracted .img file.\nClick \"Start\" to begin flashing the SD card.\n\n## Configure Your Mac/PC's Ethernet Connection\n\nAfter plugging the SD card in the Raspberry Pi and powering it on, you need to\ntell your computer how to connect to the Pi without disrupting your regular\ninternet connection. This is done by assigning a static IP address to your\ncomputer in the same address space as the IP of the firmware (by default this\nis 10.10.10.10). We recommend setting it to 10.10.10.100 for simplicity.\n\n### MacOS\n\n1. Open System Settings \u003e Network\n2. Select your Ethernet connection\n3. Click \"Details...\"\n4. Under \"Configure IPv4\", select \"Manually\"\n5. Set the following:\n   - IP Address: 10.10.10.100\n   - Subnet Mask: 255.255.255.0\n6. Click \"OK\" and \"Apply\"\n\n### Windows\n\n1. Open \"View Network Connections\"\n   - You can find this by searching for \"View Network Connections\" in the\n     Start menu\n2. Right-click your Ethernet connection and select \"Properties\"\n3. Select \"Internet Protocol Version 4 (TCP/IPv4)\" and click \"Properties\"\n4. Select \"Use the following IP address\" and enter:\n   - IP Address: 10.10.10.100\n   - Subnet Mask: 255.255.255.0\n5. Click \"OK\" to save\n\n### Linux\n\n1. For Ubuntu/Debian GUI:\n   - Open Settings \u003e Network\n   - Click the gear icon next to your Ethernet connection\n   - Go to IPv4 tab\n   - Select \"Manual\"\n   - Add Address: 10.10.10.100\n   - Netmask: 255.255.255.0\n   - Click \"Apply\"\n\n2. For command line:\n\n   ```sh\n   sudo ip addr add 10.10.10.100/24 dev eth0\n   ```\n\n   Replace `eth0` with your Ethernet interface name if different.\n\n## Raspberry Pi\n\nTo modify the firmware on the Raspberry Pi, you need to connect to it via SSH.\nThe default username is `pi` and the password is `manafish`. The Pi will be\navailable on port 10.10.10.10 when connected via Ethernet after you have\nconfigured your computer's Ethernet connection as described above.\n\nCommand to connect via SSH:\n\n```sh\nssh pi@10.10.10.10\n```\n\nIf you have reflashed the SD card, you may need to delete the known hosts entry\nfor the Pi before connecting:\n\n```sh\nssh-keygen -R 10.10.10.10\n```\n\n### WiFi Connection\n\nTo connect to a WiFi network on the Pi, use the following commands:\n\n1. List available WiFi networks:\n\n   ```sh\n   nmcli device wifi list\n   ```\n\n2. Connect to a WiFi network:\n\n   ```sh\n   nmcli device wifi connect \"NETWORK_NAME\" password \"PASSWORD\"\n   ```\n\n3. Check connection status:\n\n   ```sh\n   nmcli connection show\n   ```\n\n### Firmware Service Management\n\nThe Manafish firmware runs as a systemd service. It is set to run automatically\non startup, but during development it can be useful to stop/start/restart it.\nHere are the common commands to manage it:\n\n1. Start the firmware service:\n\n   ```sh\n   sudo systemctl start manafish-firmware\n   ```\n\n2. Stop the firmware service:\n\n   ```sh\n   sudo systemctl stop manafish-firmware\n   ```\n\n3. Restart the firmware service:\n\n   ```sh\n   sudo systemctl restart manafish-firmware\n   ```\n\n4. Check the service status:\n\n   ```sh\n   sudo systemctl status manafish-firmware\n   ```\n\n5. Disable the service from starting on boot:\n\n   ```sh\n   sudo systemctl disable manafish-firmware\n   ```\n\n6. View service logs:\n\n```sh\njournalctl -u manafish-firmware -f\n```\n\n## Development Hooks\n\nInstall the development dependencies and Git hook once per clone:\n\n```sh\nuv sync\nuv run pre-commit install\n```\n\nThe pre-commit hook runs Ruff on committed Python files before each commit. To\nrun the same checks across the repository manually:\n\n```sh\nuv run pre-commit run --all-files\n```\n\nTo update hook versions later:\n\n```sh\nuv run pre-commit autoupdate\n```\n\n## License\n\nThis project is licensed under the GNU Affero General Public License v3.0 or\nlater - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanafishrov%2Ffirmware","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanafishrov%2Ffirmware","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanafishrov%2Ffirmware/lists"}