Ejemplo n.º 1
0
/**
 * @function TicksGet
 * @brief return the number of the ms elapsed since TicksInit() call
 * @param none
 * @return ticks_t: ms
 */
ticks_t TicksGet(void) {
  ticks_t ticks;
  SemLock(sem);
  ticks = u64ReadableTicks;
  SemUnlock(sem);
  return ticks;
}
Ejemplo n.º 2
0
int     QueueOperNoLock::PushDataIntoQueueBack(char *sValue,int iValueLen,char cLocked)
{
    int         iPkgLenWord;
    int         iResSpaceLen = 0;
    int         iCopyBeginPos = 0;
    char        sHeader[sizeof(int) + 1] = {0};

    if ( !m_pQueueCtl ) {
        snprintf(m_sErrMsg,sizeof(m_sErrMsg),"Store data fail:Not init locally");
        return	-3;
    }
    if ( m_pQueueCtl->cValidFlag <= 0 ) {
        snprintf(m_sErrMsg,sizeof(m_sErrMsg),"Store data fail:Shm deleted");
        this->~QueueOperNoLock();
        return	-4;
    }
    if ( sValue == NULL || iValueLen <= 0 || iValueLen >= MAX_STOREBLK_LEN ) {
        snprintf(m_sErrMsg,sizeof(m_sErrMsg),"Store data fail:Data null or too long");
        return	-2;
    }
    iPkgLenWord = sizeof(int) + iValueLen;

    if ( cLocked == 1 )
        SemLock();

    if ( m_pQueueCtl->iQueueTailPos >= m_pQueueCtl->iQueueHeadPos )
        iResSpaceLen = m_pQueueCtl->iSpaceSize - m_pQueueCtl->iQueueTailPos + m_pQueueCtl->iQueueHeadPos - 1;
    else
        iResSpaceLen = m_pQueueCtl->iQueueHeadPos - m_pQueueCtl->iQueueTailPos - 1;

    if ( iPkgLenWord > iResSpaceLen ) {
        if ( cLocked == 1 )
            SemUnLock();

        snprintf(m_sErrMsg,sizeof(m_sErrMsg),"Store data fail:Space full");
        return	-1;
    }
    memcpy(sHeader,&iPkgLenWord,sizeof(int));
    iCopyBeginPos = StoreData(sHeader,sizeof(int),m_pQueueCtl->iQueueTailPos);
    m_pQueueCtl->iQueueTailPos = StoreData(sValue,iValueLen,iCopyBeginPos);

    if ( cLocked == 1 )
        SemUnLock();

    return	0;
}
Ejemplo n.º 3
0
int     QueueOperNoLock::ReadDataFromQueueHead(char *pToStoreSpace,int iSpaceLen,char cLocked)
{
    int         iPkgLenWord;
    int         iCopyBeginPos = 0;
    char        sHeader[sizeof(int) + 1] = {0};
    char        sBuffTmp[MAX_STOREBLK_LEN + 1];

    if ( !m_pQueueCtl ) {
        snprintf(m_sErrMsg,sizeof(m_sErrMsg),"Read data fail:Not init locally");
        return	-3;
    }
    if ( m_pQueueCtl->cValidFlag <= 0 ) {
        snprintf(m_sErrMsg,sizeof(m_sErrMsg),"Read data fail:Shm deleted");
        this->~QueueOperNoLock();
        return	-4;
    }
    if ( pToStoreSpace == NULL || iSpaceLen <= 0 ) {
        snprintf(m_sErrMsg,sizeof(m_sErrMsg),"Read data fail:Input param not valid");
        return	-2;
    }
    if ( cLocked == 1 )
        SemLock();

    if ( m_pQueueCtl->iQueueHeadPos == m_pQueueCtl->iQueueTailPos ) {
        if ( cLocked == 1 )
            SemUnLock();

        snprintf(m_sErrMsg,sizeof(m_sErrMsg),"Read data fail:Empty queue");
        return	-1;
    }
    iCopyBeginPos = ReadData(sHeader,sizeof(int),m_pQueueCtl->iQueueHeadPos);
    memcpy(&iPkgLenWord,sHeader,sizeof(int));
    m_pQueueCtl->iQueueHeadPos = ReadData(sBuffTmp,iPkgLenWord - sizeof(int),iCopyBeginPos);

    if ( cLocked == 1 )
        SemUnLock();

    iPkgLenWord -= sizeof(int);
    sBuffTmp[iPkgLenWord] = 0;
    if ( iPkgLenWord <= iSpaceLen )
        memcpy(pToStoreSpace,sBuffTmp,iPkgLenWord);
    else
        memcpy(pToStoreSpace,sBuffTmp,iSpaceLen);

    return	iPkgLenWord;
}
Ejemplo n.º 4
0
/**
 * @function AD5310_Set
 * @brief Set a new binary word to the selected DAC
 * @param uint8_t dev: #id of the DAC
 * @param uint16_t word_10bits: new word (only the 10LSB are used)
 * @return none
 */
void AD5310_Set(uint8_t dev, uint16_t word_10bits) {

  uint16_t data;

  if(dev < DAC_COUNT) {

    /*select the DAC*/
    SemLock(spiBusy);
    *(devices[dev].gpio) &= (devices[dev].mask ^ 0xFFFF);

    /*send the DAC word*/
    data = (word_10bits & 0x03FF) << 2;
    SPI_PutU16(data);

    /*un-select the DAC*/
    *(devices[dev].gpio) |= devices[dev].mask;
    SemUnlock(spiBusy);
  }
}
Ejemplo n.º 5
0
int     QueueOperNoLock::ReadDataFromQueueHead(char* &ptoStoreSpace,char cLocked)
{
    int         iPkgLenWord;
    int         iCopyBeginPos = 0;
    char        sHeader[sizeof(int) + 1] = {0};

    if ( !m_pQueueCtl ) {
        snprintf(m_sErrMsg,sizeof(m_sErrMsg),"Read data fail:Not init locally");
        return	-3;
    }
    if ( m_pQueueCtl->cValidFlag <= 0 ) {
        snprintf(m_sErrMsg,sizeof(m_sErrMsg),"Read data fail:Shm deleted");
        this->~QueueOperNoLock();
        return	-4;
    }
    if ( cLocked == 1 )
        SemLock();

    if ( m_pQueueCtl->iQueueHeadPos == m_pQueueCtl->iQueueTailPos ) {
        if ( cLocked == 1 )
            SemUnLock();

        snprintf(m_sErrMsg,sizeof(m_sErrMsg),"Read data fail:Empty queue");
        return	-1;
    }
    iCopyBeginPos = ReadData(sHeader,sizeof(int),m_pQueueCtl->iQueueHeadPos);
    memcpy(&iPkgLenWord,sHeader,sizeof(int));
    iPkgLenWord -= sizeof(int);
    try {
        ptoStoreSpace = new char[iPkgLenWord + 1];
    } catch ( ... ) {
        snprintf(m_sErrMsg,sizeof(m_sErrMsg),"Read data fail:allocate space err");
        return	-2;
    }
    ptoStoreSpace[iPkgLenWord] = 0;
    m_pQueueCtl->iQueueHeadPos = ReadData(ptoStoreSpace,iPkgLenWord,iCopyBeginPos);

    if ( cLocked == 1 )
        SemUnLock();

    return	iPkgLenWord;    
}
Ejemplo n.º 6
0
/**
 * Write log.
 *
 * @param   as_msg      Message info.
 * @param   ai_level    Level num.
 * @return              0: succ, !=0: fail.
 */
int clib_log::write( const char *as_msg,
                     int        ai_level,
                     const UIN_TYPE ai_uin)
{
    time_t t;
    struct tm tm_re;
    struct tm *ptm = NULL;
    char   s_buf[CLIB_LOG_SLEN_NORM]  = { 0 };
    char   s_msg[CLIB_LOG_SLEN_LONG]  = { 0 };
    char   s_file[CLIB_LOG_SLEN_LONG] = { 0 };
    int    i_ret = 0;

    time( &t );
    ptm = localtime_r( &t, &tm_re );

    if ( ai_level > mi_level && (ai_uin == 0 || mb_coloring == false) ) {
        i_ret = 0; //coloring is open or not; if it's open, no level is care.
    } else if ( strlen(ms_file) <= 0
                    || NULL == as_msg
                    || strlen(as_msg) <= 0 ) {
        i_ret = -1;
    } else {
    
        if (ai_uin == 0 || mb_coloring == false){ //do not coloring
            if ( strlen(ms_tformat) > 0 ) {
                strftime( s_buf, sizeof(s_buf), ms_tformat, ptm );
                snprintf( s_msg, sizeof(s_msg), "%s%s%s", s_buf, as_msg, ms_eol );
            } else {
                snprintf( s_msg, sizeof(s_msg), "%s%s", as_msg, ms_eol );
            } // if
        }

        else{

            if (setUins.find(ai_uin) == setUins.end())
            {
                return 0;
            }
        
            if ( strlen(ms_tformat) > 0 ) {
                strftime( s_buf, sizeof(s_buf), ms_tformat, ptm );
                snprintf( s_msg, sizeof(s_msg), "%s[%u]%s%s", s_buf, ai_uin, as_msg, ms_eol );
            } else {
                snprintf( s_msg, sizeof(s_msg), "[%u]%s%s", ai_uin, as_msg, ms_eol );
            } // if
        }

        strftime( s_buf,  sizeof(s_buf),  ms_logtype, ptm );
        snprintf( s_file, sizeof(s_file), "%s%s", ms_file, s_buf );
    
        //lock
        if (mi_semopen) {
            SemLock(mi_semid, NULL);
        }
        
        this->check_file( s_file );
        i_ret = clib_log_write( s_file, s_msg, strlen(s_msg) );

        //unlock
        if (mi_semopen) {
            SemUnlock(mi_semid, NULL);
        }

    } // if ( ai_level > mi_level )
    return( i_ret );
}