边界条件之场
Making my own usb to usb keyboard mapper, just learned that you need to PAY THE FUCKING USB-IF to get a vendor id and a product id, which are needed to uniquely identify your usb device to the host.
成功让 raspberry pi pico 作为 usb hid 键盘设备向电脑周期性输出 "quick brown fox" 了!
接下来……需要学习 usb host-side spec、研究怎么用 pico 的 pio block 实现一个额外的 usb 控制器 (?),然后才能写一个 usb host 实现来接收实体键盘输入,映射后传给电脑 🫠
大概还要搞懂 microcontroller interrupts 怎么工作、如何使用 🫠
接下来……需要学习 usb host-side spec、研究怎么用 pico 的 pio block 实现一个额外的 usb 控制器 (?),然后才能写一个 usb host 实现来接收实体键盘输入,映射后传给电脑 🫠
大概还要搞懂 microcontroller interrupts 怎么工作、如何使用 🫠
👍1
边界条件之场
成功让 raspberry pi pico 作为 usb hid 键盘设备向电脑周期性输出 "quick brown fox" 了! 接下来……需要学习 usb host-side spec、研究怎么用 pico 的 pio block 实现一个额外的 usb 控制器 (?),然后才能写一个 usb host 实现来接收实体键盘输入,映射后传给电脑 🫠 大概还要搞懂 microcontroller interrupts 怎么工作、如何使用 🫠
读了 RP2040 datasheet,了解到这颗 mcu 内置的一个 usb 控制器能工作在 host 或 device 模式,不能同时(符合预期)。
读了 USB Made Simple ,知道了实现一个 usb 控制器意味着从最底层的 线上电压 开始 -> Serial Interface Engine (SIE) 转换电压变化为 usb packet -> 不同种类的 packet 构建 transaction -> 不同种类的 transaction 构建 transfer -> 各种 transfer 再组成一次次 usb 协议通信。
从头实现怎么看都是一个 tedious manual labor ……好在有人已经把这事做了: Pico-PIO-USB 。不得不说 RP2040 的 PIO 模块真的太强了,能凭空给开发板多搓出一个 usb 控制器来 🤔
读了 USB Made Simple ,知道了实现一个 usb 控制器意味着从最底层的 线上电压 开始 -> Serial Interface Engine (SIE) 转换电压变化为 usb packet -> 不同种类的 packet 构建 transaction -> 不同种类的 transaction 构建 transfer -> 各种 transfer 再组成一次次 usb 协议通信。
从头实现怎么看都是一个 tedious manual labor ……好在有人已经把这事做了: Pico-PIO-USB 。不得不说 RP2040 的 PIO 模块真的太强了,能凭空给开发板多搓出一个 usb 控制器来 🤔
边界条件之场
jesus christ 有关 2b2t 这服务器能发生的事情实在是太精彩了(太社会了 https://youtu.be/elqAh3GWRpA
原来这叫「供应链攻击」👀
(xz-utils 有端联想)
(xz-utils 有端联想)
Forwarded from Welcome to the Black Parade
今天有人提到 Lasse Collin 对于 xz 项目早就疲惫不堪,Jia Tan 是极少数愿意真正贡献代码的“开发者”,这都是这场悲剧不可或缺的背景条件。
在无人关心的角落,Florian Westphal 最近辞去了内核 netfilter co-maintainer,所以现在 nf 只剩 Pablo Neira Ayuso 一人维护。这可是无数人每天使用的 netfilter。
在无人关心的角落,我最爱的工具之一 strace 依然只由一个捷克人 Dmitry V. Levin 默默维护。
在无人关心的角落,tcpdump/libpcap 在由 the-tcpdump-group 持续更新,其中一位 Denis Ovsienko 的自我介绍是 sometimes I work jobs for living, sometimes I contribute pro bono to free and open source software projects, often I do both,给人一种很孤独的感觉。
在无人关心的角落,bash group 只有三位 active members,其中一位 Bob Proulx 有个古典博客,里面有记录他和妻子的平静生活。
我以前赞美人月神话,但我现在更关心默默无闻的开发者们,就像 vim 作者 Bram Moolenaar 一生没有和任何人建立亲密关系,我只想问,你这一生过得开心吗?
你们这些伟大的开发者们过得开心吗?
在无人关心的角落,Florian Westphal 最近辞去了内核 netfilter co-maintainer,所以现在 nf 只剩 Pablo Neira Ayuso 一人维护。这可是无数人每天使用的 netfilter。
在无人关心的角落,我最爱的工具之一 strace 依然只由一个捷克人 Dmitry V. Levin 默默维护。
在无人关心的角落,tcpdump/libpcap 在由 the-tcpdump-group 持续更新,其中一位 Denis Ovsienko 的自我介绍是 sometimes I work jobs for living, sometimes I contribute pro bono to free and open source software projects, often I do both,给人一种很孤独的感觉。
在无人关心的角落,bash group 只有三位 active members,其中一位 Bob Proulx 有个古典博客,里面有记录他和妻子的平静生活。
我以前赞美人月神话,但我现在更关心默默无闻的开发者们,就像 vim 作者 Bram Moolenaar 一生没有和任何人建立亲密关系,我只想问,你这一生过得开心吗?
你们这些伟大的开发者们过得开心吗?
边界条件之场
艹!买了台小米 13,想着出场预装 miui 不用搞恶心答题解锁 结果到手开机第一幕: Xiaomi HyperOS 😨😨😨😨😨😨😨😨😨😨😨
用了 8 年 google 原厂 android + lineageos ,期间夹杂着一些一加 氢/氧,我知道这次选择国产绝对会让我后悔,但我没想到后悔来得如此迅猛 😭
边界条件之场
android 上怎么用 rsync 啊,adb push/pull 不保留时间戳很烦
wait, what?? is this new?
"-a: preserve file timestamp and mode" 🤔
$ adb --help
file transfer:
pull [-a] [-z ALGORITHM] [-Z] REMOTE... LOCAL
copy files/dirs from device
-a: preserve file timestamp and mode
"-a: preserve file timestamp and mode" 🤔
边界条件之场
wait, what?? is this new? $ adb --help file transfer: pull [-a] [-z ALGORITHM] [-Z] REMOTE... LOCAL copy files/dirs from device -a: preserve file timestamp and mode "-a: preserve file timestamp and mode" 🤔
好像想起来了,当时调查的时候看到过这个
这个
-a flag,但是因为 push 指令没有对等的保留时间戳选项,所以我继续找了其它方案。这个
-a flag 从来没用过,所以这段记忆被大脑 gc 了(读完 https://docs.tinyusb.org/ 我都震惊了,就这???这哪能叫文档,简介差不多 🥴
网站上告诉我需要写一个
作者的意思好像是让人去看 examples ……
#c_lang
网站上告诉我需要写一个
tusb_config.h 文件,但只字不提这文件里该写些什么,没有 api reference ……作者的意思好像是让人去看 examples ……
#c_lang
边界条件之场
读完 https://docs.tinyusb.org/ 我都震惊了,就这???这哪能叫文档,简介差不多 🥴 网站上告诉我需要写一个 tusb_config.h 文件,但只字不提这文件里该写些什么,没有 api reference …… 作者的意思好像是让人去看 examples …… #c_lang
我悟了,应该把头文件当 rust doc 用 🤪
信息量基本相同。不过我没配好 c lsp,没有跳转和检索体验还是比 rust doc 差远了(
信息量基本相同。不过我没配好 c lsp,没有跳转和检索体验还是比 rust doc 差远了(
边界条件之场
艹!买了台小米 13,想着出场预装 miui 不用搞恶心答题解锁 结果到手开机第一幕: Xiaomi HyperOS 😨😨😨😨😨😨😨😨😨😨😨
掏出一个 apk 准备安装,
进入安装界面看到半屏广告、半屏未备案/安全警告,
点击继续,竟然弹出密码框让我输入小米账号密码???
受国产系统震惊之余,掏出一条数据线准备 adb install ,
查了下发现要先去开发者选项里允许 adb 安装。
打开开关,再次 adb install,手机上竟然对 adb 安装也有确认框,不过这次没有要求输入小米账号密码。
真是见够了,等解锁了立即换成欧版系统 🙄
进入安装界面看到半屏广告、半屏未备案/安全警告,
点击继续,竟然弹出密码框让我输入小米账号密码???
受国产系统震惊之余,掏出一条数据线准备 adb install ,
[INSTALL_FAILED_USER_RESTRICTED: Install canceled by user]???查了下发现要先去开发者选项里允许 adb 安装。
打开开关,再次 adb install,手机上竟然对 adb 安装也有确认框,不过这次没有要求输入小米账号密码。
真是见够了,等解锁了立即换成欧版系统 🙄
usb 标准里说 endpoint address 是 4 bit ,应用样例里面却冒出来
查了下才知道使用 8 bit 表示 endp addr 是一个常规操作,其中最高位 bit 用来表示 endpoint direction。
0x81 和 0x82 ???查了下才知道使用 8 bit 表示 endp addr 是一个常规操作,其中最高位 bit 用来表示 endpoint direction。
0x 8 2
0b 1 0 0 0 0 0 1 0
^ <----->
| |
| address 4 bit
|
direction 1 bit, 0 for OUT, 1 for IN
磕磕碰碰好几天终于把 tinyusb device stack 跑通了。
不仅是第一次写 c ,还要学 cmake 。
然后又因为 tinyusb 文档网站上没有文档,不得不在六七个头文件之间跳来跳去尝试理解它的 api 怎么用。 tusb 作者让人去看样例,但样例里面非常离谱地写着 TODO。 changelog 里写着新 api 代替了旧 api,但实际上新 api 不工作 😤
P1: 被 tinyusb 骗(
P2: 样例里写着 TODO
不仅是第一次写 c ,还要学 cmake 。
然后又因为 tinyusb 文档网站上没有文档,不得不在六七个头文件之间跳来跳去尝试理解它的 api 怎么用。 tusb 作者让人去看样例,但样例里面非常离谱地写着 TODO。 changelog 里写着新 api 代替了旧 api,但实际上新 api 不工作 😤
P1: 被 tinyusb 骗(
P2: 样例里写着 TODO
边界条件之场
磕磕碰碰好几天终于把 tinyusb device stack 跑通了。 不仅是第一次写 c ,还要学 cmake 。 然后又因为 tinyusb 文档网站上没有文档,不得不在六七个头文件之间跳来跳去尝试理解它的 api 怎么用。 tusb 作者让人去看样例,但样例里面非常离谱地写着 TODO。 changelog 里写着新 api 代替了旧 api,但实际上新 api 不工作 😤 P1: 被 tinyusb 骗( P2: 样例里写着 TODO
跑通了以后写了段测试代码,向电脑键入 the quick brown fox ,但是每次都是打了两个字母 th 就一直卡在 h 键上,想了半天以为是逻辑想错了,但重写一遍问题依旧。
掏出 print debug 一看,我用来 index 列表的变量从 0 增加到 1 以后就一直停在 1,回代码里马上就发现应该是 size_t 的 index 变量不知道为什么被我写成了 bool 🤪
Anyway,终于赶上了之前用 rust 实现的进度。接下来折腾 tinyusb host stack,能够获取按键输入以后就可以开始写映射了!
掏出 print debug 一看,我用来 index 列表的变量从 0 增加到 1 以后就一直停在 1,回代码里马上就发现应该是 size_t 的 index 变量不知道为什么被我写成了 bool 🤪
Anyway,终于赶上了之前用 rust 实现的进度。接下来折腾 tinyusb host stack,能够获取按键输入以后就可以开始写映射了!
边界条件之场
掏出一个 apk 准备安装, 进入安装界面看到半屏广告、半屏未备案/安全警告, 点击继续,竟然弹出密码框让我输入小米账号密码??? 受国产系统震惊之余,掏出一条数据线准备 adb install , [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user]??? 查了下发现要先去开发者选项里允许 adb 安装。 打开开关,再次 adb install,手机上竟然对 adb 安装也有确认框,不过这次没有要求输入小米账号密码。 真是见够了,等解锁了立即换成欧版系统…