Code to control a Traxster robot using a Wimote and Android app
Fork of BlueUSB by
Diff: main.cpp
- 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(); }