Sardith Posted August 11, 2006 Posted August 11, 2006 Is there anyone that knows how to intercept the temps, and store them to variables? I need it for my LCD project. Is there a way to use dllcalls or coms? I couldn't find any help on google or on the forums. [font="Verdana"]Valik:Get it straight - I'm not here to say please, I'm here to help - if my help's not appreciated then lotsa luck, gentlemen.[/font]
Sardith Posted August 11, 2006 Author Posted August 11, 2006 Another added question, how do you all figure out a .dll's dll-structure? Dim $pdwCoreTemp Dim $pdwAmbientTemp Dim $pdwUpperLimit $nWindowsMonitorNumber = 1 $dll = DllOpen("nvcpl.dll") $result = DllCall($dll,"int", "NvCplGetThermalSettings", "int",$nWindowsMonitorNumber, "long_ptr", $pdwCoreTemp, "long_ptr", $pdwAmbientTemp, "long_ptr", $pdwUpperLimit) $Number = StringReplace($result[2], "|", @CRLF) $Temp = $Number * 1.8 + 32 MsgBox(4096, "Test",$Temp) DllClose($dll) I found the .dll structure so I could do that, I can't do anything with Mbm5 because no one has a .dll structure. [font="Verdana"]Valik:Get it straight - I'm not here to say please, I'm here to help - if my help's not appreciated then lotsa luck, gentlemen.[/font]
Sardith Posted August 12, 2006 Author Posted August 12, 2006 Is there anyway someone could help me with this source? This is MBM5 source, I wanted to know how to use auto's 'com' system to read sensor temps. expandcollapse popup///////////////////////////////////////////////////////////////////////////// // File : mbm.hpp // Date : Octobre 13, 2003 // Author : Danny Couture // Mail : dcouture@popupsolutions.com // Version : 1.0 // Desc : C++ wrapper for MotherBoard Monitor Shared Memory Access // ///////////////////////////////////////////////////////////////////////////// // // Date : December 12, 2003 // Author : Maurizio Bonesi // Mail : maurizio.bonesi@it.datalogic.com // Version : 1.1 // Desc : Added several methods for direct sensor access through mbm object. // Introduced several #defines for data structures length for an easier // class expansion or customization #ifndef MBM_HPP #define MBM_HPP #include <windows.h> #include <string> namespace mbm { #define NOTFOUND_STRING "not_found" #define BT_ISA "type_isa" #define BT_SMBUS "type_smbus" #define BT_VIA686ABUS "type_via686abus" #define BT_DIRECTIO "type_directio" #define BT_UNKNOWN "type_unknown" typedef enum { btISA = 0, btSMBus, btVIA686ABus, btDirectIO } bus_t; #define SMBT_INTEL "type_intel" #define SMBT_AMD "type_amd" #define SMBT_ALI "type_ali" #define SMBT_NFORCE "type_nforce" #define SMBT_SIS "type_sis" #define SMBT_UNK BT_UNKNOWN typedef enum { smtSMBIntel = 0, smtSMBAMD, smtSMBALi, smtSMBNForce, smtSMBSIS } smb_t; #define ST_UNKNOWN BT_UNKNOWN #define ST_TEMPERATURE "type_temperature" #define ST_VOLTAGE "type_voltage" #define ST_FAN "type_fan" #define ST_MHZ "type_mhz" #define ST_PERCENTAGE "type_percentage" typedef enum { stUnknown = 0, stTemperature, stVoltage, stFan, stMhz, stPercentage } sensor_t; /* centralize #defines here for portability and upgradability */ #define SENSOR_INDEX_LENGTH 10 #define SENSOR_INFO_LENGTH 100 #define SENSOR_NAME_LEN 12 #define TIME_STRING_LENGTH 41 #define MBM_PATHNAME_LENGTH 256 #define SMBUSNAME_STRING_LENGTH 41 #define PADDING1_SIZE_BYTES 3 #define PADDING2_SIZE_BYTES 4 #define PADDING3_SIZE_BYTES 8 #define VERSION_STRING_LENGTH 4 #define VERSION_STRING_SEPARATOR_CH '.' template <typename T> void flush(const T & val) { FlushViewOfFile(&val, sizeof(val)); } #pragma pack(push, 1) class index { private: int _type; // type of sensor int _count; // number of sensor for that type public: sensor_t type() const { return (sensor_t)_type; } int count() const { return _count; } }; class sensor { private: char _type; // type of sensor char _name[SENSOR_NAME_LEN]; // name of sensor char _padding1[PADDING1_SIZE_BYTES]; // padding of 3 byte double _current; // current value double _low; // lowest readout double _high; // highest readout long _readout; // total number of readout char _padding2[PADDING2_SIZE_BYTES]; // padding of 4 byte long double _total; // total amout of all readouts char _padding3[PADDING3_SIZE_BYTES]; // padding of 6 byte double _alarm1; // temp & fan: low alarm; voltage: % off; double _alarm2; // temp: high alarm public: sensor_t type() const { return (sensor_t)_type; } void type(sensor_t type) { _type = (char)type; flush(_type); } std::string name() const { return std::string(_name); } void name(const std::string & name) { strncpy(_name, name.c_str(), sizeof(_name)); flush(_name); } double current() const { return _current; } void current(double current) { _current = current; flush(_current); } double low() const { return _low; } void low(double low) { _low = low; flush(_low); } double high() const { return _high; } void high(double high) { _high = high; flush(_high); } long readout() const { return _readout; } void readout(long readout) { _readout = readout; flush(_readout); } double alarm1() const { return _alarm1; } void alarm1(double alarm1) { _alarm1 = alarm1; flush(_alarm1); } double alarm2() const { return _alarm2; } void alarm2(double alarm2) { _alarm2 = alarm2; flush(_alarm2); } }; class info { private: short _smbBase; // SMBus base address bus_t _smbType; // SMBus/Isa bus used to access chip smb_t _smbCode; // SMBus sub type, Intel, AMD or ALi char _smbAddr; // Address of sensor chip on SMBus char _smbName[SMBUSNAME_STRING_LENGTH]; // Nice name for SMBus short _isaBase; // ISA base address of sensor chip on ISA int _chipType; // Chip nr, connects with Chipinfo.ini char _voltageSubType; // Subvoltage option selected public: short smbBase() const { return _smbBase; } bus_t smbType() const { return _smbType; } smb_t smbCode() const { return _smbCode; } char smbAddr() const { return _smbAddr; } std::string smbName() const { return std::string(_smbName); } short isaBase() const { return _isaBase; } int chipType() const { return _chipType; } char voltageSubType() const { return _voltageSubType; } }; #pragma pack(pop) class mbm { private: #pragma pack(push, 1) struct data_t { double _version; // version number (example: 51090) index _index[SENSOR_INDEX_LENGTH]; // Sensor index sensor _sensor[SENSOR_INFO_LENGTH]; // sensor info info _info; // misc. info unsigned char _start[TIME_STRING_LENGTH]; // start time unsigned char _current[TIME_STRING_LENGTH];// current time unsigned char _path[MBM_PATHNAME_LENGTH]; // MBM path }; #pragma pack(pop) data_t * data; HANDLE mbmMemory; int totSensors; std::string v; public: mbm() : data(0), mbmMemory(0), totSensors(0), v() { } ~mbm() { close(); } bool open() { char strTmp[VERSION_STRING_LENGTH + ((VERSION_STRING_LENGTH-1)*sizeof(VERSION_STRING_SEPARATOR_CH)) ]; if (opened()) return true; // try to open shared memory if (mbmMemory == 0) mbmMemory = OpenFileMapping(FILE_MAP_WRITE, FALSE, "$M$B$M$5$S$D$"); if (mbmMemory == 0) return false; data = (data_t *)MapViewOfFile(mbmMemory, FILE_MAP_WRITE, 0, 0, 0); for(int j=0; j<SENSOR_INDEX_LENGTH; j++) totSensors += (data->_index[j]).count(); //format version string sprintf(strTmp, "%g", data->_version); v.assign(strTmp); for(int i=0; i<VERSION_STRING_LENGTH-1; i++) v.insert((i<<1)+1, std::string(1,VERSION_STRING_SEPARATOR_CH)); return opened(); } bool opened() const { return data != 0; } void close() { if (data != 0) { UnmapViewOfFile(data); data = 0; } if (mbmMemory != 0) { CloseHandle(mbmMemory); mbmMemory = 0; } } double version() const { return data->_version; } std::string version_string() const { return v; } std::string path() const { return std::string((char*)data->_path); } index * index() { return data->_index; } sensor * sensor() { return data->_sensor; } const int tot_sensors() { return totSensors; } /* Methods for accessing MBM properties and retrieve a std::string out of them */ std::string bus_type(void) const { switch((data->_info).smbType()) { case btISA: return std::string(BT_ISA); break; case btSMBus: return std::string(BT_SMBUS); break; case btVIA686ABus: return std::string(BT_VIA686ABUS); break; case btDirectIO: return std::string(BT_DIRECTIO); break; default: return std::string(BT_UNKNOWN); break; } } std::string smb_name(void) const { return (data->_info).smbName(); } std::string smb_type(void) const { switch((data->_info).smbCode()) { case smtSMBIntel: return std::string(SMBT_INTEL); break; case smtSMBAMD: return std::string(SMBT_AMD); break; case smtSMBALi: return std::string(SMBT_ALI); break; case smtSMBNForce: return std::string(SMBT_NFORCE); break; case smtSMBSIS: return std::string(SMBT_SIS); break; default: return std::string(SMBT_UNK); break; } } /* methods for retrieving a sensor property directly from the mbm object instance just by passing the sensor's string name */ sensor_t type(const std::string & n) const { for(int j=0; j<totSensors; j++) { if( (data->_sensor[j]).name() == n) return (data->_sensor[j]).type(); } return stUnknown; } std::string sensor_type(const std::string & n) const { //retrieves a string with the sensor type for(int j=0; j<totSensors; j++) { if( (data->_sensor[j]).name() == n) switch((data->_sensor[j]).type()) { case stTemperature: return std::string(ST_TEMPERATURE); break; case stVoltage: return std::string(ST_VOLTAGE); break; case stFan: return std::string(ST_FAN); break; case stMhz: return std::string(ST_MHZ); break; case stPercentage: return std::string(ST_PERCENTAGE); break; case stUnknown: default: break; } } return std::string(ST_UNKNOWN); } double current(const std::string & n) const { for(int j=0; j<totSensors; j++) { if( (data->_sensor[j]).name() == n) return (data->_sensor[j]).current(); } return 0; } double high(const std::string & n) const { for(int j=0; j<totSensors; j++) { if( (data->_sensor[j]).name() == n) return (data->_sensor[j]).high(); } return 0; } double low(const std::string & n) const { for(int j=0; j<totSensors; j++) { if( (data->_sensor[j]).name() == n) return (data->_sensor[j]).low(); } return 0; } long readout(const std::string & n) const { for(int j=0; j<totSensors; j++) { if( (data->_sensor[j]).name() == n) return (data->_sensor[j]).readout(); } return 0; } double alarm1(const std::string & n) const { for(int j=0; j<totSensors; j++) { if( (data->_sensor[j]).name() == n) return (data->_sensor[j]).alarm1(); } return 0; } double alarm2(const std::string & n) const { for(int j=0; j<totSensors; j++) { if( (data->_sensor[j]).name() == n) return (data->_sensor[j]).alarm2(); } return 0; } }; } //namespace mbm #endif //MBM_HPP [font="Verdana"]Valik:Get it straight - I'm not here to say please, I'm here to help - if my help's not appreciated then lotsa luck, gentlemen.[/font]
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now