Студопедия — Код программы
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Код программы






#include "gprs.h";

 

#include "ch.h"

#include "hal.h"

 

#include <string.h>

 

#include "util.h"

#include "led.h"

 

#define GPRS_CMD_BUF 256

#define ATZ_RETRY 5

#define CMD_WAIT_TIME 250

 

#define GPRS_SERIAL SD2

 

SerialConfig SD2_Config = {

.sc_speed = 115200,

.sc_cr2 = USART_CR2_STOP1_BITS,

.sc_cr3 = USART_CR3_RTSE | USART_CR3_CTSE

};

 

uint8_t *gprs_data = NULL;

 

static WORKING_AREA(waGPRSThread, 256);

static msg_t GPRSThread (void *arg) {

(void)arg;

 

if (gprs_data!= NULL) {

chHeapFree(gprs_data);

}

 

gprs_data = chHeapAlloc(NULL, GPRS_CMD_BUF);

size_t gprs_bytes_read;

uint16_t signal_level;

uint16_t i;

char num_buf[16];

uint8_t num_len;

chRegSetThreadName("gprs_thread");

 

if (gprs_data == NULL) {

while (TRUE) {

//palTogglePad(GPIO_LED_1_PORT, GPIO_LED_1_PIN);

chThdSleepMilliseconds(50);

}

}

 

sdStart(&GPRS_SERIAL, &SD2_Config);

palSetPadMode(GPRS_USART_PORT, GPRS_USART_TX_PIN, PAL_MODE_ALTERNATE(7));

palSetPadMode(GPRS_USART_PORT, GPRS_USART_RX_PIN, PAL_MODE_ALTERNATE(7));

palSetPadMode(GPRS_USART_PORT, GPRS_USART_CTS_PIN, PAL_MODE_ALTERNATE(7));

palSetPadMode(GPRS_USART_PORT, GPRS_USART_RTS_PIN, PAL_MODE_ALTERNATE(7));

 

palSetPadMode(GPIO_GPRS_PWR_BAT_PORT, GPIO_GPRS_PWR_BAT_PIN, PAL_MODE_OUTPUT_PUSHPULL);

palSetPadMode(GPIO_GPRS_RESET_PORT, GPIO_GPRS_RESET_PIN, PAL_MODE_OUTPUT_OPENDRAIN);

 

// Turn on GPRS power

palClearPad(GPIO_GPRS_PWR_BAT_PORT, GPIO_GPRS_PWR_BAT_PIN);

 

chThdSleepSeconds(5);

 

while (TRUE) {

//palTogglePad(GPIO_LED_1_PORT, GPIO_LED_1_PIN);

 

if (init_modem() == E_OK)

break;

}

 

set_led_0_prescaler(5);

 

uint8_t counter = 0;

 

while (TRUE) {

counter++;

if (counter == 10) {

counter = 0;

send_tcp_message();

}

 

//palTogglePad(GPIO_LED_1_PORT, GPIO_LED_1_PIN);

 

if (is_gprs_network_ok() == TRUE) {

//sdWrite(&SD1, "NETWORK REGISTERED", sizeof("NETWORK REGISTERED") - 1);

} else {

//sdWrite(&SD1, "NO NETWORK", sizeof("NO NETWORK") - 1);

}

 

chThdSleepMilliseconds(100);

 

if (gprs_get_signal_level(&signal_level) == E_OK) {

 

/* sdWrite(&SD1, "SIGNAL LEVEL: ", sizeof("SIGNAL LEVEL: ") - 1);

stoa(signal_level, num_buf, &num_len);

sdWrite(&SD1, num_buf, num_len - 1);

sdWrite(&SD1, "\r\n", sizeof("\r\n") - 1);*/

 

} else {

//sdWrite(&SD1, "SIGNAL LEVEL: ERR\r\n", sizeof("SIGNAL LEVEL: ERR\r\n") - 1);

}

 

chThdSleepMilliseconds(1000);

}

 

chHeapFree(gprs_data);

}

 

uint8_t init_modem () {

uint16_t i;

uint16_t bytes_read;

 

for (i = 0; i < ATZ_RETRY; i++) {

sdWrite(&GPRS_SERIAL, "ATE0\r\n", sizeof ("ATE0\r\n"));

chThdSleepMilliseconds(200);

 

if (gprs_cmd("ATZ\r\n", sizeof ("ATZ\r\n") - 1, "\r\nOK\r\n", sizeof ("\r\nOK\r\n") - 1) == E_OK)

break;

 

chThdSleepMilliseconds(500);

}

 

if (i >= ATZ_RETRY)

return E_NOT_RESPONDING;

 

 

return E_OK;

}

 

uint8_t gprs_cmd (char * cmd_str, uint16_t cmd_len, char * answer_str, uint16_t answer_len) {

uint16_t bytes_read;

 

// Flush buffer

sdAsynchronousRead(&GPRS_SERIAL, gprs_data, GPRS_CMD_BUF);

 

sdWrite(&GPRS_SERIAL, cmd_str, cmd_len);

chThdSleepMilliseconds(CMD_WAIT_TIME);

 

if (answer_str == NULL) {

return E_OK;

}

 

bytes_read = sdAsynchronousRead(&GPRS_SERIAL, gprs_data, answer_len);

 

if (bytes_read == answer_len) {

if (strncmp(gprs_data, answer_str, bytes_read) == 0) {

return E_OK;

}

}

 

return E_INVALID_ANSWER;

}

 

uint8_t gprs_cmd_read (char * cmd_str, uint16_t cmd_len, uint16_t *answer_len) {

uint16_t bytes_read;

 

sdWrite(&GPRS_SERIAL, "ATE0\r\n", sizeof ("ATE0\r\n"));

chThdSleepMilliseconds(200);

 

// Flush buffer

sdAsynchronousRead(&GPRS_SERIAL, gprs_data, GPRS_CMD_BUF);

 

sdWrite(&GPRS_SERIAL, cmd_str, cmd_len);

chThdSleepMilliseconds(1000);

bytes_read = sdAsynchronousRead(&GPRS_SERIAL, gprs_data, GPRS_CMD_BUF);

 

*answer_len = bytes_read;

 

if (bytes_read == 0)

return E_NOT_RESPONDING;

 

return E_OK;

}

 

uint8_t gprs_get_signal_level (uint16_t *signalLevel) {

uint16_t bytes_read;

char signalLevelStr[3] = {0, 0, 0};

 

if (gprs_cmd_read("AT+CSQ\r\n", sizeof ("AT+CSQ\r\n") - 1, &bytes_read)!= E_OK) {

return E_NOT_RESPONDING;

}

 

if (bytes_read < 13)

return E_INVALID_ANSWER;

 

if (strncmp(gprs_data, "\r\n+CSQ:", sizeof ("\r\n+CSQ:") - 1)!= 0) {

return E_INVALID_ANSWER;

}

 

signalLevelStr[0] = gprs_data[8];

 

if (gprs_data[9]!= ',')

signalLevelStr[1] = gprs_data[9];

 

*signalLevel = atos(signalLevelStr);

 

return E_OK;

}

 

void init_gprs () {

// GPRS Thread

chThdCreateStatic(waGPRSThread, sizeof (waGPRSThread), NORMALPRIO, GPRSThread, NULL);

}

 

uint8_t is_gprs_network_ok () {

sdWrite(&GPRS_SERIAL, "ATE0\r\n", sizeof ("ATE0\r\n"));

chThdSleepMilliseconds(200);

 

if (gprs_cmd("AT+CREG?\r\n", sizeof ("AT+CREG?\r\n") - 1, "\r\n+CREG 0,1\r\n", sizeof ("\r\n+CREG 0,1\r\n") - 1) == E_OK)

return TRUE;

 

return FALSE;

}

 

uint8_t send_tcp_message () {

uint16_t bytes_read;

uint8_t i;

 

if (is_gprs_network_ok()!= TRUE) {

 

// return E_NO_NETWORK;

}

 

chThdSleepMilliseconds(100);

 

// Enable embedded TCP/IP stack

gprs_cmd("AT+WIPCFG=1\r\n", sizeof ("AT+WIPCFG=1\r\n") - 1, NULL, 0);

 

chThdSleepMilliseconds(250);

sdAsynchronousRead(&GPRS_SERIAL, gprs_data, GPRS_CMD_BUF);

 

// Open GPRS bearer

gprs_cmd("AT+WIPBR=1,6\r\n", sizeof ("AT+WIPBR=1,6\r\n") - 1, NULL, 0);

 

chThdSleepMilliseconds(250);

sdAsynchronousRead(&GPRS_SERIAL, gprs_data, GPRS_CMD_BUF);

 

// Set GPRS AP

gprs_cmd("AT+WIPBR=2,6,11,\"internet\"\r\n", sizeof ("AT+WIPBR=2,6,11,\"internet\"\r\n") - 1, NULL, 0);

 

chThdSleepMilliseconds(250);

sdAsynchronousRead(&GPRS_SERIAL, gprs_data, GPRS_CMD_BUF);

 

// Connect to GPRS

gprs_cmd("AT+WIPBR=4,6,0\r\n", sizeof ("AT+WIPBR=4,6,0\r\n") - 1, NULL, 0);

 

chThdSleepSeconds(3);

 

bytes_read = sdAsynchronousRead(&GPRS_SERIAL, gprs_data, GPRS_CMD_BUF);

 

if (bytes_read > 0) {

if (strncmp(gprs_data, "\r\nOK", sizeof ("\r\nOK") - 1)!= 0) {

 

 

//return E_GPRS_CONNECT_ERROR;

}

} else {

//return E_GPRS_CONNECT_ERROR;

}

 

// Establish connection

gprs_cmd("AT+WIPCREATE=2,1,\"195.209.231.43\",5555\r\n", sizeof ("AT+WIPCREATE=2,1,\"195.209.231.43\",5555\r\n") - 1, NULL, 0);

 

chThdSleepSeconds(1);

 

gprs_cmd("AT+WIPDATA=2,1,1\r\n", sizeof ("AT+WIPDATA=2,1,1\r\n") - 1, NULL, 0);

 

chThdSleepSeconds(3);

 

gprs_cmd("Hello from wismo!\r\n", sizeof ("Hello from wismo!\r\n") - 1, NULL, 0);

 

chThdSleepMilliseconds(250);

gprs_cmd("+++", sizeof ("+++") - 1, NULL, 0);

chThdSleepMilliseconds(250);

 

}

 







Дата добавления: 2015-08-27; просмотров: 572. Нарушение авторских прав; Мы поможем в написании вашей работы!



Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Образование соседних чисел Фрагмент: Программная задача: показать образование числа 4 и числа 3 друг из друга...

Шрифт зодчего Шрифт зодчего состоит из прописных (заглавных), строчных букв и цифр...

Краткая психологическая характеристика возрастных периодов.Первый критический период развития ребенка — период новорожденности Психоаналитики говорят, что это первая травма, которую переживает ребенок, и она настолько сильна, что вся последую­щая жизнь проходит под знаком этой травмы...

Ганглиоблокаторы. Классификация. Механизм действия. Фармакодинамика. Применение.Побочные эфффекты Никотинчувствительные холинорецепторы (н-холинорецепторы) в основном локализованы на постсинаптических мембранах в синапсах скелетной мускулатуры...

Шов первичный, первично отсроченный, вторичный (показания) В зависимости от времени и условий наложения выделяют швы: 1) первичные...

Предпосылки, условия и движущие силы психического развития Предпосылки –это факторы. Факторы психического развития –это ведущие детерминанты развития чел. К ним относят: среду...

Studopedia.info - Студопедия - 2014-2024 год . (0.012 сек.) русская версия | украинская версия