› Foros › Xbox 360 › Exploits y homebrew
alvaro2 escribió:yo me animo pero no tengo casi ni idea de programar asi que como quieras.
Podiamos empezar por cosas facilillas para que coja base.
Es muy complicado programar en C++ sin ninguna base?
elfco escribió:si lo dificil seria que se quedase residente en memoria, eso ya seria harina de otro costal , tendriamos q desarrollar otro rebooter propio
rhoderik escribió:Hola a todos, quiero felicitar y agradecer a elfco el magnífico tutorial.
Por otro lado, si fueramos capaces de ejecutar un programa en segundo plano, creo que seria posible hacer un programa de debug que mandara por ethernet los valores de las variables en cada momento. Seguramente no permitiria hacer breaks, pero ya seria una ayuda...
karlos007 escribió:alguien me manda un privado con "info" del SDK?
Joker_21 escribió:karlos007 escribió:alguien me manda un privado con "info" del SDK?
Buscalo por torrent,no vas a encotrarlo por DD,por torrent lo pillarás enseguida...
Por cierto,yo era uno de los que te pedí el tuto,así que muchas gracias,voy a intentar portar un juego de naves bastante cutrillo que tengo echo por mi xDD.Gracias y saludos
alvaro2 escribió:yo lo encontre en DD, si lo kieres me lo dices.
EDITO: alguno se anima a modificar el FSD2, yo ya he empezado:
http://www.elotrolado.net/hilo_fsd-2-0-dashboard-alternativo-ultima-version-n-d_1458619_s230#p1721028069
jouxter escribió:alvaro2 escribió:yo lo encontre en DD, si lo kieres me lo dices.
EDITO: alguno se anima a modificar el FSD2, yo ya he empezado:
http://www.elotrolado.net/hilo_fsd-2-0-dashboard-alternativo-ultima-version-n-d_1458619_s230#p1721028069
En que modificaciones habías pensado? es para hacerme una idea de si voy a poder ayudarte... ^_^
alvaro2 escribió:jouxter escribió:alvaro2 escribió:yo lo encontre en DD, si lo kieres me lo dices.
EDITO: alguno se anima a modificar el FSD2, yo ya he empezado:
http://www.elotrolado.net/hilo_fsd-2-0-dashboard-alternativo-ultima-version-n-d_1458619_s230#p1721028069
En que modificaciones habías pensado? es para hacerme una idea de si voy a poder ayudarte... ^_^
Pues no se, yo trasteando con el xuitool he conseguido habilitar todas los opciones del Filemanger, opciones juegos, ventiladores (pero no funcionan), avatres (te deja entrar pero no salir).
jouxter escribió:
Para modificarlo y compilarlo no se requiere el vs2008 + el último sdk????
jouxter escribió:Ya he empezado a juguetear con lo que has puesto en el tutorial por ahora he compilado un ejemplo que venía que reproducía sonido y la 360 se lo ha tragado sin ningún problema, así que me he animado y he seguido investigando..
La verdad que o no se buscar o hay muy poca información al respecto.. pero he intentado conseguir el código fuente del flash360 V1.0 para ver la parte en la que se "auto apaga" la consola, resulta que, el código fuente, su creador (creo que es redline99) no lo ha liberado por que dice que es un código fuente muy poco elegante.. es una lástima porque me habría venido de perlas para ver como manejar el tema del shutdown.. que no encuentro ningún sitio donde documentarme sobre una cosa tan sencilla.. supongo que tendré que hacer pruebas como si fuera el mismo comando shutdown para windows.. esto lo dejo para la última parte..
El siguiente paso es investigar el código fuente del fsd 1.20 o del xexmenu si esta disponible y sacarle la rutina que lee las temperaturas, en esto creo que no voy a tener ningún problema porque va a ser un super copy paste..fijo fijo.. jejeje
A ver si reflotamos el hilo y entre todos logramos programar algo.. yo sigo encabezonado en crear la función que apague la consola automáticamente al llegar a xx grados..
Un saludo!
jouxter escribió:La verdad que o no se buscar o hay muy poca información al respecto.. pero he intentado conseguir el código fuente del flash360 V1.0 para ver la parte en la que se "auto apaga" la consola, resulta que, el código fuente, su creador (creo que es redline99) no lo ha liberado por que dice que es un código fuente muy poco elegante.. es una lástima porque me habría venido de perlas para ver como manejar el tema del shutdown.. que no encuentro ningún sitio donde documentarme sobre una cosa tan sencilla.. supongo que tendré que hacer pruebas como si fuera el mismo comando shutdown para windows.. esto lo dejo para la última parte..
oscarbuxan escribió:de todas formas e leído que están programando un parche para el dash launcher que funcionen los leds como en el freestyle 1.20 pero siempre incluso mientra juegas
jouxter escribió:Ya he empezado a juguetear con lo que has puesto en el tutorial por ahora he compilado un ejemplo que venía que reproducía sonido y la 360 se lo ha tragado sin ningún problema, así que me he animado y he seguido investigando..
La verdad que o no se buscar o hay muy poca información al respecto.. pero he intentado conseguir el código fuente del flash360 V1.0 para ver la parte en la que se "auto apaga" la consola, resulta que, el código fuente, su creador (creo que es redline99) no lo ha liberado por que dice que es un código fuente muy poco elegante.. es una lástima porque me habría venido de perlas para ver como manejar el tema del shutdown.. que no encuentro ningún sitio donde documentarme sobre una cosa tan sencilla.. supongo que tendré que hacer pruebas como si fuera el mismo comando shutdown para windows.. esto lo dejo para la última parte..
El siguiente paso es investigar el código fuente del fsd 1.20 o del xexmenu si esta disponible y sacarle la rutina que lee las temperaturas, en esto creo que no voy a tener ningún problema porque va a ser un super copy paste..fijo fijo.. jejeje
A ver si reflotamos el hilo y entre todos logramos programar algo.. yo sigo encabezonado en crear la función que apague la consola automáticamente al llegar a xx grados..
Un saludo!
Froggy__007 escribió:jouxter escribió:Ya he empezado a juguetear con lo que has puesto en el tutorial por ahora he compilado un ejemplo que venía que reproducía sonido y la 360 se lo ha tragado sin ningún problema, así que me he animado y he seguido investigando..
La verdad que o no se buscar o hay muy poca información al respecto.. pero he intentado conseguir el código fuente del flash360 V1.0 para ver la parte en la que se "auto apaga" la consola, resulta que, el código fuente, su creador (creo que es redline99) no lo ha liberado por que dice que es un código fuente muy poco elegante.. es una lástima porque me habría venido de perlas para ver como manejar el tema del shutdown.. que no encuentro ningún sitio donde documentarme sobre una cosa tan sencilla.. supongo que tendré que hacer pruebas como si fuera el mismo comando shutdown para windows.. esto lo dejo para la última parte..
El siguiente paso es investigar el código fuente del fsd 1.20 o del xexmenu si esta disponible y sacarle la rutina que lee las temperaturas, en esto creo que no voy a tener ningún problema porque va a ser un super copy paste..fijo fijo.. jejeje
A ver si reflotamos el hilo y entre todos logramos programar algo.. yo sigo encabezonado en crear la función que apague la consola automáticamente al llegar a xx grados..
Un saludo!
Echate un ojo a esto http://www.xboxhacker.org/index.php?topic=14272.0 y en el freestyle busca smc.cpp y smc.h
#include "stdafx.h"
#include <xtl.h>
#include <d3d9.h>
#include <xam.h>
#include <xui.h>
#include <xuiapp.h>
#include <iostream>
#include <fstream>
#include <string>
#include "AtgConsole.h"//simple text output to screen
#include "AtgFont.h"
#include "AtgInput.h"//get input from controler
#include "smc.h"
using std::string;
using std::ofstream;//needed for the debug log
//--------------------------------------------------------
//GLOBALS
ATG::Console g_console;
void debugLog(char* output)
{
ofstream writeLog;
writeLog.open("game:\\debug.log",ofstream::app);
if (writeLog.is_open())
{
writeLog.write(output,strlen(output));
writeLog.write("\n",1);
}
writeLog.close();
}
string sprintfaA(const char *format, ...)
{
char temp[16384];
va_list ap;
va_start (ap, format);
vsprintf_s (temp,16384, format, ap);
va_end (ap);
return temp;
}
void Temps(VOID)
{
smc _smc;
string temps = sprintfaA("SYSTEM TEMPERATURE:\n\nCPU: %0.1f C\n", _smc.GetTemperature(CPU,true));
temps = temps + sprintfaA("GPU: %0.1f C\n",_smc.GetTemperature(GPU,true));
temps = temps + sprintfaA("MEM: %0.1f C\n",_smc.GetTemperature(MEM,true));
temps = temps + sprintfaA("BRD: %0.1f C\n",_smc.GetTemperature(BRD,true));
g_console.Clear();
g_console.Format (temps.c_str());
g_console.Format( "PRESS A TO EXIT\n" );
}
void init(VOID)
{
HRESULT hr = g_console.Create( "game:\\Media\\Fonts\\Arial_12.xpr", 0xff000000, 0xffffffff ); //create console
if (FAILED (hr))
{
debugLog("creating console");// debuglog function
}
g_console.Format( "*** INITIALIZING ***\n" );//simple text output to screen
}
VOID __cdecl main()
{
bool done =FALSE;
init();
while(!done)
{
ATG::GAMEPAD* pGamepad = ATG::Input::GetMergedInput();// get input from controlers
Temps();
Sleep(1000);
if( pGamepad->wPressedButtons & XINPUT_GAMEPAD_A)
{
done=true;
}
}
}
#include "smc.h"
#include "stdafx.h"
void smc::PrepareBuffers()
{
//Zero our mem
ZeroMemory( m_SMCMessage, sizeof(m_SMCMessage) );
ZeroMemory( m_SMCReturn, sizeof(m_SMCReturn) );
}
//Usage: command is one of the POWER_LED constants from smc_constant.h
// animate is true for ring LED startup light sequence
void smc::SetPowerLED(unsigned char command, bool animate)
{
PrepareBuffers();
m_SMCMessage[0] = 0x8c;
m_SMCMessage[1] = command;
m_SMCMessage[2] = (animate ? 0x01 : 0x00);
HalSendSMCMessage(m_SMCMessage, NULL);
}
//Usage: color is one of LED constants from smc_constant.h
void smc::SetLEDS(LEDState sTopLeft, LEDState sTopRight, LEDState sBottomLeft, LEDState sBottomRight)
{
PrepareBuffers();
m_SMCMessage[0] = 0x99;
m_SMCMessage[1] = 0x01;
m_SMCMessage[2] = ((unsigned char)(sTopLeft>>3) | (unsigned char)(sTopRight>>2) | (unsigned char)(sBottomLeft>>1) | (unsigned char)(sBottomRight));
HalSendSMCMessage(m_SMCMessage, NULL);
}
float smc::GetTemperature(TEMP_INDEX sTempIndex, bool Celsius)
{
PrepareBuffers();
m_SMCMessage[0] = REQUEST_TEMP;
HalSendSMCMessage(m_SMCMessage, m_SMCReturn);
float temp = (float)((m_SMCReturn[sTempIndex * 2 + 1] | (m_SMCReturn[sTempIndex * 2 +2] <<8)) / 256.0);
if(!Celsius) temp = (9.0f/5.0f) * temp + 32.0f;
return temp;
}
char* smc::GetSMCVersion()
{
//dSMCMessage(m_SMCMessage, m_SMCReturn);
static char version[5] = "";
sprintf_s(version, sizeof(version), "%d.%d", m_SMCReturn[2], m_SMCReturn[3]);
return version;
}
void smc::Shutdown()
{
unsigned char tempin[0x10];
memset(tempin,0,0x10);
tempin[0] = 0x82;
tempin[1] = 0x11;
tempin[2] = 0x01;
HalSendSMCMessage(tempin, m_SMCReturn);
}
TILT_STATE smc::GetTiltState()
{
PrepareBuffers();
m_SMCMessage[0] = REQUEST_TILT;
HalSendSMCMessage(m_SMCMessage, m_SMCReturn);
TILT_STATE sTiltState = ((m_SMCReturn[1] & 1) ? VERTICAL : HORIZONTAL);
return sTiltState;
}
unsigned char smc::GetAVPack()
{
PrepareBuffers();
m_SMCMessage[0] = REQUEST_AV_PACK;
HalSendSMCMessage(m_SMCMessage, m_SMCReturn);
return m_SMCReturn[1];
}
TRAY_STATE smc::GetTrayState()
{
PrepareBuffers();
m_SMCMessage[0] = REQUEST_TRAY_STATE;
HalSendSMCMessage(m_SMCMessage, m_SMCReturn);
return (TRAY_STATE)((m_SMCReturn[1] & 0xF) % 5);
}
void smc::OpenTray()
{
PrepareBuffers();
m_SMCMessage[0] = 0x8b;
m_SMCMessage[1] = 0x60;
HalSendSMCMessage(m_SMCMessage, NULL);
// DebugMsg("Open tray");
}
void smc::CloseTray()
{
PrepareBuffers();
m_SMCMessage[0] = 0x8b;
m_SMCMessage[1] = 0x62;
HalSendSMCMessage(m_SMCMessage, NULL);
// DebugMsg("Close tray");
}
void smc::SetFanSpeed(int fan, int speed)
{
PrepareBuffers();
m_SMCMessage[0] = fan ? 0x94 : 0x89;
// Fail safe to keep a speed set above 100 in the xml from
// stopping the fans.
if (speed > 100)
speed = 100;
if (speed < 45)
{
m_SMCMessage[1] = 0x7F;
}
else
{
m_SMCMessage[1] = (unsigned char)speed | 0x80;
}
HalSendSMCMessage(m_SMCMessage, NULL);
}
// Thanks goto Aaron for this
// Setting Names to AV Packs
const char* smc::GetAVPackName()
{
switch (GetAVPack()) {
case AV_HDMI: return "HDMI";
case AV_COMPONENT: return "Component";
case AV_VGA: return "VGA";
case AV_COMPOSITETV: return "Composite TV";
case AV_COMPOSITEHD: return "Composite HDTV";
case AV_HDMIAUDIO: return "HDMIw/Opt";
default: return NULL;
}
}
//Thanks to www.free60.org/SMC for helping me get front LEDs right
#pragma once
#ifndef _SMC__H
#define _SMC_H
#include <string.h>
//sorry for the extreme amount of constants trying to make functions
//easier to use
//Power LED
#define POWER_LED_BLINK 0x10
#define POWER_LED_DEFAULT 0x02
#define POWER_LED_ON 0x01
#define POWER_LED_OFF 0X03
//Quadrant LEDs
//NOTE: LED constants are determined with console laying down
// with LED color bits being, starting from tope left 1, 2, 4, 8
//Thanks to unknown v2 for the following
typedef enum _LEDState
{
OFF = 0x00,
RED = 0x08,
GREEN = 0x80,
ORANGE = 0x88
}LEDState;
typedef enum _TEMP_INDEX
{
CPU,
GPU,
MEM,
BRD
}TEMP_INDEX;
typedef enum _TILT_STATE
{
VERTICAL,
HORIZONTAL
}TILT_STATE;
/* MATTIE: WRONG INFO?
typedef enum _TRAY_STATE
{
OPEN,
OPENING,
CLOSED,
CLOSING,
PUSHED
}TRAY_STATE;
*/
typedef enum _TRAY_STATE
{
OPEN,
UNKNOWN,
CLOSED,
OPENING,
CLOSING
}TRAY_STATE;
// Thanks goto Aaron for this
// Setting Names to AV Packs
typedef enum _AV_PACK {
AV_HDMI = 0x1F,
AV_COMPONENT = 0x0F,
AV_VGA = 0x5B,
AV_COMPOSITETV = 0x43,
AV_COMPOSITEHD = 0x4F,
AV_HDMIAUDIO = 0x13
} AV_PACK;
#define REQUEST_TEMP 0x07 //SMC message to request temperature
#define REQUEST_TILT 0x17 //SMC message to request tilt
#define REQUEST_SMC_VERSION 0x12 //SMC message to request the smc version
#define REQUEST_TRAY_STATE 0x0A //SMC message to request the tray state
#define REQUEST_AV_PACK 0x0F //SMC message to request the AV-Pack type
//Thanks to tmbinc for smc.c
//Call to SMC message function in xboxkrnl.lib
extern "C" void __stdcall HalSendSMCMessage(void* input, void* output);
class smc
{
public:
void SetPowerLED(unsigned char command, bool animate);
void SetLEDS(LEDState sTopLeft, LEDState sTopRight, LEDState sBottomLeft, LEDState sBottomRight);
void SetFanSpeed(int fan, int speed);
void Shutdown();
float GetTemperature(TEMP_INDEX sTempIndex, bool Celsius);
char* GetSMCVersion();
TILT_STATE GetTiltState();
unsigned char GetAVPack();
const char* GetAVPackName(); // Thanks goto Aaron for this
TRAY_STATE GetTrayState();
void OpenTray();
void CloseTray();
private:
//This is used to store our SMC data
unsigned char m_SMCMessage[16];
unsigned char m_SMCReturn[16];
void PrepareBuffers();
};
#endif
Froggy__007 escribió:Para aplicaciones de interfaz grafica usa el XUITutorial y para aplicaciones en modo consola usa la plantilla Hello World http://dev360.wikia.com/wiki/Hello_World.
De todas formas aqui te dejo una app en modo consola que muestra las temperaturas es muy basico pero pa que lo entiendas vale.
Main.cpp#include "stdafx.h"
#include <xtl.h>
#include <d3d9.h>
#include <xam.h>
#include <xui.h>
#include <xuiapp.h>
#include <iostream>
#include <fstream>
#include <string>
#include "AtgConsole.h"//simple text output to screen
#include "AtgFont.h"
#include "AtgInput.h"//get input from controler
#include "smc.h"
using std::string;
using std::ofstream;//needed for the debug log
//--------------------------------------------------------
//GLOBALS
ATG::Console g_console;
void debugLog(char* output)
{
ofstream writeLog;
writeLog.open("game:\\debug.log",ofstream::app);
if (writeLog.is_open())
{
writeLog.write(output,strlen(output));
writeLog.write("\n",1);
}
writeLog.close();
}
string sprintfaA(const char *format, ...)
{
char temp[16384];
va_list ap;
va_start (ap, format);
vsprintf_s (temp,16384, format, ap);
va_end (ap);
return temp;
}
void Temps(VOID)
{
smc _smc;
string temps = sprintfaA("SYSTEM TEMPERATURE:\n\nCPU: %0.1f C\n", _smc.GetTemperature(CPU,true));
temps = temps + sprintfaA("GPU: %0.1f C\n",_smc.GetTemperature(GPU,true));
temps = temps + sprintfaA("MEM: %0.1f C\n",_smc.GetTemperature(MEM,true));
temps = temps + sprintfaA("BRD: %0.1f C\n",_smc.GetTemperature(BRD,true));
g_console.Clear();
g_console.Format (temps.c_str());
g_console.Format( "PRESS A TO EXIT\n" );
}
void init(VOID)
{
HRESULT hr = g_console.Create( "game:\\Media\\Fonts\\Arial_12.xpr", 0xff000000, 0xffffffff ); //create console
if (FAILED (hr))
{
debugLog("creating console");// debuglog function
}
g_console.Format( "*** INITIALIZING ***\n" );//simple text output to screen
}
VOID __cdecl main()
{
bool done =FALSE;
init();
while(!done)
{
ATG::GAMEPAD* pGamepad = ATG::Input::GetMergedInput();// get input from controlers
Temps();
Sleep(1000);
if( pGamepad->wPressedButtons & XINPUT_GAMEPAD_A)
{
done=true;
}
}
}
smc.cpp#include "smc.h"
#include "stdafx.h"
void smc::PrepareBuffers()
{
//Zero our mem
ZeroMemory( m_SMCMessage, sizeof(m_SMCMessage) );
ZeroMemory( m_SMCReturn, sizeof(m_SMCReturn) );
}
//Usage: command is one of the POWER_LED constants from smc_constant.h
// animate is true for ring LED startup light sequence
void smc::SetPowerLED(unsigned char command, bool animate)
{
PrepareBuffers();
m_SMCMessage[0] = 0x8c;
m_SMCMessage[1] = command;
m_SMCMessage[2] = (animate ? 0x01 : 0x00);
HalSendSMCMessage(m_SMCMessage, NULL);
}
//Usage: color is one of LED constants from smc_constant.h
void smc::SetLEDS(LEDState sTopLeft, LEDState sTopRight, LEDState sBottomLeft, LEDState sBottomRight)
{
PrepareBuffers();
m_SMCMessage[0] = 0x99;
m_SMCMessage[1] = 0x01;
m_SMCMessage[2] = ((unsigned char)(sTopLeft>>3) | (unsigned char)(sTopRight>>2) | (unsigned char)(sBottomLeft>>1) | (unsigned char)(sBottomRight));
HalSendSMCMessage(m_SMCMessage, NULL);
}
float smc::GetTemperature(TEMP_INDEX sTempIndex, bool Celsius)
{
PrepareBuffers();
m_SMCMessage[0] = REQUEST_TEMP;
HalSendSMCMessage(m_SMCMessage, m_SMCReturn);
float temp = (float)((m_SMCReturn[sTempIndex * 2 + 1] | (m_SMCReturn[sTempIndex * 2 +2] <<8)) / 256.0);
if(!Celsius) temp = (9.0f/5.0f) * temp + 32.0f;
return temp;
}
char* smc::GetSMCVersion()
{
//dSMCMessage(m_SMCMessage, m_SMCReturn);
static char version[5] = "";
sprintf_s(version, sizeof(version), "%d.%d", m_SMCReturn[2], m_SMCReturn[3]);
return version;
}
void smc::Shutdown()
{
unsigned char tempin[0x10];
memset(tempin,0,0x10);
tempin[0] = 0x82;
tempin[1] = 0x11;
tempin[2] = 0x01;
HalSendSMCMessage(tempin, m_SMCReturn);
}
TILT_STATE smc::GetTiltState()
{
PrepareBuffers();
m_SMCMessage[0] = REQUEST_TILT;
HalSendSMCMessage(m_SMCMessage, m_SMCReturn);
TILT_STATE sTiltState = ((m_SMCReturn[1] & 1) ? VERTICAL : HORIZONTAL);
return sTiltState;
}
unsigned char smc::GetAVPack()
{
PrepareBuffers();
m_SMCMessage[0] = REQUEST_AV_PACK;
HalSendSMCMessage(m_SMCMessage, m_SMCReturn);
return m_SMCReturn[1];
}
TRAY_STATE smc::GetTrayState()
{
PrepareBuffers();
m_SMCMessage[0] = REQUEST_TRAY_STATE;
HalSendSMCMessage(m_SMCMessage, m_SMCReturn);
return (TRAY_STATE)((m_SMCReturn[1] & 0xF) % 5);
}
void smc::OpenTray()
{
PrepareBuffers();
m_SMCMessage[0] = 0x8b;
m_SMCMessage[1] = 0x60;
HalSendSMCMessage(m_SMCMessage, NULL);
// DebugMsg("Open tray");
}
void smc::CloseTray()
{
PrepareBuffers();
m_SMCMessage[0] = 0x8b;
m_SMCMessage[1] = 0x62;
HalSendSMCMessage(m_SMCMessage, NULL);
// DebugMsg("Close tray");
}
void smc::SetFanSpeed(int fan, int speed)
{
PrepareBuffers();
m_SMCMessage[0] = fan ? 0x94 : 0x89;
// Fail safe to keep a speed set above 100 in the xml from
// stopping the fans.
if (speed > 100)
speed = 100;
if (speed < 45)
{
m_SMCMessage[1] = 0x7F;
}
else
{
m_SMCMessage[1] = (unsigned char)speed | 0x80;
}
HalSendSMCMessage(m_SMCMessage, NULL);
}
// Thanks goto Aaron for this
// Setting Names to AV Packs
const char* smc::GetAVPackName()
{
switch (GetAVPack()) {
case AV_HDMI: return "HDMI";
case AV_COMPONENT: return "Component";
case AV_VGA: return "VGA";
case AV_COMPOSITETV: return "Composite TV";
case AV_COMPOSITEHD: return "Composite HDTV";
case AV_HDMIAUDIO: return "HDMIw/Opt";
default: return NULL;
}
}
smc.h//Thanks to www.free60.org/SMC for helping me get front LEDs right
#pragma once
#ifndef _SMC__H
#define _SMC_H
#include <string.h>
//sorry for the extreme amount of constants trying to make functions
//easier to use
//Power LED
#define POWER_LED_BLINK 0x10
#define POWER_LED_DEFAULT 0x02
#define POWER_LED_ON 0x01
#define POWER_LED_OFF 0X03
//Quadrant LEDs
//NOTE: LED constants are determined with console laying down
// with LED color bits being, starting from tope left 1, 2, 4, 8
//Thanks to unknown v2 for the following
typedef enum _LEDState
{
OFF = 0x00,
RED = 0x08,
GREEN = 0x80,
ORANGE = 0x88
}LEDState;
typedef enum _TEMP_INDEX
{
CPU,
GPU,
MEM,
BRD
}TEMP_INDEX;
typedef enum _TILT_STATE
{
VERTICAL,
HORIZONTAL
}TILT_STATE;
/* MATTIE: WRONG INFO?
typedef enum _TRAY_STATE
{
OPEN,
OPENING,
CLOSED,
CLOSING,
PUSHED
}TRAY_STATE;
*/
typedef enum _TRAY_STATE
{
OPEN,
UNKNOWN,
CLOSED,
OPENING,
CLOSING
}TRAY_STATE;
// Thanks goto Aaron for this
// Setting Names to AV Packs
typedef enum _AV_PACK {
AV_HDMI = 0x1F,
AV_COMPONENT = 0x0F,
AV_VGA = 0x5B,
AV_COMPOSITETV = 0x43,
AV_COMPOSITEHD = 0x4F,
AV_HDMIAUDIO = 0x13
} AV_PACK;
#define REQUEST_TEMP 0x07 //SMC message to request temperature
#define REQUEST_TILT 0x17 //SMC message to request tilt
#define REQUEST_SMC_VERSION 0x12 //SMC message to request the smc version
#define REQUEST_TRAY_STATE 0x0A //SMC message to request the tray state
#define REQUEST_AV_PACK 0x0F //SMC message to request the AV-Pack type
//Thanks to tmbinc for smc.c
//Call to SMC message function in xboxkrnl.lib
extern "C" void __stdcall HalSendSMCMessage(void* input, void* output);
class smc
{
public:
void SetPowerLED(unsigned char command, bool animate);
void SetLEDS(LEDState sTopLeft, LEDState sTopRight, LEDState sBottomLeft, LEDState sBottomRight);
void SetFanSpeed(int fan, int speed);
void Shutdown();
float GetTemperature(TEMP_INDEX sTempIndex, bool Celsius);
char* GetSMCVersion();
TILT_STATE GetTiltState();
unsigned char GetAVPack();
const char* GetAVPackName(); // Thanks goto Aaron for this
TRAY_STATE GetTrayState();
void OpenTray();
void CloseTray();
private:
//This is used to store our SMC data
unsigned char m_SMCMessage[16];
unsigned char m_SMCReturn[16];
void PrepareBuffers();
};
#endif