diff --git a/groundStation/README.md b/groundStation/README.md index c7ee059c939ef9d4b414452817818937b48996ea..a54b1f43611542c3792549e51f1509bc187a5428 100644 --- a/groundStation/README.md +++ b/groundStation/README.md @@ -23,3 +23,41 @@ If you wish to change the way the backend communicates to the quad and vice vers ## Modifying See MODIFYING for the software architecture/organization and how to add new functionality. + +## Using +First, the backend daemon must be running. Run the backend with ./BackEnd. Note +the environment variables in config.h, especially the backend socket path. The backend +requires root for bluetooth, but can run as a normal user with TCP, as long as the +socket path is writable by the user. + +Once the backend is running, various CLI tools can be used to view the state of the +quad and send commands. Each of these tools is given as the first argument +to the CLI program, for example, to monitor the quad, use `cli monitor`. Note that +the backend socket environment variable must be set to the same value as it +was for the backend. The CLI program also supports busybox-style symbolic links. +For example, if there is a symlink named `monitor` that points to the `cli` binary, +running the `monitor` program will effectively run `cli monitor`. + +The names of the binaries is subject to change. + +### Example +In one terminal or screen, run the backend: + +`UCART_SOCKET=./ucart.socket ./BackEnd` + +This will activate the quad and the backend, and the backend will be available for +connections from the frontend tools. One useful tool is the monitor. In another +terminal window, run the monitor forever: + +`UCART_SOCKET=./ucart.socket ./cli monitor -f` + +This will begin a periodic monitoring that updates 10 times per second. + +Finally, in a third window, export the socket path: + +`export UCART_SOCKET=./ucart.socket` + +and then run any other tools to modify the quad, for example modifying PID constants: + +`./cli setpid --pitch -p 1.000` + diff --git a/groundStation/src/cli/cli_monitor.c b/groundStation/src/cli/cli_monitor.c index 7ce0d3314e65609c5d016d0922ef577917a4879e..924cee52e249de0e6d9f3d72791f65d98daebdea 100644 --- a/groundStation/src/cli/cli_monitor.c +++ b/groundStation/src/cli/cli_monitor.c @@ -18,8 +18,10 @@ int cli_monitor(struct backend_conn * conn, int argc, char **argv) { static struct timespec elapsedTime; static struct timespec lastChecked; static int nsecs, rate = 10; + static int forever = 0; - while ((c = getopt(argc, argv, "t:r:")) != -1) { + + while ((c = getopt(argc, argv, "ft:r:")) != -1) { switch(c) { case 't' : nsecs = atoi(optarg); @@ -28,12 +30,19 @@ int cli_monitor(struct backend_conn * conn, int argc, char **argv) { case 'r' : rate = atoi(optarg) + 1; break; + case 'f' : + forever = 1; + break; default : break; } } - if(timeFlag) { + if (forever) { + for (;;) { + monitor(conn); + } + } else if (timeFlag) { clock_gettime(CLOCK_REALTIME, &startTime); clock_gettime(CLOCK_REALTIME, &lastChecked); while((result = monitor(conn)) == 0) { @@ -82,4 +91,4 @@ static void timespec_diff(struct timespec *start, struct timespec *result) } return; -} \ No newline at end of file +}