![louisa](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2025-01-02%2F8238274469829_4da74e0a7330a45c3eb3_192.png&w=96&q=75)
🖋️
Posts tagged with :lower_left_fountain_pen:
![louisa](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2025-01-02%2F8238274469829_4da74e0a7330a45c3eb3_192.png&w=96&q=75)
![JomarMilan](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-12-24%2F8219367174914_ab40a802cb633540f429_192.gif&w=96&q=75)
![khang200923](/_next/image?url=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2F8ead6770983f2a1ff6f802f1ffc0ed43.jpg%3Fs%3D192%26d%3Dhttps%253A%252F%252Fa.slack-edge.com%252Fdf10d%252Fimg%252Favatars%252Fava_0003-192.png&w=96&q=75)
![kimax](/_next/image?url=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2F0ff8ed84ef045c7eaab46e901b8e3fac.jpg%3Fs%3D192%26d%3Dhttps%253A%252F%252Fa.slack-edge.com%252Fdf10d%252Fimg%252Favatars%252Fava_0008-192.png&w=96&q=75)
![JomarMilan](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-12-24%2F8219367174914_ab40a802cb633540f429_192.gif&w=96&q=75)
spade-serial
and spade-upload
! They can upload games to a #C02UN35M7LG| or whatever device running Spade. I spent a lot of time writing the tests and documentation.. I wanted to get it right since this is my first time, so I know what to do in the future. spade-serial
is the crate that does the actual work while spade-upload
is the application that makes use of the crate. It's useful to me because I use Safari on my MacBook and Firefox on my other laptop, neither of which implement the Web USB API, so this provides a way for me to put games on my Sprig without installing another browser that I don't want to use. I made spade-serial
into a crate because I wanted to keep the logic separate so that people could apply it in multiple places, like maybe a GUI app.
The game uploaded in the video is this game. I did not create it.
GitHub Repository | spade-serial on crates.io | spade-upload on crates.io![Sudarshan](/_next/image?url=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2F95151f225c1770b3f9cc297448fca44a.jpg%3Fs%3D192%26d%3Dhttps%253A%252F%252Fa.slack-edge.com%252Fdf10d%252Fimg%252Favatars%252Fava_0014-192.png&w=96&q=75)
![SkyfallWasTaken](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-11-07%2F7997379569571_bf73d04ac7fc13561429_192.png&w=96&q=75)
![CBerJun](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-11-26%2F8092440912100_2c069b5a4eca233a9a21_192.gif&w=96&q=75)
![Layan](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-11-02%2F7973171176019_ea6456bb1f59c2a997a7_192.jpg&w=96&q=75)
![KavishDevar](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-07-12%2F7409572069157_da01193ddce2f86ac872_192.jpg&w=96&q=75)
libbluetooth_jni.so
(the bluetooth stack). Then, I used my smol brain to make a few changes to the source code (and by a few changes, i mean commented a few lines)... And, it worked!
Rant about Apple - Guess what- They hide their handshake packet from the PacketLogger app which allows me to view all the packets sent/received from my mac to any bluetooth device. Fortunately this was available online thanks to some other people who worked way before me. Apple even hid another packet necessary to activate Conversational Awareness and Adaptive Audio! Somehow, I got really, really, really lucky, and the packet just showed up in the PacketLogger app, shortly after which, it crashed. ![Alfonso](/_next/image?url=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2F242713834cea867075956fec691d7105.jpg%3Fs%3D192%26d%3Dhttps%253A%252F%252Fa.slack-edge.com%252Fdf10d%252Fimg%252Favatars%252Fava_0012-192.png&w=96&q=75)
![HayesDombroski](/_next/image?url=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2Fa65aa2b621670f0b3d91749cfa18a8af.jpg%3Fs%3D192%26d%3Dhttps%253A%252F%252Fa.slack-edge.com%252Fdf10d%252Fimg%252Favatars%252Fava_0012-192.png&w=96&q=75)
![ShibamRoy](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2025-01-04%2F8270654999616_4310cfc0ba30f410cdb8_192.png&w=96&q=75)
![Kieran](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-11-30%2F8105375749571_53898493372773a01a1f_192.jpg&w=96&q=75)
![EvanGan](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2025-01-11%2F8293355361313_ae5cf036d8358cc7425b_192.jpg&w=96&q=75)
![JamesLollback](/_next/image?url=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2Fa0cb4dbd87b3f75ab40b28d89664ed04.jpg%3Fs%3D192%26d%3Dhttps%253A%252F%252Fa.slack-edge.com%252Fdf10d%252Fimg%252Favatars%252Fava_0024-192.png&w=96&q=75)
![RahulSaini](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-06-27%2F7353530770065_e796daedba159b1197b2_192.png&w=96&q=75)
![RahulSaini](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-06-27%2F7353530770065_e796daedba159b1197b2_192.png&w=96&q=75)
![iach526](/_next/image?url=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2F86bf27ec348e5d275100be501c29f35e.jpg%3Fs%3D192%26d%3Dhttps%253A%252F%252Fa.slack-edge.com%252Fdf10d%252Fimg%252Favatars%252Fava_0025-192.png&w=96&q=75)
![Silvia](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-09-12%2F7711976002486_351ba496ae2e80bc33d7_192.jpg&w=96&q=75)
![Silvia](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-09-12%2F7711976002486_351ba496ae2e80bc33d7_192.jpg&w=96&q=75)
![Silvia](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-09-12%2F7711976002486_351ba496ae2e80bc33d7_192.jpg&w=96&q=75)
![ivan](/_next/image?url=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2F6df69d31a1db8159c6374b61a667d3c9.jpg%3Fs%3D192%26d%3Dhttps%253A%252F%252Fa.slack-edge.com%252Fdf10d%252Fimg%252Favatars%252Fava_0007-192.png&w=96&q=75)
![EmreKadir](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-07-08%2F7375064056151_450e46f0388b9629f2b1_192.jpg&w=96&q=75)
![Keyaan](/_next/image?url=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2Fa95dac752bd8977270d2e4b49f368925.jpg%3Fs%3D192%26d%3Dhttps%253A%252F%252Fa.slack-edge.com%252Fdf10d%252Fimg%252Favatars%252Fava_0017-192.png&w=96&q=75)
![EmreKadir](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-07-08%2F7375064056151_450e46f0388b9629f2b1_192.jpg&w=96&q=75)
![SkyfallWasTaken](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-11-07%2F7997379569571_bf73d04ac7fc13561429_192.png&w=96&q=75)
![Tazmeen](/_next/image?url=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2F88481de21c56536a8336622d5340b4f3.jpg%3Fs%3D192%26d%3Dhttps%253A%252F%252Fa.slack-edge.com%252Fdf10d%252Fimg%252Favatars%252Fava_0026-192.png&w=96&q=75)
![JaydenWeng](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-06-19%2F7288248164807_d0224f2ba1514d45690e_192.jpg&w=96&q=75)
![RaghavSinha](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-09-13%2F7718719230790_397794553fab808b4eb4_192.png&w=96&q=75)
![Darren](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-07-23%2F7459368459525_43a786da1704f1a18ef4_192.webp&w=96&q=75)
![EmreKadir](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-07-08%2F7375064056151_450e46f0388b9629f2b1_192.jpg&w=96&q=75)
![Vinche](/_next/image?url=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2F7a93c0be690a8358c0bb23c1b57cdf35.jpg%3Fs%3D192%26d%3Dhttps%253A%252F%252Fa.slack-edge.com%252Fdf10d%252Fimg%252Favatars%252Fava_0026-192.png&w=96&q=75)
![EmreKadir](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-07-08%2F7375064056151_450e46f0388b9629f2b1_192.jpg&w=96&q=75)
![MichaelAmbros](/_next/image?url=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2Fcfcb880a0479d104dd307cfa87b6963d.jpg%3Fs%3D192%26d%3Dhttps%253A%252F%252Fa.slack-edge.com%252Fdf10d%252Fimg%252Favatars%252Fava_0005-192.png&w=96&q=75)
![alexxino](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-08-02%2F7532397926929_33460d34cb2a94d34a60_192.png&w=96&q=75)
![iach526](/_next/image?url=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2F86bf27ec348e5d275100be501c29f35e.jpg%3Fs%3D192%26d%3Dhttps%253A%252F%252Fa.slack-edge.com%252Fdf10d%252Fimg%252Favatars%252Fava_0025-192.png&w=96&q=75)
![ShamalLakshan](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-06-27%2F7338809836085_62dca6bc7e1567e0a790_192.png&w=96&q=75)
![Tom](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2023-08-29%2F5841799811344_a93f20b94a044b7f6f89_192.jpg&w=96&q=75)
![AliAzam](/_next/image?url=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2F5a9e6470d1ac9c82143e4787c7eb2779.jpg%3Fs%3D192%26d%3Dhttps%253A%252F%252Fa.slack-edge.com%252Fdf10d%252Fimg%252Favatars%252Fava_0010-192.png&w=96&q=75)
![magicfrog](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-10-11%2F7854430211655_a8523581524186f41d0a_192.png&w=96&q=75)
![BrightLi](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-09-04%2F7690027393057_1b9fbfc963ba7372f8dc_192.jpg&w=96&q=75)
![Mr_AnOnYmOuS](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-11-06%2F7988988547397_4140ca10836e033d6ddb_192.png&w=96&q=75)
![Keyaan](/_next/image?url=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2Fa95dac752bd8977270d2e4b49f368925.jpg%3Fs%3D192%26d%3Dhttps%253A%252F%252Fa.slack-edge.com%252Fdf10d%252Fimg%252Favatars%252Fava_0017-192.png&w=96&q=75)
![Darren](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-07-23%2F7459368459525_43a786da1704f1a18ef4_192.webp&w=96&q=75)
![NikosTsilas-U04N415FE4T](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-10-07%2F7845067349396_b67b0c43835e350ae92c_192.jpg&w=96&q=75)
![EmreKadir](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-07-08%2F7375064056151_450e46f0388b9629f2b1_192.jpg&w=96&q=75)
![Stefan](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2024-08-03%2F7536079428897_27d553b9b0ed40ff5667_192.png&w=96&q=75)