char* parse_command(CLIENT* client,char* command) { // Commands from the client are parsed here to // produce a response to be sent back to the // client. char* token; fprintf(stderr,"parse_command: '%s'\n",command); token=strtok(command," \r\n"); if(token!=NULL) { if(strcmp(token,"attach")==0) { // select receiver token=strtok(NULL," \r\n"); if(token!=NULL) { int rx=atoi(token); return attach_receiver(rx,client); } else { return INVALID_COMMAND; } } else if(strcmp(token,"detach")==0) { // select receiver token=strtok(NULL," \r\n"); if(token!=NULL) { int rx=atoi(token); return detach_receiver(rx,client); } else { return INVALID_COMMAND; } } else if(strcmp(token,"frequency")==0) { // set frequency token=strtok(NULL," \r\n"); if(token!=NULL) { long f=atol(token); return set_frequency(client,f); } else { return INVALID_COMMAND; } /*****************************************************************************/ } else if(strcmp(token,"mox")==0) { // set ptt token=strtok(NULL," \r\n"); if(token!=NULL) { int p=atoi(token); return set_ptt(client,p); } else { return INVALID_COMMAND; } /*****************************************************************************/ } else if(strcmp(token,"start")==0) { token=strtok(NULL," \r\n"); if(token!=NULL) { if(strcmp(token,"iq")==0) { token=strtok(NULL," \r\n"); if(token!=NULL) { client->iq_port=atoi(token); } } if(pthread_create(&receiver[client->receiver].audio_thread_id,NULL,audio_thread,&receiver[client->receiver])!=0) { if (softrock_get_verbose()) fprintf(stderr,"failed to create audio thread for tx %d\n",client->receiver); exit(1); } return OK; if(strcmp(token,"bandscope")==0) { token=strtok(NULL," \r\n"); if(token!=NULL) { client->bs_port=atoi(token); } return OK; } else { // invalid command string return INVALID_COMMAND; } } else { // invalid command string return INVALID_COMMAND; } } else if(strcmp(token,"stop")==0) { token=strtok(NULL," \r\n"); if(token!=NULL) { if(strcmp(token,"iq")==0) { token=strtok(NULL," \r\n"); if(token!=NULL) { client->iq_port=-1; } return OK; } else if(strcmp(token,"bandscope")==0) { client->bs_port=-1; } else { // invalid command string return INVALID_COMMAND; } } else { // invalid command string return INVALID_COMMAND; } } else { // invalid command string return INVALID_COMMAND; } } else { // empty command string return INVALID_COMMAND; } return 0; }
const char* parse_command(CLIENT* client,char* command) { char* token; fprintf(stderr,"parse_command(Rx%d): '%s'\n",client->receiver,command); token=strtok(command," \r\n"); if(token!=NULL) { if(strcmp(token,"attach")==0) { //COMMAND: 'attach <side>' token=strtok(NULL," \r\n"); if(token!=NULL) { if(strcmp(token,"tx")==0) { //COMMAND: 'attach tx' return attach_transmitter(client); } else { //COMMAND: 'attach rx#' int rx=atoi(token); return attach_receiver(rx,client); } } else { return INVALID_COMMAND; } } else if(strcmp(token,"detach")==0) { //COMMAND: 'detach <side>' token=strtok(NULL," \r\n"); if(token!=NULL) { int rx=atoi(token); return detach_receiver(rx,client); } else { return INVALID_COMMAND; } } else if(strcmp(token,"frequency")==0) { //COMMAND: 'frequency <long freq>' token=strtok(NULL," \r\n"); if(token!=NULL) { long f=atol(token); return set_frequency(client,f); } else { return INVALID_COMMAND; } } else if(strcmp(token,"start")==0) { //COMMAND: 'start <stream> <port#>' token=strtok(NULL," \r\n"); if(token!=NULL) { if(strcmp(token,"iq")==0) { //COMMAND: 'start iq <port#>' token=strtok(NULL," \r\n"); if(token!=NULL) { client->iq_port=atoi(token); } // starts the thread to acquire USRP samples usrp_start (&receiver[client->receiver]); fprintf(stderr,"Started USRP for RX%d\n",client->receiver); //Start the audio thread if(pthread_create(&receiver[client->receiver].audio_thread_id,NULL,audio_thread,client)!=0) { fprintf(stderr,"Failed to create audio thread for rx %d\n",client->receiver); exit(1); } return OK; } else if(strcmp(token,"bandscope")==0) { //COMMAND: 'start bandscope <port#>' token=strtok(NULL," \r\n"); if(token!=NULL) { client->bs_port=atoi(token); } attach_bandscope(client); return OK; } else { // invalid command string return INVALID_COMMAND; } } else { // invalid command string return INVALID_COMMAND; } } else if(strcmp(token,"stop")==0) { //COMMAND: 'stop <stream>' token=strtok(NULL," \r\n"); if(token!=NULL) { if(strcmp(token,"iq")==0) { //COMMAND: 'stop iq' token=strtok(NULL," \r\n"); if(token!=NULL) { client->iq_port=-1; } return OK; } else if(strcmp(token,"bandscope")==0) { //COMMAND: 'stop bandscope' client->bs_port=-1; detach_bandscope(client); } else { // invalid command string return INVALID_COMMAND; } } else { // invalid command string return INVALID_COMMAND; } } else if(strcmp(token,"preamp")==0) { return NOT_IMPLEMENTED_COMMAND; } else if(strcmp(token,"record")==0) { return NOT_IMPLEMENTED_COMMAND; } else if(strcmp(token,"mox")==0) { return NOT_IMPLEMENTED_COMMAND; } else if(strcmp(token,"ocoutput")==0) { return NOT_IMPLEMENTED_COMMAND; } else { // invalid command string return INVALID_COMMAND; } } else { // empty command string return INVALID_COMMAND; } return INVALID_COMMAND; }
const char* parse_command(CLIENT* client,char* command) { char* token; fprintf(stderr,"parse_command: '%s'\n",command); token=strtok(command," \r\n"); if(token!=NULL) { if(strcmp(token,"attach")==0) { // select receiver token=strtok(NULL," \r\n"); if(token!=NULL) { int rx=atoi(token); return attach_receiver(rx,client); } else { return INVALID_COMMAND; } } else if(strcmp(token,"detach")==0) { // select receiver token=strtok(NULL," \r\n"); if(token!=NULL) { int rx=atoi(token); return detach_receiver(rx,client); } else { return INVALID_COMMAND; } } else if(strcmp(token,"frequency")==0) { // set frequency token=strtok(NULL," \r\n"); if(token!=NULL) { long f=atol(token); return set_frequency (client,f); } else { return INVALID_COMMAND; } } else if(strcmp(token,"start")==0) { token=strtok(NULL," \r\n"); if(token!=NULL) { if(strcmp (token,"iq")==0) { token=strtok(NULL," \r\n"); if(token!=NULL) { client->iq_port=atoi(token); } printf("***************************Starting async data acquisition... CLIENT REQUESTED %d port\n", client->iq_port); (receiver[client->receiver]).samples = 0; if ( hiqsdr_start_asynch_input ( user_data_callback, &(receiver[client->receiver])) < 0 ) { printf("start async input error\n" ); return INVALID_COMMAND; } else { printf("start async input: %s\n", "STARTED"); } return OK; } else if(strcmp(token,"bandscope")==0) { token=strtok(NULL," \r\n"); if(token!=NULL) { client->bs_port=atoi(token); } return OK; } else { // invalid command string return INVALID_COMMAND; } } else { // invalid command string return INVALID_COMMAND; } } else if(strcmp(token,"dither")==0) { // set frequency token=strtok(NULL," \r\n"); if(token!=NULL) { if (strcmp(token,"on")==0) { return set_dither (client,true); } if (strcmp(token,"off")==0) { return set_dither (client,false); } return INVALID_COMMAND; } else { return INVALID_COMMAND; } } else if(strcmp(token,"setattenuator")==0) { // set attenuator token=strtok(NULL," \r\n"); if(token!=NULL) { long av=atol(token); return set_attenuator (client,av); } else { return INVALID_COMMAND; } } else if(strcmp(token,"selectantenna")==0) { // select antenna token=strtok(NULL," \r\n"); if(token!=NULL) { long antenna = atol(token); return select_antenna (client,antenna); } else { return INVALID_COMMAND; } } else if(strcmp(token,"selectpresel")==0) { // select preselector token=strtok(NULL," \r\n"); if(token!=NULL) { long presel = atol(token); return select_preselector (client,presel); } else { return INVALID_COMMAND; } } else if(strcmp(token,"activatepreamp")==0) { // activate preamplifier token=strtok(NULL," \r\n"); if(token!=NULL) { long preamp = atol(token); return set_preamplifier (client,preamp); } else { return INVALID_COMMAND; } } else if(strcmp(token,"random")==0) { // set frequency token=strtok(NULL," \r\n"); if(token!=NULL) { if (strcmp(token,"on")==0) { return set_random (client,true); } if (strcmp(token,"off")==0) { return set_random (client,false); } return INVALID_COMMAND; } else { return INVALID_COMMAND; } } else if(strcmp(token,"stop")==0) { token=strtok(NULL," \r\n"); if(token!=NULL) { if(strcmp(token,"iq")==0) { token=strtok(NULL," \r\n"); if(token!=NULL) { client->iq_port=-1; } // try to terminate audio thread close ((receiver[client->receiver]).audio_socket); printf("Quitting...\n"); hiqsdr_stop_asynch_input (); return OK; } else if(strcmp(token,"bandscope")==0) { client->bs_port=-1; } else { // invalid command string return INVALID_COMMAND; } } else { // invalid command string return INVALID_COMMAND; } } else if(strcmp(token,"quit")==0) { return QUIT_ASAP; } else if(strcmp(token,"hardware?")==0) { return "OK HiQSDR"; } else if(strcmp(token,"getserial?")==0) { // no serial number concept available in HiQSDR, returns instead the IP address static char buf[50]; snprintf (buf, sizeof(buf), "OK %s", hiqsdr_get_ip_address()); return buf; } else if(strcmp(token,"getpreselector?")==0) { // get preselector token=strtok(NULL," \r\n"); if(token!=NULL) { long p=atol(token); // preselector query if (p >= 0 && p < 16) { static char buf[50]; static char pd[BUFSIZ]; if (!hiqsdr_get_preselector_desc(p, pd)) { snprintf (buf, sizeof(buf), "OK \"%s\"", pd); return buf; } else return INVALID_COMMAND; } else return INVALID_COMMAND; } else { return INVALID_COMMAND; } } else if(strcmp(token,"getpreampstatus?")==0) { // returns preamp status static char buf[50]; snprintf (buf, sizeof(buf), "OK %d", hiqsdr_get_preamp ()); return buf; } else { // invalid command string return INVALID_COMMAND; } } else { // empty command string return INVALID_COMMAND; } return INVALID_COMMAND; }
const char* parse_command(CLIENT* client,char* command) { char* token; fprintf(stderr,"parse_command(Rx%d): '%s'\n",client->receiver_num,command); token=strtok(command," \r\n"); if(token!=NULL) { if(strcmp(token,"attach")==0) { //COMMAND: 'attach <side>' token=strtok(NULL," \r\n"); if(token!=NULL) { //COMMAND: 'attach rx#' int rx=atoi(token); const char *resp=attach_receiver(rx,client); if (strcmp(resp, "Error") == 0) return resp; else return attach_transmitter(client, resp); } } else if(strcmp(token,"detach")==0) { //COMMAND: 'detach <side>' token=strtok(NULL," \r\n"); if(token!=NULL) { int rx=atoi(token); return detach_receiver(rx,client); } else { return INVALID_COMMAND; } } else if(strcmp(token,"frequency")==0) { //COMMAND: 'frequency <long freq>' token=strtok(NULL," \r\n"); if(token!=NULL) { long f=atol(token); return set_frequency(client,f); } else { return INVALID_COMMAND; } } else if(strcmp(token,"start")==0) { //COMMAND: 'start <stream> <port#>' token=strtok(NULL," \r\n"); if(token!=NULL) { if(strcmp(token,"iq")==0) { //COMMAND: 'start iq <port#>' token=strtok(NULL," \r\n"); if(token!=NULL) { client->iq_port=atoi(token); } //NOTE:as it is now the usrp-server, only receiver 0's is supported //then it is the only one to issue 'start' command. if (usrp_start_rx_forwarder_thread(client)!=0) exit(1); sleep(1); //some settling time... //This is executed only once if (! usrp_is_started()) { if (usrp_start (client)) fprintf(stderr,"Started USRP for Client %d\n",client->receiver_num); else { fprintf(stderr,"USRP threads start FAILED for rx %d\n",client->receiver_num); exit(1); } } sleep(1); //some settling time //Start the server side tx audio stream receiving thread //Exit program if failed (...?) if (start_tx_audio_thread(client)!=0) exit(1); return OK; } else if(strcmp(token,"bandscope")==0) { //COMMAND: 'start bandscope <port#>' token=strtok(NULL," \r\n"); if(token!=NULL) { client->bs_port=atoi(token); } attach_bandscope(client); return OK; } else { // invalid command string return INVALID_COMMAND; } } else { // invalid command string return INVALID_COMMAND; } } else if(strcmp(token,"stop")==0) { //COMMAND: 'stop <stream>' token=strtok(NULL," \r\n"); if(token!=NULL) { if(strcmp(token,"iq")==0) { //COMMAND: 'stop iq' token=strtok(NULL," \r\n"); if(token!=NULL) { client->iq_port=-1; } return OK; } else if(strcmp(token,"bandscope")==0) { //COMMAND: 'stop bandscope' client->bs_port=-1; detach_bandscope(client); } else { // invalid command string return INVALID_COMMAND; } } else { // invalid command string return INVALID_COMMAND; } } else if(strcmp(token,"mox")==0) { //Toggle the mox int v=toggle_mox(client); fprintf(stderr,"Toggled mox to %d for Client %d\n",v, client->receiver_num); return OK; } else if(strcmp(token,"preamp")==0) { return NOT_IMPLEMENTED_COMMAND; } else if(strcmp(token,"record")==0) { return NOT_IMPLEMENTED_COMMAND; } else if(strcmp(token,"ocoutput")==0) { return NOT_IMPLEMENTED_COMMAND; } else { // invalid command string return INVALID_COMMAND; } } // empty command string return INVALID_COMMAND; }