Beispiel #1
0
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;
}
Beispiel #2
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;
}
Beispiel #4
0
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;
}