/** * @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; }
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; }
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; }
/** * @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); } }
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; }
/** * 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 ); }