コード例 #1
0
ファイル: telem.c プロジェクト: camrose/roach
void telemSetup() {

    dfmemGetGeometryParams(&mem_geo); // Read memory chip sizing

    //Telemetry packet size is set at startupt time.
    telemPacketSize = sizeof (telemStruct_t);
}
コード例 #2
0
ファイル: telem.c プロジェクト: dhaldane/imageproc-lib
void telemSetup() {

    dfmemGetGeometryParams(&mem_geo); // Read memory chip sizing

    //Telemetry packet size is set at startupt time.
    telemDataSize = sizeof (TELEM_TYPE);
    telemPacketSize = sizeof (telemStruct_t);
    Nop();
    Nop();

    //Install telemetry service handler
    // Lines removed before to use telemetry module in direct mode, does not 
    // run its own ISR. (pullin, 10/9/14)
    //int retval;
    //retval = sysServiceInstallT5(telemServiceRoutine);
    //SetupTimer5();
}
コード例 #3
0
ファイル: cmd.c プロジェクト: camrose/ibird-lib
static void cmdGetMemContents(MacPacket packet) {

    Payload pld;
    MacPacket data_packet;
    unsigned char *frame;
    DfmemGeometryStruct geo;

    pld = macGetPayload(packet);
    frame = payGetData(pld);
    dfmemGetGeometryParams(&geo);

    unsigned int start_page = frame[0] + (frame[1] << 8);
    unsigned int end_page = frame[2] + (frame[3] << 8);
    unsigned int tx_data_size = frame[4] + (frame[5] << 8);
    unsigned int page, j;
    unsigned char count = 0;
    
    // Send back memory contents
    for (page = start_page; page < end_page; ++page) {
        j = 0;
        while (j + tx_data_size <= geo.bytes_per_page) {
            data_packet = NULL;
            while(data_packet == NULL) {
                data_packet = radioRequestPacket(tx_data_size);
            }

            macSetDestAddr(data_packet, macGetSrcAddr(packet));
            macSetDestPan(data_packet, macGetSrcPan(packet));
            pld = macGetPayload(data_packet);

            dfmemRead(page, j, tx_data_size, payGetData(pld));

            paySetStatus(pld, count++);
            paySetType(pld, CMD_RESPONSE_TELEMETRY);
            while(!radioEnqueueTxPacket(data_packet));
            j += tx_data_size;
            delay_ms(20);
        }

    }

    // Signal end of transfer    
    LED_GREEN = 0; LED_RED = 0; LED_ORANGE = 0;
    
}
コード例 #4
0
//Callback function when imageproc receives tactile command from radio
void handleSkinRequest(unsigned char length, unsigned char *frame, unsigned int src_addr) {
    tactile_src_addr = src_addr;
    rx_idx = frame[0];
    //unsigned char tempframe[TACTILE_ROWS * TACTILE_COLS * 2 + 1];
    //static unsigned char tempframe[100];
    //buffer = tempframe;
    buffer_length = 0;
    expected_length = 2;
    int i;
    switch (rx_idx) {
        case TACTILE_MODE_G: //query number of rows and columns
            sendTactileCommand(length, frame);
            /*
            //TACTILE_ROWS = 0x00;
            //TACTILE_COLS = 0x00;
            buffer_length = 4;
            //expected_length = 3;
            buffer[0] = rx_idx;
            buffer[1] = 0x02;
            buffer[2] = TACTILE_ROWS;
            buffer[3] = TACTILE_COLS;
            setRXFlag();
            //buffer = rowcol;
            //buffer = tempframe;*/
            break;
        case TACTILE_MODE_A: //sample individual pixel
            sendTactileCommand(length,frame);
            break;
        case TACTILE_MODE_B: //sample frame
            sendTactileCommand(length,frame);
            break;
        case TACTILE_MODE_C: //poll pixel
            sendTactileCommand(length,frame);
            break;
        case TACTILE_MODE_E: //start scan
            sendTactileCommand(length,frame);
            break;
        case TACTILE_MODE_F: //stop scan
            rx_idx = TACTILE_RX_IDLE;
            sendTactileCommand(length,frame);
            break;
        case TACTILE_MODE_S: //turn streaming on or off
            streaming = frame[1];
            unsigned char temp[3] = {rx_idx,1,streaming};
            radioSendData(tactile_src_addr, 0, CMD_TACTILE, sizeof(temp), temp, 0);
            rx_idx = TACTILE_RX_IDLE;
            break;
        case TACTILE_MODE_T: //test frame
            buffer_length = 0;
            expected_length = max_buffer_length;
            //buffer = tempframe;
            sendTactileCommand(length,frame);
            break;
        case TACTILE_MODE_L: //load force-torque calibration parameters
            Nop();
            float temp_f[6];
            memcpy(temp_f,&frame[2],6*sizeof(float));
            int n_ind;
            for (n_ind = 0; n_ind < 6; n_ind++) {
                N[n_ind][frame[1]] = temp_f[n_ind]; //frame[1] indicates index [0-ROWS*COLS*3)
            }
            //char* test3 = (char*)&temp_f;
            //unsigned char temp1[6] = {rx_idx,sizeof(float),test3[0],test3[1],test3[2],test3[3]};
            //radioSendData(tactile_src_addr, 0, CMD_TACTILE, sizeof(temp1), temp1, 0);
            
            
            rx_idx = TACTILE_RX_IDLE;
            break;
        case 'Y': //write N to dfmem
            dfmemGetGeometryParams(&mem_geo);
            int N_pages = (sizeof(N)/mem_geo.bytes_per_page) + 1; //how many pages needed to hold N
            //for (i = N_pages; i > 0; i--) {
            //    dfmemWrite(N + mem_geo.bytes_per_page*(N_pages-i),i > 1 ? mem_geo.bytes_per_page : sizeof(N)-mem_geo.bytes_per_page*(N_pages-1) ,mem_geo.max_pages-i,0,0);
            //}
            dfmemWrite(N,sizeof(N),mem_geo.max_pages-1,0,0);
            rx_idx = TACTILE_RX_IDLE;
            break;

        case 'Z': 
            /*//read N from dfmem
            dfmemGetGeometryParams(&mem_geo);
            int N_pages1 = (sizeof(N)/mem_geo.bytes_per_page) + 1; //how many pages needed to hold N
            //for (i = N_pages1; i > 0; i--) {
            //    dfmemRead(mem_geo.max_pages-i, 0, i > 1 ? mem_geo.bytes_per_page : sizeof(N)-mem_geo.bytes_per_page*(N_pages1-1), N + mem_geo.bytes_per_page*(N_pages1-i));
            //}
            dfmemRead(mem_geo.max_pages-1, 0, sizeof(N), N);
            */
            rx_idx = TACTILE_RX_IDLE;
            /*DisableIntT1;
            int pwm = frame[1]+(frame[2]<<8);
            tiHSetDC(1,pwm);*/
            
            //zero forces
            if (zeroForces == 0) {
                zeroForces = 1;
            }
            
            break;
        default:
            sendTactileCommand(length,frame);
            break;
    }
    //blocking wait for skinproc to answer
    /*while (buffer_length < expected_length) {
        Nop();
    }
    handleSkinData(buffer_length, buffer);
    rx_idx = TACTILE_RX_IDLE;*/
}