Связь между GSM-модемом и Android-устройством

У меня есть сервер, на котором запущено серверное приложение С#. Приложение должно периодически подключаться через GSM-модем к набору устройств (тачпады под управлением Android 2.2) и загружать некоторые файлы. Первый раз сталкиваюсь с GSM связью, так что совсем запутался. Пока я предполагаю, что мне нужны AT-команды для связи, но я не уверен, как это сделать.

Я предполагаю, что первым шагом будет набор ATD. Когда я получу ответ, как я могу попросить устройство отправить мне данные? Нужно ли кодировать приложение/службу на устройстве, отвечающем на мои звонки? Нужные мне данные хранятся в txt-файлах на моей SD-карте, но я могу поместить их куда угодно, если это будет проще.

Было бы очень хорошо, если бы вы могли помочь мне с кодом AT, который делает подобные вещи или что-то, что поможет мне понять, как заставить это работать.

Спасибо


person ggpuz    schedule 05.09.2011    source источник
comment
Эти устройства находятся под вашим контролем? То есть не могли бы вы внести изменения в саму систему Android? Без этого я не вижу способа, которым вы могли бы достичь этого. Android не позволяет приложению отправлять или получать данные по телефону. Если вы можете изменить систему Android, работающую на этих устройствах, это может быть возможно.   -  person JesusFreke    schedule 05.09.2011
comment
Думаю, нет, все, что я могу сделать, это писать приложения. Есть ли у вас какие-либо другие идеи о том, как выполнить то, что мне нужно, используя эту технологию? Могу ли я сделать обратное и отправить данные на свой сервер вместо того, чтобы просить сервер их получить?   -  person ggpuz    schedule 05.09.2011
comment
Я не знаю, каким образом вы могли бы сделать это с помощью обычного телефонного звонка. Тем не менее, вы можете рассмотреть возможность использования какой-либо службы SIP. Это не совсем моя область знаний, но я полагаю, что вы могли бы получить больше контроля над телефонным вызовом SIP на устройстве.   -  person JesusFreke    schedule 05.09.2011


Ответы (2)


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

В этот момент ваш сервер, на котором запущена программа C#, не нуждается в собственном GSM-модеме (если только проводная служба недоступна для его местоположения). Если вы подключаете его через GSM, вам понадобится еще один сервер с интернет-провайдером серверного типа для настройки соединений между ним и планшетами, поэтому вы можете просто запустить свою программу C# на этом компьютере.

По сути, вы вообще не будете иметь дело с GSM напрямую — вы просто будете писать приложения для работы поверх несколько ограниченной IP-сети, которая не разрешает запросы на подключение к клиентам. Стек андроида на планшетах полностью скрывает от разработчика приложения процесс взаимодействия со встроенным GSM-модемом — вы видите только обычный интерфейс сетевых сокетов, на java или C.

Если вы хотите сделать что-то с прямой радиосвязью между сервером и планшетами на небольшой площади, посмотрите на вайфай или что-то вроде zigbee.

person Chris Stratton    schedule 05.09.2011
comment
Так что вы предлагаете использовать GPRS для отправки и получения данных? Могу ли я разбудить устройство через GPRS, чтобы оно отправило данные на сервер (чтобы устройство не было постоянно подключено к Интернету)? - person ggpuz; 05.09.2011
comment
Нет, я предлагаю вам не иметь дело ни с GSM, ни с GPRS, ни с Edge, ни с 3g, ни с LTE, ни с чем-то еще — потому что Android-устройства не раскрывают это программисту приложений, а мобильные сети не раскрывают эти клиенты для подключения запросы из большого плохого интернета. Вместо этого вам понадобится сервер, доступный из Интернета, к которому подключаются все планшеты-клиенты и ждут данных — детали радиосхемы и строки команд модема для этого полностью находятся вне вашего контроля и скрыты от вас, вы просто пишете обычный сетевой код в стиле сокетов на Java или C. - person Chris Stratton; 06.09.2011
comment
В конце концов я добавил этот подход. Централизованный сервер с MQTT-брокером и apache/php/mysql. Я использую MQTT для пробуждения устройства и php-страниц для перемещения данных (хотя это можно было бы сделать и с помощью прямого соединения tcp через сокеты). Ваше здоровье - person ggpuz; 15.09.2011

Для этого типа связи вам идеально подойдет C2DM. Но вам нужно написать приложение, чтобы ответить на ваш запрос и загрузить данные на сервер, а также написать сценарий push-сообщения для сервера.

person PowerAktar    schedule 15.12.2011