Example #1
0
/*--------------------------------------------------------------------*/
int mbr_wt_em12darw(int verbose, void *mbio_ptr, void *store_ptr, int *error) {
	char *function_name = "mbr_wt_em12darw";
	int status = MB_SUCCESS;
	struct mb_io_struct *mb_io_ptr;
	struct mbf_em12darw_struct *data;
	struct mbsys_simrad_struct *store;
	struct mbsys_simrad_survey_struct *ping;
	char line[MBF_EM12DARW_RECORD_LENGTH];
	int index;
	char *datacomment;
	int time_i[7];
	int time_j[5];
	int year;
	int i;

	/* print input debug statements */
	if (verbose >= 2) {
		fprintf(stderr, "\ndbg2  MBIO function <%s> called\n", function_name);
		fprintf(stderr, "dbg2  Input arguments:\n");
		fprintf(stderr, "dbg2       verbose:    %d\n", verbose);
		fprintf(stderr, "dbg2       mbio_ptr:   %p\n", (void *)mbio_ptr);
		fprintf(stderr, "dbg2       store_ptr:  %p\n", (void *)store_ptr);
	}

	/* get pointer to mbio descriptor */
	mb_io_ptr = (struct mb_io_struct *)mbio_ptr;

	/* get pointer to raw data structure */
	data = (struct mbf_em12darw_struct *)mb_io_ptr->raw_data;
	datacomment = (char *)&line[80];
	store = (struct mbsys_simrad_struct *)store_ptr;

	/* print debug statements */
	if (verbose >= 5) {
		fprintf(stderr, "\ndbg5  Status at beginning of MBIO function <%s>\n", function_name);
		fprintf(stderr, "dbg5       store->kind:    %d\n", store->kind);
		fprintf(stderr, "dbg5       error:          %d\n", *error);
		fprintf(stderr, "dbg5       status:         %d\n", status);
	}

	/*  translate values from em12 data storage structure */
	if (store->kind == MB_DATA_DATA) {
		/* record type */
		data->func = 150;

		/* time */
		time_i[0] = store->year;
		time_i[1] = store->month;
		time_i[2] = store->day;
		time_i[3] = store->hour;
		time_i[4] = store->minute;
		time_i[5] = store->second;
		time_i[6] = store->centisecond;
		mb_get_jtime(verbose, time_i, time_j);
		mb_unfix_y2k(verbose, time_j[0], &year);
		data->year = (short)year;
		data->jday = time_j[1];
		data->minute = time_j[2];
		data->secs = 100 * time_j[3] + 0.0001 * time_j[4];

		/* navigation */
		data->utm_zone = store->utm_zone;
		data->utm_merd = store->utm_zone_lon;
		data->corflag = store->utm_system;
		data->posq = store->pos_quality;
		data->speed = store->speed;
		if (data->corflag == 0) {
			data->latitude = store->pos_latitude;
			data->longitude = store->pos_longitude;
		}
		else {
			data->latitude = store->utm_northing;
			data->longitude = store->utm_easting;
		}

		/* deal with survey data
		    in secondary data structure */
		if (store->ping != NULL) {
			/* get data structure pointer */
			ping = (struct mbsys_simrad_survey_struct *)store->ping;

			/* copy survey data */
			data->latitude = ping->latitude;
			data->longitude = ping->longitude;
			data->pingno = ping->ping_number;
			data->mode = ping->bath_res;
			data->depthl = ping->keel_depth;
			data->gyro = 0.1 * ping->heading;
			data->roll = 0.01 * ping->roll;
			data->pitch = 0.01 * ping->pitch;
			data->heave = 0.01 * ping->ping_heave;
			data->sndval = 0.1 * ping->sound_vel;
			for (i = 0; i < ping->beams_bath; i++) {
				if (ping->beamflag[i] == MB_FLAG_NULL)
					data->depth[i] = 0;
				else if (!mb_beam_ok(ping->beamflag[i]))
					data->depth[i] = -ping->bath[i];
				else
					data->depth[i] = ping->bath[i];
				data->distacr[i] = ping->bath_acrosstrack[i];
				data->distalo[i] = ping->bath_alongtrack[i];
				data->range[i] = ping->tt[i];
				data->refl[i] = (short int)ping->amp[i];
				data->beamq[i] = (short int)ping->quality[i];
			}
		}
	}

	/* comment */
	else if (store->kind == MB_DATA_COMMENT) {
		data->func = 100;
		strncpy(datacomment, store->comment, MBSYS_SIMRAD_COMMENT_LENGTH);
	}

	/* print debug statements */
	if (verbose >= 5) {
		fprintf(stderr, "\ndbg5  Ready to write data in MBIO function <%s>\n", function_name);
		fprintf(stderr, "dbg5       store->kind:       %d\n", store->kind);
		fprintf(stderr, "dbg5       error:             %d\n", *error);
		fprintf(stderr, "dbg5       status:            %d\n", status);
	}

	/* print debug statements */
	if (verbose >= 4 && status == MB_SUCCESS) {
		fprintf(stderr, "\ndbg4  Data to be written by MBIO function <%s>\n", function_name);
		fprintf(stderr, "dbg4  Status values:\n");
		fprintf(stderr, "dbg4       store->kind:%d\n", store->kind);
		fprintf(stderr, "dbg4       error:      %d\n", *error);
		fprintf(stderr, "dbg4       status:     %d\n", status);
		if (store->kind == MB_DATA_DATA) {
			fprintf(stderr, "dbg4  Survey values:\n");
			fprintf(stderr, "dbg4       year:       %d\n", data->year);
			fprintf(stderr, "dbg4       jday:       %d\n", data->jday);
			fprintf(stderr, "dbg4       minute:     %d\n", data->minute);
			fprintf(stderr, "dbg4       secs:       %d\n", data->secs);
			fprintf(stderr, "dbg4       latitude:   %f\n", data->latitude);
			fprintf(stderr, "dbg4       longitude:  %f\n", data->longitude);
			fprintf(stderr, "dbg4       corflag:    %d\n", data->corflag);
			fprintf(stderr, "dbg4       utm_merd:   %f\n", data->utm_merd);
			fprintf(stderr, "dbg4       utm_zone:   %d\n", data->utm_zone);
			fprintf(stderr, "dbg4       posq:       %d\n", data->posq);
			fprintf(stderr, "dbg4       pingno:     %d\n", data->pingno);
			fprintf(stderr, "dbg4       mode:       %d\n", data->mode);
			fprintf(stderr, "dbg4       depthl:     %f\n", data->depthl);
			fprintf(stderr, "dbg4       speed:      %f\n", data->speed);
			fprintf(stderr, "dbg4       gyro:       %f\n", data->gyro);
			fprintf(stderr, "dbg4       roll:       %f\n", data->roll);
			fprintf(stderr, "dbg4       pitch:      %f\n", data->pitch);
			fprintf(stderr, "dbg4       heave:      %f\n", data->heave);
			fprintf(stderr, "dbg4       sndval:     %f\n", data->sndval);
			for (i = 0; i < MBF_EM12DARW_BEAMS; i++)
				fprintf(stderr, "dbg4       beam:%d  depth:%d  distacr:%d  distalo:%d  range:%d refl:%d beamq:%d\n", i,
				        data->depth[i], data->distacr[i], data->distalo[i], data->range[i], data->refl[i], data->beamq[i]);
		}
		else if (store->kind == MB_DATA_COMMENT) {
			fprintf(stderr, "dbg4  Comment:\n");
			fprintf(stderr, "dbg4       comment:    %s\n", datacomment);
		}
	}

	/* deal with comment */
	if (status == MB_SUCCESS && store->kind == MB_DATA_COMMENT) {
		index = 0;
		for (i = 0; i < MBF_EM12DARW_RECORD_LENGTH; i++)
			line[i] = 0;
		mb_put_binary_short(MB_NO, data->func, &line[0]);
		index += 2;
		strncpy(datacomment, store->comment, MBSYS_SIMRAD_COMMENT_LENGTH);
	}

	/* deal with data */
	else if (status == MB_SUCCESS && store->kind == MB_DATA_DATA) {
		index = 0;
		mb_put_binary_short(MB_NO, data->func, &line[0]);
		index += 2;
		mb_put_binary_short(MB_NO, data->year, &line[index]);
		index += 2;
		mb_put_binary_short(MB_NO, data->jday, &line[index]);
		index += 2;
		mb_put_binary_short(MB_NO, data->minute, &line[index]);
		index += 2;
		mb_put_binary_short(MB_NO, data->secs, &line[index]);
		index += 8;
		mb_put_binary_double(MB_NO, data->latitude, &line[index]);
		index += 8;
		mb_put_binary_double(MB_NO, data->longitude, &line[index]);
		index += 8;
		mb_put_binary_short(MB_NO, data->corflag, &line[index]);
		index += 4;
		mb_put_binary_float(MB_NO, data->utm_merd, &line[index]);
		index += 4;
		mb_put_binary_short(MB_NO, data->utm_zone, &line[index]);
		index += 2;
		mb_put_binary_short(MB_NO, data->posq, &line[index]);
		index += 2;
		mb_put_binary_int(MB_NO, data->pingno, &line[index]);
		index += 4;
		mb_put_binary_short(MB_NO, data->mode, &line[index]);
		index += 4;
		mb_put_binary_float(MB_NO, data->depthl, &line[index]);
		index += 4;
		mb_put_binary_float(MB_NO, data->speed, &line[index]);
		index += 4;
		mb_put_binary_float(MB_NO, data->gyro, &line[index]);
		index += 4;
		mb_put_binary_float(MB_NO, data->roll, &line[index]);
		index += 4;
		mb_put_binary_float(MB_NO, data->pitch, &line[index]);
		index += 4;
		mb_put_binary_float(MB_NO, data->heave, &line[index]);
		index += 4;
		mb_put_binary_float(MB_NO, data->sndval, &line[index]);
		index += 4;
		for (i = 0; i < MBF_EM12DARW_BEAMS; i++) {
			mb_put_binary_short(MB_NO, data->depth[i], &line[index]);
			index += 2;
		}
		for (i = 0; i < MBF_EM12DARW_BEAMS; i++) {
			mb_put_binary_short(MB_NO, data->distacr[i], &line[index]);
			index += 2;
		}
		for (i = 0; i < MBF_EM12DARW_BEAMS; i++) {
			mb_put_binary_short(MB_NO, data->distalo[i], &line[index]);
			index += 2;
		}
		for (i = 0; i < MBF_EM12DARW_BEAMS; i++) {
			mb_put_binary_short(MB_NO, data->range[i], &line[index]);
			index += 2;
		}
		for (i = 0; i < MBF_EM12DARW_BEAMS; i++) {
			mb_put_binary_short(MB_NO, data->refl[i], &line[index]);
			index += 2;
		}
		for (i = 0; i < MBF_EM12DARW_BEAMS; i++) {
			mb_put_binary_short(MB_NO, data->beamq[i], &line[index]);
			index += 2;
		}
	}

	/* write next record to file */
	if (store->kind == MB_DATA_DATA || store->kind == MB_DATA_COMMENT) {
		if ((status = fwrite(line, 1, MBF_EM12DARW_RECORD_LENGTH, mb_io_ptr->mbfp)) == MBF_EM12DARW_RECORD_LENGTH) {
			status = MB_SUCCESS;
			*error = MB_ERROR_NO_ERROR;
		}
		else {
			status = MB_FAILURE;
			*error = MB_ERROR_WRITE_FAIL;
		}
	}
	else {
		status = MB_SUCCESS;
		*error = MB_ERROR_NO_ERROR;
		if (verbose >= 5)
			fprintf(stderr, "\ndbg5  No data written in MBIO function <%s>\n", function_name);
	}

	/* print output debug statements */
	if (verbose >= 2) {
		fprintf(stderr, "\ndbg2  MBIO function <%s> completed\n", function_name);
		fprintf(stderr, "dbg2  Return values:\n");
		fprintf(stderr, "dbg2       error:      %d\n", *error);
		fprintf(stderr, "dbg2  Return status:\n");
		fprintf(stderr, "dbg2       status:  %d\n", status);
	}

	return (status);
}
Example #2
0
/*--------------------------------------------------------------------*/
int mbr_wt_hydrob93(int verbose, void *mbio_ptr, void *store_ptr, int *error)
{
	char	*function_name = "mbr_wt_hydrob93";
	int	status = MB_SUCCESS;
	struct mb_io_struct *mb_io_ptr;
	struct mbsys_singlebeam_struct *store;
	char	line[MBF_HYDROB93_RECORD_LENGTH];
	int	ilongitude, ilatitude, idepth;
	short	itype;

	/* print input debug statements */
	if (verbose >= 2)
		{
		fprintf(stderr,"\ndbg2  MBIO function <%s> called\n",function_name);
		fprintf(stderr,"dbg2  Input arguments:\n");
		fprintf(stderr,"dbg2       verbose:    %d\n",verbose);
		fprintf(stderr,"dbg2       mbio_ptr:   %lu\n",(size_t)mbio_ptr);
		fprintf(stderr,"dbg2       store_ptr:  %lu\n",(size_t)store_ptr);
		}

	/* get pointer to mbio descriptor */
	mb_io_ptr = (struct mb_io_struct *) mbio_ptr;

	/* get pointer to raw data structure */
	store = (struct mbsys_singlebeam_struct *) store_ptr;

	/* handle the data */
	if (store->kind == MB_DATA_DATA)
	    {
	    /* print output debug statements */
	    if (verbose >= 4)
		    {
		    fprintf(stderr,"\ndbg4  Data to be written in MBIO function <%s>\n",
			    function_name);
		    fprintf(stderr,"dbg4  Values,read:\n");
		    fprintf(stderr,"dbg4       latitude:     %f\n",store->latitude);
		    fprintf(stderr,"dbg4       longitude:    %f\n",store->longitude);
		    fprintf(stderr,"dbg4       bath:         %f\n",store->bath);
		    fprintf(stderr,"dbg4       flag:         %d\n",store->flag);
		    fprintf(stderr,"dbg4       error:        %d\n",*error);
		    fprintf(stderr,"dbg4       status:       %d\n",status);
		    }
		    
	    /* put data into buffer */
	    ilongitude = (int)(1000000 * store->longitude);
	    ilatitude = (int)(1000000 * store->longitude);
	    idepth = (int)(10 * store->bath);
	    if (mb_beam_ok(store->flag))
	    	itype = 711;
	    else if (store->flag == MB_FLAG_NULL)
	    	itype = 0;
	    else
	    	itype = 10711;
	    mb_put_binary_int(MB_YES, (int) ilatitude, (void *) &line[0]); 
	    mb_put_binary_int(MB_YES, (int) ilongitude, (void *) &line[4]); 
	    mb_put_binary_int(MB_YES, (int) idepth, (void *) &line[8]); 
	    mb_put_binary_short(MB_YES, (short) itype, (void *) &line[12]); 
	    }

	if ((status = fwrite(line,1,MBF_HYDROB93_RECORD_LENGTH,
		mb_io_ptr->mbfp)) == MBF_HYDROB93_RECORD_LENGTH) 
		{
		status = MB_SUCCESS;
		*error = MB_ERROR_NO_ERROR;
		}
	else
		{
		status = MB_FAILURE;
		*error = MB_ERROR_WRITE_FAIL;
		}

	/* print output debug statements */
	if (verbose >= 5)
		{
		fprintf(stderr,"\ndbg5  Data record kind in MBIO function <%s>\n",function_name);
		fprintf(stderr,"dbg5       kind:       %d\n",store->kind);
		}

	/* print output debug statements */
	if (verbose >= 2)
		{
		fprintf(stderr,"\ndbg2  MBIO function <%s> completed\n",function_name);
		fprintf(stderr,"dbg2  Return values:\n");
		fprintf(stderr,"dbg2       error:      %d\n",*error);
		fprintf(stderr,"dbg2  Return status:\n");
		fprintf(stderr,"dbg2       status:  %d\n",status);
		}

	/* return status */
	return(status);
}