void QuartzToggler::emitRate() { double rate = 0.0; CFNumberGetValue(static_cast<CFNumberRef>(CFDictionaryGetValue(CGDisplayCurrentMode(activeDspys[widgetScreen]), kCGDisplayRefreshRate)), kCFNumberDoubleType, &rate); emit rateChange(static_cast<int>(rate * 10.0 + 0.5)); }
void XRandRToggler::setFullMode(const bool enable) { SizeID currentID = XRRConfigCurrentConfiguration(config, &rotation); int currentRate = XRRConfigCurrentRate(config); SizeID newID; int newRate; if (enable) { newID = fullResIndex; newRate = infoVector[fullResIndex].rates[fullRateIndex] / 10; if (!isFull) { originalResIndex = currentID; originalRate = currentRate; } } else { newID = originalResIndex; newRate = originalRate; } if (newID != currentID || newRate != currentRate) { XRRSetScreenConfigAndRate(QX11Info::display(), config, QX11Info::appRootWindow(), newID, rotation, newRate, CurrentTime); if (newRate != currentRate) emit rateChange(newRate * 10); } isFull = enable; }
void QuartzToggler::setFullMode(const bool enable) { CGDirectDisplayID display = activeDspys[widgetScreen]; CFDictionaryRef currentMode = CGDisplayCurrentMode(display); CFDictionaryRef mode = currentMode; if (enable) { int bpp = 0; CFNumberGetValue(static_cast<CFNumberRef>(CFDictionaryGetValue(currentMode, kCGDisplayBitsPerPixel)), kCFNumberIntType, &bpp); mode = CGDisplayBestModeForParametersAndRefreshRate( display, bpp, infoVector[widgetScreen][fullResIndex[widgetScreen]].w, infoVector[widgetScreen][fullResIndex[widgetScreen]].h, infoVector[widgetScreen][fullResIndex[widgetScreen]].rates[fullRateIndex[widgetScreen]] / 10.0, NULL ); if (!isFull) originalMode = currentMode; } else if (isFull) mode = originalMode; if (mode != currentMode) { CGDisplaySwitchToMode(display, mode); double oldRate = 0.0; double newRate = 0.0; CFNumberGetValue(static_cast<CFNumberRef>(CFDictionaryGetValue(currentMode, kCGDisplayRefreshRate)), kCFNumberDoubleType, &oldRate); CFNumberGetValue(static_cast<CFNumberRef>(CFDictionaryGetValue(mode, kCGDisplayRefreshRate)), kCFNumberDoubleType, &newRate); if (static_cast<int>(oldRate * 10.0 + 0.5) != static_cast<int>(newRate * 10.0 + 0.5)) emit rateChange(static_cast<int>(newRate * 10.0 + 0.5)); } isFull = enable; }
void MainWindow::ServerOperations(QByteArray data) { QString Line(data); QStringList dataList = Line.split(" "); bool tf=false; QTcpSocket* clientTcpSocket = (QTcpSocket*)sender(); for (int i=0;i<Commands.size();i++) if (dataList[0] == Commands[i]) tf=true; if (!tf) { messageTo = "FAILED\n"; sendToClient(clientTcpSocket,messageTo); return; } QStringList typeCommand = dataList[0].split("-"); if (typeCommand[0]=="set") { dataList[1].chop(1); if (typeCommand[2]=="state") stateChange(dataList[1]); else if (typeCommand[2]=="color") colorChange(dataList[1]); else if (typeCommand[2]=="rate") rateChange(dataList[1]); } else if (typeCommand[0]=="get") { typeCommand[2].chop(1); if (typeCommand[2]=="state") { messageTo = "OK " + state + "\n"; sendToClient(clientTcpSocket,messageTo); } else if (typeCommand[2]=="color") { messageTo = "OK " + color.name() + "\n"; sendToClient(clientTcpSocket,messageTo); } else if (typeCommand[2]=="rate") { messageTo = "OK " + QString::number(rate) + "\n"; sendToClient(clientTcpSocket,messageTo); } else { messageTo = "FAILED\n"; sendToClient(clientTcpSocket,messageTo); } } }
void *connection_handler(void *socket_desc) { //Variables int loggedState; int sock = *(int*)socket_desc; int pin_int = 0; int read_size; int num_err; struct sockaddr_in addr; Protocol_struct client_message; Protocol_struct server_msg; char clientip[20]; char filename[256]; char *fileURL; char *message; char *client_msg; //Initialise Pointers fileURL = filename; client_msg = (char*) &client_message; message = "Client Connected!!!\r\n"; loggedState = LOGGED_OFF; socklen_t addr_size = sizeof(struct sockaddr_in); getpeername(sock, (struct sockaddr *)&addr, &addr_size); strcpy(clientip, inet_ntoa(addr.sin_addr)); //Send some messages to the client write(sock , message , strlen(message)); //Receive a message from client while( (read_size = recv(sock , (char *)&client_message , sizeof(client_message) , 0)) > 0 ) { num_err=0; //convert Device Pin to int pin_int = charbcd2int(client_message); if ((pin_int > 9999) || (pin_int < 0)) { //update to invalid PIN number printf("Invalid PIN number\r\n"); num_err = 1; } //print out message received for debugging puts("---------------------------------------------------"); //printf("Pin (chars) = %d,%d,%d,%d\r\n", client_message.Pin_1, client_message.Pin_2, client_message.Pin_3, client_message.Pin_4); printf("Thread = %d || Pin (int) = %d || Function = %d\r\n", sock, pin_int, client_message.Function); //printf("Function = %d\r\n", client_message.Function); //printf("Language %d\r\n", client_message.Language); //printf("Difficulty = %d\r\n", client_message.Difficulty); //printf("Exhibit = %d\r\n", client_message.Exhibit); puts("---------------------------------------------------"); //switch based on the function value if (num_err == 0) { switch(client_message.Function) { case LOGON: if (loggedState != LOGGED_ON) { num_err = logon(pin_int); if (num_err == 0) { data[pin_int].HostName = clientip; loggedState = LOGGED_ON; } else { //update to failed logon number printf("Failed to logon\r\n"); num_err = 100; } } else { //update to already logged on number printf("Already logged on\r\n"); num_err = 101; } break; case LOGOFF: if (loggedState == LOGGED_ON) { num_err = logoff(pin_int); if (num_err == 0) { loggedState = LOGGED_OFF; } else { //update to failed logoff number printf("Failed to logoff\r\n"); num_err = 1; } } else { //update to already logged off number printf("Already logged off\r\n"); num_err = 1; } break; case PLAY: if (loggedState == LOGGED_ON) { num_err = playtoggle(pin_int); } else { printf("Device is not logged on"); num_err = 102; } break; case PAUSE: if (loggedState == LOGGED_ON) { num_err = playtoggle(pin_int); } else { printf("Device is not logged on"); num_err = 102; } break; case REWIND: if (loggedState == LOGGED_ON) { num_err = rateChange(pin_int,-3); } else { printf("Device is not logged on"); num_err = 102; } break; case FAST_FORWARD: if (loggedState == LOGGED_ON) { num_err = rateChange(pin_int,3); } else { printf("Device is not logged on"); num_err = 102; } break; case REWIND_STOP: if (loggedState == LOGGED_ON) { num_err = rateChange(pin_int,1); } else { printf("Device is not logged on"); num_err = 102; } break; case FAST_FORWARD_STOP: if (loggedState == LOGGED_ON) { num_err = rateChange(pin_int,1); } else { printf("Device is not logged on"); num_err = 102; } break; case FILE_REQ: if (loggedState == LOGGED_ON) { num_err = getFileFromDB(client_message.Exhibit,client_message.Language, client_message.Difficulty, fileURL);// needs to interact with database if (num_err != 0) { break; } num_err = buildPipeline(fileURL, &data[pin_int]); } else { printf("Device is not logged on"); num_err = 102; } break; default : printf("Unknown Command - %d\r\n",client_message.Function); //update to unknown command number num_err = 104; } } //generate standard response server_msg.Pin_1 = client_message.Pin_1; server_msg.Pin_2 = client_message.Pin_2; server_msg.Pin_3 = client_message.Pin_3; server_msg.Pin_4 = client_message.Pin_4; server_msg.Function = SRV_RESPONSE; server_msg.Language = 0; server_msg.Difficulty = 0; server_msg.Exhibit = num_err; //convert to char array //client_message[4] = server_msg.Function; //Send the message back to client client_msg = (char*) &server_msg; write(sock , client_msg , sizeof(server_msg)); //set messages to 0 so they can be repopulated memset(&client_message, 0, sizeof(client_message)); memset(&server_msg, 0, sizeof(server_msg)); } //If nothing is read from the socket (as blocking function used will only return zero when disconnected) if(read_size == 0) { printf("Client disconnected from socket %d\r\n", sock); fflush(stdout); } else if(read_size == -1) // { printf("Failed to receive data from socket %d\r\n", sock); } return 0; }
void XRandRToggler::emitRate() { emit rateChange(XRRConfigCurrentRate(config) * 10); }