예제 #1
0
void UbloxForceBaud(uint32_t baud)
{
    uint8_t i;
    for (i = 0; i < 5; i++)
    {
        delay(50);
        uart2ChangeBaud(init_speed[i]);
        delay(250);
        switch(baud)
        {
        case 19200:
            gpsPrint("$PUBX,41,1,0003,0001,19200,0*23\r\n");
            break;
        case 38400:
            gpsPrint("$PUBX,41,1,0003,0001,38400,0*26\r\n");
            break;
        case 57600:
            gpsPrint("$PUBX,41,1,0003,0001,57600,0*2D\r\n");
            break;
        case 115200:
            gpsPrint("$PUBX,41,1,0003,0001,115200,0*1E\r\n");
            break;
        }
    }
    uart2ChangeBaud(baud);
    delay(200);
}
예제 #2
0
////////////////////////////////////////////////////////////////////////////////////
// ***   GPS INIT   ***
////////////////////////////////////////////////////////////////////////////////////
void gpsInit(uint32_t baudrate)                                                     // Called in Main
{
    uint8_t i;
    uint32_t timeout;

    GPS_Present = 0;
    delay(2000);                                                                    // let it init
    timeout = millis() + 12000; 					                                          // 12 sec timeout
    while (!GPS_Present && millis() < timeout)                                      // Repeat while no GPS Data
    {
        uart2Init(baudrate, GPS_NewData, false);                                    // Set up Interrupthandler
        switch (cfg.gps_type)  	                                                    // GPS_NMEA = 0, GPS_UBLOX = 1, GPS_MTK16 = 2, GPS_MTK19 = 3, GPS_UBLOX_DUMB = 4
        {
        case 0:                                                                     // GPS_NMEA
            break;
        case 1:                                                                     // GPS_UBLOX
            UbloxForceBaud(baudrate);
            for (i = 0; i < sizeof(ubloxInit); i++)
            {
                delay(7);
                uart2Write(ubloxInit[i]);                                           // send ubx init binary
            }
            break;
        case 2:                                                                     // GPS_MTK16
        case 3:                                                                     // GPS_MTK19
            for (i = 0; i < 5; i++)
            {
                uart2ChangeBaud(init_speed[i]);
                delay(200);
                gpsPrint(MTK_BAUD_RATE_57600);
            }
            uart2ChangeBaud(57600);
            delay(200);
            gpsPrint(MTK_SET_BINARY);
            delay(200);
            gpsPrint(MTK_OUTPUT_5HZ);
            delay(200);
            gpsPrint(MTK_SBAS_INTEGRITYMODE);
            delay(200);
            gpsPrint(MTK_NAVTHRES_OFF);
            delay(200);
            gpsPrint(MTK_SBAS_ON);
            delay(200);
            gpsPrint(MTK_WAAS_ON);
            break;
        case 4:                                                                     // GPS_UBLOX_DUMB = 4
            break;
        }
        delay(1000);
    }
    if (GPS_Present) sensorsSet(SENSOR_GPS);                                        // Do we get Data? Is GPS present?
}
예제 #3
0
파일: gps.c 프로젝트: ARMAZILA/FlightCode
void gpsInit(uint32_t baudrate)
{
    int i;
    int offset = 0;

    gps.bytes_rx = 0;
    gps.frames_rx = 0;

	// Create semaphore for OSD frame drawing syncronization
	vSemaphoreCreateBinary(gpsSemaphore);

	// Create GPS sensor lost timer at 3 seconds
	gpsLostTimer = xTimerCreate((signed char *) "TimGPSlost", 3000, pdFALSE, (void *) NULL, gpsLostTimerCallback);

	// Start GPS lost timer
	xTimerStart(gpsLostTimer, 10);

    GPS_set_pids();

    if (cfg.gps_baudrate == 0 || cfg.hil_mode != 0)
    	return;		// GPS not configured or HIL mode

    uartInit(GPS_UART, baudrate, GPS_NewData);

    if (cfg.gps_type == GPS_UBLOX)
        offset = 0;
    else if (cfg.gps_type == GPS_MTK)
        offset = 4;

    if (cfg.gps_type != GPS_NMEA) {
        for (i = 0; i < 5; i++) {
            uartChangeBaud(GPS_UART, init_speed[i]);
            switch (baudrate) {
                case 19200:
                    gpsPrint(gpsInitStrings[offset]);
                    break;
                case 38400:
                    gpsPrint(gpsInitStrings[offset + 1]);
                    break;
                case 57600:
                    gpsPrint(gpsInitStrings[offset + 2]);
                    break;
                case 115200:
                    gpsPrint(gpsInitStrings[offset + 3]);
                    break;
            }
            vTaskDelay(10 / portTICK_RATE_MS);	// Delay on 10 ms
        }
    }

    uartChangeBaud(GPS_UART, baudrate);
    if (cfg.gps_type == GPS_UBLOX) {
        for (i = 0; i < sizeof(ubloxInit); i++) {
            uartWrite(GPS_UART, ubloxInit[i]); // send ubx init binary
            vTaskDelay(4 / portTICK_RATE_MS);	// Delay on 4 ms
        }
    } else if (cfg.gps_type == GPS_MTK) {
        gpsPrint("$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28\r\n");  // only GGA and RMC sentence
        gpsPrint("$PMTK220,200*2C\r\n");                                    // 5 Hz update rate
    }
}
예제 #4
0
파일: gps.c 프로젝트: DuinoPilot/AQ32Plus
void initGPS(void)
{
    uint8_t i;

    switch(eepromConfig.gpsType)
    {
		///////////////////////////////

		case NO_GPS:
		    break;

		///////////////////////////////

		case MEDIATEK_3329_BINARY:     // MediaTek 3329 in binary mode
		    gpsPrint("$PGCMD,16,0,0,0,0,0*6A\r\n");  // Set Binary Output
            gpsPrint("$PMTK220,200*2C\r\n");         // Set 5 Hz Output
            gpsPrint("$PMTK313,1*2E\r\n");           // Set SBAS On - Not sure if this does anything on MTK16 software
            gpsPrint("$PMTK301,2*2E\r\n");           // Set WAAS On - Not sure if this does anything on MTK16 software
            gpsPrint("$PMTK397,0*23\r\n");           // Set Nav Speed Threshold to 0

            mtk19ProcessDataState = MTK19_WAIT_SYNC1;
            break;

        ///////////////////////////////

        case MEDIATEK_3329_NMEA:       // MediaTek 3329 in NMEA mode
            gpsPrint("$PMTK314,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29\r\n");  // GPRMC, GPGGA and GPGSA
			gpsPrint("$PMTK220,200*2C\r\n");                                    // Set 5 Hz Update Rate
			gpsPrint("$PMTK313,1*2E\r\n");                                      // Set SBAS On
            gpsPrint("$PMTK301,2*2E\r\n");                                      // Set WAAS On
            gpsPrint("$PMTK397,0*23\r\n");                                      // Set Nav Speed Threshold to 0

            nmeaProcessDataState = WAIT_START;
            break;

        ///////////////////////////////

        case UBLOX:             // UBLOX in binary mode
        	for (i = 0; i < sizeof(ubx5Hz); i++)                // Set 5 Hz Update Rate
        	   gpsWrite(ubx5Hz[i]);

        	gpsPrint("$PUBX,41,1,0003,0001,38400,0*26\r\n");  // Set Binary Output

        	ubloxProcessDataState = WAIT_SYNC1;
        	break;

        ///////////////////////////////
	}

	sensors.gpsLatitude    = GPS_INVALID_ANGLE;
	sensors.gpsLongitude   = GPS_INVALID_ANGLE;
	sensors.gpsAltitude	   = GPS_INVALID_ALTITUDE;
	sensors.gpsGroundSpeed = GPS_INVALID_SPEED;
	sensors.gpsGroundTrack = GPS_INVALID_ANGLE;
	sensors.gpsNumSats     = GPS_INVALID_SATS;
	sensors.gpsFix         = GPS_INVALID_FIX;
	sensors.gpsDate        = GPS_INVALID_DATE;
	sensors.gpsTime        = GPS_INVALID_TIME;
	sensors.gpsHdop        = GPS_INVALID_HDOP;

	gpsClearBuffer();
}