MDX-20用の改造

Dependencies:   FatFileSystemCpp

Revision:
10:cce9366e2d73
Parent:
9:280ae971e7cb
--- a/usbMemory.cpp	Sun Oct 14 09:39:45 2018 +0000
+++ b/usbMemory.cpp	Mon Oct 15 23:04:07 2018 +0000
@@ -26,6 +26,7 @@
 char fileName[20];
 char buffer[50];
 
+int32_t C_lineReadNo;  // fileLineRead()で1行づつ読み出したときに、読み出した行番号を記憶する 0:先頭行 1~その後の行
 
 /** usb check
  * @return 0:OK 1:NG
@@ -78,7 +79,7 @@
     return ans;
 }
 
-/** 指示したfileの行数を取得 
+/** 指示したfileの行数を取得
  * @param *fileName : 指示するfile name
  * @param *numberLine : 取得した行数
  * @return false:行数取得できず true:処理成功
@@ -101,7 +102,7 @@
     if ( fp != NULL ) {
         char buf[256];
         while ( NULL != fgets(buf, sizeof(buf), fp) ) {
-           // DEBUG_PRINT("%s", buf);
+            // DEBUG_PRINT("%s", buf);
             numMax++;
         }
         *numberLine = numMax;
@@ -116,39 +117,38 @@
     return ans;
 }
 
-/** 指定した行のデータを取得 
+/** 指定した行のデータを取得
  * @param *fileNmae データを取得するfile Name
  * @param *data : 取得した行データを格納するバッファ
  * @param dataNumber : *dataのbyte数
  * @param numberLine : 取得する行数
  * @return false:失敗 true:成功
  *
- * 181014 数万行になると読み込みが遅くなるのでtempNumber行分バッファし、毎回指定行まで空回りさせないようにする 
+ * 181014 数万行になると読み込みが遅くなるのでtempNumber行分バッファし、毎回指定行まで空回りさせないようにする
  */
-uint32_t fileOneLineRead(char *fileName, char *data, int32_t dataNumber, int32_t numberLine)
+int32_t fileOneLineRead(char *fileName, char *data, int32_t dataNumber, int32_t numberLine)
 {
 //    static FILE *fp;
     uint32_t i;
     int32_t ans = false;
-    
+
 #define tempNumber 600
 #define tempSize 30
     static char temp[tempNumber][tempSize]; // tempNumber行分のデータをバッファしておく
     static uint32_t tempLineStartNo = 0;     // tempの先頭行番号
     static int32_t tempCheck = -1;       // tempにデータがあるか判別 -1:なし それ以外あり
-    
+
 #define bufferNumber 100
     char buffer[bufferNumber];
 
 
 
-    if (((numberLine / tempNumber) == (tempLineStartNo / tempNumber)) && (tempCheck != -1)){
+    if (((numberLine / tempNumber) == (tempLineStartNo / tempNumber)) && (tempCheck != -1)) {
         // tempにデータがあればそこから取り出す
-            strcpy(data, &temp[numberLine % tempNumber][0]);
-            ans = true;
-            DEBUG_PRINT("temp numberLine = %d, tempNumber = %d\r\n",numberLine, (tempLineStartNo / tempNumber));
-    }
-    else{
+        strcpy(data, &temp[numberLine % tempNumber][0]);
+        ans = true;
+        DEBUG_PRINT("temp numberLine = %d, tempNumber = %d\r\n",numberLine, (tempLineStartNo / tempNumber));
+    } else {
         // tempにデータがなければUSBから取り出し、tempにも保存する
         sprintf(buffer,"/msc/%s",fileName);
         fp = fopen( buffer, "r");
@@ -162,23 +162,21 @@
 
             // 目的の行からtempに保管していく
             for(i = 0; i < tempNumber ; i++) {
-                if(NULL != fgets(&temp[i][0], tempSize, fp)){
+                if(NULL != fgets(&temp[i][0], tempSize, fp)) {
                     tempCheck = 1;
-                }
-                else {
+                } else {
                     // fileにデータがなければ強制終了
                     break;
                     //i = tempNumber;
                 }
             }
-            
+
             // fileから取り出した回もtempからデータを取得
-            if((numberLine % tempNumber) <= i){
+            if((numberLine % tempNumber) <= i) {
                 strcpy(data, &temp[numberLine % tempNumber][0]);
                 ans = true;
                 DEBUG_PRINT("temp = %d\r\n",numberLine % tempNumber);
-            }
-            else{
+            } else {
                 // nothing
             }
 
@@ -188,29 +186,63 @@
         }
         fclose(fp);
 
-    }    
+    }
+
+    return ans;
+}
 
-/* 181014変更前
+/** file open
+ * @param *fileName : 指示するfile name
+ * @return false:openできず true:処理成功
+ */
+int32_t fileOpen(char *fileName)
+{
+    int32_t ans = false;
+
+    sprintf(buffer,"/msc/%s",fileName);
     fp = fopen( buffer, "r");
+
     if ( fp != NULL ) {
-        for(uint32_t i = 0; i < numberLine; i++) {
-            fgets(buffer, sizeof(buffer), fp);
-        }
-
-        if(NULL != fgets(data, dataNumber, fp)) {
-            DEBUG_PRINT("line = %s\r\n", data);
-            ans = true;
-        } else {
-            // nothing
-        }
+        C_lineReadNo = 0;   // fileLineRead()で読み出したときの行番号
+        ans = true;
     } else {
         // Don't file open
         // nothing
     }
 
+    return ans;
+}
+
+/** file close
+ * @param *fileName : 指示するfile name (関数内で使用しないが、コール元での明示用に設定させる)
+ * @return (false:ありえない) true:処理成功
+ */
+int32_t fileClose(char *fileName)
+{
+    int32_t ans = true;
+
     fclose(fp);
-181014変更前 */
-
     return ans;
 }
 
+/** 順番に1行づつ読み出す
+ * @param *fileNmae データを取得するfile Name
+ * @param *data : 取得した行データを格納するバッファ
+ * @param dataNumber : *dataのbyte数
+ * @param numberLine : 読み出した行番号(0:読み出し無し 読み出した行番号:1,2・・・)
+ * @return false:失敗 true:成功
+ */
+int32_t fileLineRead(char *fileName, char *data, int32_t dataNumber, int32_t *numberLine)
+{
+    int32_t ans = false;
+
+    if(NULL != fgets(data, dataNumber, fp)) {
+        *numberLine = C_lineReadNo;
+        C_lineReadNo++;
+        DEBUG_PRINT("line = %s\r\n", data);
+        ans = true;
+    } else {
+        // nothing
+    }
+    return ans;
+}
\ No newline at end of file