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

OSCHINA-MIRROR/lupyuen-LoRaMac-node-nuttx

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
LoRaMacParser.c 4.1 КБ
Копировать Редактировать Исходные данные Просмотреть построчно История
Miguel Luis Отправлено 5 лет назад 830a0f9
/*
/ _____) _ | |
( (____ _____ ____ _| |_ _____ ____| |__
\____ \| ___ | (_ _) ___ |/ ___) _ \
_____) ) ____| | | || |_| ____( (___| | | |
(______/|_____)_|_|_| \__)_____)\____)_| |_|
(C)2013 Semtech
___ _____ _ ___ _ _____ ___ ___ ___ ___
/ __|_ _/_\ / __| |/ / __/ _ \| _ \/ __| __|
\__ \ | |/ _ \ (__| ' <| _| (_) | / (__| _|
|___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___|
embedded.connectivity.solutions===============
Description: LoRa MAC layer message parser functionality implementation
License: Revised BSD License, see LICENSE.TXT file include in the project
Maintainer: Miguel Luis ( Semtech ), Gregory Cristian ( Semtech ),
Daniel Jaeckle ( STACKFORCE ), Johannes Bruder ( STACKFORCE )
*/
#include "LoRaMacParser.h"
#include "utilities.h"
LoRaMacParserStatus_t LoRaMacParserJoinAccept( LoRaMacMessageJoinAccept_t* macMsg )
{
if( ( macMsg == 0 ) || ( macMsg->Buffer == 0 ) )
{
return LORAMAC_PARSER_ERROR_NPE;
}
uint16_t bufItr = 0;
macMsg->MHDR.Value = macMsg->Buffer[bufItr++];
memcpy1( macMsg->JoinNonce, &macMsg->Buffer[bufItr], 3 );
bufItr = bufItr + 3;
memcpy1( macMsg->NetID, &macMsg->Buffer[bufItr], 3 );
bufItr = bufItr + 3;
macMsg->DevAddr = ( uint32_t ) macMsg->Buffer[bufItr++];
macMsg->DevAddr |= ( ( uint32_t ) macMsg->Buffer[bufItr++] << 8 );
macMsg->DevAddr |= ( ( uint32_t ) macMsg->Buffer[bufItr++] << 16 );
macMsg->DevAddr |= ( ( uint32_t ) macMsg->Buffer[bufItr++] << 24 );
macMsg->DLSettings.Value = macMsg->Buffer[bufItr++];
macMsg->RxDelay = macMsg->Buffer[bufItr++];
if( ( macMsg->BufSize - LORAMAC_MIC_FIELD_SIZE - bufItr ) == LORAMAC_CF_LIST_FIELD_SIZE )
{
memcpy1( macMsg->CFList, &macMsg->Buffer[bufItr], LORAMAC_CF_LIST_FIELD_SIZE );
bufItr = bufItr + LORAMAC_CF_LIST_FIELD_SIZE;
}
else if( ( macMsg->BufSize - LORAMAC_MIC_FIELD_SIZE - bufItr ) > 0 )
{
return LORAMAC_PARSER_FAIL;
}
macMsg->MIC = ( uint32_t ) macMsg->Buffer[bufItr++];
macMsg->MIC |= ( ( uint32_t ) macMsg->Buffer[bufItr++] << 8 );
macMsg->MIC |= ( ( uint32_t ) macMsg->Buffer[bufItr++] << 16 );
macMsg->MIC |= ( ( uint32_t ) macMsg->Buffer[bufItr++] << 24 );
return LORAMAC_PARSER_SUCCESS;
}
LoRaMacParserStatus_t LoRaMacParserData( LoRaMacMessageData_t* macMsg )
{
if( ( macMsg == 0 ) || ( macMsg->Buffer == 0 ) )
{
return LORAMAC_PARSER_ERROR_NPE;
}
uint16_t bufItr = 0;
macMsg->MHDR.Value = macMsg->Buffer[bufItr++];
macMsg->FHDR.DevAddr = macMsg->Buffer[bufItr++];
macMsg->FHDR.DevAddr |= ( ( uint32_t ) macMsg->Buffer[bufItr++] << 8 );
macMsg->FHDR.DevAddr |= ( ( uint32_t ) macMsg->Buffer[bufItr++] << 16 );
macMsg->FHDR.DevAddr |= ( ( uint32_t ) macMsg->Buffer[bufItr++] << 24 );
macMsg->FHDR.FCtrl.Value = macMsg->Buffer[bufItr++];
macMsg->FHDR.FCnt = macMsg->Buffer[bufItr++];
macMsg->FHDR.FCnt |= macMsg->Buffer[bufItr++] << 8;
if( macMsg->FHDR.FCtrl.Bits.FOptsLen <= 15 )
{
memcpy1( macMsg->FHDR.FOpts, &macMsg->Buffer[bufItr], macMsg->FHDR.FCtrl.Bits.FOptsLen );
bufItr = bufItr + macMsg->FHDR.FCtrl.Bits.FOptsLen;
}
else
{
return LORAMAC_PARSER_FAIL;
}
// Initialize anyway with zero.
macMsg->FPort = 0;
macMsg->FRMPayloadSize = 0;
if( ( macMsg->BufSize - bufItr - LORAMAC_MIC_FIELD_SIZE ) > 0 )
{
macMsg->FPort = macMsg->Buffer[bufItr++];
macMsg->FRMPayloadSize = ( macMsg->BufSize - bufItr - LORAMAC_MIC_FIELD_SIZE );
memcpy1( macMsg->FRMPayload, &macMsg->Buffer[bufItr], macMsg->FRMPayloadSize );
bufItr = bufItr + macMsg->FRMPayloadSize;
}
macMsg->MIC = ( uint32_t ) macMsg->Buffer[( macMsg->BufSize - LORAMAC_MIC_FIELD_SIZE )];
macMsg->MIC |= ( ( uint32_t ) macMsg->Buffer[( macMsg->BufSize - LORAMAC_MIC_FIELD_SIZE ) + 1] << 8 );
macMsg->MIC |= ( ( uint32_t ) macMsg->Buffer[( macMsg->BufSize - LORAMAC_MIC_FIELD_SIZE ) + 2] << 16 );
macMsg->MIC |= ( ( uint32_t ) macMsg->Buffer[( macMsg->BufSize - LORAMAC_MIC_FIELD_SIZE ) + 3] << 24 );
return LORAMAC_PARSER_SUCCESS;
}

Комментарий ( 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.2