Changeset 355dd62 in orbit for android


Ignore:
Timestamp:
12/12/13 15:38:12 (6 years ago)
Author:
Steve Castellotti <sc@…>
Branches:
master, Servo
Children:
892074d
Parents:
2456fbd
Message:
  • Dynamic control of Throttle, Yaw, and Pitch. Changes are instant during flight.
Location:
android/src/info/puzzlebox/orbit
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • android/src/info/puzzlebox/orbit/AudioHandler.java

    ra474ef7 r355dd62  
    2121        private boolean firstRun = true; 
    2222 
    23         private long sleepTimer = 100; // sleep in milliseconds 
     23//      private long sleepTimer = 100; // sleep in milliseconds 
    2424 
    2525        private final Object mutex = new Object(); 
     
    4545        int loopNumberWhileMindControl=20; 
    4646 
     47        int controlSignalCode; 
     48        float[] controlSignalWave; 
     49 
    4750 
    4851        // ################################################################ 
     
    125128                // Get the looper from the handlerThread 
    126129                // Note: this may return null 
    127                 Looper looper = handlerThread.getLooper(); 
     130//              Looper looper = handlerThread.getLooper(); 
    128131 
    129132                // Create a new handler - passing in the looper to use and this class as 
    130133                // the message handler 
    131                 Handler handler = new Handler(looper, this); 
     134//              Handler handler = new Handler(looper, this); 
    132135 
    133136 
     
    221224        // ################################################################ 
    222225 
    223         public void playControlSignal() { 
    224  
    225                 keepPlaying = true; 
    226  
    227                 //              Log.v(TAG, "playControlSignal()"); 
     226        //      public void updateControlSignal(int throttle, int yaw, int pitch, int channel) { 
     227        public void updateControlSignal() { 
    228228 
    229229                int throttle=command[0].intValue(); 
     
    232232                int channel=command[3].intValue(); 
    233233 
    234                 int code=command2code(throttle,yaw,pitch,channel); 
    235                 float[] wave=code2wave(code);    
     234 
     235                controlSignalCode = command2code(throttle,yaw,pitch,channel); 
     236                controlSignalWave =code2wave(controlSignalCode); 
     237 
     238 
     239        } 
     240 
     241        // ################################################################ 
     242 
     243        public void playControlSignal() { 
     244 
     245                keepPlaying = true; 
     246 
     247                //              Log.v(TAG, "playControlSignal()"); 
     248 
     249                //              int throttle=command[0].intValue(); 
     250                //              int yaw=command[1].intValue(); 
     251                //              int pitch=command[2].intValue(); 
     252                //              int channel=command[3].intValue(); 
     253 
     254                //              int code=command2code(throttle,yaw,pitch,channel); 
     255                //              float[] wave=code2wave(code); 
     256 
     257//              updateControlSignal(throttle,yaw,pitch,channel); 
     258                updateControlSignal(); 
    236259 
    237260                track.play(); 
    238261 
     262                // Send a brief portion of the control signal in order to activate the IR transmitter 
    239263                for (int j = 0; j<4; j++) 
    240                         send(wave);              
    241  
     264                        //                      send(wave);              
     265                        send(controlSignalWave);                 
     266 
     267                // Send the initialization sequence to the IR transmitter 
    242268                send(initialWave()); 
    243269 
     270                // Being sending the complete control signal 
    244271                for (int j = 0; j<loopNumberWhileMindControl; j++) { 
    245272                        if (! keepPlaying) 
    246273                                break; 
    247                         send(wave);      
     274                        //                      send(wave);      
     275                        send(controlSignalWave);         
    248276                } 
    249277 
  • android/src/info/puzzlebox/orbit/FragmentTabAdvanced.java

    r0d2b1fc r355dd62  
    394394                //                      updatePowerThresholds(); 
    395395                //                      updatePower(); 
     396                updateControlSignal(); 
     397                 
    396398 
    397399        } // onProgressChanged 
  • android/src/info/puzzlebox/orbit/FragmentTabFlightEmotiv.java

    r2456fbd r355dd62  
    4747import android.support.v4.app.Fragment; 
    4848 
    49  
    5049public class FragmentTabFlightEmotiv extends Fragment implements SeekBar.OnSeekBarChangeListener { 
    5150 
    5251        /** 
    53          * Create a new instance of FragmentTabFlight, providing "num" 
     52         * Create a new instance of FragmentTabFlightEmotiv, providing "num" 
    5453         * as an argument. 
    5554         */ 
     
    7574        boolean eegConnecting = false; 
    7675        boolean demoFlightMode = false; 
    77         //      Number[] rawEEG = new Number[512]; 
    7876        int arrayIndex = 0; 
    7977 
     
    103101        int viewSpaceGenerateAudioWidth = 120; 
    104102 
    105  
    106103        LinearLayout layoutControl; 
    107104        LinearLayout layoutAudioService; 
     
    121118        //      boolean DEBUG = true; 
    122119        boolean DEBUG = false; 
    123         String TAG = "FragmentFlight"; 
    124  
    125  
    126         /** 
    127          * Emotiv 
    128          */ 
     120        String TAG = "FragmentFlightEmotiv"; 
     121 
     122 
    129123        /** 
    130124         * Emotiv EPOC Device 
     
    135129 
    136130        private static final int userid = 1; 
    137         private boolean _running = false; 
     131        //      private boolean _running = false; 
    138132 
    139133        private String[] ListAction = new String[] { "NEUTRAL", "PUSH", "PULL", 
     
    155149                EE_CognitivAction_t.COG_ROTATE_REVERSE.ToInt(), 
    156150                EE_CognitivAction_t.COG_DISAPPEAR.ToInt() }; 
     151 
    157152        public Boolean[] cognitivActionsEnabled = new Boolean[cognitivActionList.length]; 
    158153 
    159         OnClickListener Flight_enterOnClickListener 
    160         = new OnClickListener(){ 
     154        OnClickListener Flight_enterOnClickListener     = new OnClickListener() { 
    161155 
    162156                public void onClick(View arg0) { 
     
    213207                progressBarSignal.setProgressDrawable(progressSignal); 
    214208                progressBarSignal.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.progress_horizontal)); 
    215                 //              progressBarSignal.setProgress(tgSignal); 
    216                  
    217                  
     209 
     210 
    218211                // Hide signal bar as we aren't currently using it for Emotiv 
    219212                TextView textViewLabelSignal =  (TextView) v.findViewById(R.id.textViewLabelSignal); 
    220                  
    221213                progressBarSignal.setVisibility(View.GONE); 
    222214                textViewLabelSignal.setVisibility(View.GONE); 
    223                  
     215 
    224216 
    225217                progressBarPower = (ProgressBar) v.findViewById(R.id.progressBarPower); 
     
    254246                text.setSingleLine(false); 
    255247 
    256  
    257  
    258  
    259  
    260  
    261  
    262  
    263                 //              EmotivDongle.init(this); 
    264248                EmotivDongle.init(((OrbitTabActivity)getActivity())); 
    265249 
     
    280264                } 
    281265 
    282                 //              ArrayAdapter<String> SpinnerAdapter = new ArrayAdapter<String>(this, 
    283                 //                              android.R.layout.simple_spinner_item, list); 
    284266                ArrayAdapter<String> SpinnerAdapter = new ArrayAdapter<String>(((OrbitTabActivity)getActivity()), 
    285267                                android.R.layout.simple_spinner_item, list); 
    286                 SpinnerAdapter 
    287                 .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     268 
     269                SpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    288270 
    289271                spinnerAction.setAdapter(SpinnerAdapter); 
    290272 
    291                 spinnerAction 
    292                 .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     273                spinnerAction.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    293274 
    294275                        public void onItemSelected(AdapterView<?> arg0, View arg1, 
     
    356337                }); 
    357338 
    358                 Thread processingThread=new Thread() 
    359                 { 
     339                Thread processingThread=new Thread() { 
    360340                        @Override 
    361341                        public void run() { 
    362342                                // TODO Auto-generated method stub 
    363343                                super.run(); 
    364                                 while(true) 
    365                                 { 
    366                                         try 
    367                                         { 
    368                                                 handler.sendEmptyMessage(0); 
     344                                while(true) { 
     345                                        try { 
     346                                                handlerEmotiv.sendEmptyMessage(0); 
    369347                                                Thread.sleep(40); 
    370348                                        } 
    371349 
    372                                         catch (Exception ex) 
    373                                         { 
     350                                        catch (Exception ex) { 
    374351                                                ex.printStackTrace(); 
    375352                                        } 
    376353                                } 
    377354                        } 
    378                 };               
     355                };       
     356 
    379357                processingThread.start(); 
    380358 
     
    398376        // ################################################################ 
    399377 
    400         Handler handler = new Handler() { 
     378        Handler handlerEmotiv = new Handler() { 
     379 
    401380                public void handleMessage(Message msg) { 
     381 
    402382                        switch (msg.what) { 
    403383 
     
    427407                                                                .ESCognitivGetCurrentAction(); 
    428408                                                _currentPower = EmoStateDLL.ESCognitivGetCurrentActionPower(); 
    429                                                  
    430                                                  
     409 
     410 
    431411                                                // Update Cognitiv and Power progress bars 
    432412                                                // and then trigger a flight command (if appropriate) 
    433413                                                progressBarCognitiv.setProgress((int) (_currentPower * 100)); 
    434414                                                ((OrbitTabActivity)getActivity()).updatePower(); 
    435                                                  
     415 
    436416 
    437417                                                if (_currentAction == EE_CognitivAction_t.COG_NEUTRAL 
     
    446426                                                } 
    447427 
    448                                                 else if (_currentAction == EE_CognitivAction_t.COG_PULL 
    449                                                                 .ToInt()) { 
     428                                                else if (_currentAction == EE_CognitivAction_t.COG_PULL.ToInt()) { 
    450429                                                        CurrentAction.setText("Pull"); 
    451430                                                        CurrentAction.setTextColor(Color.BLUE); 
    452431                                                } 
    453432 
    454                                                 else if (_currentAction == EE_CognitivAction_t.COG_LIFT 
    455                                                                 .ToInt()) { 
     433                                                else if (_currentAction == EE_CognitivAction_t.COG_LIFT.ToInt()) { 
    456434 
    457435                                                        CurrentAction.setText("Lift"); 
    458436                                                        CurrentAction.setTextColor(Color.BLUE); 
    459                                                 } else if (_currentAction == EE_CognitivAction_t.COG_DROP 
    460                                                                 .ToInt()) { 
     437 
     438                                                } else if (_currentAction == EE_CognitivAction_t.COG_DROP.ToInt()) { 
     439 
    461440                                                        CurrentAction.setText("Drop"); 
    462441                                                        CurrentAction.setTextColor(Color.BLUE); 
    463442                                                } 
    464443 
    465                                                 if(_currentPower!=0) 
    466                                                 { 
    467 //                                                      text.append("Action : " + CurrentAction.getText().toString() + " ; Power : "  +String.valueOf(_currentPower) + "\n"); 
     444                                                if (_currentPower != 0) { 
    468445                                                        appendDebugConsole("Action : " + CurrentAction.getText().toString() + " ; Power : "  +String.valueOf(_currentPower) + "\n"); 
    469446                                                        text.setText("Action : " + CurrentAction.getText().toString() + " ; Power : "  +String.valueOf(_currentPower) + "\n"); 
    470447                                                } 
    471                                          
     448 
    472449                                        } else if (eventType == EE_Event_t.EE_CognitivEvent.ToInt()) { 
     450                                                 
    473451                                                int cogType = Edk.EECognitivEventGetType(); 
    474452 
    475                                                 if (cogType == EE_CognitivEvent_t.EE_CognitivTrainingStarted 
    476                                                                 .getType()) { 
     453                                                if (cogType == EE_CognitivEvent_t.EE_CognitivTrainingStarted.getType()) { 
    477454 
    478455                                                        Toast.makeText(((OrbitTabActivity)getActivity()), "Start Training", 
     
    480457                                                        Log.d(TAG, "Start Training"); 
    481458 
    482  
    483459                                                } 
     460                                                 
    484461                                                if (cogType == EE_CognitivEvent_t.EE_CognitivTrainingCompleted 
    485462                                                                .getType()) { 
     
    489466 
    490467                                                } 
    491                                                 if (cogType == EE_CognitivEvent_t.EE_CognitivTrainingSucceeded 
    492                                                                 .getType()) { 
     468                                                 
     469                                                if (cogType == EE_CognitivEvent_t.EE_CognitivTrainingSucceeded.getType()) { 
    493470 
    494471                                                        startTraining.setText("Start Training"); 
     
    496473                                                        Toast.makeText(((OrbitTabActivity)getActivity()), "Training Succeeded", 
    497474                                                                        Toast.LENGTH_SHORT).show(); 
     475                                                         
    498476                                                        Log.d(TAG, "Training Succeeded"); 
    499477 
     
    501479                                                        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( 
    502480                                                                        ((OrbitTabActivity)getActivity())); 
     481                                                         
    503482                                                        // set title 
    504483                                                        alertDialogBuilder.setTitle("Training Completed"); 
    505484 
    506485                                                        // set dialog message 
    507                                                         alertDialogBuilder 
    508                                                         .setMessage( 
     486                                                        alertDialogBuilder.setMessage( 
    509487                                                                        "Training is completed.Accept this training") 
    510488                                                                        .setCancelable(false) 
     
    882860        // ################################################################ 
    883861 
    884         public void parseEEG(Message msg) { 
    885  
    886                 //              switch (msg.what) { 
    887                 // 
    888                 //              case TGDevice.MSG_STATE_CHANGE: 
    889                 // 
    890                 //                      switch (msg.arg1) { 
    891                 //                      case TGDevice.STATE_IDLE: 
    892                 //                              break; 
    893                 //                      case TGDevice.STATE_CONNECTING: 
    894                 //                              eegConnecting = true; 
    895                 //                              eegConnected = false; 
    896                 //                              updateStatusImage(); 
    897                 //                              break; 
    898                 //                      case TGDevice.STATE_CONNECTED: 
    899                 //                              setButtonText(R.id.buttonConnect, "Disconnect"); 
    900                 //                              eegConnecting = false; 
    901                 //                              eegConnected = true; 
    902                 //                              updateStatusImage(); 
    903                 //                              break; 
    904                 //                      case TGDevice.STATE_NOT_FOUND: 
    905                 //                              eegConnecting = false; 
    906                 //                              eegConnected = false; 
    907                 //                              updateStatusImage(); 
    908                 //                              break; 
    909                 //                      case TGDevice.STATE_NOT_PAIRED: 
    910                 //                              eegConnecting = false; 
    911                 //                              eegConnected = false; 
    912                 //                              updateStatusImage(); 
    913                 //                              break; 
    914                 //                      case TGDevice.STATE_DISCONNECTED: 
    915                 //                              eegConnecting = false; 
    916                 //                              eegConnected = false; 
    917                 //                              updateStatusImage(); 
    918                 //                              break; 
    919                 //                      } 
    920                 // 
    921                 //                      break; 
    922                 // 
    923                 //              case TGDevice.MSG_POOR_SIGNAL: 
    924                 //                      eegSignal = calculateSignal(msg.arg1); 
    925                 //                      //                              appendDebugConsole("\nPoorSignal: " + msg.arg1 + "\n"); 
    926                 //                      progressBarSignal.setProgress(eegSignal); 
    927                 //                      updateStatusImage(); 
    928                 //                      break; 
    929                 //              case TGDevice.MSG_RAW_DATA: 
    930                 // 
    931                 //                      //                      rawEEG[arrayIndex] = msg.arg1; 
    932                 //                      //                      arrayIndex = arrayIndex + 1; 
    933                 // 
    934                 //                      //                      if (arrayIndex == EEG_RAW_HISTORY_SIZE - 1) 
    935                 //                      //                              updateEEGRawHistory(); 
    936                 // 
    937                 //                      break; 
    938                 //              case TGDevice.MSG_HEART_RATE: 
    939                 //                      //                              appendDebugConsole("Heart rate: " + msg.arg1 + "\n"); 
    940                 //                      break; 
    941                 //              case TGDevice.MSG_ATTENTION: 
    942                 //                      //                      eegAttention = msg.arg1; 
    943                 //                      //                      //                              appendDebugConsole("Attention: " + eegAttention + "\n"); 
    944                 //                      //                      progressBarAttention.setProgress(eegAttention); 
    945                 //                      //                      updatePower(); 
    946                 // 
    947                 //                      break; 
    948                 //              case TGDevice.MSG_MEDITATION: 
    949                 //                      //                      eegMeditation = msg.arg1; 
    950                 //                      //                      if (DEBUG) 
    951                 //                      //                              Log.d(TAG, "Meditation: " + eegMeditation); 
    952                 //                      //                      //                              appendDebugConsole("Meditation: " + eegMeditation + "\n"); 
    953                 //                      //                      progressBarMeditation.setProgress(eegMeditation); 
    954                 //                      //                      updatePower(); 
    955                 // 
    956                 //                      break; 
    957                 //              case TGDevice.MSG_BLINK: 
    958                 //                      //tv.append("Blink: " + msg.arg1 + "\n"); 
    959                 //                      break; 
    960                 //              case TGDevice.MSG_RAW_COUNT: 
    961                 //                      //tv.append("Raw Count: " + msg.arg1 + "\n"); 
    962                 //                      break; 
    963                 //              case TGDevice.MSG_LOW_BATTERY: 
    964                 //                      //                              Toast.makeText(getApplicationContext(), "Low battery!", Toast.LENGTH_SHORT).show(); 
    965                 //                      break; 
    966                 //              case TGDevice.MSG_RAW_MULTI: 
    967                 //                      //TGRawMulti rawM = (TGRawMulti)msg.obj; 
    968                 //                      //tv.append("Raw1: " + rawM.ch1 + "\nRaw2: " + rawM.ch2); 
    969                 //              default: 
    970                 //                      break; 
    971                 //              } 
    972  
    973         } // handleMessage 
    974  
    975  
    976         // ################################################################ 
    977  
    978862        public void disconnectHeadset() { 
    979863 
     
    1055939                if (cognitivSeekValue > 0) { 
    1056940                        for (int i = cognitivSeekValue; i < thresholdValuesCognitiv.length; i++) { 
    1057                                  
     941 
    1058942                                /** 
    1059943                                 *  Slider @ 70 
  • android/src/info/puzzlebox/orbit/OrbitTabActivity.java

    re537bac r355dd62  
    6060import com.neurosky.thinkgear.TGDevice; 
    6161 
    62 ////import com.emotiv.usb.EmotivDongle; 
    63 //import com.example.usb.EmotivDongle; 
    64  
    6562public class OrbitTabActivity extends FragmentActivity implements SeekBar.OnSeekBarChangeListener { 
    6663 
     
    7269        String versionName; 
    7370 
    74         //      String eegDevice = "ThinkGear"; 
    75         String eegDevice = "Emotiv"; 
     71        String eegDevice = "ThinkGear"; 
     72        //      String eegDevice = "Emotiv"; 
    7673 
    7774        int eegAttention = 0; 
     
    163160        final boolean rawEnabled = true; 
    164161 
    165          
    166 //      /** 
    167 //       * Emotiv EPOC Device 
    168 //       */ 
    169 //      private EE_CognitivAction_t _cognitivAction; 
    170 //      private int _currentAction; 
    171 //      private float _currentPower; 
    172 // 
    173 //      private static final int userid = 1; 
    174 //      private boolean _running = false; 
    175 // 
    176 //      private String[] ListAction = new String[] { "NEUTRAL", "PUSH", "PULL", 
    177 //                      "LIFT", "DROP" }; 
    178 // 
    179 //      public static int[] cognitivActionList = { 
    180 //                      EE_CognitivAction_t.COG_NEUTRAL.ToInt(), 
    181 //                      EE_CognitivAction_t.COG_PUSH.ToInt(), 
    182 //                      EE_CognitivAction_t.COG_PULL.ToInt(), 
    183 //                      EE_CognitivAction_t.COG_LIFT.ToInt(), 
    184 //                      EE_CognitivAction_t.COG_DROP.ToInt(), 
    185 //                      EE_CognitivAction_t.COG_LEFT.ToInt(), 
    186 //                      EE_CognitivAction_t.COG_RIGHT.ToInt(), 
    187 //                      EE_CognitivAction_t.COG_ROTATE_LEFT.ToInt(), 
    188 //                      EE_CognitivAction_t.COG_ROTATE_RIGHT.ToInt(), 
    189 //                      EE_CognitivAction_t.COG_ROTATE_CLOCKWISE.ToInt(), 
    190 //                      EE_CognitivAction_t.COG_ROTATE_COUNTER_CLOCKWISE.ToInt(), 
    191 //                      EE_CognitivAction_t.COG_ROTATE_FORWARDS.ToInt(), 
    192 //                      EE_CognitivAction_t.COG_ROTATE_REVERSE.ToInt(), 
    193 //                      EE_CognitivAction_t.COG_DISAPPEAR.ToInt() }; 
    194 //      public Boolean[] cognitivActionsEnabled = new Boolean[cognitivActionList.length]; 
    195162 
    196163        public void initializeSingleScreen() { 
     
    217184 
    218185                super.onCreate(savedInstanceState); 
    219                  
    220 //              EmotivDongle.init(this); 
    221186 
    222187                // If necessary support isn't detect, replace current activity with the single-screen version 
     
    771736                        //                              fragmentFlight.hideEEGRawHistory(); 
    772737                } 
    773  
    774738 
    775739 
     
    13401304 
    13411305                this.audioHandler.command = command; 
     1306                this.audioHandler.updateControlSignal(); 
    13421307 
    13431308 
     
    13531318 
    13541319                this.audioHandler.channel = channel; 
     1320                this.audioHandler.updateControlSignal(); 
    13551321 
    13561322 
Note: See TracChangeset for help on using the changeset viewer.