Example #1
0
void main()
{
    /*
     * Display text in BG0_ROM mode on Cube 0
     */

    CubeID cube = 0;
    vid.initMode(BG0_ROM);
    vid.attach(cube);
    vid.bg0rom.text(vec(0,0), " USB Demo ", vid.bg0rom.WHITE_ON_TEAL);

    // Zero out our counters
    usbCounters.reset();

    /*
     * When we transmit packets in this example, we'll fill them with our
     * cube's accelerometer state. When we receive packets, they'll
     * be hex-dumped to the screen. We also keep counters that show how many
     * packets have been processed.
     *
     * If possible, applications are encouraged to use event handlers so that
     * they only try to read packets when packets are available, and they only
     * write packets when buffer space is available. In this example, we always
     * want to read packets when they arrive, so we keep an onRead() handler
     * registered at all times. We also want to write as long as there's buffer
     * space, but only when a peer is connected. So we'll register and unregister
     * our onWrite() handler in onConnect() and onDisconnect(), respectively.
     *
     * Note that attach() will empty our transmit and receive queues. If we want
     * to enqueue write packets in onConnct(), we need to be sure the pipe is
     * attached before we set up onConnect/onDisconnect.
     */

    Events::usbReadAvailable.set(onReadAvailable);
    usbPipe.attach();
    updatePacketCounts(0, 0);

    /*
     * Watch for incoming connections, and display some text on the screen to
     * indicate connection state.
     */

    Events::usbConnect.set(onConnect);
    Events::usbDisconnect.set(onDisconnect);

    if (Usb::isConnected()) {
        onConnect();
    } else {
        onDisconnect();
    }

    /*
     * Everything else happens in event handlers, nothing to do in our main loop.
     */

    while (1) {

        for (unsigned n = 0; n < 60; n++) {
            readPacket();
            writePacket();
            System::paint();
        }

        /*
         * For debugging, periodically log the USB packet counters.
         */

        usbCounters.capture();
        LOG("USB-Counters: rxPackets=%d txPackets=%d rxBytes=%d txBytes=%d rxUserDropped=%d\n",
            usbCounters.receivedPackets(), usbCounters.sentPackets(),
            usbCounters.receivedBytes(), usbCounters.sentBytes(),
            usbCounters.userPacketsDropped());
    }
}
Example #2
0
void main() {

    static EventSensor event;

    event.install();     //add motion detection

    

    //SendInitialData();

    for (int i = 0; i < NUM_CUBES; i++)
    {
        CubeID cube(i);
        uint64_t hwid = cube.hwID();

        LOG("Cube %d connected\n", i);

        vbuf[i].attach(i);
        vbuf[i].initMode(BG0_SPR_BG1);
        vbuf[i].bg0.image(vec(0,0), Data);
        motion[i].attach(i);



        //drawing to bg1
        //vbuf[i].bg1.setMask((BG1Mask::filled(vec(2,4), vec(12,3))));  //for the text
        
        

        //init to SQFT
        /*
        param[i][0] = 'S';
        param[i][1] = 'Q';
        param[i][2] = 'F';
        param[i][3] = 'T';
    */
        
        

        minVal[i][0] = ' ';
        minVal[i][1] = '0';
        minVal[i][2] = ' ';

        maxVal[i][0] = '0';
        maxVal[i][1] = '.';
        maxVal[i][2] = '1';

        Val[i][0] = '0';
        Val[i][1] = '.';
        Val[i][2] = '0';


        //add numbers for status bar
        vbuf[i].bg1.text(vec(2,4), Font, Val[i]);
       

       
     

        update[i] = false;
    }


    //needed to actually use usb pipe
    usbPipe.attach();
    //register with event
    Events::usbReadAvailable.set(&ReadPacket);

    SendInitialData();

    // run loop
    while(1) {

        //iterate through the cubes to determine if they need updated
        for (int i = 0; i < NUM_CUBES; i++)
        {
            if (update[i])
            {
                vbuf[i].bg0.erase();
                vbuf[i].bg1.erase();

                //show the background depending on what it is bound to
                /*if(boundTo[i]==0){              //not bound to anything
                    //not tilted
                    vbuf[i].bg0.image(vec(0,0), Molecule_select);
                    if(tilt[i].x==1){
                            vbuf[i].bg0.image(vec(0,0), Molecule_select);
                    }else 
                         vbuf[i].bg0.image(vec(0,0), Enzyme_select);

                }else if(boundTo[i]==1){    //bound to a molecule
                    vbuf[i].bg0.image(vec(0,0), Molecule_bound_bckg);
                    //define the space
                    
                    vbuf[i].bg1.setMask((BG1Mask::filled(vec(5,5), vec(10,3))));  //for the name
                    vbuf[i].bg1.setMask((BG1Mask::filled(vec(2,9), vec(12,3))));  //for the concentration

                    //write 
                    vbuf[i].bg1.text(vec(5,5), Font, "M");
                    vbuf[i].bg1.text(vec(2,9), Font, Val[i]);



                }else if(boundTo[i]==2){    //bound to an enzyme
                    vbuf[i].bg0.image(vec(0,0), Enzyme_bound_bckg);
                    
                    vbuf[i].bg1.setMask((BG1Mask::filled(vec(5,5), vec(10,3))));  //for the name
                    vbuf[i].bg1.setMask((BG1Mask::filled(vec(2,9), vec(12,3))));  //for the concentration

                    vbuf[i].bg1.text(vec(5,5), Font, "E");
                    vbuf[i].bg1.text(vec(2,9), Font, Val[i]);
                }else {                     //bound to a reaction
                    vbuf[i].bg0.image(vec(0,0), Reaction_bckg);
                    
                    vbuf[i].bg1.setMask((BG1Mask::filled(vec(2,4), vec(10,3))));  //for the reaction constant
                    vbuf[i].bg1.text(vec(2,4), Font, Val[i]);
                }*/
                switch(state[i]){
                    case 0: // Data 
                            vbuf[i].bg0.image(vec(0,0), Data);
                            break;
                    case 1: //Model
                            vbuf[i].bg0.image(vec(0,0), Model);
                            break;
                    case 2: //CSV
                            vbuf[i].bg0.image(vec(0,0), CSV);
                            break;
                    case 3: //RMS
                            vbuf[i].bg0.image(vec(0,0), RMS);
                            break;
                    case 4: //Molecule
                            vbuf[i].bg0.image(vec(0,0), Molecule);
                            break;
                    case 5: //Enzyme
                            vbuf[i].bg0.image(vec(0,0), Enzyme);
                            break;
                    case 6: //MolOverview
                            vbuf[i].bg0.image(vec(0,0), MolOverview);
                            vbuf[i].bg1.setMask((BG1Mask::filled(vec(5,5), vec(10,3))));  //for the name
                            vbuf[i].bg1.setMask((BG1Mask::filled(vec(2,9), vec(12,3))));  //for the concentration

                            //write 
                            vbuf[i].bg1.text(vec(5,5), Font, "M");
                            vbuf[i].bg1.text(vec(2,9), Font, Val[i]);
                            break;
                    case 7: //MolConc
                            vbuf[i].bg0.image(vec(0,0), MolConc);
                            break;
                    case 8: //MolGraph
                            vbuf[i].bg0.image(vec(0,0), MolGraph);
                            break;
                    case 9: //MolEquation
                            vbuf[i].bg0.image(vec(0,0), MolEquation);
                            break;
                    case 10: //EnzOverview
                            vbuf[i].bg0.image(vec(0,0), EnzOverview);
                            vbuf[i].bg1.setMask((BG1Mask::filled(vec(5,5), vec(10,3))));  //for the name
                            vbuf[i].bg1.setMask((BG1Mask::filled(vec(2,9), vec(12,3))));  //for the concentration

                            vbuf[i].bg1.text(vec(5,5), Font, "E");
                            vbuf[i].bg1.text(vec(2,9), Font, Val[i]);
                            break;
                    case 11: //EnzConc
                            vbuf[i].bg0.image(vec(0,0), EnzConc);
                            break;
                    case 12: //RctOverview
                            vbuf[i].bg0.image(vec(0,0), RctOverview);
                            vbuf[i].bg1.setMask((BG1Mask::filled(vec(2,9), vec(12,3))));  //for the concentration
                            vbuf[i].bg1.text(vec(2,9), Font, Val[i]);
                            break;
                    case 13: //RctRate
                            vbuf[i].bg0.image(vec(0,0), RctRate);
                            break;
                    case 14: //MolConcSelected
                            vbuf[i].bg0.image(vec(0,0), MolConcSelected);
                            vbuf[i].bg1.setMask((BG1Mask::filled(vec(5,5), vec(10,3))));  //for the name
                            vbuf[i].bg1.setMask((BG1Mask::filled(vec(2,9), vec(12,3))));  //for the concentration
                            //write 
                            vbuf[i].bg1.text(vec(5,5), Font, "M");
                            vbuf[i].bg1.text(vec(2,9), Font, Val[i]);
                            break;
                    case 15: //EnzConcSelected
                            vbuf[i].bg0.image(vec(0,0), EnzConcSelected);
                            vbuf[i].bg1.setMask((BG1Mask::filled(vec(5,5), vec(10,3))));  //for the name
                            vbuf[i].bg1.setMask((BG1Mask::filled(vec(2,9), vec(12,3))));  //for the concentration

                            vbuf[i].bg1.text(vec(5,5), Font, "E");
                            vbuf[i].bg1.text(vec(2,9), Font, Val[i]);
                            break;

                    case 16: //RctRateSelected
                            vbuf[i].bg0.image(vec(0,0), RctRateSelected);
                            vbuf[i].bg1.setMask((BG1Mask::filled(vec(2,4), vec(10,3))));  //for the reaction constant
                            vbuf[i].bg1.text(vec(2,4), Font, Val[i]);
                            break;
                    case 17://Direction
                            vbuf[i].bg0.image(vec(0,0), Direction);

                            break;
                    case 18: //selectCSV
                             vbuf[i].bg0.image(vec(0,0), SelectCSV);
                             break;
                    case 19: //Play the simulation
                             vbuf[i].bg0.image(vec(0,0), Play);
                             break;
                    case 20: //Stop Simulation
                             vbuf[i].bg0.image(vec(0,0), Stop);
                             break;
                    case 21: //Quit Pathways
                             vbuf[i].bg0.image(vec(0,0), Quit);
                             break;
                    case 22: //Reaction
                            vbuf[i].bg0.image(vec(0,0), Reaction);
                             break;

                }

                 update[i] = false;
            }
        }
        System::paint();
    }
}