Esempio n. 1
0
File: tray.c Progetto: lp0/temperhum
void tray_add(HWND hWnd, struct th_data *data) {
	NOTIFYICONDATA *niData;
	BOOL ret;
	DWORD err;

	odprintf("tray[add]");

	if (!data->tray_ok) {
		niData = &data->niData;
		niData->cbSize = sizeof(NOTIFYICONDATA);
		niData->hWnd = hWnd;
		niData->uID = TRAY_ID;
		niData->uFlags = NIF_MESSAGE|NIF_TIP;
		niData->uCallbackMessage = WM_APP_TRAY;
		niData->hIcon = NULL;
		niData->szTip[0] = 0;
		niData->uVersion = NOTIFYICON_VERSION;

		SetLastError(0);
		ret = Shell_NotifyIcon(NIM_ADD, niData);
		err = GetLastError();
		odprintf("Shell_NotifyIcon[ADD]: %s (%ld)", ret == TRUE ? "TRUE" : "FALSE", err);
		if (ret == TRUE)
			data->tray_ok = 1;

		SetLastError(0);
		ret = Shell_NotifyIcon(NIM_SETVERSION, niData);
		err = GetLastError();
		odprintf("Shell_NotifyIcon[SETVERSION]: %s (%ld)", ret == TRUE ? "TRUE" : "FALSE", err);
		if (ret != TRUE)
			niData->uVersion = 0;
	}
}
Esempio n. 2
0
File: keyboard.c Progetto: lp0/slmpc
void kbd_destroy(void) {
	BOOL ret;
	DWORD err;

	odprintf("kbd[destroy]");

	SetLastError(0);
	ret = UnhookWindowsHookEx(hHook);
	err = GetLastError();
	odprintf("UnhookWindowsHookEx: %s (%d)", ret == TRUE ? "TRUE" : "FALSE", err);
}
Esempio n. 3
0
File: keyboard.c Progetto: lp0/slmpc
enum sl_status kbd_get(void) {
	SHORT ret;
	DWORD err;

	odprintf("kbd[get]");

	SetLastError(0);
	ret = GetKeyState(VK_SCROLL);
	err = GetLastError();
	odprintf("GetKeyState: %d (%d)", ret, err);
	if (err != 0)
		return SL_UNKNOWN;

	return (ret & 1) == 0 ? SL_OFF : SL_ON;
}
Esempio n. 4
0
File: tray.c Progetto: lp0/temperhum
BOOL tray_activity(HWND hWnd, struct th_data *data, WPARAM wParam, LPARAM lParam) {
	(void)hWnd;

	odprintf("tray[activity]: wParam=%ld lParam=%ld", wParam, lParam);

	if (wParam != TRAY_ID)
		return FALSE;

	switch (data->niData.uVersion) {
		case NOTIFYICON_VERSION:
			switch (lParam) {
			case WM_CONTEXTMENU:
				temperhum_shutdown(data, EXIT_SUCCESS);
				return TRUE;

			default:
				return FALSE;
			}

		case 0:
			switch (lParam) {
			case WM_RBUTTONUP:
				temperhum_shutdown(data, EXIT_SUCCESS);
				return TRUE;

			default:
				return FALSE;
			}

	default:
		return FALSE;
	}
}
Esempio n. 5
0
File: tray.c Progetto: lp0/temperhum
void tray_remove(HWND hWnd, struct th_data *data) {
	NOTIFYICONDATA *niData = &data->niData;
	BOOL ret;
	DWORD err;
	(void)hWnd;

	odprintf("tray[remove]");

	if (data->tray_ok) {
		SetLastError(0);
		ret = Shell_NotifyIcon(NIM_DELETE, niData);
		err = GetLastError();
		odprintf("Shell_NotifyIcon[DELETE]: %s (%ld)", ret == TRUE ? "TRUE" : "FALSE", err);
		if (ret == TRUE)
			data->tray_ok = 0;
	}
}
Esempio n. 6
0
void comms_disconnect(struct th_data *data) {
	INT ret;
	DWORD err;

	odprintf("comms[disconnect]");

	data->status.conn = NOT_CONNECTED;

	if (data->s != INVALID_SOCKET) {
		SetLastError(0);
		ret = closesocket(data->s);
		err = GetLastError();
		odprintf("closesocket: %d (%ld)", ret, err);

		data->s = INVALID_SOCKET;
	}
}
Esempio n. 7
0
File: keyboard.c Progetto: lp0/slmpc
int kbd_init(HWND hWnd_, HINSTANCE hInstance) {
	HHOOK ret;
	DWORD err;

	odprintf("kbd[init]");

	SetLastError(0);
	ret = SetWindowsHookEx(WH_KEYBOARD_LL, kbd_hook, hInstance, 0);
	err = GetLastError();
	odprintf("SetWindowsHookEx: %p (%d)", ret, err);
	if (ret == NULL)
		return 1;

	hWnd = hWnd_;
	hHook = ret;

	return 0;
}
Esempio n. 8
0
File: tray.c Progetto: lp0/temperhum
int tray_init(struct th_data *data) {
	UINT ret;
	DWORD err;

	odprintf("tray[init]");

	data->status.conn = NOT_CONNECTED;
	data->tray_ok = 0;

	SetLastError(0);
	ret = RegisterWindowMessage(TEXT("TaskbarCreated"));
	err = GetLastError();
	odprintf("RegisterMessageWindow: %u (%ld)", ret, err);
	if (ret == 0) {
		mbprintf(TITLE, MB_OK|MB_ICONERROR, "Unable to register TaskbarCreated message (%ld)", err);
		return 1;
	} else {
		data->taskbarCreated = ret;
		return 0;
	}
}
Esempio n. 9
0
void comms_destroy(struct th_data *data) {
	odprintf("comms[destroy]");

#if HAVE_GETADDRINFO
	if (data->addrs_res != NULL) {
		freeaddrinfo(data->addrs_res);
		data->addrs_res = NULL;
	}
#endif

	comms_disconnect(data);
}
Esempio n. 10
0
void RacketPhysics::testCollisionWithBall()
{
	if (timeSinceLastHit < 0.5f)
		return;
	Ogre::Vector3 racketNormal = Ogre::Vector3::UNIT_Y;
	racketNormal = ori * racketNormal;
	Ogre::Vector3 ballPos = ball->getPosition();
	Ogre::Plane racketPlane(racketNormal, pos);
	float distanceFromPlane = racketPlane.getDistance(ballPos);
	if (distanceFromPlane < 0.0f)
	{
		racketNormal = -racketNormal;
		distanceFromPlane = -distanceFromPlane;
	}
	//if (distanceFromPlane < g_RacketThickness + g_BallRadius)
	if (distanceFromPlane < 0.03f)
	{
		Ogre::Vector3 distanceVector = racketNormal * distanceFromPlane;
		Ogre::Vector3 nearestPointOnPlane = ballPos - distanceVector;
		Ogre::Vector3 distanceOnPlane = nearestPointOnPlane - pos;
		//odprintf("dist before: %f, %f, %f", distanceOnPlane.x, distanceOnPlane.y, distanceOnPlane.z);
		distanceOnPlane.z *= 0.5f;
		distanceOnPlane.y *= 0.5f;
		//odprintf("dist after: %f, %f, %f", distanceOnPlane.x, distanceOnPlane.y, distanceOnPlane.z);
		float projectedDistance = distanceOnPlane.length();
		//odprintf("dist sum: %f", projectedDistance);
		//if (projectedDistance < g_RacketRadiusB)
		if (projectedDistance < 0.3f)
		{
			odprintf("HIT, time sinc last hit: %f", timeSinceLastHit);
			timeSinceLastHit = 0;
			// Collision
			ballPos += distanceVector * (0.03f/abs(distanceFromPlane));
			ball->setPosition(ballPos);
			Ogre::Vector3 ballSpeed = ball->getSpeed();
			ballSpeed = ballSpeed.reflect(racketNormal);
			// Perpendicular element, used for spin
			Ogre::Vector3 speedPerp = racketPlane.projectVector(speed);
			ball->setSpin(speedPerp.crossProduct(racketNormal));
			// Parallel element, used for speed
			Ogre::Vector3 speedPara = speed - speedPerp;
			ballSpeed += speedPara * g_HitStrength;
			ball->setSpeed(ballSpeed);
			gameLogic->onTouchRacket(playerId);
		}
		else
		{
			//odprintf("no hit, time sinc last hit: %f", timeSinceLastHit);
		}
	}

}
Esempio n. 11
0
File: keyboard.c Progetto: lp0/slmpc
enum sl_status kbd_set(enum sl_status status) {
	UINT ret;
	DWORD err;
	INPUT keys[2];
	enum sl_status current;

	odprintf("kbd[set]: status=%d", status);

	keys[0].type = INPUT_KEYBOARD;
	keys[0].ki.wVk = VK_SCROLL;
	keys[0].ki.wScan = 0;
	keys[0].ki.dwFlags = 0;

	keys[1].type = INPUT_KEYBOARD;
	keys[1].ki.wVk = VK_SCROLL;
	keys[1].ki.wScan = 0;
	keys[1].ki.dwFlags = KEYEVENTF_KEYUP;

	current = kbd_get();
	switch (current) {
	case SL_ON:
	case SL_OFF:
		if (current == status)
			return status;

		SetLastError(0);
		ret = SendInput(2, (LPINPUT)&keys, sizeof(INPUT));
		err = GetLastError();
		odprintf("SendInput: %d (%d)", ret, err);
		if (ret == 0 || err == 0)
			current = status;
		break;

	default:
		break;
	}

	return current;
}
Esempio n. 12
0
File: tray.c Progetto: lp0/temperhum
void tray_reset(HWND hWnd, struct th_data *data) {
	odprintf("tray[reset]");

	/* Try this anyway... */
	tray_remove(hWnd, data);

	/* Assume it has been removed */
	data->tray_ok = 0;

	/* Add it again */
	tray_add(hWnd, data);
	tray_update(hWnd, data);
}
Esempio n. 13
0
File: keyboard.c Progetto: lp0/slmpc
LRESULT CALLBACK kbd_hook(int nCode, WPARAM wParam, LPARAM lParam) {
	KBDLLHOOKSTRUCT *event;

	event = (PKBDLLHOOKSTRUCT)lParam;

	if (nCode < 0 || event == NULL)
		return CallNextHookEx(hHook, nCode, wParam, lParam);
	
	if (event->vkCode == VK_SCROLL && (event->flags & LLKHF_UP) == 0) {
		BOOL ret;
		DWORD err;

		SetLastError(0);
		ret = PostMessage(hWnd, WM_APP_KBD, 0, KBD_MSG_CHECK);
		err = GetLastError();
		odprintf("PostMessage: %s (%ld)", ret == TRUE ? "TRUE" : "FALSE", err);
	}

	return CallNextHookEx(hHook, nCode, wParam, lParam);
}
SUSI_API bool XcareProcessorInformation(int processor_Number,psystem_processor_type_4 t4)
{
	bool result = true;
	int len=MAX_DATA;
	unsigned char buf[MAX_DATA];
	unsigned char* p_buf = buf;
	memset(buf,0,MAX_DATA);
	bool found_a_processor=false;
	odprintf("SYSTEM_PROCESSOR_TYPE_4 and Number = %d\n",processor_Number);

	len=MAX_DATA;

	if(processor_Number == 1)
	{
			if (return_next_table_of_type(processor,&buf,&len,true))
			{
				found_a_processor=true;
			}
	}
	else
	{
		for(int i=0;i< processor_Number;i++)
		{
			if (return_next_table_of_type(processor,&buf,&len,false))
			{
				found_a_processor=true;
			}
		}
	}
		
	if (found_a_processor)
	{
			//load up this table		
			get_string_resource_for_id(buf[0x04],p_buf,t4->socket_designation);
			t4->processor_type = buf[0x05];
			t4->processor_family = buf[0x06];
			get_string_resource_for_id(buf[0x07],p_buf,t4->manufacturer);
			memcpy(&t4->raw_id,p_buf+0x08,8);
			get_string_resource_for_id(buf[0x10],p_buf,t4->version);
			t4->voltage = buf[0x11];
			memcpy(&(t4->external_clock),p_buf+0x12,2);
			memcpy(&(t4->max_speed),p_buf+0x14,2);
			memcpy(&(t4->cuurent_speed),p_buf+0x16,2);
			t4->status = buf[0x18];
			t4->upgrade = buf[0x19];
			memcpy(&(t4->l1_cache_handle),p_buf+0x1a,2);
			memcpy(&(t4->l2_cache_handle),p_buf+0x1c,2);
			memcpy(&(t4->l3_cache_handle),p_buf+0x1e,2);
			get_string_resource_for_id(buf[0x20],p_buf,t4->serial_number);
			get_string_resource_for_id(buf[0x21],p_buf,t4->asset_tag);
			get_string_resource_for_id(buf[0x22],p_buf,t4->part_number);
			t4->core_count = buf[0x23];
			t4->thread_count = buf[0x24];
			memcpy(&(t4->processor_characteristics),p_buf+0x26,2);
			memcpy(&(t4->processor_family2),p_buf+0x28,2);
			//now display this table
			odprintf(" socket designation:%s\n",t4->socket_designation);
			odprintf(" processor type:%x\n",t4->processor_type);
			odprintf(" processor family:%x\n",t4->processor_family);
			odprintf(" processor manufacturer:%s\n",t4->manufacturer);
			odprintf(" processor raw id:0x%x\n",t4->raw_id);
			odprintf(" processor Version:%s\n",t4->version);
			odprintf(" voltage:%x volts\n",t4->voltage);
			odprintf(" external clock:%d mhz\n",t4->external_clock);
			odprintf(" Max speed:%x\n",t4->max_speed);
			odprintf(" current speed:%d mhz\n",t4->cuurent_speed);
			odprintf(" status:%x\n",t4->status);
			odprintf(" upgrade:%x\n",t4->upgrade);
			odprintf(" l1 cache handle:0x%02x\n",t4->l1_cache_handle);
			odprintf(" l2 cache handle:0x%02x\n",t4->l2_cache_handle);
			odprintf(" l3 cache handle:0x%02x\n",t4->l3_cache_handle);
			odprintf(" serial number:%s\n",t4->serial_number);
			odprintf(" asset tag:%s\n",t4->asset_tag);
			odprintf(" part number:%s\n",t4->part_number);
			odprintf(" core count:%d\n",t4->core_count);
			odprintf(" core enabled:%d\n",t4->core_enabled);			
			odprintf(" thread count:%d\n",t4->thread_count);
			odprintf(" Processor_characteristics:%d\n",t4->processor_characteristics );
			return true;
	}
return false;
}
Esempio n. 15
0
int comms_init(struct th_data *data) {
	INT ret;
	DWORD err;
#if HAVE_GETADDRINFO

	odprintf("comms[init]: node=%s service=%s", data->node, data->service);

	data->hbuf[0] = 0;
	data->sbuf[0] = 0;
	data->addrs_res = NULL;
	data->addrs_cur = NULL;

	data->hints.ai_flags = 0;
	data->hints.ai_family = AF_UNSPEC;
	data->hints.ai_socktype = SOCK_STREAM;
	data->hints.ai_protocol = IPPROTO_TCP;
	data->hints.ai_addrlen = 0;
	data->hints.ai_addr = NULL;
	data->hints.ai_canonname = NULL;
	data->hints.ai_next = NULL;

	SetLastError(0);
	ret = getaddrinfo(data->node, data->service, &data->hints, &data->addrs_res);
	err = GetLastError();
	odprintf("getaddrinfo: %d (%d)", ret, err);
	if (ret != 0) {
		mbprintf(TITLE, MB_OK|MB_ICONERROR, "Unable to resolve node \"%s\" service \"%s\" (%d)", data->node, data->service, ret);
		return 1;
	}

	if (data->addrs_res == NULL) {
		odprintf("no results");
		mbprintf(TITLE, MB_OK|MB_ICONERROR, "No results resolving node \"%s\" service \"%s\"", data->node, data->service);
		return 1;
	}

	data->addrs_cur = data->addrs_res;
#else
	int sa4_len = sizeof(data->sa4);
	int sa6_len = sizeof(data->sa6);

	odprintf("comms[init]: node=%s service=%s", data->node, data->service);

	data->family = AF_UNSPEC;
	data->sa = NULL;
	data->sa_len = 0;

	SetLastError(0);
	ret = WSAStringToAddress(data->node, AF_INET, NULL, (LPSOCKADDR)&data->sa4, &sa4_len);
	err = GetLastError();
	odprintf("WSAStringToAddress[IPv4]: %d (%ld)", ret, err);
	if (ret == 0) {
		data->family = AF_INET;
		data->sa4.sin_family = AF_INET;
		data->sa4.sin_port = htons(strtoul(data->service, NULL, 10));

		data->sa = (struct sockaddr*)&data->sa4;
		data->sa_len = sa4_len;
	}

	SetLastError(0);
	ret = WSAStringToAddress(data->node, AF_INET6, NULL, (LPSOCKADDR)&data->sa6, &sa6_len);
	err = GetLastError();
	odprintf("WSAStringToAddress[IPv6]: %d (%ld)", ret, err);
	if (ret == 0) {
		data->family = AF_INET6;
		data->sa6.sin6_family = AF_INET6;
		data->sa6.sin6_port = htons(strtoul(data->service, NULL, 10));

		data->sa = (struct sockaddr*)&data->sa6;
		data->sa_len = sa6_len;
	}

	odprintf("family=%d", data->family);
	if (data->family == AF_UNSPEC) {
		mbprintf(TITLE, MB_OK|MB_ICONERROR, "Unable to connect: Invalid IP \"%s\"", data->node);
		return 1;
	}
#endif

	data->s = INVALID_SOCKET;
	return 0;
}
Esempio n. 16
0
int comms_connect(HWND hWnd, struct th_data *data) {
	struct tray_status *status = &data->status;
	struct tcp_keepalive ka_get;
	struct tcp_keepalive ka_set = {
		.onoff = 1,
		.keepalivetime = 5000, /* 5 seconds */
		.keepaliveinterval = 5000 /* 5 seconds */
	};
	int timeout = 5000; /* 5 seconds */
	INT ret;
	DWORD retd;
	DWORD err;

	odprintf("comms[connect]");

	if (!data->running)
		return 0;

	if (data->s != INVALID_SOCKET)
		return 0;

	status->conn = NOT_CONNECTED;
	tray_update(hWnd, data);

#if HAVE_GETADDRINFO
	if (data->addrs_cur == NULL && data->addrs_res != NULL) {
		freeaddrinfo(data->addrs_res);
		data->addrs_res = NULL;
	}

	if (data->addrs_res == NULL) {
		SetLastError(0);
		ret = getaddrinfo(data->node, data->service, &data->hints, &data->addrs_res);
		err = GetLastError();
		odprintf("getaddrinfo: %d (%ld)", ret, err);
		if (ret != 0) {
			ret = snprintf(status->msg, sizeof(status->msg), "Unable to resolve node \"%s\" service \"%s\" (%d)", data->node, data->service, ret);
			if (ret < 0)
				status->msg[0] = 0;
			tray_update(hWnd, data);

			return 1;
		}

		if (data->addrs_res == NULL) {
			odprintf("no results");
			ret = snprintf(status->msg, sizeof(status->msg), "No results resolving node \"%s\" service \"%s\"", data->node, data->service);
			if (ret < 0)
				status->msg[0] = 0;
			tray_update(hWnd, data);

			return 1;
		}

		data->addrs_cur = data->addrs_res;
	}

	SetLastError(0);
	ret = getnameinfo(data->addrs_cur->ai_addr, data->addrs_cur->ai_addrlen, data->hbuf, sizeof(data->hbuf), data->sbuf, sizeof(data->sbuf), NI_NUMERICHOST|NI_NUMERICSERV);
	err = GetLastError();
	odprintf("getnameinfo: %d (%ld)", ret, err);
	if (ret == 0) {
		odprintf("trying to connect to node \"%s\" service \"%s\"", data->hbuf, data->sbuf);
	} else {
		data->hbuf[0] = 0;
		data->sbuf[0] = 0;
	}
#else
	odprintf("trying to connect to node \"%s\" service \"%s\"", data->node, data->service);
#endif

	SetLastError(0);
#if HAVE_GETADDRINFO
	data->s = socket(data->addrs_cur->ai_family, SOCK_STREAM, IPPROTO_TCP);
#else
	data->s = socket(data->family, SOCK_STREAM, IPPROTO_TCP);
#endif
	err = GetLastError();
	odprintf("socket: %d (%ld)", data->s, err);

	if (data->s == INVALID_SOCKET) {
		ret = snprintf(status->msg, sizeof(status->msg), "Unable to create socket (%ld)", err);
		if (ret < 0)
			status->msg[0] = 0;
		tray_update(hWnd, data);

#if HAVE_GETADDRINFO
		data->addrs_cur = data->addrs_cur->ai_next;
#endif
		return 1;
	}

	SetLastError(0);
	ret = setsockopt(data->s, SOL_SOCKET, SO_RCVTIMEO, (void*)&timeout, sizeof(timeout));
	err = GetLastError();
	odprintf("setsockopt: %d (%ld)", ret, err);
	if (ret != 0) {
		ret = snprintf(status->msg, sizeof(status->msg), "Unable to set socket timeout (%ld)", err);
		if (ret < 0)
			status->msg[0] = 0;
		tray_update(hWnd, data);

		SetLastError(0);
		ret = closesocket(data->s);
		err = GetLastError();
		odprintf("closesocket: %d (%ld)", ret, err);
		data->s = INVALID_SOCKET;

#if HAVE_GETADDRINFO
		data->addrs_cur = data->addrs_cur->ai_next;
#endif
		return 1;
	}

	SetLastError(0);
	ret = WSAIoctl(data->s, SIO_KEEPALIVE_VALS, (void*)&ka_set, sizeof(ka_set), (void*)&ka_get, sizeof(ka_get), &retd, NULL, NULL);
	err = GetLastError();
	odprintf("WSAIoctl: %d, %d (%ld)", ret, retd, err);
	if (ret != 0) {
		ret = snprintf(status->msg, sizeof(status->msg), "Unable to set socket keepalive options (%ld)", err);
		if (ret < 0)
			status->msg[0] = 0;
		tray_update(hWnd, data);

		SetLastError(0);
		ret = closesocket(data->s);
		err = GetLastError();
		odprintf("closesocket: %d (%ld)", ret, err);
		data->s = INVALID_SOCKET;

#if HAVE_GETADDRINFO
		data->addrs_cur = data->addrs_cur->ai_next;
#endif
		return 1;
	}

	SetLastError(0);
	ret = WSAAsyncSelect(data->s, hWnd, WM_APP_SOCK, FD_CONNECT|FD_READ|FD_CLOSE);
	err = GetLastError();
	odprintf("WSAAsyncSelect: %d (%ld)", ret, err);
	if (ret != 0) {
		ret = snprintf(status->msg, sizeof(status->msg), "Unable to async select on socket (%ld)", err);
		if (ret < 0)
			status->msg[0] = 0;
		tray_update(hWnd, data);

		SetLastError(0);
		ret = closesocket(data->s);
		err = GetLastError();
		odprintf("closesocket: %d (%ld)", ret, err);
		data->s = INVALID_SOCKET;

#if HAVE_GETADDRINFO
		data->addrs_cur = data->addrs_cur->ai_next;
#endif
		return 1;
	}

	status->conn = CONNECTING;
#if HAVE_GETADDRINFO
	if (data->hbuf[0] != 0 && data->sbuf[0] != 0) {
		ret = snprintf(status->msg, sizeof(status->msg), "node \"%s\" service \"%s\" (%ld)", data->hbuf, data->sbuf, err);
	} else {
#endif
		ret = snprintf(status->msg, sizeof(status->msg), "node \"%s\" service \"%s\" (%ld)", data->node, data->service, err);
#if HAVE_GETADDRINFO
	}
#endif
	if (ret < 0)
		status->msg[0] = 0;
	tray_update(hWnd, data);

	SetLastError(0);
#if HAVE_GETADDRINFO
	ret = connect(data->s, data->addrs_cur->ai_addr, data->addrs_cur->ai_addrlen);
#else
	ret = connect(data->s, data->sa, data->sa_len);
#endif
	err = GetLastError();
	odprintf("connect: %d (%ld)", ret, err);
	if (ret == 0 || err == WSAEWOULDBLOCK) {
		return 0;
	} else {
		status->conn = NOT_CONNECTED;
#if HAVE_GETADDRINFO
		if (data->hbuf[0] != 0 && data->sbuf[0] != 0) {
			ret = snprintf(status->msg, sizeof(status->msg), "Error connecting to node \"%s\" service \"%s\"", data->hbuf, data->sbuf);
		} else {
#endif
			ret = snprintf(status->msg, sizeof(status->msg), "Error connecting to node \"%s\" service \"%s\"", data->node, data->service);
#if HAVE_GETADDRINFO
		}
#endif
		if (ret < 0)
			status->msg[0] = 0;
		tray_update(hWnd, data);

		SetLastError(0);
		ret = closesocket(data->s);
		err = GetLastError();
		odprintf("closesocket: %d (%ld)", ret, err);
		data->s = INVALID_SOCKET;

#if HAVE_GETADDRINFO
		data->addrs_cur = data->addrs_cur->ai_next;
#endif
		return 1;
	}
}

int comms_activity(HWND hWnd, struct th_data *data, SOCKET s, WORD sEvent, WORD sError) {
	struct tray_status *status = &data->status;
	INT ret;
	DWORD err;

	odprintf("comms[activity]: s=%p sEvent=%d sError=%d", s, sEvent, sError);

	if (!data->running)
		return 0;

	if (data->s != s)
		return 0;

	switch (sEvent) {
	case FD_CONNECT:
		odprintf("FD_CONNECT %s", status->conn == CONNECTING ? "OK" : "?");
		if (status->conn != CONNECTING)
			return 0;

		if (sError == 0) {
			status->conn = CONNECTED;
			status->msg[0] = 0;
			status->temperature_celsius = NAN;
			status->relative_humidity = NAN;
			status->dew_point = NAN;
			tray_update(hWnd, data);

#if HAVE_GETADDRINFO
			freeaddrinfo(data->addrs_res);
			data->addrs_res = NULL;
#endif
			data->parse_pos = 0;
			data->def_sensor = 0;
			return 0;
		} else {
			status->conn = NOT_CONNECTED;
#if HAVE_GETADDRINFO
			if (data->hbuf[0] != 0 && data->sbuf[0] != 0) {
				ret = snprintf(status->msg, sizeof(status->msg), "Error connecting to node \"%s\" service \"%s\" (%d)", data->hbuf, data->sbuf, sError);
			} else {
#endif
				ret = snprintf(status->msg, sizeof(status->msg), "Error connecting to node \"%s\" service \"%s\" (%d)", data->node, data->service, sError);
#if HAVE_GETADDRINFO
			}
#endif
			if (ret < 0)
				status->msg[0] = 0;
			tray_update(hWnd, data);

			SetLastError(0);
			ret = closesocket(data->s);
			err = GetLastError();
			odprintf("closesocket: %d (%ld)", ret, err);

			data->s = INVALID_SOCKET;
#if HAVE_GETADDRINFO
			data->addrs_cur = data->addrs_cur->ai_next;
#endif
			return 1;
		}

	case FD_READ:
		odprintf("FD_READ %s", status->conn == CONNECTED ? "OK" : "?");
		if (status->conn != CONNECTED)
			return 0;

		if (sError == 0) {
			char recv_buf[128];

			SetLastError(0);
			ret = recv(data->s, recv_buf, sizeof(recv_buf), 0);
			err = GetLastError();
			odprintf("recv: %d (%ld)", ret, err);
			if (ret <= 0) {
				status->conn = NOT_CONNECTED;
#if HAVE_GETADDRINFO
				if (data->hbuf[0] != 0 && data->sbuf[0] != 0) {
					ret = snprintf(status->msg, sizeof(status->msg), "Error reading from node \"%s\" service \"%s\" (%ld)", data->hbuf, data->sbuf, err);
				} else {
#endif
					ret = snprintf(status->msg, sizeof(status->msg), "Error reading from node \"%s\" service \"%s\" (%ld)", data->node, data->service, err);
#if HAVE_GETADDRINFO
				}
#endif
				if (ret < 0)
					status->msg[0] = 0;
				tray_update(hWnd, data);

				SetLastError(0);
				ret = closesocket(data->s);
				err = GetLastError();
				odprintf("closesocket: %d (%ld)", ret, err);

				data->s = INVALID_SOCKET;
				return 1;
			} else if (err == WSAEWOULDBLOCK) {
				return 0;
			} else {
				int size, i;

				size = ret;
				for (i = 0; i < size; i++) {
					/* find a newline and parse the buffer */
					if (recv_buf[i] == '\n') {
						comms_parse(hWnd, data);

						/* clear buffer */
						data->parse_pos = 0;

					/* buffer overflow */
					} else if (data->parse_pos == sizeof(data->parse_buf)/sizeof(char) - 1) {
						odprintf("parse: sender overflowed buffer waiting for '\\n'");
						data->parse_buf[0] = 0;
						data->parse_pos++;

					/* ignore */
					} else if (data->parse_pos > sizeof(data->parse_buf)/sizeof(char) - 1) {

					/* append to buffer */
					} else {
						data->parse_buf[data->parse_pos++] = recv_buf[i];
						data->parse_buf[data->parse_pos] = 0;
					}
				}
				return 0;
			}
		} else {
			status->conn = NOT_CONNECTED;
#if HAVE_GETADDRINFO
			if (data->hbuf[0] != 0 && data->sbuf[0] != 0) {
				ret = snprintf(status->msg, sizeof(status->msg), "Error reading from node \"%s\" service \"%s\" (%d)", data->hbuf, data->sbuf, sError);
			} else {
#endif
				ret = snprintf(status->msg, sizeof(status->msg), "Error reading from node \"%s\" service \"%s\" (%d)", data->node, data->service, sError);
#if HAVE_GETADDRINFO
			}
#endif
			if (ret < 0)
				status->msg[0] = 0;
			tray_update(hWnd, data);

			SetLastError(0);
			ret = closesocket(data->s);
			err = GetLastError();
			odprintf("closesocket: %d (%ld)", ret, err);

			data->s = INVALID_SOCKET;
			return 1;
		}

	case FD_CLOSE:
		odprintf("FD_CLOSE %s", status->conn == CONNECTED ? "OK" : "?");
		if (status->conn != CONNECTED)
			return 0;

		status->conn = NOT_CONNECTED;
#if HAVE_GETADDRINFO
		if (data->hbuf[0] != 0 && data->sbuf[0] != 0) {
			ret = snprintf(status->msg, sizeof(status->msg), "Lost connection to node \"%s\" service \"%s\" (%d)", data->hbuf, data->sbuf, sError);
		} else {
#endif
			ret = snprintf(status->msg, sizeof(status->msg), "Lost connection to node \"%s\" service \"%s\" (%d)", data->node, data->service, sError);
#if HAVE_GETADDRINFO
		}
#endif
		if (ret < 0)
			status->msg[0] = 0;
		tray_update(hWnd, data);

		SetLastError(0);
		ret = closesocket(data->s);
		err = GetLastError();
		odprintf("closesocket: %d (%ld)", ret, err);

		data->s = INVALID_SOCKET;
		return 1;

	default:
		return 0;
	}
}

void comms_parse(HWND hWnd, struct th_data *data) {
	struct tray_status *status = &data->status;
	char msg_type[16];

	if (sscanf(data->parse_buf, "%16s", msg_type) == 1) {
		odprintf("msg_type: %s", msg_type);
		if (!strcmp(msg_type, "SENSD")) {
			data->def_sensor = 1;
		} else if (!strcmp(msg_type, "SENSR")) {
			data->def_sensor = 0;
		} else if (data->def_sensor) {
			if (!strcmp(msg_type, "TEMPC")) {
				if (sscanf(data->parse_buf, "%*s %lf", &status->temperature_celsius) != 1)
					status->temperature_celsius = NAN;
			} else if (!strcmp(msg_type, "RHUM%")) {
				if (sscanf(data->parse_buf, "%*s %lf", &status->relative_humidity) != 1)
					status->relative_humidity = NAN;
			} else if (!strcmp(msg_type, "DEWPC")) {
				if (sscanf(data->parse_buf, "%*s %lf", &status->dew_point) != 1)
					status->dew_point = NAN;
			} else if (!strcmp(msg_type, "SENSF")) {
				tray_update(hWnd, data);
			}
		}
	}
}
Esempio n. 17
0
ArnNode* EpGetNode( const char* nodeName )
{
    odprintf( " - [EP] INFO: EpGetNode(\"%s\") called.\n", nodeName );
    return GetWorldManager().getCurWorld()->getNode( nodeName );

}
SUSI_API bool XcareCacheInformation(int Cache_Number,pcache_info_type_7 t7)
{
	bool result = true;
	int len=MAX_DATA;
	unsigned char buf[MAX_DATA];
	unsigned char* p_buf = buf;
	memset(buf,0,MAX_DATA);
	bool found_a_Cache=false;
	odprintf("SYSTEM_CACHE_TYPE_7 and Number = %d\n",Cache_Number);

	len=MAX_DATA;

	if(Cache_Number == 1)
	{
			if (return_next_table_of_type(cache,&buf,&len,true))
			{
				found_a_Cache=true;
			}
	}
	else
	{
		for(int i=0;i< Cache_Number;i++)
		{
			if (return_next_table_of_type(cache,&buf,&len,false))
			{
				found_a_Cache=true;
			}
		}
	}
	
	if (found_a_Cache)
	{
			//load up this table
			memcpy(&(t7->header),p_buf,4);
			memcpy(&(t7->configuration),p_buf+0x05,2);
			get_string_resource_for_id(buf[0x04],p_buf,t7->socket_designation);
			memcpy(&(t7->max_cache_size),p_buf+0x07,2);
			memcpy(&(t7->installed_size),p_buf+0x09,2);
			memcpy(&(t7->supported_sram_type),p_buf+0x0B,2);
			memcpy(&(t7->current_sram_type),p_buf+0x0D,2);
			t7->cache_speed = buf[0x0F];
			t7->error_correction_type = buf[0x10];
			t7->system_cache_type = buf[0x11];
			t7->associativity = buf[0x12];

			//now display this table
			odprintf(" handle:0x%02x\n",t7->header.handle);
			odprintf(" socket desgination:%s\n",t7->socket_designation);
			odprintf(" configuration:%x\n",t7->configuration);
			odprintf(" max_cache_size:%x\n",t7->max_cache_size);
			odprintf(" installed_size:%x\n",t7->installed_size);
			odprintf(" supported_sram_type:%x\n",t7->supported_sram_type);
			odprintf(" cache_speed:%x\n",t7->cache_speed);
			odprintf(" error_correction_type:%x\n",t7->error_correction_type);
			odprintf(" system_cache_type:%x\n",t7->system_cache_type);
			odprintf(" associativity:%x\n",t7->associativity);
	}

	return true;
}
Esempio n. 19
0
File: tray.c Progetto: lp0/temperhum
void tray_update(HWND hWnd, struct th_data *data) {
	struct tray_status *status = &data->status;
	NOTIFYICONDATA *niData = &data->niData;
	HICON oldIcon;
	unsigned int fg, bg, p, d;
	BOOL ret;
	DWORD err;

	if (!data->tray_ok) {
		tray_add(hWnd, data);

		if (!data->tray_ok)
			return;
	}

	odprintf("tray[update]: conn=%d msg=\"%s\" temperature_celsius=%f relative_humidity=%f dew_point=%f",
		status->conn, status->msg, status->temperature_celsius, status->relative_humidity, status->dew_point);

	fg = icon_syscolour(COLOR_BTNTEXT);
	bg = icon_syscolour(COLOR_3DFACE);

	switch (status->conn) {
	case NOT_CONNECTED:
		if (not_connected_width < ICON_WIDTH || not_connected_height < ICON_HEIGHT)
			icon_wipe(bg);

		icon_blit(0, 0, 0, fg, bg, 0, 0, not_connected_width, not_connected_height, not_connected_bits);

		if (status->msg[0] != 0)
			ret = snprintf(niData->szTip, sizeof(niData->szTip), "Not Connected: %s", status->msg);
		else
			ret = snprintf(niData->szTip, sizeof(niData->szTip), "Not Connected");
		if (ret < 0)
			niData->szTip[0] = 0;
		break;

	case CONNECTING:
		if (connecting_width < ICON_WIDTH || connecting_height < ICON_HEIGHT)
			icon_wipe(bg);

		icon_blit(0, 0, 0, fg, bg, 0, 0, connecting_width, connecting_height, connecting_bits);

		if (status->msg[0] != 0)
			ret = snprintf(niData->szTip, sizeof(niData->szTip), "Connecting to %s", status->msg);
		else
			ret = snprintf(niData->szTip, sizeof(niData->szTip), "Connecting");
		if (ret < 0)
			niData->szTip[0] = 0;
		break;

	case CONNECTED:
		if (isnan(status->temperature_celsius)) {
			icon_clear(0, 0, bg, 0, 0, ICON_WIDTH, digits_base_height);
			p = 0;

			icon_blit(0, 0, 0, fg, bg, p, 0, digit_dash_width, digit_dash_height, digit_dash_bits);
			p += digit_dash_width + 1;

			icon_blit(0, 0, 0, fg, bg, p, 0, digit_dash_width, digit_dash_height, digit_dash_bits);
			p += digit_dash_width + 1;

			icon_blit(0, 0, 0, fg, bg, p, 0, digit_dot_width, digit_dot_height, digit_dot_bits);
			p += digit_dot_width + 1;

			icon_blit(0, 0, 0, fg, bg, p, 0, digit_dash_width, digit_dash_height, digit_dash_bits);
		} else {
			unsigned int h_fg, h_bg, h_end, hue;
			int tc = lrint(status->temperature_celsius * 100.0);

			if (tc > 99999)
				tc = 99999;
			if (tc < -9999)
				tc = -9999;

			hue = tray_range_to_hue(MIN_TEMPC, MIN_TEMPC_WARN, status->temperature_celsius, MAX_TEMPC_WARN, MAX_TEMPC);
			h_end = tray_hue_to_width(hue);
			h_fg = tray_hue_to_fg_colour(hue);
			h_bg = tray_hue_to_bg_colour(hue);

			icon_clear(h_bg, h_end, bg, 0, 0, ICON_WIDTH, digits_base_height);

			if (tc >= 9995) {
				/* _NNN 100 to 999 */
				if (tc % 100 >= 50)
					tc += 100 - (tc % 100);
				p = digit_dot_width + 1;

				d = (tc/10000) % 10;
				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digits_width[d], digits_height[d], digits_bits[d]);
				p += digits_width[d] + 1;

				d = (tc/1000) % 10;
				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digits_width[d], digits_height[d], digits_bits[d]);
				p += digits_width[d] + 1;

				d = (tc/100) % 10;
				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digits_width[d], digits_height[d], digits_bits[d]);
			} else if (tc > 999) {
				/* NN.N 10.0 to 99.9 */
				if (tc % 10 >= 5)
					tc += 10 - (tc % 10);
				p = 0;

				d = (tc/1000) % 10;
				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digits_width[d], digits_height[d], digits_bits[d]);
				p += digits_width[d] + 1;

				d = (tc/100) % 10;
				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digits_width[d], digits_height[d], digits_bits[d]);
				p += digits_width[d] + 1;

				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digit_dot_width, digit_dot_height, digit_dot_bits);
				p += digit_dot_width + 1;

				d = (tc/10) % 10;
				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digits_width[d], digits_height[d], digits_bits[d]);
			} else if (tc >= 0) {
				/* N.NN 0.00 to 9.99 */
				p = 0;

				d = (tc/100) % 10;
				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digits_width[d], digits_height[d], digits_bits[d]);
				p += digits_width[d] + 1;

				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digit_dot_width, digit_dot_height, digit_dot_bits);
				p += digit_dot_width + 1;

				d = (tc/10) % 10;
				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digits_width[d], digits_height[d], digits_bits[d]);
				p += digits_width[d] + 1;

				d = tc % 10;
				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digits_width[d], digits_height[d], digits_bits[d]);
			} else if (tc > -995) { 
				/* -N.N -0.1 to -9.9 */
				if (abs(tc) % 10 >= 5)
					tc -= 10 - (abs(tc) % 10);
				p = 0;

				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digit_dash_width, digit_dash_height, digit_dash_bits);
				p += digit_dash_width + 1;

				d = abs(tc/100) % 10;
				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digits_width[d], digits_height[d], digits_bits[d]);
				p += digits_width[d] + 1;

				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digit_dot_width, digit_dot_height, digit_dot_bits);
				p += digit_dot_width + 1;

				d = abs(tc/10) % 10;
				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digits_width[d], digits_height[d], digits_bits[d]);
			} else /* if (tc >= -9999) */ {
				/* _-NN -10 to -99 */
				if (abs(tc) % 100 >= 50)
					tc -= 100 - (abs(tc) % 100);
				p = digit_dot_width + 1;

				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digit_dash_width, digit_dash_height, digit_dash_bits);
				p += digit_dash_width + 1;

				d = abs(tc/1000) % 10;
				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digits_width[d], digits_height[d], digits_bits[d]);
				p += digits_width[d] + 1;

				d = abs(tc/100) % 10;
				icon_blit(h_fg, h_bg, h_end, fg, bg, p, 0, digits_width[d], digits_height[d], digits_bits[d]);
			}
		}

		icon_clear(0, 0, bg, 0, ICON_HEIGHT/2 - (ICON_HEIGHT/2 - digits_base_height), ICON_WIDTH, (ICON_HEIGHT/2 - digits_base_height) * 2);

		if (isnan(status->relative_humidity)) {
			icon_clear(0, 0, bg, 0, ICON_HEIGHT - digits_base_height, ICON_WIDTH, digit_dash_height);
			p = 0;

			icon_blit(0, 0, 0, fg, bg, p, ICON_HEIGHT - digits_base_height, digit_dash_width, digit_dash_height, digit_dash_bits);
			p += digit_dash_width + 1;

			icon_blit(0, 0, 0, fg, bg, p, ICON_HEIGHT - digits_base_height, digit_dash_width, digit_dash_height, digit_dash_bits);
			p += digit_dash_width + 1;

			icon_blit(0, 0, 0, fg, bg, p, ICON_HEIGHT - digits_base_height, digit_dot_width, digit_dot_height, digit_dot_bits);
			p += digit_dot_width + 1;

			icon_blit(0, 0, 0, fg, bg, p, ICON_HEIGHT - digits_base_height, digit_dash_width, digit_dash_height, digit_dash_bits);
		} else {
			unsigned int h_fg, h_bg, h_end, hue;
			int rh = lrint(status->relative_humidity * 10.0);

			if (rh > 999)
				rh = 999;
			if (rh < 0)
				rh = 0;

			hue = tray_range_to_hue(MIN_DEWPC, MIN_DEWPC_WARN, status->dew_point, MAX_DEWPC_WARN, MAX_DEWPC);
			h_end = tray_hue_to_width(hue);
			h_fg = tray_hue_to_fg_colour(hue);
			h_bg = tray_hue_to_bg_colour(hue);

			icon_clear(h_bg, h_end, bg, 0, ICON_HEIGHT - digits_base_height, ICON_WIDTH, digits_base_height);

			/* NN.N 00.0 to 99.9 */
			p = 0;

			d = (rh/100) % 10;
			icon_blit(h_fg, h_bg, h_end, fg, bg, p, ICON_HEIGHT - digits_base_height, digits_width[d], digits_height[d], digits_bits[d]);
			p += digits_width[d] + 1;

			d = (rh/10) % 10;
			icon_blit(h_fg, h_bg, h_end, fg, bg, p, ICON_HEIGHT - digits_base_height, digits_width[d], digits_height[d], digits_bits[d]);
			p += digits_width[d] + 1;

			icon_blit(h_fg, h_bg, h_end, fg, bg, p, ICON_HEIGHT - digits_base_height, digit_dot_width, digit_dot_height, digit_dot_bits);
			p += digit_dot_width + 1;

			d = rh % 10;
			icon_blit(h_fg, h_bg, h_end, fg, bg, p, ICON_HEIGHT - digits_base_height, digits_width[d], digits_height[d], digits_bits[d]);
		}

		snprintf(niData->szTip, sizeof(niData->szTip), "Temperature: %.2fC, Relative Humidity: %.2f%%, Dew Point: %.2fC",
			status->temperature_celsius, status->relative_humidity, status->dew_point);
		break;

	default:
		return;
	}

	oldIcon = niData->hIcon;

	niData->uFlags &= ~NIF_ICON;
	niData->hIcon = icon_create();
	if (niData->hIcon != NULL)
		niData->uFlags |= NIF_ICON;

	SetLastError(0);
	ret = Shell_NotifyIcon(NIM_MODIFY, niData);
	err = GetLastError();
	odprintf("Shell_NotifyIcon[MODIFY]: %s (%ld)", ret == TRUE ? "TRUE" : "FALSE", err);
	if (ret != TRUE)
		tray_remove(hWnd, data);

	if (oldIcon != NULL)
		icon_destroy(niData->hIcon);
}