10 comments

  • quietraster 6 minutes ago
    rewriting scooter firmware in rust is the kind of unnecessary excellence i come here for. how did you debug without bricking it, swd probe or pure faith
  • abound 20 minutes ago
    This is an unbelievably impressive project and a killer write up, very satisfying. I wonder if the author looked into using Slint [1] for the UI, given the codegen bloat issues they had with buoyant (which also looks very cool). I haven't used either, but I've done a few projects with Embassy and am always looking for an excuse to try embedded GUI tools

    [1] https://slint.rs/

    • nitros 3 minutes ago
      Heya, I tried using slint first, but slint needs even more flash, and an allocator on top. Just adding slint (with an empty UI) exhausted my binary size limit.
  • hommelix 1 hour ago
    > The updater device then sends 64 byte chunks spread over 9 CAN 0x384 frames

    Classic CAN uses 8 bytes long frame, so 64 bits. Is it a typo in the post, vor is it using CAN-FD?

    • bri3d 28 minutes ago
      I read this as the chunks are 64 bytes and thus each chunk is split over 9 frames. I haven’t looked yet but it’s probably an ISO-TP esque framing protocol.
      • nitros 0 minutes ago
        Yep, this is the case. Nine frames are transmitted with the first frame containing a sequence number and the first five bytes, followed by seven frames containing just data, and a final frame containing the last three bytes of data, and a two byte CRC.
    • baby_souffle 56 minutes ago
      Must be. Can 1.x and 2.0 are fixed size frames.
    • irishcoffee 41 minutes ago
      Could be TP.DT, multi packet.

      My guess is a typo.

  • asimovDev 1 hour ago
    Thank you for posting! I got a e-scooter this spring and wrote my own app for it after reverse engineering the official app + BLE logs. I am not brave enough to do anything with the firmware on it though. Maybe not yet at least
  • arbirk 47 minutes ago
    I am also rusting my hw. Last week my mouse, this week my EUC (wish me luck). I would rather risk a crash than memory corruption
    • thenthenthen 10 minutes ago
      What is an EUC? And also what kinda crash are you referring to? i rather have a memory issue than crash my e-scooter (and myself) haha
  • jimmy76615 2 hours ago
    I wanna have a friend like this guy
  • ifh-hn 3 hours ago
    Wish I was brainy enough to do this sort of thing!
    • j_m_b 2 hours ago
      That's what is nice about LLMs. You CAN do these things now!
      • binary0010 3 minutes ago
        I'd be pretty careful with this kind of thing. My friend vibe coded something similar and it had some very unexpected real world bugs like instantly locking the engine, cranking the engine to 100 in a second and burning the motor out, etc. So something like an escooter that you might ride across a busy road may not be the best use of vibe coding.
      • wkjagt 1 hour ago
        Maybe I'm out of touch with the times, but I wouldn't feel safe riding an e-scooter with custom vibe coded firmware.
        • IshKebab 1 hour ago
          You don't have to fully vibe code it. Most of this stuff doesn't take massive brains, it is just super tedious - especially the reverse engineering. I've never really had the patience for that (except one USB devices that I did reverse engineer when I was younger). AI really helps with the tedium.
        • GuB-42 1 hour ago
          What make you think it is vibe coded? There is no mention of genAI being used, and the methodology looks more consistent with hand-written code he actually understands.
          • exe34 45 minutes ago
            What makes you think the original wasn't vibe coded?!
            • thenthenthen 12 minutes ago
              The firmware on these things is terrible, also larger e-mopeds btw. Like a 2 second delay on the throttle after breaking (fun when cornering!). Happy this Egret GT E-Scooter didnt turn into..’Regret’
        • m00dy 1 hour ago
          If it is coded in safe Rust, why not ?
          • malnourish 1 hour ago
            Safe rust does not mean correct logic; best not conflate the two.

            You could have perfectly safe rust that disables brakes above a certain speed, inverts steering by wire, or adjusts the charging parameters, for example (depending on addressable capabilities).

      • spaqin 1 hour ago
        So you're still not brainy enough to do it, but the LLM can.

        I mean. Sort of? The LLM won't go into checking random USB-C connections with an oscilloscope - it doesn't have hands, for one.

      • the__alchemist 1 hour ago
        FdCAN or Bx?
  • kooi 3 days ago
    Very nice. Be safe out there when tweaking these things.
    • TheChaplain 3 hours ago
      From what I've seen on the streets, people bypassing the restrictions will not, and there will be injuries.
      • jstanley 3 hours ago
        You only notice the ones that aren't safe.

        How would you know if someone bypassed the restrictions if they were riding it safely?

        • TheChaplain 1 hour ago
          Because if they are riding it safely, there would be no need to bypass the restrictions.

          There is reason for speed limits, they are not there to f--k with people for fun.

  • ivo_repairs 7 minutes ago
    [flagged]
  • barbarkaragul 58 minutes ago
    [dead]