Replies: 2 comments 1 reply
-
I implemented DFU support in a branch, although I've now abandoned it (see below). It would have allowed firmware flashing (and configuration download/upload) without requiring physical access to the boards at all. Separately, @hrvach has implemented major upgrades in the upcoming 0.6x release, one of which is that it will now be possible to upload firmware to just one board and then it will push the updated firmware to the other board. That branch may also offer the ability to upload firmware without having to put the board into 'boot' mode. |
Beta Was this translation helpful? Give feedback.
-
Hey! The upcoming release has firmware upgrade a bit overhauled to address the problem of weird key combinations and accessing the boards. I was looking into implementing mass storage to serve the config page and then figured out it could also be used to upgrade firmware based on the same code. Because it essentially runs from RAM, you can upgrade the flash while the device keeps operating (although serial transfer makes the mouse movements a bit jerky, I have to implement some queue prioritization). TL;DR - to upgrade, you'll have to press a key combo to put the board into config mode (security feature) and then simply copy on the usb drive that appears ... after the upgrade is done, it should get pushed to the other board automagically. No software required at all. Also make sure to check @kpfleming 's variant (https://github.com/kpfleming/deskhop/), he has some awesome skills and ideas including a standalone PCB with additional power connectors, DFU upgrade mode and a bunch of other improvements. As soon as I get some time (very busy at work) I'll update the docs and promote the RC to stable, seems stable enough. Btw you did a whole lot of functionality in one weekend, respect! I like the inotifywait approach, and the HID carrying data idea is pretty cool too. I saw you found some bugs (fix mod key stuck commit), would you be OK with me using those fixes? |
Beta Was this translation helpful? Give feedback.
-
Hi there. This idea is basically a casual wandering-off of my ADHD brain over the last weekend, but I eventually managed to implement it myself (although very rough), so I decided to share it here.
So I have got the deskhop hardware assembled last week and has been tweaking around with the firmware to my need a lot. All changes are in my fork.
One of the problems I have during hacking is that it's not very easy to flash firmware on deskhop on my setup. The main reason is that two of my hosts are a Gaming Windows desktop and a Linux Workstation. The Windows machine does not have any coding/development stuff whatsoever and most of my development tools are on Linux (like any sane people may do), so I can only update firmware from Linux. Also I have the deskhop board enclosed in 3D printed enclosing and then put to the back of my desk (so that I do not need to look at the cables)
This makes it a convoluted process for me to update the firmware on both boards once I have made a change. I have to pull deskhop out of the back of my desk and pry the enclosure open, and then transfer my keyboard and mouse plugs to my Linux workstation, then while press BOOT on each board and plugging them into my Linux machine to enter bootloader and upload firmware.
I know there are shortcut keys for entering bootloader on both boards, but the problem apparently is I have to change plug which requires physically pulling the hardware out. Ideally, I want to have a script running on my Linux host polling for pi picos in bootlooader mode, and then press the entering bootloader keys for A and B consecutively to upload the code.
I looked into how this could be implemented and came across this project implementing a serial-interface bootloader on rp2040 chips. This idea is I keep board A with the stock bootloader and connected to Linux host, so I can directly update code on A by using the aforementioned script and press firmware upload key for A. When I need to flash firmware for B I press another key bind to instruct B to boot into serial bootloader, and then switch A to a UART relay mode so that my Linux host could relay through A to B and flash firmware.
The idea sounds straightforward, but oh trust me my process to implement it was not straightforward at all and I had a lot of issues and fell into a lot of traps that some new starters in embedded programming like me may well fall into. But after one weekend I did get one working version in my fork. and I can now just stash deskhop to the back of my desk and hopefully never need to pull it out again.
I want to know what is @hrvach 's thought in this feature? Is there anyone else who would be interested in this? The fork is very far from merge-able (since it is a custom build I deleted a lot of feature code that I do not need), but I could try to port the changes to main branch if there are indeed interests.
Beta Was this translation helpful? Give feedback.
All reactions