AG903ライブラリリファレンス
内容インデックスホーム
Body Source
本文ソース
1: int32_t AG903_OSPMgrSetFIFO(AG903_OSPMgrHandle *handle, uint32_t setcnt) 2: { 3: int32_t rc = AG903_ENONE; 4: uint8_t ch; 5: OSPCmdDesc *desc; 6: uint8_t ovf = 0; 7: uint8_t siz = 0; 8: uint32_t MaxLen; 9: 10: if(NULL == handle) { 11: rc = -AG903_EINVAL; 12: } 13: 14: rc = OSPMgrCheckHandle(handle, &ch); 15: if(AG903_ENONE != rc) { 16: 17: return -AG903_EINVAL; 18: } 19: if(NULL == OspChStat[ch].cmdbuf) { 20: 21: return -AG903_ENODATA; 22: } 23: 24: desc = (OSPCmdDesc*)OspChStat[ch].cmdbuf; 25: if(0 == desc->CurLen) { 26: 27: return -AG903_ENODATA; 28: } 29: 30: if (setcnt > desc->CurLen) { 31: 32: return -AG903_EINVAL; 33: } 34: 35: AG903_OSPPrmFIFOSTAT(ch, &ovf, &siz); 36: 37: if (ovf == true) { 38: 39: return -AG903_EOVERFLOW; 40: } 41: if ((siz == 0) || (siz < setcnt)) { 42: 43: return -AG903_EBUSY; 44: } 45: 46: #if AG903_OSP_CMD_PARSE 47: if (rc == AG903_ENONE) { 48: rc = OSPMgrParseCommand(desc); 49: } 50: #endif 51: 52: if (AG903_OSP_BUFMODE_RING == desc->BuffMode) { 53: MaxLen = desc->BufLen; 54: } 55: else { 56: MaxLen = desc->CurLen; 57: } 58: 59: if ((desc->RdBuf + setcnt) > (desc->Buf + MaxLen)) { 60: uint32_t Len; 61: 74: Len = (desc->Buf + MaxLen) - desc->RdBuf; 75: AG903_OSPPrmFIFODT(ch, desc->RdBuf, Len); 76: 77: desc->RdBuf = desc->Buf; 78: setcnt -= Len; 79: 80: if (AG903_OSP_BUFMODE_RING == desc->BuffMode) { 81: desc->CurLen -= Len; 82: } 83: } 84: 85: AG903_OSPPrmFIFODT(ch, desc->RdBuf, setcnt); 86: desc->RdBuf += setcnt; 87: 88: if (AG903_OSP_BUFMODE_RING == desc->BuffMode) { 89: desc->CurLen -= setcnt; 90: } 91: 92: if (desc->RdBuf >= (desc->Buf + MaxLen)) { 93: desc->RdBuf = desc->Buf; 94: } 95: 96: return rc; 97: }
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.