Market penetration of smartphones as a computing and communications platform has increased significantly in recent years. This has created an opportunity to integrate mobile consumer devices (e.g., smartphones, tablets) with external sensors to enable the collection of sensed data directly onto mobile devices. The work is part of the larger Open Data Kit (ODK) project that couples mobile devices with cloud services to create mobile information systems that magnify human resources through appropriately designed technology. By lowering the barriers to add external sensing components, we hope to expand mobile data collection applications to include an even richer set of data types. Even though capturing sensor data directly eliminates many of the errors that plague traditional data collection techniques, such as manual form-filling, it is still not widely used in developing regions because of the high level of technical expertise required to develop a mobile sensing application. The technical challenges include managing the details of different physical communication channels, processing sensor-specific data, developing a user interface, and designing application control logic. Because of these complications, we hypothesize that including sensors in mobile data collection poses several technical barriers that, if reduced, would enable more applications to leverage sensors for data collection across varied domains. To address this, we created an application-level driver framework that enables convenient reuse of sensor-specific code between applications by logically separating the high-level application from the underlying sensor driver.
The focus of ODK Sensors is on enabling the integration of data from a variety of sensors over both wired and wireless communication channels. It simplifies application development by creating a single interface that can control virtually any kind of sensor (both external and built-in) and reduces the amount of code needed to access a sensor. Having a single interface is appropriate for lightly trained technical workers because it hides a large number of the details involved in developing sensing applications. Applications that leverage the framework to communicate with external sensors can be implemented in fewer lines of code by removing sensor communication code. Additionally, the sensor framework automatically multiplexes the communication channels allowing different types of sensors to be used simultaneously by an application. For example, an application can easily use two USB and three Bluetooth sensors simultaneously to record several phenomena at once. The ODK Sensors framework is designed to flexibly meet any application’s needs regardless of data type, data collection rate and size, sensor configuration requirements, or communication channel. The framework also provides a simple, high-performing, and flexible abstraction on which to develop and deploy user-level device drivers on Android. While a device driver abstraction is a standard concept, the framework includes features that make development of device drivers easier by handling sensor state (e.g., connection, buffered data, threading) and only requiring driver developers to implement sensor-specific commands and data processing.
Unlike traditional PC devices, the new class of mobile consumer devices are often locked by service providers or manufacturers, and most end-users do not have the administrative rights, technical ability, or organizational capacity to modify or customize the operating system. As a result, it’s impractical to rely on conventional in-kernel device driver frameworks to integrate external sensors with consumer smartphones. Our project explores ways to package software so that non-technical users can access external sensors from a locked mobile device running a stock version of the Android operating system. The framework assumes the consumer device is ‘locked down’ and an end-user only has the skills to install applications from a standard app marketplace such as Google Play (Google’s Android app store). Using standard Android app distribution channels will make it easy for users to download functionality enhancements (application-level device drivers) to their unmodified Android OS. This simple method of deployment will hopefully lead to the creation of new sensing-based mobile data collection applications that improve information services in under-resourced contexts that typically lack a rich technology infrastructure (both physically and in terms of expertise). ODK Sensors increases the variation of input data types possible by simplifying access to sensing resources through the creation of a single interface that makes external sensors as easy to integrate as built-in sensors. By creating a framework designed to follow ODK’s philosophy of modular components, we aim to expand the tool suite to allow end-users to easily augment their Android device with external sensing options. The component enables easy reuse of sensor drivers that will hopefully lead to an ecosystem of drivers further promoting the creation of novel mobile sensing applications.