예제 #1
0
int main(int argc, char* argv[])
{
    // serial devices "COM5" or /dev/ttyUSB0 ..
    char serialDevice[256] = "";

    for (int i = 1; i < argc; i++) {
        if (i + 1 != argc) {
            if (strcmp(argv[i], "-s") == 0) {
                strcpy(serialDevice, argv[i + 1]);
                i++;
            }
        }
    }

    MW_TRACE("starting..\n")
    serialLink = MWIserialbuffer_init(serialDevice);

    if (serialLink == NOK) {
        perror("error opening serial port");
        return EXIT_FAILURE;
    }

    // mwi state
    mwiState = calloc(sizeof(*mwiState),sizeof(*mwiState));
    mwiState->callback = &callBack_mwi;

    uint64_t lastFrameRequest = 0;

    printf("currentTime;angx;angy;head;ax;ay;az;gx;gy;gz;magx;magy;magz;mot[0];mot[1];mot[2];mot[3];mot[4];mot[5];rcRoll;rcPitch;rcYaw;rcThrottle;rcAUX1;rcAUX2;rcAUX3;rcAUX4;debug1;debug2;debug3;debug4\n");

    for (;;) {

        currentTime = microsSinceEpoch();

        if ((currentTime - lastFrameRequest) > 1000 * 30) {
            if (initOk == OK) {
                lastFrameRequest = currentTime;
                MWIserialbuffer_askForFrame(serialLink, MSP_RAW_IMU);
                MWIserialbuffer_askForFrame(serialLink, MSP_DEBUG);
                MWIserialbuffer_askForFrame(serialLink, MSP_BAT);
                MWIserialbuffer_askForFrame(serialLink, MSP_ALTITUDE);
                MWIserialbuffer_askForFrame(serialLink, MSP_COMP_GPS);
                MWIserialbuffer_askForFrame(serialLink, MSP_RAW_GPS);
                MWIserialbuffer_askForFrame(serialLink, MSP_RC);
                MWIserialbuffer_askForFrame(serialLink, MSP_MOTOR);
                MWIserialbuffer_askForFrame(serialLink, MSP_SERVO);
                MWIserialbuffer_askForFrame(serialLink, MSP_RAW_IMU);
                MWIserialbuffer_askForFrame(serialLink, MSP_STATUS);
                MWIserialbuffer_askForFrame(serialLink, MSP_ATTITUDE);
            } else {
                MWIserialbuffer_askForFrame(serialLink, MSP_IDENT);
            }
        }

        MWIserialbuffer_readNewFrames(serialLink, mwiState);

        usleep(5000);
    }
}
예제 #2
0
void annex(void)
{

    // update mwiStatewith new serial date from serialLink
    MWIserialbuffer_readNewFrames(serialLink, mwiState);

    //  recieve udp from groundstation
    recieveFromGS();

    if (mavlinkState->hil) {
        //  recieve udp from flight simulator
        recieveFromFS();

        // send mwistate to fligh simulator
        sendToFS(mwiState);
    }
}