Developing GPS read plugin

Good afternoon, colleagues!

I am trying to develop a Gstreamer component that will read data from a GPS sensor and broadcast the data as strings like subtitles.

static GstFlowReturn
gst_gpssrc_create (GstBaseSrc * src, guint64 offset, guint size,
    GstBuffer ** buf)
{
  GstGpssrc *gpssrc = GST_GPSSRC (src);

  GST_DEBUG_OBJECT (gpssrc, "create");

  struct gps_data_t* gps_data = &gpssrc->gps_data;

  if(gps_waiting(gps_data, 5000000)) { // 5-second timeout
    if (gps_read(gps_data, NULL, 0 ) == -1) {
      GST_ERROR_OBJECT(gpssrc, "Error reading GPS data: %s", gps_errstr(errno));
      return GST_FLOW_ERROR;
    } else {
      if (MODE_SET != (MODE_SET & ((*gps_data).set))) {
        return GST_FLOW_OK;
      }
      if (0 >  (*gps_data).fix.mode || MODE_STR_NUM <= (*gps_data).fix.mode) {
        (*gps_data).fix.mode = 0;
      }
      printf("Fix mode: %s (%d) Time: ", mode_str[(*gps_data).fix.mode], (*gps_data).fix.mode);
      if (TIME_SET == (TIME_SET & (*gps_data).set)) {
        // not 32 bit safe
        printf("%ld.%09ld \n", (*gps_data).fix.time.tv_sec, (*gps_data).fix.time.tv_nsec);
      } else {
            puts("n/a ");
      }
      if (isfinite((*gps_data).fix.latitude) && isfinite((*gps_data).fix.longitude)) {
        gchar data[256];
        g_snprintf(data, sizeof(data), "Latitude: %f, Longitude: %f\n", (*gps_data).fix.latitude, (*gps_data).fix.longitude);
        gsize data_size = strlen(data);

        *buf = gst_buffer_new_and_alloc(data_size);
        GstMapInfo map;
        gst_buffer_map(*buf, &map, GST_MAP_WRITE);
        memcpy(map.data, data, data_size);
        gst_buffer_unmap(*buf, &map);

        GST_BUFFER_TIMESTAMP(*buf) = gst_clock_get_time(gst_element_get_clock(GST_ELEMENT(gpssrc)));
        GST_BUFFER_DURATION (*buf) = gst_util_uint64_scale_int(GST_SECOND, 1, 1); // 1-second duration

        return GST_FLOW_OK;
      } else {
        printf("Lat n/a Lon n/a\n");
      }
    }
  }
  return GST_FLOW_OK;
}

And here I see that in some cases I don’t get any data and return GST_FLOW_OK and buf is NULL. This is causing an error.

What should I return if I have no GPS data?

I want to remove my topic and can’t do it.