/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved.
*
* The information contained herein is property of Nordic Semiconductor ASA.
* Terms and conditions of usage are described in detail in NORDIC
* SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
*
* Licensees are granted free, non-transferable use of the information. NO
* WARRANTY of ANY KIND is provided. This heading must NOT be removed from
* the file.
*
*/
/** @file
* @defgroup uart_example_main main.c
* @{
* @ingroup uart_example
* @brief UART Example Application main file.
*
* This file contains the source code for a sample application using UART.
*
*/
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include "app_uart.h"
#include "app_error.h"
#include "nrf_delay.h"
#include "nrf.h"
#include "bsp.h"
//#define ENABLE_LOOPBACK_TEST /**< if defined, then this example will be a loopback test, which means that TX should be connected to RX to get data loopback. */
#define MAX_TEST_DATA_BYTES (15U) /**< max number of test bytes to be used for tx and rx. */
#define UART_TX_BUF_SIZE 1024 /**< UART TX buffer size. */
#define UART_RX_BUF_SIZE 1024 /**< UART RX buffer size. */
uint8_t * tx_data = (uint8_t *)("\n\rLOOPBACK_TEST\n\r");
uint8_t rx_data;
uint32_t i;
int _write( const char * p_char, int len) {
int i;
for (i = 0; i < len; i++)
while(app_uart_put( *p_char++ ) != NRF_SUCCESS);
//while(app_uart_put(0x0D) != NRF_SUCCESS);
//while(app_uart_put(0x0D) != NRF_SUCCESS);
//while(app_uart_put(0x0A) != NRF_SUCCESS);
return len;
}
void uart_error_handle(app_uart_evt_t * p_event)
{
uint8_t rx_data;
uint32_t err_code;
if (p_event->evt_type == APP_UART_COMMUNICATION_ERROR)
{
APP_ERROR_HANDLER(p_event->data.error_communication);
}
else if (p_event->evt_type == APP_UART_FIFO_ERROR)
{
APP_ERROR_HANDLER(p_event->data.error_code);
}
}
#ifdef ENABLE_LOOPBACK_TEST
/** @brief Function for setting the @ref ERROR_PIN high, and then enter an infinite loop.
*/
static void show_error(void)
{
LEDS_ON(LEDS_MASK);
while(true)
{
// Do nothing.
}
}
/** @brief Function for testing UART loop back.
* @details Transmitts one character at a time to check if the data received from the loopback is same as the transmitted data.
* @note @ref TX_PIN_NUMBER must be connected to @ref RX_PIN_NUMBER)
*/
static void uart_loopback_test()
{
// uint8_t * tx_data = (uint8_t *)("\n\rLOOPBACK_TEST\n\r");
//uint8_t rx_data;
// Start sending one byte and see if you get the same
for (i = 0; i < MAX_TEST_DATA_BYTES; i++)
{
uint32_t err_code;
while(app_uart_put(tx_data[i]) != NRF_SUCCESS);
nrf_delay_ms(10);
err_code = app_uart_get(&rx_data);
if ((rx_data != tx_data[i]) || (err_code != NRF_SUCCESS))
{
show_error();
}
}
return;
}
#endif
/**
* @brief Function for main application entry.
*/
int main(void)
{
LEDS_CONFIGURE(LEDS_MASK);
LEDS_OFF(LEDS_MASK);
uint32_t err_code;
const app_uart_comm_params_t comm_params =
{
RX_PIN_NUMBER,
TX_PIN_NUMBER,
RTS_PIN_NUMBER,
CTS_PIN_NUMBER,
APP_UART_FLOW_CONTROL_DISABLED,
false,
UART_BAUDRATE_BAUDRATE_Baud9600
};
APP_UART_FIFO_INIT(&comm_params,
UART_RX_BUF_SIZE,
UART_TX_BUF_SIZE,
uart_error_handle,
APP_IRQ_PRIORITY_LOW,
err_code);
APP_ERROR_CHECK(err_code);
#ifndef ENABLE_LOOPBACK_TEST
// printf("\n\rStart: \n\r");
uint32_t i=0;
while (true)
{
_write("\n\rAT\n\r", strlen("\n\rAT\n\r"));
nrf_delay_ms(1000);
_write("\n\rAT\r\n", strlen("AT\r\n"));
nrf_delay_ms(1000);
_write("AT+IPR=9600\r\n", strlen("AT+IPR=9600\r\n"));
nrf_delay_ms(2000);
_write("AT+CREG\r\n", strlen("AT+CREG\r\n"));
nrf_delay_ms(4000);
_write("AT+CSQ\r\n", strlen("AT+CSQ\r\n"));
nrf_delay_ms(1000);
_write("AT+CGATT=1\r\n", strlen("AT+CGATT=1\r\n"));
nrf_delay_ms(1000);
_write("AT+CSTT= <www>,<>,<>\r\n", strlen("AT+CSTT= <www>,<>,<>\r\n"));
nrf_delay_ms(1000);
_write("AT+CIICR\r\n", strlen("AT+CIICR\r\n"));
nrf_delay_ms(1000);
_write("AT+CIFSR\r\n", strlen("AT+CIFSR\r\n"));
nrf_delay_ms(1000);
_write("AT+CSQ\r\n", strlen("AT+CSQ\r\n"));
nrf_delay_ms(1000);
_write("AT+CIPSTART=<TCP>,<164.132.106.92>,<1985>\r\n", strlen("AT+CIPSTART=<TCP>,<164.132.106.92>,<1985>\r\n"));
nrf_delay_ms(1000);
_write("AT\r\n", strlen("AT\r\n"));
nrf_delay_ms(4000);
}
/* while (true)
{
uint8_t cr;
while(app_uart_get(&cr) != NRF_SUCCESS);
while(app_uart_put(cr) != NRF_SUCCESS);
if (cr == 'q' || cr == 'Q')
{
printf(" \n\rExit!\n\r");
while (true)
{
// Do nothing.
}
}
}*/
#else
// This part of the example is just for testing the loopback .
while (true)
{
uart_loopback_test();
}
#endif
}
/** @} */