tmytのらくがき

個人の日記レベルです

WifiInfo for HTC

Googleで情報の海をさまよっていたらいわゆる普通のデバイスでのWiFiのコントロールの仕方を見つけたのでなんとなーく対応させてみた。
for HTC とか謳っているけど、正式に対応しているのはHermes と Kaiserのみ。国内で販売されてるしね。
AdvantageとP3600は使えないかも。HT1100も同じく。

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Power\State

以下のGUIDから始まるそれっぽーい文字列を教えてくれれば対応できるかもしれません。

for X01T に同じく、問題あれば連絡ください。

Download: WifiInfo_HTC.1.24.2.CAB

以下追加部分のコード

#include <Pm.h>

static VOID SetWLan()
{
	// 電源管理用デバイス名
	static wchar_t pvDeviceHermes[]  = L"{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\TIACXWLN1";
	static wchar_t pvDeviceKaiser[]  = L"{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\TNETW12511";

//	Wizerdをサポートするときはここを有効にしてね
//	static wchar_t pvDeviceWizerd[] = L"{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\TNETWLN1";
	wchar_t* pvDeviceList[] = {pvDeviceHermes, pvDeviceKaiser};
	wchar_t* pvDevice = NULL;

	// WLANの電源状態、どれが使える?
	CEDEVICE_POWER_STATE state = PwrDeviceUnspecified;
	for (int i = 2; i != 0; --i) {
		pvDevice = pvDeviceList[i];
		if (GetDevicePower((PVOID)pvDevice, POWER_NAME, &state) == ERROR_SUCCESS) {
			break;
		}
		pvDevice = NULL;
	}
	if (pvDevice == NULL) {
		// 使えるのが見つからなかった
		g_bWlanPowerOn = FALSE;
		return;
	}

	// D0 でON
	// D4 でOFF
	// らしいです。
	if (GetWifiState() & SN_WIFISTATEPOWERON_BITMASK) {
		DevicePowerNotify((PVOID)pvDevice, D4, POWER_NAME);
		SetDevicePower((PVOID)pvDevice, POWER_NAME, D4);
		g_bWlanPowerOn = FALSE;
	} else {
		DevicePowerNotify((PVOID)pvDevice, D0, POWER_NAME);
		SetDevicePower((PVOID)pvDevice, POWER_NAME, D0);		
		g_bWlanPowerOn = TRUE;
	}
}