关于ShortPushButton和LongPushButton中的Offset

如果offset中的值是指opcode和parameter,那么为什么shortbutton和longbutton的offset是一样的?
两个类的区别在于mask,这个mask在这里起到的是什么作用?

“Accessor_ShortPushButton”: {
“Chip”: “#/Smc_ExpBoardSMC”,
“Offset”: 134224384,
“Size”: 1,
“Mask”: 1,
“Type”: 0,
“Value”: 0
},
“Accessor_LongPushButton”: {
“Chip”: “#/Smc_ExpBoardSMC”,
“Offset”: 134224384,
“Size”: 1,
“Mask”: 2,
“Type”: 0,
“Value”: 0
},

mask不同,bit0 是short, bit1 是long
看配置是这样,详细的还得看smc命令字说明文档

两个offset为什么是一样的,根据SMC标准命令字,长按和短按中间有两个bit是不一样的,一个是2’b10一个是2’b01
image

因为他们出了数据不一样,其他都一样的。
数据中间第一个bit代表短按,第二个bit代表长按,对应mask就是 1 → 2b01 和 2 → 2b10

好的,明白了,感谢指导!

我还有个问题想请教,为什么我通过
mdbctl call Smc_ExpBoardSMC_0101 bmc.kepler.Chip.BitIO Write 0 0x8001a00 1 2 1 0x01
可以实现长按,
但是通过
mdbctl call Smc_ExpBoardSMC_0101 bmc.kepler.Chip.BitIO Write 0 0x8001a00 1 1 1 0x01
无法实现短按

总觉得你长按也有点问题,
mask是2(2b10),data是0x01(2b01),与之后就是0
你短按那个命令,mask是1(2b01),data还是0x01(2b01),与之后是1

所以你在长按的时候,应该传入的data要么是0x00(2b00),要么是0x02(2b10),也就是bit第二位要么是0要么是1
短按的话,看bit第一位,所以要么是0x00(2b00),要么是0x01(2b01)

好的,我再看看