Changeset 948f49a in orbit


Ignore:
Timestamp:
12/22/12 10:50:48 (7 years ago)
Author:
AzureViolin <zhanghaotz@…>
Branches:
master, RawEEG, Raw_EEG_Plot, Servo, Tab_Interface, pyramid
Children:
cb6dab1, f323fb4
Parents:
d604d68
Message:

test android package DorabotOrbitActivity?

Files:
12 added
27 deleted
6 moved

Legend:

Unmodified
Added
Removed
  • DorabotOrbitActivity/.classpath

    r85e0208 r948f49a  
    33        <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> 
    44        <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/> 
    5         <classpathentry exported="true" kind="lib" path="libs/ThinkGear.jar"/> 
    6         <classpathentry kind="lib" path="libs/usb-serial-for-android-v010.jar"/> 
    75        <classpathentry kind="src" path="src"/> 
    86        <classpathentry kind="src" path="gen"/> 
  • DorabotOrbitActivity/.gitignore

    r85e0208 r948f49a  
    11*.apk 
    22*.dex 
    3  
     3.* 
  • DorabotOrbitActivity/.project

    r3909100 r948f49a  
    11<?xml version="1.0" encoding="UTF-8"?> 
    22<projectDescription> 
    3         <name>Puzzlebox Orbit</name> 
     3        <name>DorabotOrbit</name> 
    44        <comment></comment> 
    55        <projects> 
  • DorabotOrbitActivity/project.properties

    r85e0208 r948f49a  
    1212 
    1313# Project target. 
    14 target=android-17 
     14target=android-8 
  • DorabotOrbitActivity/src/com/dorabot/orbit/OrbitAudioService.java

    rd604d68 r948f49a  
    1 package info.puzzlebox.orbit; 
    2  
     1package com.dorabot.orbit; 
     2 
     3import android.app.Service; 
     4import android.content.Intent; 
    35import android.media.AudioFormat; 
    46import android.media.AudioManager; 
    57import android.media.AudioTrack; 
    6  
    7 public class OrbitAudioCode { 
    8          
     8import android.os.AsyncTask; 
     9import android.os.Binder; 
     10import android.os.IBinder; 
     11import android.widget.Toast; 
     12 
     13import android.util.Log; 
     14import java.net.MalformedURLException; 
     15import java.net.URL; 
     16 
     17public class OrbitAudioService extends Service{ 
     18         
     19        /** 
     20         * default field values. 
     21         */ 
    922        AudioTrack track; 
    1023        short[] audioData = new short[6144]; 
    1124        public int sampleRate = 44100; 
    1225        private boolean ifFlip = false; 
    13          
    14         /** 
    15          * Constructor. 
     26        int throttle; 
     27        int pitch; 
     28        int yaw; 
     29        int channel; 
     30        Integer[] command={80,78,31,1}; 
     31                 
     32        /** 
     33         * Object constructor. 
    1634         * @param sps sampleRate of the specific Android device. (only 44100 is tested so far) 
    1735         * @param ifFlip  
    1836         */ 
    19         public OrbitAudioCode(int sps, boolean flip) 
     37         
     38        public OrbitAudioService() 
     39        { 
     40        } 
     41         
     42        public OrbitAudioService(int sps, boolean flip) 
    2043        { 
    2144                ifFlip = flip; 
     
    2750         
    2851 
     52/*      private final IBinder binder = new OrbitBinder(); 
     53         
     54        public class OrbitBinder extends Binder { 
     55                OrbitAudioService getService() { 
     56                        return OrbitAudioService.this; 
     57                } 
     58        }*/ 
     59         
     60        @Override 
     61        public IBinder onBind(Intent arg0) { 
     62                return null; 
     63                //return binder; 
     64        } 
     65         
     66        @Override  
     67        public int onStartCommand(Intent intent, int flags, int startId) { 
     68                Toast.makeText(this, "Start sending fly commands through audio jack", Toast.LENGTH_LONG).show(); 
     69                try{ 
     70                new DoBackgroundTask().execute(command); 
     71                } catch (Exception e) { 
     72                        e.printStackTrace(); 
     73                } 
     74                return START_STICKY; 
     75        } 
     76         
     77        @Override 
     78        public void onDestroy() { 
     79                releasetrack(); 
     80                super.onDestroy(); 
     81                Toast.makeText(this, "Stop sending fly commands in audio jack", Toast.LENGTH_LONG).show(); 
     82        } 
     83         
     84         
     85        private class DoBackgroundTask extends AsyncTask < Integer , Void , Integer > { 
     86                protected Integer doInBackground(Integer... command) { 
     87                        int code=0; 
     88                        float[] wave; 
     89                        int throttle=command[0].intValue(); 
     90                        int yaw=command[1].intValue(); 
     91                        int pitch=command[2].intValue(); 
     92                        int channel=command[3].intValue(); 
     93                        try{ 
     94                        for (int j = 0; j<4; j++) 
     95                                code=command2code(throttle,yaw,pitch,channel); 
     96                                wave=code2wave(code);    
     97                                send(wave);              
     98                        } catch (Exception e){ 
     99                                e.printStackTrace(); 
     100                        } 
     101                         
     102                        try{ 
     103                        send(initialWave()); 
     104                        } catch (Exception e){ 
     105                                e.printStackTrace(); 
     106                        } 
     107                         
     108                        try{ 
     109                        for (int j = 0; j<100; j++) 
     110                                send(code2wave(command2code(command[0].intValue(), 
     111                                                command[1].intValue(), 
     112                                                command[2].intValue(), 
     113                                                command[3].intValue())));        
     114                        } catch (Exception e){ 
     115                                e.printStackTrace(); 
     116                        } 
     117 
     118                        return 0; 
     119                } 
     120                 
     121                protected void onPostexecute(Integer result) { 
     122                        stopSelf(); 
     123                } 
     124        } 
     125         
     126         
    29127        private final double sampleTime = 1/(double)sampleRate; 
    30128         
    31         private final double longHIGH = 0.000875-sampleTime*2;//half period HIGH of code '1', in s 
    32         private final double longLOW = 0.000729+sampleTime*3; 
    33         private final double shortHIGH = 0.000458-sampleTime*2; 
    34         private final double shortLOW = 0.000333+sampleTime*2; 
    35          
     129        /** 
     130         * Half periods in the audio code, in seconds. 
     131         */ 
     132        private final double longHIGH = 0.000829649; 
     133        private final double longLOW = 0.000797027; 
     134        private final double shortHIGH = 0.000412649; 
     135        private final double shortLOW = 0.000378351; 
     136         
     137        /** 
     138         * Pre-calculated and stored half sine waves. 
     139         */ 
    36140        private final float[] waveLongHIGH=halfSineGen('u',longHIGH); 
    37141        private final float[] waveLongLOW=halfSineGen('d',longLOW); 
    38142        private final float[] waveShortHIGH=halfSineGen('u',shortHIGH); 
    39143        private final float[] waveShortLOW=halfSineGen('d',shortLOW); 
     144         
     145        /** 
     146         * Pre-assembled audio code bit array in wave form.  
     147         */ 
    40148        private final float[] waveBit[]= {concatFloat(waveShortHIGH,waveShortLOW),concatFloat(waveLongHIGH,waveLongLOW)}; 
    41149 
     
    44152        { 
    45153                assembleRightChannel(samples); 
     154                int sampleLength=2*samples.length; 
     155                int audioDataLength=audioData.length; 
    46156                track.write(audioData,0,2*samples.length); 
    47157        } 
     
    62172        } 
    63173         
     174        /** 
     175         * release low level resources when not use them anymore. 
     176         */ 
    64177        public void releasetrack(){ 
    65178                track.release(); 
    66179        } 
    67          
    68  
    69          
    70180         
    71181         
     
    75185         * @param yaw: 0~127, normally 78 will keep orbit from rotating. 
    76186         * @param pitch: 0~63, normally 31 will stop the top propeller. 
    77          * @param channel: 'A' or 'B' or 'C', depend on which channel you want to pair to the orbit. You can fly at most 3 orbit in a same room.  
     187         * @param channel: 1=Channel A, 0=Channel B 2= Channel C, depend on which channel you want to pair to the orbit. You can fly at most 3 orbit in a same room.  
    78188         * @return 
    79189         */ 
    80190         
    81         public int command2code(int throttle, int yaw, int pitch, char channel){ 
     191        public int command2code(int throttle, int yaw, int pitch, int channel){ 
    82192                int code = throttle << 21; 
    83193                code += 1 << 20 ; 
     
    85195                code += pitch << 4 ; 
    86196        //  weird, if use int code= throttle << 21 + 1<<20 + yaw <<12 +pitch<<4; it won't work. 
    87                 switch (channel){ 
    88                         case 'A':       code += 1 << 11; 
    89                                                 break; 
    90                 //      case 'B':       break; 
    91                         case 'C':       code += 1 << 19; 
    92                                                 break; 
    93                         default:        break; 
    94                 } 
     197                code += ((channel >>> 1) & 1) << 19; 
     198                code += (channel & 1) << 11; 
     199                 
    95200                int checkSum=0; 
    96201                        for (int i=0; i<7; i++) 
Note: See TracChangeset for help on using the changeset viewer.