USB-CAN 开发笔记

最近在接触 CAN 总线的开发,找了一圈 CAN 总线的适配器,某宝上全是各类坐地起价的分析仪。这类分析仪有个特点是在系统中呈现的形式为一个 USB 串口设备,其通信方式为厂家私有并不公开,集成开发的时候必须带上厂家的 .dll 或者 .so 文件。

经过一翻搜索之后,发现了一个以 Geschwister Schneider 制造的 USB/CAN 设备(VendorId: 0x1d50, ProductId: 0x606f)的 USB 通信协议为蓝本的开源方案。在 Linux 下以标准 SocketCAN 设备 [5] 呈现,驱动已经进入主线[1],在 Windows 下以 WCID 设备 [6] 呈现,开源 API 见 [2]。开源的硬件方案 [3],对应的固件 [4]。

在其基础上分叉出来的方案还有 [7],[8] 和 [9]。另外 SocketCAN 还有一个开源的 Golang 包 [10]。

[1] https://github.com/torvalds/linux/blob/master/drivers/net/can/usb/gs_usb.c
[2] https://github.com/HubertD/cangaroo/tree/master/src/driver/CandleApiDriver/api
[3] https://github.com/HubertD/candleLight
[4] https://github.com/HubertD/candleLight_fw
[5] https://www.kernel.org/doc/Documentation/networking/can.txt
[6] https://github.com/pbatard/libwdi/wiki/WCID-Devices
[7] https://store.linklayer.com/collections/frontpage/products/cantact-v1-0
[8] https://canable.io/
[9] https://github.com/codenocold/microbus
[10] https://github.com/linklayer/go-socketcan

Python argparse 详细解释

如果你正在搜索关于 argparse 用法的解释,那么你通常会很困惑,像下面这段代码到底干了什么?解决了什么问题?为什么要用这样的代码?

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the integers (default: find the max)')

args = parser.parse_args()
print(args.accumulate(args.integers))

继续阅读Python argparse 详细解释