void sendArg(struct benchData* arg) { #ifndef TEST char tmp[100]; switch(arg->dataType) { /* INT RESULTS are not taken into account by the client because an OpenCL result is assumed to be an array */ case kINT: write(newsockfd,"s\n",2*sizeof(char)); sprintf(tmp,"%ld\n",arg->value.intNumber); write(newsockfd,tmp,strlen(tmp)); break; case kREAL: write(newsockfd,"r\n",2*sizeof(char)); sprintf(tmp,"%f\n",arg->value.real); write(newsockfd,tmp,strlen(tmp)); break; case kFLOAT4: write(newsockfd,"f\n",2*sizeof(char)); sprintf(tmp,"(%f,%f,%f,%f)\n",arg->value.float4.s[0],arg->value.float4.s[1],arg->value.float4.s[2],arg->value.float4.s[3]); write(newsockfd,tmp,strlen(tmp)); break; case kINT_STREAM: write(newsockfd,"nl\n",3*sizeof(char)); sendIntArray(arg->value.intArray); break; case kREAL_STREAM: write(newsockfd,"rl\n",3*sizeof(char)); sendRealArray(arg->value.realArray); break; case kFLOAT4_STREAM: write(newsockfd,"zl\n",3*sizeof(char)); sendFloat4Array(arg->value.float4Array); break; } write(newsockfd,".\n",2*sizeof(char)); #endif }
void masterMain() { //master short i; short l; short nextSlot; int clients[MAX_CLIENTS]; int clientInfo[MAX_CLIENTS]; nrf_init(); delay(); nrf_txmode(); delay(); nextSlot = 0; for (i=0; i<MAX_CLIENTS; i++) { clients[i] = 0; } sendLiteralBytes("\nLoop Start\n"); LED_RED = 0; LED_GREEN = 0; // while(1) { // LED_RED = !LED_RED; // LED_GREEN = nrf_send(&tx_buf,&rx_buf); // delay(); // } while(1) { LED_RED = !LED_RED; delay(); sendIntArray(&clients,MAX_CLIENTS); sendLiteralBytes("\n"); nrf_setTxAddr(0); //master channel nrf_setRxAddr(0,0); //master channel tx_buf[0] = 0x42; tx_buf[1] = nextSlot+1; //sendLiteralBytes("Attempt Send\n"); //displayStatus(nrf_getStatus()); if (nrf_send(&tx_buf,&rx_buf)) { sendLiteralBytes("\nClient Connected!\n"); clients[nextSlot] = 1; //find the next available slot nextSlot = -1; for (i=0; i<MAX_CLIENTS; i++) { if (clients[i] == 0) { nextSlot = i; break; } } } for (i=0; i<MAX_CLIENTS; i++) { if (clients[i] != 0) { nrf_setTxAddr(i+1); //slave channel nrf_setRxAddr(0,i+1); //slave channel if (nrf_send(&tx_buf,&rx_buf)) { clients[i] = 1; clientInfo[i] = 1; } else { clients[i]++; if (clients[i] > 3) { sendLiteralBytes("Client Disconnected!\n"); clients[i] = 0; clientInfo[i] = 0; } for (l=0; l<MAX_CLIENTS; l++) { if (clients[l] == 0) { nextSlot = l; break; } } } } } } }