static void vehicle_wince_io(struct vehicle_priv *priv) { int size, rc = 0; char *str, *tok; dbg(1, "vehicle_file_io : enter\n"); size = read_win32(priv, priv->buffer + priv->buffer_pos, buffer_size - priv->buffer_pos - 1); if (size <= 0) { switch (priv->on_eof) { case 0: vehicle_wince_close(priv); vehicle_wince_open(priv); break; case 1: vehicle_wince_disable_watch(priv); break; case 2: exit(0); break; } return; } priv->buffer_pos += size; priv->buffer[priv->buffer_pos] = '\0'; dbg(1, "size=%d pos=%d buffer='%s'\n", size, priv->buffer_pos, priv->buffer); str = priv->buffer; while ((tok = strchr(str, '\n'))) { *tok++ = '\0'; dbg(1, "line='%s'\n", str); rc +=vehicle_wince_parse(priv, str); str = tok; if (priv->file_type == file_type_file && rc) break; } if (str != priv->buffer) { size = priv->buffer + priv->buffer_pos - str; memmove(priv->buffer, str, size + 1); priv->buffer_pos = size; dbg(2, "now pos=%d buffer='%s'\n", priv->buffer_pos, priv->buffer); } else if (priv->buffer_pos == buffer_size - 1) { dbg(0, "Overflow. Most likely wrong baud rate or no nmea protocol\n"); priv->buffer_pos = 0; } if (rc) callback_list_call_attr_0(priv->cbl, attr_position_coord_geo); }
static void vehicle_wince_destroy(struct vehicle_priv *priv) { vehicle_wince_disable_watch(priv); vehicle_wince_close(priv); if (priv->BthSetMode) { (void)priv->BthSetMode(0); FreeLibrary(priv->hBthDll); } if (priv->source) g_free(priv->source); if (priv->buffer) g_free(priv->buffer); if (priv->read_buffer) g_free(priv->read_buffer); g_free(priv); }
static void vehicle_wince_enable_watch(struct vehicle_priv *priv) { dbg(1, "enter"); vehicle_wince_disable_watch(priv); priv->is_running = 1; InitializeCriticalSection(&priv->lock); priv->m_hGPSThread = CreateThread(NULL, 0, wince_reader_thread, priv, 0, &priv->m_dwGPSThread); if (!priv->m_hGPSThread) { priv->is_running = 0; // error creating thread MessageBox (NULL, TEXT ("Can not create GPS reader thread"), TEXT (""), MB_APPLMODAL|MB_OK); } }