//============================================================================ // Name : Server.cpp // Author : Erik Hellström, hellstrom@isy.liu.se, 2008-12-14 // Modified : Emil Larsson, lime@isy.liu.se, 2012-01-13 // // Description : The server sends data on request from the client. Will // loop until an error occurs or the client requests shutdown. // //============================================================================ #include #include #include #include "ComConduit.h" #include "WriteABuffer.h" #include "ReadABuffer.h" // // Show the command-line usage // void Usage(char* argv[]) { printf("\nUsage: %s \n\n",argv[0]); printf(" -P= Selects the COM port, ex: -Pcom1.\n"); printf("\n\n"); } // // Module main function // int main(int argc, char* argv[]) { // Conduit object ComConduit Link; // Key KeyType key[KEY_LEN] = COM_KEY; // Work variables int i; char c,*ptr; wchar_t data[COMSTR_LEN]; wchar_t* ptrData = &data[0]; // Data that will be saved to the buffer wchar_t dataFromLCD[COMSTR_LEN]; wchar_t* ptrDataFromLCD = &dataFromLCD[0]; FlagType ret; unsigned char portnum; char port[] = "COM1"; // LPCWSTR port[] = "COM1"; int counter=1; DCB dcb; COMMTIMEOUTS CommTimeouts; HANDLE hCom; WaitResult wr; // Initialize data portnum = '0'; // // Parse the command-line. // for (i=1; i: %d\n",counter, DC); // printf("Buffer nr: %d, \t: %d\n",counter, ptrData[1]); unsigned char readChar[COMSTR_LEN]; unsigned char* ptr_readChar = &readChar[0]; int jj = 0; if (DC == DC1){ readBufLen = 1; ReadABuffer(ptr_readChar,readBufLen,hCom); dataFromLCD[0] = 0; dataFromLCD[1] = readBufLen; dataFromLCD[2] = (wchar_t) ptr_readChar[0]; jj = 3; } else if (DC == DC2){ ReadABuffer(ptr_readChar,3,hCom); dataFromLCD[2] = (wchar_t) ptr_readChar[0]; dataFromLCD[3] = (wchar_t) ptr_readChar[1]; dataFromLCD[4] = (wchar_t) ptr_readChar[2]; readBufLen = (int) ptr_readChar[2]; for (jj=0; jj < readBufLen+2; jj++){ ReadABuffer(ptr_readChar,1,hCom); dataFromLCD[5+jj] = (wchar_t) ptr_readChar[0]; } jj = jj+5; dataFromLCD[0] = 0; dataFromLCD[1] = readBufLen+4; } else{ printf("Data in Shared memory will not be written to the LCD buffer \nbecause the data package is not correct!!! \n\n"); printSHM = 0; }; /* Stop with a "null" char */ dataFromLCD[jj] = (wchar_t) '\0'; // unsigned char readChar; // unsigned char* ptr_readChar = &readChar; // ReadABuffer(ptr_readChar,20,hCom); if (printSHM == 1){ // printf("After %d iteration(s), Content in Shared memory (after LCD \nbuffer is written to the Shared memory): \n",counter); printf("After %d iteration(s), Content in Shared memory (after LCD buffer is written):\n[",counter); for (ii=2; ii < dataFromLCD[1]+1; ii++) { // ReadABuffer(ptr_readChar,1,hCom); printf("%d, ", dataFromLCD[ii]); // printf("After %d iteration(s), Content in Shared memory: %d, ",counter, dataFromLCD[ii]); } printf("%d]", dataFromLCD[ii]); printf("\n\n"); } // ReadABuffer(ptr_readChar,10,hCom); // printf("\nSend buffer nr: %d, \t: %d\n",counter, ptr_readChar[0]); // printf("Send buffer nr: %d, \t: %d\n",counter, ptr_readChar[1]); // printf("Send buffer nr: %d, \t: %d\n",counter, ptr_readChar[2]); // printf("Send buffer nr: %d, \t: %d\n",counter, ptr_readChar[3]); // printf("Send buffer nr: %d, \t: %d\n",counter, ptr_readChar[4]); // printf("Send buffer nr: %d, \t: %d\n",counter, ptr_readChar[5]); // printf("Send buffer nr: %d, \t: %d\n",counter, ptr_readChar[6]); // printf("Send buffer nr: %d, \t: %d\n",counter, ptr_readChar[7]); // printf("Send buffer nr: %d, \t: %d\n",counter, ptr_readChar[8]); // printf("Send buffer nr: %d, \t: %d\n",counter, ptr_readChar[9]); // printf("Send buffer nr: %d, \t: %d\n\n",counter, ptr_readChar[10]); counter++; // int ii; // for (ii=0; ii < 10; ii++) // { // // // copy each element // dataFromLCD[ii] = (wchar_t) ptr_readChar[ii]; // // } // /* Stop with a "null" char */ // dataFromLCD[ii] = (wchar_t) '\0'; // Set data in shm if(!Link.SetData(dataFromLCD)) { fprintf(stderr,"SetData() failed.\n"); return EXIT_FAIL; } // printf("\t\n"); } // // Shutdown // // Close COM port if(CloseHandle(hCom) == 0) { fprintf(stderr,"\nCan't close com-port.\n"); ret = EXIT_FAIL; } // Tell eventual clients to shutdown if(!Link.CauseShutdown()) { fprintf(stderr,"\nCauseShutdown() failed.\n"); ret = EXIT_FAIL; } // Wait for clients to shutdown msleep(500); // Shutdown server if(!Link.Shutdown()) { fprintf(stderr,"Shutdown() failed.\n"); ret = EXIT_FAIL; } // Exit if(ret == EXIT_OK) fprintf(stdout, "\nClean exit.\n"); return ret; }