2007-02-27

A mover esas Notebooks!

Desde que Jony me dijo que las ThinkPad nuevas traen un sensor para poder medir la inclinación de la notebook, estoy con ganas de hacer alguna aplicación tonta que lo use.

Resulta que ya hubo gente a la que se le ocurrió, y si buscan en YouTube van a encontrar videos de gente manejando el TuxRace (famoso juego de carrera de pingüino en 3D de Linux) con el movimiento de la ThinkPad.

Habiendo visto esto, me emocioné bastante ya que confirmaba que lo que yo quería se podía hacer perfectamente.

Buscando por internet encontré la pagina de un flaco que hizo un programita de ejemplo en Python que usa el driver de este acelerómetro y obtiene los valores. Buscando un poco mas también pude encontrar casi el mismo ejemplo en C++ y C# (voy a dejar el ejemplo en C++)

El único problema, fue que al ejecutar el DeviceIoControl me tira un error y no puedo leer los valores. Si alguien llega a tener una idea de que puede ser lo que pasa, por favor digame. Igualmente ya le pregunté al flaco que lo hizo en Python, a ver si me puede dar una mano.

El ejemplo en C++ (compilado en VC++ 2005):

#include
"stdafx.h"

#include
<iostream>


 

using
namespace std;


 

//.........jun hirabayashi............................

// this C++ class was ported and modified from C# class

// http://www.ussg.iu.edu/hypermail/linux/kernel/0412.1/0974.html


 

#include
"windows.h"

#include
<iostream>


 

struct ShockData

{


int status;


short
int x0;


short
int y0;


short
int x1;


short
int y1;


short
int x2;


short
int y2;


short
int x3;


short
int y3;


short
int x4;


short
int y4;


short
int x5;


short
int y5;


short
int x6;


short
int y6;


short
int x7;


short
int y7;


short
int x8;


short
int y8;


short
int x9;


short
int y9;


short
int x10;


short
int y10;


short
int x11;


short
int y11;


short
int x12;


short
int y12;


short
int x13;


short
int y13;


short
int unknown0;


short
int unknown1;

};


 

class Accelerometer{


private:

HANDLE hFile;

     ShockData AccelerometerData;


int OffsetX;


int OffsetY;


protected:


public:

Accelerometer();

~Accelerometer();


bool GetAccelerometerData(void);


int Status(void);


int X;


int Y;

};


 

Accelerometer::Accelerometer()

{


try

{

hFile = CreateFile(L"\\\\.\\ShockMgr", GENERIC_READ,

FILE_SHARE_READ | FILE_SHARE_WRITE,

             NULL, OPEN_EXISTING, 0, NULL);


if(hFile == INVALID_HANDLE_VALUE)


throw
"Failed to open ShockMgr.";

}


catch(...){}

OffsetX = 0;

OffsetY = 0;


if ( GetAccelerometerData() )

{

OffsetX = -X;

OffsetY = -Y;

GetAccelerometerData();

}

}


 

Accelerometer::~Accelerometer()

{

CloseHandle(hFile);

}


 

bool Accelerometer::GetAccelerometerData(void)

{


unsigned
long ulRead = 0;


try

{


if( !DeviceIoControl( hFile, 0x733fc, NULL, 0, // via IOCTL(0x733fc)

(void *)&AccelerometerData, 0x24, &ulRead, NULL))


throw
"Failed to DeviceIoControl";

X = AccelerometerData.x0 + OffsetX;

Y = AccelerometerData.y0 + OffsetY;


return
true;

}


catch(...)

{


return
false;

}


return
false;

}


 

int Accelerometer::Status(void)

{


return AccelerometerData.status;

}


 


 

int _tmain(int argc, _TCHAR* argv[])

{

    Accelerometer *pAccel = new Accelerometer();

    pAccel->GetAccelerometerData();


 

    cout << "X: " << pAccel->X << " Y: " << pAccel->Y << endl;


 

    system("pause");

}

Si llego a saber cómo solucionarlo, prometo postearlo.

Zaiden

2007-02-26

El regreso de los muertos vivos (o por que el Firewall de Vista se reactiva solo)

Pese a los reiterados intentos de desactivar el Firewall que Windows Vista instala de forma predeterminada, el mismo vuelve a activarse de forma sospechosamente aleatoria luego de un tiempo.

Si realmente no quieren usar el Firewall de Windows Vista, primero que todo, desactívenlo de la forma tradicional y luego de hacer esto hagan click derecho sobre Computer => Manage, van a la parte de servicios, doble click en Windows Firewall y cambien el tipo de inicio a Disabled.

Sé que es algo bastante tonto, pero ya vi mucha gente a la que se le reactiva solo el Firewall y ni siquiera se da cuenta.

¡Hasta la próxima!

Zaiden

2007-02-24

Cortito: ¡Pude volver a postear desde Word 2007!

Desde hacer un tiempo que el posteo desde Word 2007 había dejado de andar para Blogger, pero por suerte ya está operativo nuevamente :D

No sé si habrá sido una actualización de Office, o de Blogger ¡Pero la cosa es que anda!

Zaiden

New Toy! Lenovo ThinkPad T60p

Como sabrán por mi último post, la querida notebook HP COMPAQ V2069 cumplió su ciclo el día que decidió inmolarse cerca de mi persona.

Estuve cerca de un mes sin laptop, lo que me llevó a volver a usar la desktop para algo más que rockola o MuleComputer. En esa máquina tengo instalado un Ubuntu Linux 6.10 y aprovechando que tengo instalada una veterana pero todavía potente placa 3D (una ATI Radeon 9600XT) aproveché para ver a la nueva niña bonita del mundo Linux: Beryl, XGL y demás yerbas.

¡Simplemente agregué los repositorios de Beryl, 2 clicks en el Synaptic y listo! Me tomé mí tiempo y terminé dejando al Ubuntu como un bello Mac OSX lleno de efectos 3D, jeje :D.

Varias semanas pasaron, hasta que finalmente el chiche nuevo llego: Una Lenovo ThinkPad T60p con las siguientes specs:

  • Procesador Intel Centrino Duo (Core 2 Duo) T7200 (2Ghz).
  • 1GB RAM DDR2.
  • ATI FireGL V5250.
  • HD 100GB, 7200 RPM.
  • Pantalla wide de 15"4 a una increíble resolución de… ¡1680 x 1050! (¡Se ve bárbaro desde cualquier lado!).
  • Grabadora de CD/DVD.
  • Batería extendida de 9 celdas.
  • Y demás chiches (Lector de huellas digitales, Bluetooth, IR, Red Wireless, etc…).

Apenas llego, hice los DVDs de recovery (por cualquier cosa) y… ¡Zas! Instalé Windows Vista. Debo admitir que fui un poco miedoso y me mantuve en la versión para x86 (32 bits). Sin embargo, RodoF fue más valiente y se mando directamente a la versión x86-64, ya que este procesador implementa la arquitectura desarrollada originalmente por AMD, pero que Intel llama Intel64 (en contraparte de AMD64).

Al principio pensé que teniendo 1GB de RAM iba a notar demasiado acceso al disco por swapping, pero para mi sorpresa la máquina anda con mucha soltura, incluso usando muchas aplicaciones a la vez (el único problema que noté hasta ahora es que tarda bastante en prender y en apagar, pero estoy sospechando que el culpable de eso es alguno de los programas de ThinkPad. Tendré que investigar al respecto).

Bueno, esto es todo por ahora. Hasta el próximo post!

Zaiden

PD1: En 2 semanas quemé una notebook, una desktop, un disco e hice que otro tirara errores de S.M.A.R.T. ¡Juro que fue sin querer!

PD2: Le voy a decir a Jony que se postee algo, porque hace mucho que no escribe nada.

Dato Loco: El cerebro no procesa negativos. Ej.: NO pienses en un elefante rosa… ¡Viste!