Changeset c1c6a1d in orbit


Ignore:
Timestamp:
08/02/13 23:55:38 (7 years ago)
Author:
Steve Castellotti <sc@…>
Branches:
master, Servo, Tab_Interface, pyramid
Children:
80a3944
Parents:
0ab8242 (diff), de10cbc (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' into RawEEG

Files:
4 added
2 deleted
19 edited

Legend:

Unmodified
Added
Removed
  • iOS/Orbit/Orbit/AppDelegate.m

    rce0a7ee rde10cbc  
    2424    return YES; 
    2525} 
    26                                                          
     26 
    2727- (void)applicationWillResignActive:(UIApplication *)application 
    2828{ 
  • iOS/Orbit/Orbit/SignalConverter.h

    rce0a7ee rde10cbc  
    88 
    99#import <Foundation/Foundation.h> 
     10//#import <MediaPlayer/MediaPlayer.h> 
    1011#import <AVFoundation/AVFoundation.h> 
    1112#import "TGAccessoryManager.h" 
     
    2223@property (nonatomic) float meditationThreshold; 
    2324@property (nonatomic) BOOL running; 
     25@property (nonatomic) BOOL testing; 
    2426 
    2527 
     
    3133- (BOOL) isVolumeMax; 
    3234- (void) setYaw:(int)y throttle:(int)t pitch:(int)p; 
     35- (void) playTestSound; 
     36- (void) stopTestSound; 
    3337 
    3438@end 
  • iOS/Orbit/Orbit/SignalConverter.m

    rce0a7ee rde10cbc  
    3030} 
    3131 
    32 @synthesize attentionThreshold, meditationThreshold, running; 
     32@synthesize attentionThreshold, meditationThreshold, running, testing; 
    3333 
    3434 
     
    139139- (BOOL) isVolumeMax 
    140140{ 
    141     float volume = [[AVAudioSession sharedInstance] outputVolume]; 
    142     return volume == 1.0; 
     141    AudioSessionSetActive(YES); 
     142    return 1.0 == [[AVAudioSession sharedInstance] outputVolume]; 
    143143} 
    144144 
     
    147147- (BOOL) startProcessing 
    148148{ 
     149    if (testing) return NO; 
    149150    EAAccessory *accessory = [[TGAccessoryManager sharedTGAccessoryManager] accessory]; 
    150151    if (accessory != nil) { 
     
    160161- (void) stopProcessing 
    161162{ 
    162     [self appStopped]; 
     163    if (running) [self appStopped]; 
     164} 
     165 
     166- (void) playTestSound 
     167{ 
     168    if (!running && !testing) { 
     169        testing = YES; 
     170        [audioPlayer playWithThrottle:throttle yaw:yaw pitch:pitch]; 
     171    } 
     172} 
     173 
     174- (void) stopTestSound 
     175{ 
     176    if (testing) { 
     177        testing = NO; 
     178        [audioPlayer stop]; 
     179    } 
    163180} 
    164181 
  • iOS/Orbit/Orbit/controllers/AdvancedViewController.h

    rab9d63b rde10cbc  
    1717@property (nonatomic, retain) IBOutlet UILabel *pitchPercent; 
    1818@property (nonatomic, retain) IBOutlet UISlider *pitch; 
     19@property (nonatomic, retain) IBOutlet UIBarButtonItem *resetButton; 
    1920 
    2021- (IBAction) pitchChanged:(id)sender; 
     
    2223- (IBAction) throttleChanged:(id)sender; 
    2324 
     25- (IBAction) resetButtonPressed:(id)button; 
     26 
    2427@end 
  • iOS/Orbit/Orbit/controllers/AdvancedViewController.m

    rce0a7ee rde10cbc  
    5353- (void) adjustValues 
    5454{ 
    55      
     55    [signalConverter setYaw:[self yawValue]throttle:[self throttleValue] pitch:[self pitchValue]]; 
     56} 
     57 
     58- (int) yawValue 
     59{ 
     60    return round(yaw.value * 100); 
     61} 
     62 
     63- (int) pitchValue 
     64{ 
     65    return round(pitch.value * 100); 
     66} 
     67 
     68- (int) throttleValue 
     69{ 
     70    return round(throttle.value * 100); 
     71} 
     72 
     73- (IBAction) resetButtonPressed:(id)button 
     74{ 
     75    pitch.value = 0.5; 
     76    yaw.value = 0.5; 
     77    throttle.value = 0.5; 
     78    NSString *zero = @"0%"; 
     79    throttlePercent.text = zero; 
     80    yawPercent.text = zero; 
     81    pitchPercent.text = zero; 
     82    [self adjustValues]; 
    5683} 
    5784 
  • iOS/Orbit/Orbit/controllers/FlightViewController.h

    rab9d63b rde10cbc  
    2727@property (nonatomic, retain) IBOutlet UISlider *meditationThreshold; 
    2828@property (nonatomic, retain) IBOutlet UIBarButtonItem *connectButton; 
     29@property (nonatomic, retain) IBOutlet UIBarButtonItem *testButton; 
    2930@property (nonatomic, retain) IBOutlet UIImageView *statusImage; 
    3031 
    3132- (IBAction) connectButtonPressed:(id) sender; 
     33- (IBAction) testButtonPressed:(id) sender; 
    3234 
    3335@end 
  • iOS/Orbit/Orbit/controllers/FlightViewController.m

    rce0a7ee rde10cbc  
    2626} 
    2727 
    28 @synthesize status, attention, meditation, signal, power, attentionThreshold, meditationThreshold, connectButton, statusImage, signalPercent, attentionPercent, meditationPercent, powerPercent; 
     28@synthesize status, attention, meditation, signal, power, attentionThreshold, meditationThreshold, connectButton, testButton, statusImage, signalPercent, attentionPercent, meditationPercent, powerPercent; 
    2929 
    3030- (void)viewDidLoad 
     
    142142        [signalConverter stopProcessing]; 
    143143        [self resetViews]; 
     144    } else if (!signalConverter.isVolumeMax) { 
     145        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Turn Up The Volume" message:@"Your device volume must be at the maximum for proper operation" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
     146        [alert show]; 
    144147    } else if (!signalConverter.isBluetoothReady) { 
    145148        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Device not found" message:@"No Bluetooth device detected. Ensure Bluetooth is on and the Mindwave headset is paired" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
    146         [alert show]; 
    147     } else if (!signalConverter.isVolumeMax) { 
    148         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Turn Up The Volume" message:@"Your device volume must be at the maximum for proper operation" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
    149149        [alert show]; 
    150150    } else if ([signalConverter startProcessing]) { 
     
    157157} 
    158158 
     159- (IBAction) testButtonPressed:(id) sender { 
     160    if (signalConverter.running) { 
     161        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Stop test sound" message:@"Press Stop first to end the test" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
     162        [alert show]; 
     163    } else { 
     164        if (signalConverter.testing) { 
     165            testButton.title = @"Test"; 
     166            [signalConverter stopTestSound]; 
     167        } else { 
     168            testButton.title = @"Stop"; 
     169            [signalConverter playTestSound]; 
     170        } 
     171    } 
     172} 
     173 
    159174@end 
  • iOS/Orbit/Orbit/controllers/TutorialViewController.m

    rce0a7ee rde10cbc  
    1515- (void)viewDidLoad 
    1616{ 
    17     NSString *file = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]; 
    18     NSString *html = [NSString stringWithContentsOfFile:file encoding:NSUTF8StringEncoding error:nil]; 
    19     [webView loadHTMLString:html baseURL:nil]; 
     17    [webView loadRequest: 
     18     [NSURLRequest requestWithURL: 
     19      [NSURL fileURLWithPath: 
     20       [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]]]]; 
    2021    [super viewDidLoad]; 
    2122} 
  • iOS/Orbit/Orbit/en.lproj/MainStoryboard.storyboard

    rce0a7ee rde10cbc  
    189189                                <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/> 
    190190                                <items> 
    191                                     <navigationItem title="Advanced" id="5si-2Z-XrP"/> 
     191                                    <navigationItem title="Advanced" id="5si-2Z-XrP"> 
     192                                        <barButtonItem key="rightBarButtonItem" title="Reset" id="gTs-AS-CLK"> 
     193                                            <connections> 
     194                                                <action selector="resetButtonPressed:" destination="GcO-3J-amz" id="BNP-eK-aEX"/> 
     195                                            </connections> 
     196                                        </barButtonItem> 
     197                                    </navigationItem> 
    192198                                </items> 
    193199                            </navigationBar> 
     
    199205                        <outlet property="pitch" destination="pE4-wd-89x" id="Sbm-iD-GAE"/> 
    200206                        <outlet property="pitchPercent" destination="cMg-2k-3dB" id="CuC-M3-EWV"/> 
     207                        <outlet property="resetButton" destination="gTs-AS-CLK" id="xuL-gD-ehx"/> 
    201208                        <outlet property="throttle" destination="mKS-gr-qpn" id="O0G-49-cDf"/> 
    202209                        <outlet property="throttlePercent" destination="uE4-bJ-AfU" id="2eT-1d-7nT"/> 
     
    222229                                <items> 
    223230                                    <navigationItem title="Flight" id="adH-fG-xVu"> 
    224                                         <barButtonItem key="rightBarButtonItem" title="Connect" id="Lwp-ZU-iKO"> 
     231                                        <barButtonItem key="leftBarButtonItem" title="Connect" id="Lwp-ZU-iKO"> 
    225232                                            <connections> 
    226233                                                <action selector="connectButtonPressed:" destination="2FE-fA-6q3" id="01p-85-w79"/> 
     234                                            </connections> 
     235                                        </barButtonItem> 
     236                                        <barButtonItem key="rightBarButtonItem" title="Test" id="Geo-cL-sK5"> 
     237                                            <connections> 
     238                                                <action selector="testButtonPressed:" destination="FNb-Lg-ILk" id="eh7-gJ-44x"/> 
    227239                                            </connections> 
    228240                                        </barButtonItem> 
     
    398410                        <outlet property="status" destination="BOS-Js-1rx" id="fDM-Of-lza"/> 
    399411                        <outlet property="statusImage" destination="aa9-oz-0Qj" id="ilQ-PQ-gI8"/> 
     412                        <outlet property="testButton" destination="Geo-cL-sK5" id="P8n-GW-Eih"/> 
    400413                    </connections> 
    401414                </viewController> 
     
    474487            <relationships> 
    475488                <relationship kind="action" name="pitchChanged:"/> 
     489                <relationship kind="action" name="resetButtonPressed:"/> 
    476490                <relationship kind="action" name="throttleChanged:"/> 
    477491                <relationship kind="action" name="yawChanged:"/> 
    478492                <relationship kind="outlet" name="pitch" candidateClass="UISlider"/> 
    479493                <relationship kind="outlet" name="pitchPercent" candidateClass="UILabel"/> 
     494                <relationship kind="outlet" name="resetButton" candidateClass="UIBarButtonItem"/> 
    480495                <relationship kind="outlet" name="throttle" candidateClass="UISlider"/> 
    481496                <relationship kind="outlet" name="throttlePercent" candidateClass="UILabel"/> 
     
    488503            <relationships> 
    489504                <relationship kind="action" name="connectButtonPressed:"/> 
     505                <relationship kind="action" name="testButtonPressed:"/> 
    490506                <relationship kind="outlet" name="attention" candidateClass="UIProgressView"/> 
    491507                <relationship kind="outlet" name="attentionPercent" candidateClass="UILabel"/> 
     
    501517                <relationship kind="outlet" name="status" candidateClass="UILabel"/> 
    502518                <relationship kind="outlet" name="statusImage" candidateClass="UIImageView"/> 
     519                <relationship kind="outlet" name="testButton" candidateClass="UIBarButtonItem"/> 
    503520            </relationships> 
    504521        </class> 
  • iOS/Orbit/index.html

    rce0a7ee rde10cbc  
    33    <head> 
    44        <meta name="viewport" content="width=device-width"> 
     5        <link rel="stylesheet" type="text/css" href="style.css"> 
    56        <title>Orbit Tutorial</title> 
    67    </head> 
    78    <body> 
    8         <h1>Content goes here</h1> 
     9        <h1>Step 1</h1> 
     10        <a class='next button' href="step2.html">Step 2 &raquo;</a> 
    911    </body> 
    1012</html> 
  • iOS/Orbit/orbit.xcodeproj/project.pbxproj

    rce0a7ee rde10cbc  
    2828                28174C71167F2EA900104752 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 28174C70167F2EA900104752 /* AppDelegate.m */; }; 
    2929                28174C7A167F2EAA00104752 /* MainStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 28174C78167F2EAA00104752 /* MainStoryboard.storyboard */; }; 
    30                 28174C7D167F2EAA00104752 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28174C7C167F2EAA00104752 /* ViewController.m */; }; 
    31                 28174C84167F30C400104752 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28174C83167F30C400104752 /* AVFoundation.framework */; }; 
     30                282B687017ABD601003DA675 /* step2.html in Resources */ = {isa = PBXBuildFile; fileRef = 282B686F17ABD601003DA675 /* step2.html */; }; 
     31                282B687217ABD9EC003DA675 /* style.css in Resources */ = {isa = PBXBuildFile; fileRef = 282B687117ABD9EC003DA675 /* style.css */; }; 
     32                282B687417ABDAB2003DA675 /* step3.html in Resources */ = {isa = PBXBuildFile; fileRef = 282B687317ABDAB2003DA675 /* step3.html */; }; 
     33                282B687517ABEE33003DA675 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28174C83167F30C400104752 /* AVFoundation.framework */; }; 
    3234                2843FE891790205900C79D56 /* status_1.png in Resources */ = {isa = PBXBuildFile; fileRef = 2843FE811790205900C79D56 /* status_1.png */; }; 
    3335                2843FE8A1790205900C79D56 /* status_1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2843FE821790205900C79D56 /* status_1@2x.png */; }; 
     
    8385                28174C70167F2EA900104752 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; }; 
    8486                28174C79167F2EAA00104752 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard.storyboard; sourceTree = "<group>"; }; 
    85                 28174C7B167F2EAA00104752 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; }; 
    86                 28174C7C167F2EAA00104752 /* ViewController.m */ = {isa = PBXFileReference; indentWidth = 3; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; tabWidth = 3; }; 
    8787                28174C83167F30C400104752 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; 
     88                282B686D17ABC368003DA675 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; }; 
     89                282B686F17ABD601003DA675 /* step2.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = step2.html; sourceTree = "<group>"; }; 
     90                282B687117ABD9EC003DA675 /* style.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = style.css; sourceTree = "<group>"; }; 
     91                282B687317ABDAB2003DA675 /* step3.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = step3.html; sourceTree = "<group>"; }; 
    8892                2843FE811790205900C79D56 /* status_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = status_1.png; sourceTree = "<group>"; }; 
    8993                2843FE821790205900C79D56 /* status_1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "status_1@2x.png"; sourceTree = "<group>"; }; 
     
    199203                        buildActionMask = 2147483647; 
    200204                        files = ( 
     205                                282B687517ABEE33003DA675 /* AVFoundation.framework in Frameworks */, 
    201206                                286608E417A7D40F003FA806 /* AudioToolbox.framework in Frameworks */, 
    202207                                28F901301799436F003FB5ED /* CoreBluetooth.framework in Frameworks */, 
     
    206211                                2815BC0E167F42F500F7E6DA /* Accelerate.framework in Frameworks */, 
    207212                                2815BC0F167F42F500F7E6DA /* ExternalAccessory.framework in Frameworks */, 
    208                                 28174C84167F30C400104752 /* AVFoundation.framework in Frameworks */, 
    209213                                28174C61167F2EA900104752 /* UIKit.framework in Frameworks */, 
    210214                                28174C63167F2EA900104752 /* Foundation.framework in Frameworks */, 
     
    220224                        children = ( 
    221225                                280D2AB417A802DB002D6863 /* index.html */, 
     226                                282B686F17ABD601003DA675 /* step2.html */, 
     227                                282B687117ABD9EC003DA675 /* style.css */, 
     228                                282B687317ABDAB2003DA675 /* step3.html */, 
    222229                        ); 
    223230                        name = Tutorial; 
     
    240247                        isa = PBXGroup; 
    241248                        children = ( 
     249                                282B686D17ABC368003DA675 /* MediaPlayer.framework */, 
    242250                                280D2AB317A802C7002D6863 /* Tutorial */, 
    243251                                286608E317A7D40F003FA806 /* AudioToolbox.framework */, 
     
    282290                                28174C70167F2EA900104752 /* AppDelegate.m */, 
    283291                                28174C78167F2EAA00104752 /* MainStoryboard.storyboard */, 
    284                                 28174C7B167F2EAA00104752 /* ViewController.h */, 
    285                                 28174C7C167F2EAA00104752 /* ViewController.m */, 
    286292                                2815BC08167F428B00F7E6DA /* Libraries */, 
    287293                                28174C67167F2EA900104752 /* Supporting Files */, 
     
    498504                                280D2AC417A81714002D6863 /* tutorial.png in Resources */, 
    499505                                280D2AC517A81714002D6863 /* tutorial@2x.png in Resources */, 
     506                                282B687017ABD601003DA675 /* step2.html in Resources */, 
     507                                282B687217ABD9EC003DA675 /* style.css in Resources */, 
     508                                282B687417ABDAB2003DA675 /* step3.html in Resources */, 
    500509                        ); 
    501510                        runOnlyForDeploymentPostprocessing = 0; 
     
    510519                                28174C6D167F2EA900104752 /* main.m in Sources */, 
    511520                                28174C71167F2EA900104752 /* AppDelegate.m in Sources */, 
    512                                 28174C7D167F2EAA00104752 /* ViewController.m in Sources */, 
    513521                                289C7CCF178C36A9005C08EC /* TutorialViewController.m in Sources */, 
    514522                                289C7D0E178D757F005C08EC /* FlightViewController.m in Sources */, 
  • android/.classpath

    rd6fbdfb r4f3fd92  
    88        <classpathentry kind="src" path="src"/> 
    99        <classpathentry kind="src" path="gen"/> 
     10        <classpathentry exported="true" kind="lib" path="libs/androidplot-core-0.6.0.jar"/> 
    1011        <classpathentry kind="output" path="bin/classes"/> 
    1112</classpath> 
  • android/AndroidManifest.xml

    rc298bcb r81fb7d8  
    22<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    33    package="info.puzzlebox.orbit" 
    4     android:versionCode="2" 
    5     android:versionName="1.2.0" > 
     4    android:versionCode="3" 
     5    android:versionName="1.2.2" > 
    66 
    77    <uses-sdk 
    88        android:minSdkVersion="8" 
    9         android:targetSdkVersion="15" /> 
     9        android:targetSdkVersion="17" /> 
    1010 
    1111    <uses-permission android:name="android.permission.BLUETOOTH" /> 
     
    1717        android:icon="@drawable/ic_launcher" 
    1818        android:label="@string/app_name" 
    19         android:theme="@style/AppTheme" > 
     19        android:theme="@style/AppTheme" 
     20        android:allowBackup="true" > 
     21         
    2022        <activity 
    2123            android:name=".OrbitActivity" 
  • android/res/layout-large/activity_main.xml

    r5c11ea9 r81fb7d8  
    4545        android:layout_height="wrap_content" 
    4646        android:max="100" 
    47         android:progress="82" 
     47        android:progress="0" 
    4848        android:progressDrawable="@xml/progress_drawable" 
    4949        android:thumb="@xml/thumb_drawable" /> 
     
    124124            android:text="@string/checkbox_advanced_options" /> 
    125125    </LinearLayout> 
     126 
     127    <com.androidplot.xy.XYPlot 
     128        android:id="@+id/eegRawHistoryPlot" 
     129        android:layout_width="fill_parent" 
     130        android:layout_height="200dp" 
     131        android:layout_marginLeft="0dp" 
     132        android:layout_marginRight="0dp" 
     133        android:layout_marginTop="0dp" 
     134        android:layout_weight="1" 
     135        title="EEG Raw Wave" /> 
    126136 
    127137    <LinearLayout 
  • android/res/layout-small/activity_main.xml

    r8358488 r81fb7d8  
    4545        android:layout_height="wrap_content" 
    4646        android:max="100" 
    47         android:progress="82" 
     47        android:progress="0" 
    4848        android:progressDrawable="@xml/progress_drawable" 
    4949        android:thumb="@xml/thumb_drawable" /> 
     
    127127            android:text="@string/checkbox_advanced_options" /> 
    128128    </LinearLayout> 
     129 
     130    <com.androidplot.xy.XYPlot 
     131        android:id="@+id/eegRawHistoryPlot" 
     132        android:layout_width="fill_parent" 
     133        android:layout_height="100dp" 
     134        android:layout_marginLeft="0dp" 
     135        android:layout_marginRight="0dp" 
     136        android:layout_marginTop="0dp" 
     137        android:layout_weight="1" 
     138        title="EEG Raw Wave" /> 
    129139 
    130140    <LinearLayout 
  • android/res/layout-xlarge/activity_main.xml

    r8358488 r81fb7d8  
    4545        android:layout_height="wrap_content" 
    4646        android:max="100" 
    47         android:progress="82" 
     47        android:progress="0" 
    4848        android:progressDrawable="@xml/progress_drawable" 
    4949        android:thumb="@xml/thumb_drawable" /> 
     
    124124            android:text="@string/checkbox_advanced_options" /> 
    125125    </LinearLayout> 
     126 
     127    <com.androidplot.xy.XYPlot 
     128        android:id="@+id/eegRawHistoryPlot" 
     129        android:layout_width="fill_parent" 
     130        android:layout_height="200dp" 
     131        android:layout_marginLeft="0dp" 
     132        android:layout_marginRight="0dp" 
     133        android:layout_marginTop="0dp" 
     134        android:layout_weight="1" 
     135        title="EEG Raw Wave" /> 
    126136 
    127137    <LinearLayout 
  • android/res/layout/activity_main.xml

    r5c11ea9 r81fb7d8  
    4545        android:layout_height="wrap_content" 
    4646        android:max="100" 
    47         android:progress="82" 
     47        android:progress="0" 
    4848        android:progressDrawable="@xml/progress_drawable" 
    4949        android:thumb="@xml/thumb_drawable" /> 
     
    127127            android:text="@string/checkbox_advanced_options" /> 
    128128    </LinearLayout> 
     129 
     130    <com.androidplot.xy.XYPlot 
     131        android:id="@+id/eegRawHistoryPlot" 
     132        android:layout_width="fill_parent" 
     133        android:layout_height="100dp" 
     134        android:layout_marginLeft="0dp" 
     135        android:layout_marginRight="0dp" 
     136        android:layout_marginTop="0dp" 
     137        android:layout_weight="1" 
     138        title="EEG Raw Wave" /> 
    129139 
    130140    <LinearLayout 
  • android/src/info/puzzlebox/orbit/OrbitActivity.java

    rd6fbdfb r4da9757  
    1414 *       all USB Serial support to OrbitUSBActivity. 
    1515 */ 
     16 
     17import java.text.DecimalFormat; 
     18import java.util.Arrays; 
    1619 
    1720import android.media.AudioManager; 
     
    5558import com.neurosky.thinkgear.TGDevice; 
    5659 
     60import com.androidplot.xy.*; 
     61 
    5762 
    5863public class OrbitActivity extends Activity implements SeekBar.OnSeekBarChangeListener { 
     
    6873        boolean eegConnecting = false; 
    6974        boolean demoFlightMode = false; 
     75        Number[] rawEEG = new Number[512]; 
     76        int arrayIndex = 0; 
    7077 
    7178 
     
    97104        int viewSpaceGenerateAudioWidth = 120; 
    98105 
     106        private static final int EEG_RAW_HISTORY_SIZE = 512;            // number of points to plot in EEG history 
     107        private XYPlot eegRawHistoryPlot = null; 
     108        private SimpleXYSeries eegRawHistorySeries = null; 
     109 
     110 
    99111        LinearLayout layoutControl; 
    100112        LinearLayout layoutAudioService; 
     
    154166        int maximumPower = 100; // maximum power for the helicopter throttle 
    155167        String currentCommand = "neutral"; 
    156         final boolean rawEnabled = false; 
     168        //      final boolean rawEnabled = false; 
     169        final boolean rawEnabled = true; 
    157170 
    158171 
     
    228241                progressBarPower.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.progress_horizontal)); 
    229242 
     243 
     244                // setup the Raw EEG History plot 
     245                eegRawHistoryPlot = (XYPlot) findViewById(R.id.eegRawHistoryPlot); 
     246                eegRawHistorySeries = new SimpleXYSeries("Raw EEG"); 
     247 
     248                // Use index value as xVal, instead of explicit, user provided xVals. 
     249                //              eegRawHistorySeries.useImplicitXVals(); 
     250 
     251                // Setup the boundary mode, boundary values only applicable in FIXED mode. 
     252                eegRawHistoryPlot.setDomainBoundaries(0, EEG_RAW_HISTORY_SIZE, BoundaryMode.FIXED); 
     253                //              eegRawHistoryPlot.setDomainBoundaries(0, EEG_RAW_HISTORY_SIZE, BoundaryMode.AUTO); 
     254                //              eegRawHistoryPlot.setRangeBoundaries(-32767, 32767, BoundaryMode.FIXED); 
     255                //              eegRawHistoryPlot.setRangeBoundaries(-32767, 32767, BoundaryMode.AUTO); 
     256                eegRawHistoryPlot.setRangeBoundaries(-256, 256, BoundaryMode.GROW); 
     257 
     258                eegRawHistoryPlot.addSeries(eegRawHistorySeries, new LineAndPointFormatter(Color.rgb(200, 100, 100), Color.BLACK, null, null)); 
     259 
     260                // Thin out domain and range tick values so they don't overlap 
     261                eegRawHistoryPlot.setDomainStepValue(5); 
     262                eegRawHistoryPlot.setTicksPerRangeLabel(3); 
     263 
     264                //              eegRawHistoryPlot.setRangeLabel("Amplitude"); 
     265 
     266                // Sets the dimensions of the widget to exactly contain the text contents 
     267                eegRawHistoryPlot.getDomainLabelWidget().pack(); 
     268                eegRawHistoryPlot.getRangeLabelWidget().pack(); 
     269 
     270                // Only display whole numbers in labels 
     271                eegRawHistoryPlot.getGraphWidget().setDomainValueFormat(new DecimalFormat("0")); 
     272                eegRawHistoryPlot.getGraphWidget().setRangeValueFormat(new DecimalFormat("0")); 
     273 
     274                // Hide domain and range labels 
     275                eegRawHistoryPlot.getGraphWidget().setDomainLabelWidth(0); 
     276                eegRawHistoryPlot.getGraphWidget().setRangeLabelWidth(0); 
     277 
     278                // Hide legend 
     279                eegRawHistoryPlot.getLegendWidget().setVisible(false); 
     280 
     281                // setGridPadding(float left, float top, float right, float bottom)  
     282                eegRawHistoryPlot.getGraphWidget().setGridPadding(0, 0, 0, 0);  
     283 
     284                //              eegRawHistoryPlot.getGraphWidget().setDrawMarkersEnabled(false); 
     285 
     286                //              final PlotStatistics histStats = new PlotStatistics(1000, false); 
     287                //              eegRawHistoryPlot.addListener(histStats); 
     288 
     289 
    230290                seekBarAttention = (SeekBar)findViewById(R.id.seekBarAttention); 
    231291                seekBarAttention.setOnSeekBarChangeListener(this); 
     
    266326                tv.setMovementMethod(new ScrollingMovementMethod()); 
    267327                tv.setText(""); 
    268                 appendTextAndScroll("Android version: " + Integer.valueOf(android.os.Build.VERSION.SDK) + "\n" ); 
     328                appendTextAndScroll("Android version: " + Integer.valueOf(android.os.Build.VERSION.SDK_INT) + "\n" ); 
    269329                appendTextAndScroll("Remember to set volume at maximum!\n"); 
    270330 
     
    445505                //              viewSpaceGenerateAudioWidth = LayoutParams.MATCH_PARENT; 
    446506 
     507                @SuppressWarnings("deprecation") 
    447508                int width = getWindowManager().getDefaultDisplay().getWidth(); 
    448                 int height = getWindowManager().getDefaultDisplay().getHeight(); 
     509                //              int height = getWindowManager().getDefaultDisplay().getHeight(); 
    449510 
    450511                viewSpaceGenerateAudioWidth = width / 4; // approximate center of screen 
     
    487548 
    488549                        if (checkBoxGenerateAudio.isChecked()) { 
     550 
    489551                                layoutAudioService.setVisibility(View.VISIBLE); 
    490552                                layoutInvertControlSignal.setVisibility(View.VISIBLE); 
     
    496558 
    497559                        } else { 
     560 
    498561                                layoutAudioService.setVisibility(View.GONE); 
    499562                                layoutInvertControlSignal.setVisibility(View.GONE); 
     
    506569                        } 
    507570 
     571                        eegRawHistoryPlot.setVisibility(View.VISIBLE); 
    508572                        layoutAdvancedOptions.setVisibility(View.VISIBLE); 
     573                        imageViewStatus.setVisibility(View.GONE); 
    509574                        tv.setVisibility(View.VISIBLE); 
    510575 
    511576                } else { 
    512577 
     578                        eegRawHistoryPlot.setVisibility(View.GONE); 
    513579                        layoutAudioService.setVisibility(View.GONE); 
    514580                        layoutAdvancedOptions.setVisibility(View.GONE); 
     581                        imageViewStatus.setVisibility(View.VISIBLE); 
    515582                        tv.setVisibility(View.GONE); 
    516583 
     
    689756                                break; 
    690757                        case TGDevice.MSG_RAW_DATA: 
    691                                 //raw1 = msg.arg1; 
    692                                 //tv.append("Got raw: " + msg.arg1 + "\n"); 
     758 
     759                                rawEEG[arrayIndex] = msg.arg1; 
     760                                arrayIndex = arrayIndex + 1; 
     761 
     762                                if (arrayIndex == EEG_RAW_HISTORY_SIZE - 1) 
     763                                        updateEEGRawHistory(); 
     764 
    693765                                break; 
    694766                        case TGDevice.MSG_HEART_RATE: 
     
    9381010                 * which is used to fly the helicopter 
    9391011                 */ 
    940                  
    941         // Set Attention and Meditation to zero if we've lost signal 
    942         if (eegSignal < 100) { 
    943                 eegAttention = 0; 
    944                 eegMeditation = 0; 
    945                 progressBarAttention.setProgress(eegAttention); 
    946                 progressBarMeditation.setProgress(eegMeditation); 
    947         } 
     1012 
     1013                // Set Attention and Meditation to zero if we've lost signal 
     1014                if (eegSignal < 100) { 
     1015                        eegAttention = 0; 
     1016                        eegMeditation = 0; 
     1017                        progressBarAttention.setProgress(eegAttention); 
     1018                        progressBarMeditation.setProgress(eegMeditation); 
     1019                } 
    9481020 
    9491021                eegPower = calculateSpeed(); 
     
    9761048 
    9771049        } // updatePower 
     1050 
     1051 
     1052        // ################################################################ 
     1053 
     1054        public void updateEEGRawHistory() { 
     1055 
     1056                eegRawHistoryPlot.removeSeries(eegRawHistorySeries); 
     1057 
     1058                eegRawHistorySeries = new SimpleXYSeries(Arrays.asList(rawEEG), SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Raw EEG"); 
     1059 
     1060                //              LineAndPointFormatter format = new LineAndPointFormatter(Color.rgb(200, 100, 100), Color.BLACK, null, null); 
     1061                //              LineAndPointFormatter format = new LineAndPointFormatter(Color.rgb(200, 100, 100), Color.TRANSPARENT, null, null); 
     1062                LineAndPointFormatter format = new LineAndPointFormatter(Color.rgb(0, 0, 0), Color.TRANSPARENT, null, null); 
     1063 
     1064                //              format.getFillPaint().setAlpha(220); 
     1065 
     1066                eegRawHistoryPlot.addSeries(eegRawHistorySeries, format); 
     1067 
     1068 
     1069                // redraw the Plots: 
     1070                eegRawHistoryPlot.redraw(); 
     1071 
     1072                rawEEG = new Number[512]; 
     1073                arrayIndex = 0; 
     1074 
     1075        } 
    9781076 
    9791077 
Note: See TracChangeset for help on using the changeset viewer.