Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of F401RE-USBHost by
Diff: USBHostGPS/USBHostGPS.h
- Revision:
- 8:6463cd1964c0
- Parent:
- 3:a3872f7593e2
--- a/USBHostGPS/USBHostGPS.h Tue Jan 28 06:50:12 2014 +0000
+++ b/USBHostGPS/USBHostGPS.h Fri Jan 31 13:45:07 2014 +0000
@@ -3,19 +3,61 @@
#define PL2303_SET_LINE_CODING 0x20
-class USBHostGPS {
+class USBHostGPS : public IUSBEnumerator {
public:
- USBHostGPS(int baud = 38400) {
- host = USBHost::getHostInst();
- // stop bit = 1, parity = none, 8bit
- uint8_t data[] = {baud&0xff, baud>>8, baud>>16, baud>>24, 0x00, 0x00, 0x08};
- SETUP_PACKET setup = {0x21, PL2303_SET_LINE_CODING, 0, 0, 0};
- host->ControlWrite(&setup, data, sizeof(data));
+
+ /**
+ * Constructor
+ */
+ USBHostGPS(int baud = 38400);
+
+ /**
+ * Try to connect a USB GPS device
+ *
+ * @return true if connection was successful
+ */
+ bool connect();
+
+ /**
+ * Check if a USB GPS is connected
+ *
+ * @returns true if a mouse is connected
+ */
+ bool connected();
+
+ int readNMEA(char* data, int size, int timeout_ms) {
+ int result = host->BulkRead(bulk_in, (uint8_t*)data, size, timeout_ms);
+ return (result >= 0) ? bulk_in->getLengthTransferred() : 0;
}
- int readNMEA(char* data, int size) {
- return host->BulkRead((uint8_t*)data, size);
+ void attachEvent(void (*ptr)(uint8_t* data, int size)) {
+ if (ptr != NULL) {
+ onUpdate = ptr;
+ }
}
+ void poll() {
+ int result = host->BulkRead(bulk_in, buf, sizeof(buf), 0);
+ if (result >= 0) {
+ if (onUpdate) {
+ (*onUpdate)(buf, bulk_in->getLengthTransferred());
+ }
+ }
+ }
+
+protected:
+ //From IUSBEnumerator
+ virtual void setVidPid(uint16_t vid, uint16_t pid);
+ virtual bool parseInterface(uint8_t intf_nb, uint8_t intf_class, uint8_t intf_subclass, uint8_t intf_protocol); //Must return true if the interface should be parsed
+ virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
private:
USBHost * host;
+ USBDeviceConnected* dev;
+ USBEndpoint* bulk_in;
+ bool dev_connected;
+ bool gps_device_found;
+ int gps_intf;
+ void (*onUpdate)(uint8_t* data, int size);
+ uint8_t buf[64];
+ int baud;
+ void init();
};
