Code to control a Traxster robot using a Wimote and Android app

Dependencies:   mbed

Fork of BlueUSB by Peter Barrett

Revision:
1:accdaa84fe8d
Parent:
0:606b230e5b4a
--- a/main.cpp	Sat Apr 10 00:30:24 2010 +0000
+++ b/main.cpp	Mon Apr 28 16:06:32 2014 +0000
@@ -1,121 +1,47 @@
-/*
-Copyright (c) 2010 Peter Barrett
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
 #include "mbed.h"
 #include "USBHost.h"
 #include "Utils.h"
-#include "FATFileSystem.h"
 
-int MassStorage_ReadCapacity(int device, u32* blockCount, u32* blockSize);
-int MassStorage_Read(int device, u32 blockAddr, u32 blockCount, u8* dst, u32 blockSize);
-int MassStorage_Write(int device, u32 blockAddr, u32 blockCount, u8* dst, u32 blockSize);
+Serial pc(USBTX, USBRX);
+Serial rob(p13, p14);
+DigitalIn modeSw(p19);
 
-class USBFileSystem : public FATFileSystem
+// because of wiring on the breadboard, these pins are connected to 5V or
+// ground (for the robot and BlueSMiRF connections) so configure them as inputs
+// to avoid shorting anything out
+DigitalIn di11(p11);
+DigitalIn di12(p12);
+DigitalIn di15(p15);
+DigitalIn di16(p16);
+
+extern DigitalOut led1, led2, led3, led4;
+
+Ticker failsafeTick;
+time_t lastReportTime;
+
+void failsafe()
 {
-    int _device;
-    u32 _blockSize;
-    u32 _blockCount;
-    
-public:
-    USBFileSystem() : FATFileSystem("usb"),_device(0),_blockSize(0),_blockCount(0)
+    time_t t = time(NULL);
+    if (t > lastReportTime+1)
     {
-    }
-    
-    void SetDevice(int device)
-    {
-        _device = device;
-    }
-    
-    virtual int disk_initialize()
-    {
-        return MassStorage_ReadCapacity(_device,&_blockCount,&_blockSize);
-    }
-    
-    virtual int disk_write(const char *buffer, int block_number)
-    {
-        return MassStorage_Write(_device,block_number,1,(u8*)buffer,_blockSize);
+        rob.puts("stop\r");
+        led3 = 1;
     }
-    
-    virtual int disk_read(char *buffer, int block_number)
-    {
-        return MassStorage_Read(_device,block_number,1,(u8*)buffer,_blockSize);
-    }
-        
-    virtual int disk_sectors()
-    {
-        return _blockCount;
-    }
-};
-
-void DumpFS(int depth, int count)
-{
-    DIR *d = opendir("/usb");
-    if (!d)
-    {
-        printf("USB file system borked\n");
-        return;
-    }
-
-    printf("\nDumping root dir\n");
-    struct dirent *p;
-    for(;;)
-    {
-        p = readdir(d);
-        if (!p)
-            break;
-        int len = sizeof( dirent);
-        printf("%s %d\n", p->d_name, len);
-    }
-    closedir(d);
 }
 
-int OnDiskInsert(int device)
-{
-    USBFileSystem fs;
-    fs.SetDevice(device);
-    DumpFS(0,0);
-    return 0;
-}
-
-/*
-    Simple test shell to exercise mouse,keyboard,mass storage and hubs.
-    Add 2 15k pulldown resistors between D+/D- and ground, attach a usb socket and have at it.
-*/
-
-Serial pc(USBTX, USBRX);
-int GetConsoleChar()
-{
-    if (!pc.readable())
-        return -1;
-    char c = pc.getc();
-    pc.putc(c); // echo
-    return c;
-}
-
-void TestShell();
+void RunWiimote();
+void RunAndroid();
 
 int main()
 {
-    pc.baud(460800);
-    printf("BlueUSB\nNow get a bunch of usb or bluetooth things and plug them in\n");
-    TestShell();
+    modeSw.mode(PullDown);
+    rob.baud(19200);
+    set_time(9001);
+    failsafeTick.attach(&failsafe, 0.1);
+    
+    printf("Vroom Vroom!\n");
+    if (modeSw)
+        RunWiimote();
+    else
+        RunAndroid();
 }