提交 1db7aa7a 编写于 作者: O openharmony_ci 提交者: Gitee

!733 refactor:los_cir_buf.c接口整合

Merge pull request !733 from Zhaotianyu/1213cirbuf_refactor
......@@ -60,6 +60,7 @@ STATIC UINT32 ConsoleSendTask(UINTPTR param);
STATIC UINT8 g_taskConsoleIDArray[LOSCFG_BASE_CORE_TSK_LIMIT];
STATIC SPIN_LOCK_INIT(g_consoleSpin);
STATIC SPIN_LOCK_INIT(g_consoleWriteSpinLock);
#define SHELL_ENTRYID_INVALID 0xFFFFFFFF
#define SHELL_TASK_PRIORITY 9
......@@ -749,7 +750,8 @@ STATIC ssize_t DoWrite(CirBufSendCB *cirBufSendCB, CHAR *buffer, size_t bufLen)
return 0;
}
#endif
LOS_CirBufLock(&cirBufSendCB->cirBufCB, &intSave);
LOS_SpinLockSave(&g_consoleWriteSpinLock, &intSave);
while (written < (INT32)bufLen) {
/* Transform for CR/LR mode */
if ((buffer[written] == '\n') || (buffer[written] == '\r')) {
......@@ -763,7 +765,8 @@ STATIC ssize_t DoWrite(CirBufSendCB *cirBufSendCB, CHAR *buffer, size_t bufLen)
toWrite -= cnt;
written += cnt;
}
LOS_CirBufUnlock(&cirBufSendCB->cirBufCB, intSave);
LOS_SpinUnlockRestore(&g_consoleWriteSpinLock, intSave);
/* Log is cached but not printed when a system exception occurs */
if (OsGetSystemStatus() == OS_SYSTEM_NORMAL) {
(VOID)LOS_EventWrite(&cirBufSendCB->sendEvent, CONSOLE_CIRBUF_EVENT);
......@@ -1629,7 +1632,6 @@ STATIC UINT32 ConsoleSendTask(UINTPTR param)
CirBufSendCB *cirBufSendCB = consoleCB->cirBufSendCB;
CirBuf *cirBufCB = &cirBufSendCB->cirBufCB;
UINT32 ret, size;
UINT32 intSave;
CHAR *buf = NULL;
(VOID)LOS_EventWrite(&cirBufSendCB->sendEvent, CONSOLE_SEND_TASK_RUNNING);
......@@ -1648,9 +1650,7 @@ STATIC UINT32 ConsoleSendTask(UINTPTR param)
}
(VOID)memset_s(buf, size + 1, 0, size + 1);
LOS_CirBufLock(cirBufCB, &intSave);
(VOID)LOS_CirBufRead(cirBufCB, buf, size);
LOS_CirBufUnlock(cirBufCB, intSave);
(VOID)WriteToTerminal(consoleCB, buf, size);
(VOID)LOS_MemFree(m_aucSysMem1, buf);
......
......@@ -56,22 +56,6 @@ typedef struct {
CHAR *fifo;
} CirBuf;
STATIC INLINE VOID LOS_CirBufLock(CirBuf *cirbufCB, UINT32 *intSave)
{
if (cirbufCB == NULL) {
return;
}
LOS_SpinLockSave(&cirbufCB->lock, intSave);
}
STATIC INLINE VOID LOS_CirBufUnlock(CirBuf *cirbufCB, UINT32 intSave)
{
if (cirbufCB == NULL) {
return;
}
LOS_SpinUnlockRestore(&cirbufCB->lock, intSave);
}
extern UINT32 LOS_CirBufInit(CirBuf *cirbufCB, CHAR *fifo, UINT32 size);
extern VOID LOS_CirBufDeinit(CirBuf *cirbufCB);
extern UINT32 LOS_CirBufWrite(CirBuf *cirbufCB, const CHAR *buf, UINT32 size);
......
......@@ -30,6 +30,7 @@
*/
#include "los_cir_buf.h"
#include "los_spinlock.h"
UINT32 LOS_CirBufUsedSize(CirBuf *cirbufCB)
......@@ -103,14 +104,17 @@ STATIC UINT32 OsCirBufWriteLoop(CirBuf *cirbufCB, const CHAR *buf, UINT32 size)
UINT32 LOS_CirBufWrite(CirBuf *cirbufCB, const CHAR *buf, UINT32 size)
{
UINT32 cpSize;
UINT32 cpSize = 0;
UINT32 intSave;
if ((cirbufCB == NULL) || (buf == NULL) || (size == 0)) {
if ((cirbufCB == NULL) || (buf == NULL) || (size == 0) || (cirbufCB->status != CBUF_USED)) {
return 0;
}
LOS_SpinLockSave(&cirbufCB->lock, &intSave);
if ((cirbufCB->fifo == NULL) || (cirbufCB->remain == 0)) {
return 0;
goto EXIT;;
}
if (cirbufCB->startIdx <= cirbufCB->endIdx) {
......@@ -119,6 +123,8 @@ UINT32 LOS_CirBufWrite(CirBuf *cirbufCB, const CHAR *buf, UINT32 size)
cpSize = OsCirBufWriteLinear(cirbufCB, buf, size);
}
EXIT:
LOS_SpinUnlockRestore(&cirbufCB->lock, intSave);
return cpSize;
}
......@@ -173,14 +179,17 @@ STATIC UINT32 OsCirBufReadLoop(CirBuf *cirbufCB, CHAR *buf, UINT32 size)
UINT32 LOS_CirBufRead(CirBuf *cirbufCB, CHAR *buf, UINT32 size)
{
UINT32 cpSize;
UINT32 cpSize = 0;
UINT32 intSave;
if ((cirbufCB == NULL) || (buf == NULL) || (size == 0)) {
if ((cirbufCB == NULL) || (buf == NULL) || (size == 0) || (cirbufCB->status != CBUF_USED)) {
return 0;
}
LOS_SpinLockSave(&cirbufCB->lock, &intSave);
if ((cirbufCB->fifo == NULL) || (cirbufCB->remain == cirbufCB->size)) {
return 0;
goto EXIT;
}
if (cirbufCB->startIdx >= cirbufCB->endIdx) {
......@@ -189,6 +198,8 @@ UINT32 LOS_CirBufRead(CirBuf *cirbufCB, CHAR *buf, UINT32 size)
cpSize = OsCirBufReadLinear(cirbufCB, buf, size);
}
EXIT:
LOS_SpinUnlockRestore(&cirbufCB->lock, intSave);
return cpSize;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册