CFTTFile_Buffered.cpp 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. #include "CFTTFile_Buffered.h"
  2. #include "FTTThread.h"
  3. #include "memctrl.h"
  4. //005CB3F8
  5. CFTTAsyncEvent<TFTTFileAsyncEventData> *CFTTFile_Buffered::ms_pEvent = nullptr;
  6. //-------------------------------------------------------------------------------------------------
  7. //0026405C //^_^
  8. //CFTTFile *pCFTTFile, uint count, uint aglin
  9. CFTTFile_Buffered::CFTTFile_Buffered(CFTTFile *pCFTTFile, uint count, uint aglin, EFTTMemHeapID eHeapId) {
  10. }
  11. //-------------------------------------------------------------------------------------------------
  12. //002642D8 002642F4 //^_^
  13. CFTTFile_Buffered::~CFTTFile_Buffered() {
  14. Close();
  15. }
  16. //-------------------------------------------------------------------------------------------------
  17. //0026387C //^_^
  18. void CFTTFile_Buffered::Initialise() {
  19. }
  20. //-------------------------------------------------------------------------------------------------
  21. //0026397C //^_^
  22. void CFTTFile_Buffered::Shutdown() {
  23. }
  24. //-------------------------------------------------------------------------------------------------
  25. //002640F8 //^_^
  26. bool CFTTFile_Buffered::FillBuffer(int index, int64 end) {
  27. LOGE("CFTTFile_Buffered::FillBuffer %p%x%x%x",this,index,((int*)&end)[0],((int*)&end)[1]);
  28. return rand();
  29. }
  30. //-------------------------------------------------------------------------------------------------
  31. //00264302 //^_^
  32. int64 CFTTFile_Buffered::Read(void *arg_buf, int64 len) {
  33. return 0;
  34. }
  35. //-------------------------------------------------------------------------------------------------
  36. //00264518
  37. int64 CFTTFile_Buffered::Write(void const *buf, int64 buflen_r8sp20) {
  38. int64 dret_3C_sp18 = 0;
  39. if (pFile_8 == nullptr)
  40. return -1;
  41. // 00264532
  42. if ((pFile_8->GetModeFlags() & 3) == 1) {
  43. // 00264542
  44. errCode_4 = EFTTError_14;
  45. Close();
  46. return -1;
  47. }
  48. // loc_26454A
  49. if (errCode_4) {
  50. // loc_264550
  51. Close();
  52. return -1;
  53. }
  54. // loc_264564
  55. if (pFile_8->GetModeFlags() & 4) {
  56. // 00264574
  57. int64 d = Seek(0, 2);
  58. if (d <= -1)
  59. return d;
  60. }
  61. // loc_264590
  62. uint8 *pbuf_38 = static_cast<uint8 *>(const_cast<void *>(buf));
  63. // loc_264590
  64. int r10 = 0;
  65. // int64 var_2C = 0;
  66. // int64 var_3C = 0;
  67. while (buflen_r8sp20 > 0) {
  68. // loc_2645AA
  69. int64 r6r7 = i64Arrar_18[r10]; //.text:002645B2 048 LDRD.W R6, R7, [R0,#0x18] @ R6, R7 = i64Arrar_18[r10]
  70. int r4 = r10;
  71. r10 = r10 ^ 1;
  72. int64 r2r3 = r6r7 + mod_C;
  73. if (curPos_38 < r6r7 || curPos_38 >= (r6r7 + mod_C)) {
  74. // loc_2645D8
  75. if (curPos_38 < i64Arrar_18[r10] || curPos_38 >= (i64Arrar_18[r10] + mod_C)) {
  76. // loc_2645FC
  77. while (byArray_30[r4]) {
  78. if (!byArray_30[r10]) {
  79. r4 = r10;
  80. break;
  81. }
  82. // loc_264608
  83. FTTThread_Sleep(1);
  84. }
  85. // loc_26461A
  86. if (!FillBuffer(r4, curPos_38)) {
  87. return -1;
  88. }
  89. }
  90. continue;
  91. }
  92. // loc_26462C
  93. int64 r5r7_spc = (int64)mod_C - (curPos_38 - r6r7);
  94. if (r5r7_spc >= buflen_r8sp20) {
  95. r5r7_spc = buflen_r8sp20;
  96. //dret_3C_sp18 = buflen;
  97. } else {
  98. //dret_3C_sp18 = r5r7;
  99. }
  100. // 00264662
  101. if ((r6r7 + mod_C) < size_40 && !byArray_30[r10]) {
  102. // 00264674
  103. if (r2r3 < i64Arrar_18[r10] || r2r3 >= (i64Arrar_18[r10] + mod_C)) {
  104. // loc_264696
  105. if (!byArray_32[r10]) {
  106. // 0026469C
  107. if (!FillBuffer(r10, r2r3)) {
  108. return -1;
  109. }
  110. }
  111. }
  112. }
  113. // loc_2646A8
  114. while (byArray_30[r4]) {
  115. // loc_2646B2
  116. FTTThread_Sleep(1);
  117. }
  118. // 002646BE
  119. memcpy(bufArray_28[r4] + (int)(curPos_38 - r6r7), pbuf_38, (int)r5r7_spc);
  120. byArray_32[r4] = 1; // 002646D6 STRB.W R0, [R7,#0x32]
  121. pbuf_38 += (int)r5r7_spc;
  122. curPos_38 += r5r7_spc; // 00264706 STRD.W R0, R1, [R12]
  123. //curpos_38=r9
  124. if (curPos_38 >= size_40) {
  125. size_40 = curPos_38; // 00264706
  126. }
  127. dret_3C_sp18 += r5r7_spc;
  128. buflen_r8sp20 -= r5r7_spc;
  129. }
  130. return dret_3C_sp18;
  131. }
  132. //-------------------------------------------------------------------------------------------------
  133. //00264746 //^_^
  134. int64 CFTTFile_Buffered::GetPos() {
  135. LOGI("CFTTFile_Buffered::GetPos entry");
  136. int64 dret = -1;
  137. return dret;
  138. }
  139. //-------------------------------------------------------------------------------------------------
  140. //0026475A //^_-
  141. int64 CFTTFile_Buffered::Seek(int64 dpos, int whence) {
  142. return -1;
  143. }
  144. //-------------------------------------------------------------------------------------------------
  145. //002648C6 //^_^
  146. TFTTFileAttributes *CFTTFile_Buffered::GetAttributes() {
  147. TFTTFileAttributes *pAttr = nullptr;
  148. return pAttr;
  149. }
  150. //-------------------------------------------------------------------------------------------------
  151. //002648D4 //^_^
  152. bool CFTTFile_Buffered::Close() {
  153. return 0;
  154. }
  155. //-------------------------------------------------------------------------------------------------
  156. //00264A26 //^_^
  157. bool CFTTFile_Buffered::IsOpen() {
  158. return 0;
  159. }
  160. //-------------------------------------------------------------------------------------------------
  161. //00264A56 //^_^
  162. CFTTFile_AsyncHandler *CFTTFile_Buffered::GetAsyncHandler() {
  163. CFTTFile_AsyncHandler *pret = nullptr;
  164. return pret;
  165. }
  166. //-------------------------------------------------------------------------------------------------
  167. //00264A64 //^_^
  168. int CFTTFile_Buffered::GetModeFlags() {
  169. int dret = -1;
  170. return dret;
  171. }
  172. //-------------------------------------------------------------------------------------------------
  173. //00265854 //^_^
  174. bool CFTTFile_Buffered::UseBufferedAccess() const {
  175. return 0;
  176. }
  177. //-------------------------------------------------------------------------------------------------
  178. //00264A30 //^_^
  179. void CFTTFile_Buffered::ReadCallback(CFTTAsyncEvent<TFTTFileAsyncEventData> *pAsycEvent,
  180. TFTTFileAsyncEventData const *pEventData,
  181. void *data) {
  182. LOGI("CFTTFile_Buffered::ReadCallback Entry");
  183. }
  184. //-------------------------------------------------------------------------------------------------