#include "CFTTFile_Buffered.h" #include "FTTThread.h" #include "memctrl.h" //005CB3F8 CFTTAsyncEvent *CFTTFile_Buffered::ms_pEvent = nullptr; //------------------------------------------------------------------------------------------------- //0026405C //^_^ //CFTTFile *pCFTTFile, uint count, uint aglin CFTTFile_Buffered::CFTTFile_Buffered(CFTTFile *pCFTTFile, uint count, uint aglin, EFTTMemHeapID eHeapId) { } //------------------------------------------------------------------------------------------------- //002642D8 002642F4 //^_^ CFTTFile_Buffered::~CFTTFile_Buffered() { Close(); } //------------------------------------------------------------------------------------------------- //0026387C //^_^ void CFTTFile_Buffered::Initialise() { } //------------------------------------------------------------------------------------------------- //0026397C //^_^ void CFTTFile_Buffered::Shutdown() { } //------------------------------------------------------------------------------------------------- //002640F8 //^_^ bool CFTTFile_Buffered::FillBuffer(int index, int64 end) { LOGE("CFTTFile_Buffered::FillBuffer %p%x%x%x",this,index,((int*)&end)[0],((int*)&end)[1]); return rand(); } //------------------------------------------------------------------------------------------------- //00264302 //^_^ int64 CFTTFile_Buffered::Read(void *arg_buf, int64 len) { return 0; } //------------------------------------------------------------------------------------------------- //00264518 int64 CFTTFile_Buffered::Write(void const *buf, int64 buflen_r8sp20) { int64 dret_3C_sp18 = 0; if (pFile_8 == nullptr) return -1; // 00264532 if ((pFile_8->GetModeFlags() & 3) == 1) { // 00264542 errCode_4 = EFTTError_14; Close(); return -1; } // loc_26454A if (errCode_4) { // loc_264550 Close(); return -1; } // loc_264564 if (pFile_8->GetModeFlags() & 4) { // 00264574 int64 d = Seek(0, 2); if (d <= -1) return d; } // loc_264590 uint8 *pbuf_38 = static_cast(const_cast(buf)); // loc_264590 int r10 = 0; // int64 var_2C = 0; // int64 var_3C = 0; while (buflen_r8sp20 > 0) { // loc_2645AA int64 r6r7 = i64Arrar_18[r10]; //.text:002645B2 048 LDRD.W R6, R7, [R0,#0x18] @ R6, R7 = i64Arrar_18[r10] int r4 = r10; r10 = r10 ^ 1; int64 r2r3 = r6r7 + mod_C; if (curPos_38 < r6r7 || curPos_38 >= (r6r7 + mod_C)) { // loc_2645D8 if (curPos_38 < i64Arrar_18[r10] || curPos_38 >= (i64Arrar_18[r10] + mod_C)) { // loc_2645FC while (byArray_30[r4]) { if (!byArray_30[r10]) { r4 = r10; break; } // loc_264608 FTTThread_Sleep(1); } // loc_26461A if (!FillBuffer(r4, curPos_38)) { return -1; } } continue; } // loc_26462C int64 r5r7_spc = (int64)mod_C - (curPos_38 - r6r7); if (r5r7_spc >= buflen_r8sp20) { r5r7_spc = buflen_r8sp20; //dret_3C_sp18 = buflen; } else { //dret_3C_sp18 = r5r7; } // 00264662 if ((r6r7 + mod_C) < size_40 && !byArray_30[r10]) { // 00264674 if (r2r3 < i64Arrar_18[r10] || r2r3 >= (i64Arrar_18[r10] + mod_C)) { // loc_264696 if (!byArray_32[r10]) { // 0026469C if (!FillBuffer(r10, r2r3)) { return -1; } } } } // loc_2646A8 while (byArray_30[r4]) { // loc_2646B2 FTTThread_Sleep(1); } // 002646BE memcpy(bufArray_28[r4] + (int)(curPos_38 - r6r7), pbuf_38, (int)r5r7_spc); byArray_32[r4] = 1; // 002646D6 STRB.W R0, [R7,#0x32] pbuf_38 += (int)r5r7_spc; curPos_38 += r5r7_spc; // 00264706 STRD.W R0, R1, [R12] //curpos_38=r9 if (curPos_38 >= size_40) { size_40 = curPos_38; // 00264706 } dret_3C_sp18 += r5r7_spc; buflen_r8sp20 -= r5r7_spc; } return dret_3C_sp18; } //------------------------------------------------------------------------------------------------- //00264746 //^_^ int64 CFTTFile_Buffered::GetPos() { LOGI("CFTTFile_Buffered::GetPos entry"); int64 dret = -1; return dret; } //------------------------------------------------------------------------------------------------- //0026475A //^_- int64 CFTTFile_Buffered::Seek(int64 dpos, int whence) { return -1; } //------------------------------------------------------------------------------------------------- //002648C6 //^_^ TFTTFileAttributes *CFTTFile_Buffered::GetAttributes() { TFTTFileAttributes *pAttr = nullptr; return pAttr; } //------------------------------------------------------------------------------------------------- //002648D4 //^_^ bool CFTTFile_Buffered::Close() { return 0; } //------------------------------------------------------------------------------------------------- //00264A26 //^_^ bool CFTTFile_Buffered::IsOpen() { return 0; } //------------------------------------------------------------------------------------------------- //00264A56 //^_^ CFTTFile_AsyncHandler *CFTTFile_Buffered::GetAsyncHandler() { CFTTFile_AsyncHandler *pret = nullptr; return pret; } //------------------------------------------------------------------------------------------------- //00264A64 //^_^ int CFTTFile_Buffered::GetModeFlags() { int dret = -1; return dret; } //------------------------------------------------------------------------------------------------- //00265854 //^_^ bool CFTTFile_Buffered::UseBufferedAccess() const { return 0; } //------------------------------------------------------------------------------------------------- //00264A30 //^_^ void CFTTFile_Buffered::ReadCallback(CFTTAsyncEvent *pAsycEvent, TFTTFileAsyncEventData const *pEventData, void *data) { LOGI("CFTTFile_Buffered::ReadCallback Entry"); } //-------------------------------------------------------------------------------------------------