控制MagSafe 2上的LED(向检测引脚发送任意数据)

时间:2014-01-16 09:36:53

标签: macos low-level led

我想以编程方式更改MagSafe 2上的LED。有一个处理感应引脚信号的电路板,实际上已知信号。问题实际上是通过OS X发送这些信号。

我能找到的关于MagSafe黑客的唯一文件是Ken Shirriff撰写的这篇博客文章 http://www.righto.com/2013/06/teardown-and-exploration-of-magsafe.html。有趣的

Ken发现的信号如下(仅为了完整性):

void writeDS2413(int n) {
  uint8_t buf[3];
  net.reset();
  net.skip();
  buf[0] = 0x5a; // PIO access write
  buf[1] = 0xfc | (n&3); // data in lower two bits
  buf[2] = ~buf[1]; // inverted
  net.write_bytes(buf, 3, true /* power on */);
}

// ...
writeDS2413(3); // off
writeDS2413(1); // orange
writeDS2413(2); //green
writeDS2413(0); //yellow

OS X层是否允许与MagSafe进行低级别通信?我认为它在插入时会注册为某种设备 - 这可能是可写的,对吗?

2 个答案:

答案 0 :(得分:0)

在我看来,你必须连接到你的Mac的SMC芯片,因为它处理与电池有关的所有事情......看看https://github.com/gcsgithub/smc_util,它将帮助你阅读SMC键列表(记住用sudo运行它。 找到密钥后(如果有),使用https://github.com/fmorrow/smcwrapper将帮助您更轻松地设置LED状态。

更新:我的想法是,它由SMC固件内部控制。充电=橙色,满=绿色,就是这样。但在我找到一种方法来控制位于你的macbook前面的LED之前,我就是这么想的....所以......永远不要太确定(特别是关于Apple)并且不要放弃; - )

答案 1 :(得分:0)

如果是某些版本的Linux而不是OS X,那么你只需要通过/sys/bus/w1/devices访问所有1-Wire设备 - 只需谷歌搜索" 1-Wire Raspberry Pi Tutorial"并且你会找到一堆像Raspberry Pi 1- Wire Digital Thermometer Sensor这样的东西来解释如何在linux上与1-Wire设备进行交互。

但是,您面临的下一个问题是Mac OS X上没有/sys/bus - 请参阅问题:
Where is /sys/bus/usb/devices on Mac OS X?了解有关不幸事实的更多细节 " OS X不使用sysfs"

但是,如果您在与Mac OS X上访问/sys/bus或可能访问1-Wire总线(有时拼写为1Wire)相关的类似问题上进行更多挖掘,可能会让您朝着正确的方向前进。 / p>

从概念上讲,控制1-Wire双通道应该非常简单 正如您所提到的in the MagSafe power connector可寻址交换机 - 我们必须找到一种方法来访问1-Wire总线。我建议在尝试使用@ Perceval FARAMAZ的答案中提到的内核内存或SMC控制器接口之前继续追求。

如果您取得更多进展,请在问题或评论上发布一些更新。