コード例 #1
0
ファイル: GPSSensorNMEA.cpp プロジェクト: benoitclem/PYRN
bool GPSSensorNMEA::GetImpact(GPSSensorNMEA::gpsImpact *pdata) {
    if(fixed) {
        memcpy((char*)pdata,(const char*)&impact,sizeof(gpsImpact));
        DBG_MEMDUMP("data",(char*)pdata,sizeof(gpsImpact));
        return true;
    }
    return false;
}
コード例 #2
0
ファイル: GPSSensorNMEA.cpp プロジェクト: benoitclem/PYRN
void GPSSensorNMEA::Sample(void) {
    int len = 0;
    bool newData = false;
    if(gpsNewlineDetected) {
        while(1) {
            int nChars = gps.rxBufferGetCount();
            if(nChars == 0) 
                break;
            //else
            //    DBG("To read --> %d",nChars);
            // We could consider passing the data directly to parser whithout buffering it
            // but: That's annoying cause if so we could not printf them smoothly on console
            len = GetLine();
            
            //DBG("GotLine(%d) %s",len,recvBuff);
            DBG_MEMDUMP("GPSData",(const char*)recvBuff,len);
            
            for(unsigned int i = 0; i < len; i++) {
                // Insert all data to gpsParser
                if(gpsParser.encode(recvBuff[i])) {
                    newData = true;
                }
            }
            
            // Only take a sample when all the data for each epoch have been received
            if(gpsParser.gll_ready()){
                long lat = 0, lon = 0, hdop = 0;
                unsigned long date = 0, time = 0;
                long alt = 0;
                gpsParser.get_position(&lat,&lon,&alt);
                gpsParser.get_datetime(&date,&time);
                hdop = gpsParser.hdop();
                if((lat != TinyGPS::GPS_INVALID_ANGLE) && (lon != TinyGPS::GPS_INVALID_ANGLE)){
                    fixed = true;
                    impact.date = date;
                    impact.time = time/100;
                    impact.lat = lat;
                    impact.lon = lon;
                    impact.alt = alt;
                    if(hdop>0xffff) {
                        impact.hdop = -1;
                    } else {
                        impact.hdop = hdop;
                    }
                    WARN("######[%ld-%ld][%08x - %09ld|%08x - %09ld|%04d]######",impact.date,impact.time,impact.lat,impact.lat,impact.lon,impact.lon,impact.hdop);
                } else {
                    fixed = false;
                    DBG("All data have been received but lat/lon does not seems to be valid",date,time,lat,lon,hdop);
                }
                gpsParser.reset_ready();
            } else {
                fixed = false;
            }
        }
    }
}
コード例 #3
0
ファイル: GPSSensorUBX.cpp プロジェクト: benoitclem/PYRN
int GPSSensorUBX::ReceiveFrame(uint32_t timeOutUs){
	bool reading = false;
	int i = 0;
	int j = 0;
	int jMax = 10;  
	uint32_t deadLine = us_ticker_read() + timeOutUs;
	while(1) {
		//DBG("PIPI");
		if(gps.readable()) {
			j = 0;
			//DBG("Rx");
			recvBuff[i++] = gps.getc();
			reading = true;
		} else {
			// DBG("CACA");
			// Was reading and become unreadable
			if(reading) {
				if(j<jMax) {
					j++;
					Thread::wait(4);
				} else {
					DBG_MEMDUMP("Received", (const char*) recvBuff, i);
					return i;
				}
			} else {
				if(us_ticker_read()>deadLine) {
					DBG("TimedOut");
					return 0;
				} else {
					Thread::wait(10);
					//DBG("ZIZI");
				}
			}
		}
	}
}
コード例 #4
0
ファイル: main.c プロジェクト: bogde/OpenCBM
static int
main_testtransfer(int argc, char **argv)
{
    /* CBM_FILE fd; */
    unsigned char compare_buffer[0x8000];
    unsigned char buffer[0x8000];
    unsigned int error = 0;
    int rv;

#if DBG
    DbgFlags = 0x0;
#endif

    printf(" libtransfer sample: " __DATE__ " " __TIME__ "\n");

    if (argc > 1)
    {
        processParameter(argc, argv);
    }

    rv = cbm_driver_open(&fd, 0);

    if(rv != 0)
    {
        DBG_ERROR((DBG_PREFIX "cbm_driver_open() failed!"));
        return 1;
    }

    DBG_PRINT((DBG_PREFIX "before install"));
    libopencbmtransfer_install(fd, drive);

    memset(buffer, 0, sizeof(buffer));

    if (compare)
        read_from_file(compare_buffer, sizeof(compare_buffer), "rom.image");

    DBG_PRINT((DBG_PREFIX "before read_mem"));

#if 0
    transferlength = 0x100;
    printf("write $0300\n");
    libopencbmtransfer_write_mem(fd, drive, compare_buffer, 0x300, transferlength);
    printf("read $0300\n");
    libopencbmtransfer_read_mem(fd, drive, buffer, 0x300, transferlength);

    printf("compare\n");
    if (memcmp(buffer, compare_buffer, transferlength) != 0)
    {
        printf("differing!\n");
    }
#else
    while (count--)
    {
        printf("read:  %i, error = %u: \n", count+1, error);
        libopencbmtransfer_read_mem(fd, drive, buffer, 0x8000, transferlength);
        if (compare)
        {
            if (memcmp(buffer, compare_buffer, transferlength) != 0)
            {
                char filename[128];
                int n;

                printf("\n\n***** ERROR COMPARING DATA! *****\n\n");
                ++error;

                strcpy(filename, "image.err.");
                n = strlen(filename);

                if (error > 9999) filename[n++] = ((error / 10000) % 10) + '0';
                if (error >  999) filename[n++] = ((error /  1000) % 10) + '0';
                if (error >   99) filename[n++] = ((error /   100) % 10) + '0';
                if (error >    9) filename[n++] = ((error /    10) % 10) + '0';
                if (error >    0) filename[n++] = ((error /     1) % 10) + '0';

                filename[n] = 0;
                write_to_file(buffer, transferlength, filename);
            }
            else
            {
                printf("       compare success\n");
            }
        }

        printf("write: %i, error = %u: \n", count+1, error);
        libopencbmtransfer_write_mem(fd, drive, compare_buffer, 0x8000, transferlength);
    }
#endif

    if (outputdump)
        DBG_MEMDUMP("8000:", buffer, transferlength + 0x10);

    if (writedumpfile)
        write_to_file(buffer, transferlength, "image.bin");

    DBG_PRINT((DBG_PREFIX "before remove"));
    libopencbmtransfer_remove(fd, drive);

    cbm_driver_close(fd);

    FUNC_LEAVE_INT(0);
}