\item\textbf{GPS reporting}: Each collar has the ability to gather GPS information frequently and transmit this information back to the gateway. Each end-device has a certain frequency of communication, and can be set to send messages once every certain time period. This value is defined based on the number of end-devices, battery constraints, and desired latency. For example, the frequency can be set to once every 5 minutes. Then, the gateway will hear over LoRa a transmission from an end-device once every 5 minutes. This information is decoded and saved to the database. The contents of this message is the current location of the end-device. This allows each collar to frequently inform the gateway and eventually the user of its current location, and the database provides a history of each collar.
\item\textbf{Observing all animals on the Android application}: The Android application can display to the user the most recent location of each end-device based on the last received transmission. This information is displayed on a fully interactive map, allowing the user to navigate the map by zooming or panning. This provides the user with the ability to observe each animal's location, which is accurate to about a foot.
\item\textbf{Defining grazing boundaries}: The Android application fully supports defining boundaries by adding and manipulating coordinates on an interactive map. The user has the ability to add a grazing boundary using up to ten different points. Once the user has defined these points on the map, and is happy with the resulting boundary, this information is send over HTTP back to the server which then saves this information into the database. The gateway will then poll this database frequently, and once it notices that a new boundary has been defined it will queue this new data to be sent to every end-device on the next transmission. Then, the new boundaries are sent out and received by each collar which overwrites the old boundaries in memory.
\item\textbf{Bounds checking}: Each collar has the ability to determine it's location and check whether or not it is with the grazing bounds through the use of an algorithm. This algorithm determines whether or not a GPS location is constrained by an area defined by a various number of coordinates. This provides the collar with the functionality to divert animals away from boundaries once the stimulus has been decided on and implemented. That is, currently the collar only knows when it is no longer in bounds but does not presently do anything about it. However, it is trivial to do something with this information once stimulus hardware has been implemented.
\item\textbf{Observing end-node movement history}: The Android application has the ability to select one specific collar and observe the history of this collar. The movement of this collar is then displayed onto the interactive map with lines, and the rancher has the ability to see exactly where this animal has been over a certain time period. All of this information is sent to the Android application from the server, and the server gathers this history from the database. As each communication from the end-devices are saved to the database, it is trivial to go through all history for one specific collar.