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; } }
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); }
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; }
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; } }
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; } }
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; } }
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; }
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; } }
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); }
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); } } }
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; }
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); }
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; }
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; }
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); } } } }
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; }
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); }