ventiladores ventilador velocidad speedfan notebook laptop desde descargar cómo controlar aumentar ajustar acelerar c++ windows acpi

c++ - speedfan - cómo ajustar la velocidad del ventilador desde la bios



¿Tiene acceso mediante programación al ventilador de la CPU en una computadora portátil?(Windows) (5)

ACPI puede o no permitirle ajustar la configuración del ventilador. Sin embargo, algunas implementaciones del BIOS pueden no permitir ese control: pueden forzar el control dependiendo de la configuración del BIOS / CMOS. Uno podría estar en apuros para un buen caso de uso donde el control del BIOS (incluso personalizado) es insuficiente. Me he encontrado con situaciones en las que el control de BIOS era insuficiente, pero no para todas las plataformas de placa base posibles.

¿Hay una forma estándar de Windows para hacer cosas como "iniciar ventilador", "disminuir velocidad" o similar, desde C / C ++?

Sospecho que podría ser ACPI, pero soy un mortal frágil y no puedo leer ese tipo de documentación.

Editar: por ejemplo, Windows 7 le permite seleccionar en su plan de energía opciones como "enfriamiento pasivo" (¿solo cuando las cosas se calientan?) Vs. "enfriamiento activo" (¿mantiene la CPU proactivamente bien?). Parece que el sistema operativo tiene una forma de controlar el ventilador de forma genérica.


La biblioteca de instrumentos de administración de Windows (WMI) proporciona una clase Win32_Fan e incluso un método SetSpeed. Por desgracia, los documentos dicen que esto no está implementado, así que supongo que no es muy útil. Pero puede controlar las cosas configurando el estado de energía.


Sí, sería ACPI y, a mi entender, las ventanas no le dan mucho / ningún control sobre eso desde el espacio del usuario. Por lo tanto, tendrías que comenzar a extraer los controladores, lo que es casi imposible en Windows.

Dicho esto, google revela que hay algunas bibliotecas de código abierto para hardware específico ... así que dependiendo de su hardware es posible que pueda encontrar algo.


Por el momento estoy trabajando en un proyecto que, entre otras cosas, controla a los fanáticos de la computadora. Básicamente, los ventiladores están controlados por el chip superIO de su computadora. Accedemos al chip directamente usando IO mapeado por puerto, y desde allí podemos acceder al dispositivo de ventilador lógico. El uso de port-mapped IO requiere que el código se ejecute en modo kernel, pero windows no proporciona ningún controlador para el puerto genérico IO (con buenas razones, ya que es una herramienta muy poderosa), así que escribimos nuestro propio controlador y lo usamos.

Si desea seguir esta ruta, básicamente necesita conocimiento en dos áreas: desarrollo de controladores y cómo acceder e interpretar la información de los chips superIO. Cuando comenzamos el proyecto, no sabíamos nada en ninguna de estas áreas, por lo que ha estado aprendiendo navegando, leyendo y finalmente haciendo. Para obtener el conocimiento, hemos sido especialmente ayudados al mirar estos enlaces:

  1. El WDK , que es el Kit de controladores de Windows. Necesita esto para compilar cualquier controlador que escriba para Windows, con esto viene una gran cantidad de código fuente, por ejemplo, controladores, incluido un controlador para IO general mapeado en puerto, llamado portio.
  2. WinIO tiene un código fuente para un controlador en C, un dll en C que instala y carga programáticamente ese controlador, y algún código C # para una GUI, que carga el dll y lee / escribe en los puertos. El controlador es muy similar al de portio.
  3. lm-sensors es un proyecto de Linux que, entre otras cosas, detecta tu chip superIO. / prog / detect / sensors-detect es el programa perl, que hace la detección, y hemos pasado un tiempo revisando el código para ver cómo interactuar con un chip superIO.
  4. Cuando estábamos revisando el código de lm- sensors , era muy bueno tener herramientas como RapidDriver y RW-todo , ya que nos permitían simular una carrera de sensores-detectar. Este último es el más poderoso y es muy útil para visualizar el espacio IO, mientras que el primero proporciona un acceso más fácil a algunas operaciones que se mapean mejor que las detecciones de sensores (leer / escribir bytes en el puerto)
  5. Finalmente, necesita encontrar la hoja de datos de su chip superIO. A partir de los ejemplos que he visto, los controladores de entorno de cada chip proporcionan una funcionalidad similar (velocidad del ventilador r / w, temperatura de lectura, voltaje del chip de lectura), pero varían en qué registros debe escribir para obtener esta funcionalidad . Este lugar ha tenido todas las hojas de datos, que hemos necesitado hasta ahora.

Si desea algo realmente rápido para reducir los ventiladores a un nivel en el que sepa que las cosas no se sobrecalentarán, existe el programa Speedfan para hacerlo. Descubrir cómo configurarlo en las primeras versiones para bajar automáticamente los ventiladores al 50% en el arranque de la computadora fue tan doloroso que mi primer enfoque fue simplemente parcharlo por bytes para iniciar el único ventilador superio que tenía a menor velocidad. Las versiones más nuevas todavía son un poco difíciles, pero es factible: hay un sistema deslizante gráfico que se parece al ecualizador de audio, excepto que el eje x es temp yy es la velocidad del ventilador. Los arrastras uno por uno. Después de averiguar cómo obtener el control manual para el ventilador que desea, este es el próximo paso.

Hay un proyecto para controlar el hardware (como los fanáticos) con C #: http://code.google.com/p/open-hardware-monitor/

No lo he examinado exhaustivamente, pero el código fuente y el uso de WinRing0.sys al menos dan la impresión de que si sabes qué controlador de ventilador tienes y tienes la hoja de datos, también debe poder modificarse para establecer valores en lugar de solo obtenerlos. . No sé qué herramienta es adecuada (al lado del depurador del kernel) para ver lo que hace Speedfan, si prefieres husmear e imitar a speedfan en lugar de mirar las hojas de datos y probar cosas.