Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Платформы Windows Mobile и Windows Embedded > Инициализация GPS модуля


Автор: danilsl 7.4.2009, 12:09
Всем привет.
Пишу прогу на кпк. Ей нужно обращаться к GPS модулю. На данный момент координаты я уже получаю, осталась только одна проблема: слишком долгая инициализация модуля.
Как обращаться к апи я не знаю, так что просто открываю порт, на котором сидит gps и считываю данные. Проблема на открытии порта. Я его открываю в цикле, по 10 попыток в секунду. И этот цикл может висеть минут по 10. Причём скачаная с нета прога определяет координаты секунд за 20. Как можно ускорить процесс открытия порта?
Пишу в 2005-й студии на C#. К порту обращаюсь компонентой SerialPort. Никаких полей кроме скорости не трогал, а скорости перебрал уже все. Никакого эффекта. Номер порта открываю тот, что указан в настройках кпк для доступа к нему нескольких приложений одновременно.

Автор: t_rex 7.4.2009, 13:20
А на http://codeproject.com вроде был готовый кусок кода по работе с GPS через API, и там инициализация проходила в отдельном потоке чтобы не тормозить GUI.

Автор: Artemon 7.4.2009, 17:57
1. Порт нужно открывать ТОЛЬКО 1 раз, затем деажать его открытым, а в цикле читать из него информацию.

2. Читать порт обязательно нужно в отдельном потоке, иначе приложение не будет отвечать на любые взаимодействия пользователя с ним (это касается случая синхронного обращения к порту).

3. Есть такое понятие как альманах. Если устройство долгое время не включается и лежит с разряженой батареей, то альманах теряется и для начала получения корректных координат требуется примерно минута.

Автор: danilsl 8.4.2009, 07:35
Дело в том, что порт я один раз и открываю. Условие выхода из цикла, который открывает порт
Код

serialPort1.IsOpen==true;

А все остальные итерации возвращают IOException. 
Цикл выполняется до открытия порта. Дальше начинается чтение.
И ещё. В C# пришлось перейти из JAVA, в срочном порядке. Изначально хотел написать эту прогу на джаве, но оказалось, что конкретный девайс её не поддерживает. Времени на изучения языка не было(начальство срочно требует результат), поэтому не успел разобраться с потоками. По этой причине циклы открывающие порт и читающие с него данные выполняются как события таймера. Примерно так
Код

private void OpenPort()
        {
            try
            {
                serialPort1.Open();
            }
            catch (Exception) { }
        }
private void timer1_Tick(object sender, EventArgs e){
      if (serialPort1.IsOpen)
            {
                ProcessData(ReadPort());
            }
            else
            {
                OpenPort();
      if (serialPort1.IsOpen)
                {
                    label1.Text = "Reading data...";
                    progressBar1.Value = 0;
                }
            }
}

А чтоб не висеть на чтении, то перед ним я проверяю свойство serialPort1.BytesToRead. Вот эта радость (открытие порта) и висит.
Момент открытия порта и начала чтения данных однозначно определяет строка label1.Text = "Reading data..."; Так что тормозов на чтении нет однозначно. Да и координаты на карту гис как в аптеке проставляются. Вот ещё бы порт пошустрее открыть...

Автор: Experimenter 23.4.2009, 22:32
danilsl, а ты SDK для WM5 или WM6 ставил? Там же готовые примеры есть под GPS API. Показано и как обращаться и т.д. и т.п.

Автор: myk 3.9.2009, 05:14
подскажите чего делать при таком раскладе.

serialPort1.Open(); выполняется без ошибки(IOExeption) если я GPS(встроенный) включаю в ДубльГис иначе порт не открывается. видимо есть какие то функции включения GPS приемника ничего найти немогу подскажите.

Автор: sn0wmen 28.11.2009, 10:25
Есть замечательный чип ublox5
Единственное пока устройство на нем представленное в России - это http://npkintec.ru/index.php?section=catalog&razdel=3
Кстати российские разработчики.
Для этого чипа на сайте производителя есть целая куча различных программ для конфигурирования и работы с устройством. http://u-blox.com/en/firmware.html
Очень много полезного можно узнать и опробовать. Устройство довольно простое и надежное. Ребята-разработчики - молодцы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)