背景我正在使用python-seabreeze與光譜儀交談。一些但不是所有可用命令都在 python-seabreeze 中實現。從OceanOptics Flame-T手冊中可以看到有如下命令(舉例):..0x09 Request Spectra0x0A Set Trigger Mode0x0B Query number of Plug-in Accessories Present0x0C Query Plug-in Identifiers0x0D Detect Plug-ins0x12 LED Status0x60 General I2C Read0x61 General I2C Write0x62 General SPI I/O0x68 PSOC Read0x69 PSOC Write0x6A Write Register Information0x6B Read Register Information0x6C Read PCB Temperature0x6D Read Irradiance Calibration..從seabreeze/pyseabreeze/protocol.py我可以看到這些命令是這樣形成的:import functoolsimport struct
msgs = {
code: functools.partial(struct.Struct(msg).pack, code) for code, msg in { 0x01: "<B", # OP_INITIALIZE
0x02: "<BI", # OP_ITIME
0x03: "<BH", # set Strobe/Lamp enable Line
0x05: "<BB", # OP_GETINFO
0x09: "<B", # OP_REQUESTSPEC
0x0A: "<BH", # OP_SETTRIGMODE
0x6A: "<BBH", # OP_WRITE_REGISTER
0x6B: "<BB", # OP_READ_REGISTER
0x71: "<BBB", # OP_TECENABLE_QE
0x72: "<B", # OP_READTEC_QE
0x73: "<Bh", # OP_TECSETTEMP_QE
0xFE: "<B", # OP_USBMODE
}.items()
} # add more here if you implement new features例如Request Spectra,根據手冊是0x09,當它來自 python 時,一條消息struct.Struct('<B').pack(0x09)已發送。我試圖通過閱讀struct format strings來了解發生了什么,我發現這<意味著“小端”, B意味著無符號字符,h意味著短,等等。題從手冊中應該如何知道格式是,而格式OP_GETINFO是?這是什么邏輯?你會把什么格式和為什么?<BBOP_WRITE_REGISTER<BBH0x6C Read PCB Temperature
1 回答

慕田峪4524236
TA貢獻1875條經驗 獲得超5個贊
似乎您需要閱讀需要使用哪些參數才能發送合法命令,該協議僅定義了您希望發送的一些項目,例如:
code_partial_function = functools.partial(struct.Struct(msg).pack, code)
...
0x6B: "<BB", # OP_READ_REGISTER
...
# used like this later:
# example for register number 1
# final_packed_bytes will contain both the operation id and the register number
final_packed_bytes = code_partial_function(0x1)
對于這個讀取寄存器的操作,protocol.py 將創建一個已經包含操作 id (0x6b) 的部分函數,并將要求您提供額外的“B”,表示另一個無符號字符,可能是您希望讀取的寄存器編號。
該協議僅提供 ID 作為 pack 函數的第一個輸入,而將其余值留給用戶。每個操作在操作 ID 后需要不同的值,有些需要更多(“BBH”),有些需要更少(“B”)。
對于 0x6c,我會搜索格式并從那里了解我還剩下什么來提供這個包功能。
添加回答
舉報
0/150
提交
取消