Add STS_Q_REQ in prep for logic add

Add bit masking
pull/14/head
Darjeeling 3 years ago
parent 93a49cb3e6
commit 25d97e0ac5

@ -1045,7 +1045,7 @@ bool Control::writeRF_ControlData()
return false;
}
const uint8_t maxSeq = 8U;
const uint8_t maxSeq = 9U;
if (m_ccSeq == maxSeq) {
m_ccSeq = 0U;
}

@ -304,6 +304,7 @@ namespace p25
const uint8_t TSBK_ISP_GRP_AFF_Q_RSP = 0x29U; // GRP AFF Q RSP - Group Affiliation Query Response
const uint8_t TSBK_ISP_U_DEREG_REQ = 0x2BU; // U DE REG REQ - Unit De-Registration Request
const uint8_t TSBK_ISP_LOC_REG_REQ = 0x2DU; // LOC REG REQ - Location Registration Request
const uint8_t TSBK_ISP_STS_Q_REQ = 0x1CU; // STS_Q_REQ - Status Query Request
// TSBK Outbound Signalling Packet (OSP) Opcode(s)
const uint8_t TSBK_OSP_GRP_VCH_GRANT_UPD = 0x02U; // GRP VCH GRANT UPD - Group Voice Channel Grant Update
@ -324,6 +325,9 @@ namespace p25
const uint8_t TSBK_OSP_NET_STS_BCAST = 0x3BU; // NET STS BCAST - Network Status Broadcast
const uint8_t TSBK_OSP_ADJ_STS_BCAST = 0x3CU; // ADJ STS BCAST - Adjacent Site Status Broadcast
const uint8_t TSBK_OSP_IDEN_UP = 0x3DU; // IDEN UP - Channel Identifier Update
const uint8_t TSBK_OSP_STS_Q = 0x1AU; // STS_Q - Status Query
const uint8_t TSBK_OSP_TIME_DATE_ANN = 0b110101; // TIME_DATE_ANN - Time and Date Announcement
// TSBK Motorola Outbound Signalling Packet (OSP) Opcode(s)
const uint8_t TSBK_OSP_MOT_GRG_ADD = 0x00U; // MOT GRG ADD - Motorola / Group Regroup Add (Patch Supergroup)

@ -39,6 +39,8 @@ using namespace p25;
#include <cmath>
#include <cassert>
#include <cstring>
#include <chrono>
#include <ctime>
// ---------------------------------------------------------------------------
// Public Class Members
@ -890,6 +892,77 @@ void TSBK::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
}
}
break;
case TSBK_OSP_TIME_DATE_ANN:
{
//Setup
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
time_t tt = std::chrono::system_clock::to_time_t( now );
tm local_tm = *localtime( &tt );
unsigned long tmM = 0b000;//Month; +1 to account for tm_mon being 0-11 and p25 being 1-12
unsigned long tmMDAY = 0b00000;//Day of month
unsigned int tmY = 0b0000000000000;//Year
unsigned int tmH = 0b00000;//Hour
unsigned int tmMin = 0b000000;//Min
unsigned int tmS = 0b000000;//Second
//Assign Values
tmM |= (local_tm.tm_mon + 1);//Month; +1 to account for tm_mon being 0-11 and p25 being 1-12
tmMDAY |= local_tm.tm_mday;//Day of month
tmY |= local_tm.tm_year;//Year
tmH |= local_tm.tm_hour;//Hour
tmMin |= local_tm.tm_min;//Min
unsigned int i = local_tm.tm_sec;
unsigned long VFLAGS = 0b11000000; // VL,VT,VD, Res(leave 0),LTO direction, LTO
unsigned long VLTO = 0b00000000; // LTO
//Catch Leap Seconds
if ( i > 59U )
{
tmS |= 59U;
} else
{
tmS |= i;
}
//Fix Year from from 1900 to from 2000
tmY = tmY - 100U;
//Shift Shift
VFLAGS = VFLAGS << 56 ;
VLTO = VLTO << 48; //LTO
tmM = tmM << 44; //Month
tmMDAY = tmMDAY << 39; //Day of month
tmY = tmY << 26; //Year
tmH = tmH << 19; //Hour
tmMin = tmMin << 13; //Min
tmS = tmS << 7; //Second
//Build tsbkValue
tsbkValue = 0U; //Zero out tsbkValue
tsbkValue = tsbkValue + VFLAGS;
tsbkValue = tsbkValue + VLTO; //LTO
//Date
tsbkValue = tsbkValue + tmM;
tsbkValue = tsbkValue + tmMDAY;
tsbkValue = tsbkValue + tmY;
//Time
tsbkValue = tsbkValue + tmH;
tsbkValue = tsbkValue + tmMin;
tsbkValue = tsbkValue + tmS;
//Debug Stuff, Comment out or put in a #if DEBUG statement before push
LogError( LOG_P25 , "TSBK_OSP_TIME_DATE_ANN (Dump Start)" );
LogError( LOG_P25 , "tsbkValue RAW= $%p" , tsbkValue );
LogError( LOG_P25 , "tmM= $%p" , tmM );
LogError( LOG_P25 , "tmMDAY= $%p" , tmMDAY );
LogError( LOG_P25 , "tmY= $%p" , tmY );
LogError( LOG_P25 , "tmH= $%p" , tmH );
LogError( LOG_P25 , "tmMin= $%p" , tmMin );
LogError( LOG_P25 , "tmS= $%p" , tmS );
LogError( LOG_P25 , "TSBK_OSP_TIME_DATE_ANN (Dump End)" );
}break;
default:
if (m_mfId == P25_MFG_STANDARD) {
LogError(LOG_P25, "TSBK::encode(), unknown TSBK LCO value, mfId = $%02X, lco = $%02X", m_mfId, m_lco);

@ -1299,6 +1299,10 @@ void Trunk::writeRF_ControlData(uint8_t frameCnt, uint8_t n, bool adjSS)
break;
}
break;
case 8:
// write TIME_DATE_ANN
queueRF_TSBK_Ctrl( TSBK_OSP_TIME_DATE_ANN );
break;
}
// should we insert the BSI bursts?
@ -1862,6 +1866,14 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
m_rfTSBK.setLCO(TSBK_OSP_DVM_GIT_HASH);
m_rfTSBK.setMFId(P25_MFG_DVM);
break;
case TSBK_OSP_TIME_DATE_ANN:
if ( m_debug )
{
LogMessage( LOG_RF , P25_TSDU_STR ", TSBK_OSP_TIME_DATE_ANN (Time Date Announce)" );
}
m_rfTSBK.setLCO( TSBK_OSP_TIME_DATE_ANN );
m_rfTSBK.setMFId( P25_MFG_STANDARD );
break;
}
m_rfTSBK.setLastBlock(true); // always set last block

Loading…
Cancel
Save

Powered by TurnKey Linux.