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

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

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






#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; просмотров: 578. Нарушение авторских прав; Мы поможем в написании вашей работы!



Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Билет №7 (1 вопрос) Язык как средство общения и форма существования национальной культуры. Русский литературный язык как нормированная и обработанная форма общенародного языка Важнейшая функция языка - коммуникативная функция, т.е. функция общения Язык представлен в двух своих разновидностях...

Патристика и схоластика как этап в средневековой философии Основной задачей теологии является толкование Священного писания, доказательство существования Бога и формулировка догматов Церкви...

Основные симптомы при заболеваниях органов кровообращения При болезнях органов кровообращения больные могут предъявлять различные жалобы: боли в области сердца и за грудиной, одышка, сердцебиение, перебои в сердце, удушье, отеки, цианоз головная боль, увеличение печени, слабость...

Психолого-педагогическая характеристика студенческой группы   Характеристика группы составляется по 407 группе очного отделения зооинженерного факультета, бакалавриата по направлению «Биология» РГАУ-МСХА имени К...

Общая и профессиональная культура педагога: сущность, специфика, взаимосвязь Педагогическая культура- часть общечеловеческих культуры, в которой запечатлил духовные и материальные ценности образования и воспитания, осуществляя образовательно-воспитательный процесс...

Устройство рабочих органов мясорубки Независимо от марки мясорубки и её технических характеристик, все они имеют принципиально одинаковые устройства...

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