1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lupyuen-LoRaMac-node-nuttx

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
gps-board.c 3.7 КБ
Копировать Редактировать Исходные данные Просмотреть построчно История
Miguel Luis Отправлено 6 лет назад 62624e8
/*!
* \file gps-board.c
*
* \brief Target board GPS driver implementation
*
* \copyright Revised BSD License, see section \ref LICENSE.
*
* \code
* ______ _
* / _____) _ | |
* ( (____ _____ ____ _| |_ _____ ____| |__
* \____ \| ___ | (_ _) ___ |/ ___) _ \
* _____) ) ____| | | || |_| ____( (___| | | |
* (______/|_____)_|_|_| \__)_____)\____)_| |_|
* (C)2013-2017 Semtech
*
* \endcode
*
* \author Miguel Luis ( Semtech )
*
* \author Gregory Cristian ( Semtech )
*/
#include "board-config.h"
#include "board.h"
#include "gpio.h"
#include "gps.h"
#include "uart.h"
#include "lpm-board.h"
#include "rtc-board.h"
#include "gps-board.h"
/*!
* FIFO buffers size
*/
//#define FIFO_TX_SIZE 128
#define FIFO_RX_SIZE 128
//uint8_t TxBuffer[FIFO_TX_SIZE];
static uint8_t RxBuffer[FIFO_RX_SIZE];
/*!
* \brief Buffer holding the raw data received from the gps
*/
static uint8_t NmeaString[128];
/*!
* \brief Maximum number of data byte that we will accept from the GPS
*/
static volatile uint8_t NmeaStringSize = 0;
static Gpio_t GpsPowerEn;
static Gpio_t GpsPps;
static volatile bool GpsPowerEnInverted = false;
extern Uart_t Uart1;
void GpsMcuOnPpsSignal( void* context )
{
bool parseData = false;
GpsPpsHandler( &parseData );
if( parseData == true )
{
// Disables lowest power modes
LpmSetStopMode( LPM_GPS_ID , LPM_DISABLE );
UartInit( &Uart1, UART_1, GPS_UART_TX, GPS_UART_RX );
UartConfig( &Uart1, RX_ONLY, 9600, UART_8_BIT, UART_1_STOP_BIT, NO_PARITY, NO_FLOW_CTRL );
}
}
void GpsMcuInvertPpsTrigger( void )
{
}
void GpsMcuInit( void )
{
NmeaStringSize = 0;
switch( BoardGetVersion( ).Fields.Major )
{
case 2:
GpsPowerEnInverted = true;
break;
case 3:
GpsPowerEnInverted = false;
break;
default:
break;
}
GpioInit( &GpsPowerEn, GPS_POWER_ON, PIN_OUTPUT, PIN_PUSH_PULL, PIN_NO_PULL, 1 );
GpioInit( &GpsPps, GPS_PPS, PIN_INPUT, PIN_PUSH_PULL, PIN_NO_PULL, 0 );
GpioSetInterrupt( &GpsPps, IRQ_FALLING_EDGE, IRQ_VERY_LOW_PRIORITY, &GpsMcuOnPpsSignal );
FifoInit( &Uart1.FifoRx, RxBuffer, FIFO_RX_SIZE );
Uart1.IrqNotify = GpsMcuIrqNotify;
GpsMcuStart( );
}
void GpsMcuStart( void )
{
if( GpsPowerEnInverted == true )
{
GpioWrite( &GpsPowerEn, 0 ); // power up the GPS
}
else
{
GpioWrite( &GpsPowerEn, 1 ); // power up the GPS
}
}
void GpsMcuStop( void )
{
if( GpsPowerEnInverted == true )
{
GpioWrite( &GpsPowerEn, 1 ); // power down the GPS
}
else
{
GpioWrite( &GpsPowerEn, 0 ); // power down the GPS
}
}
void GpsMcuProcess( void )
{
}
void GpsMcuIrqNotify( UartNotifyId_t id )
{
uint8_t data;
if( id == UART_NOTIFY_RX )
{
if( UartGetChar( &Uart1, &data ) == 0 )
{
if( ( data == '$' ) || ( NmeaStringSize >= 127 ) )
{
NmeaStringSize = 0;
}
NmeaString[NmeaStringSize++] = ( int8_t )data;
if( data == '\n' )
{
NmeaString[NmeaStringSize++] = '\0';
GpsParseGpsData( ( int8_t* )NmeaString, NmeaStringSize );
UartDeInit( &Uart1 );
// Enables lowest power modes
LpmSetStopMode( LPM_GPS_ID , LPM_ENABLE );
}
}
}
}

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/lupyuen-LoRaMac-node-nuttx.git
git@gitlife.ru:oschina-mirror/lupyuen-LoRaMac-node-nuttx.git
oschina-mirror
lupyuen-LoRaMac-node-nuttx
lupyuen-LoRaMac-node-nuttx
v4.5.1