suu pen / Mbed 2 deprecated serial_dummy

Dependencies:   mbed BufferedSerial

Revision:
2:52002844d0c6
Parent:
1:c6e8a41200d9
Child:
3:327bb0fcdf45
--- a/main.cpp	Sat Jul 26 23:58:24 2014 +0000
+++ b/main.cpp	Sat Aug 02 10:05:35 2014 +0000
@@ -1,9 +1,9 @@
 /**
  serial data 送信ツール
- 
+
  V00.01 : 140719
- 
- 
+
+
  <使い方>
 "data.txt" に送信する文字列を設定し、mbedに保管する。
 mbedに通電するかRESET SW を押すとUSB-serialから文字列を出力する
@@ -47,20 +47,34 @@
 
 
 */
+
+//#define DEBUG
+
 #include "mbed.h"
+#include <stdio.h>
 #include "ctype.h"
+//#include <string.h>
+#include "BufferedSerial.h"
 
 LocalFileSystem local("local");     // local file systemの設定
+//Serial pc(USBTX, USBRX);            // usb-serialの設定
+#ifdef DEBUG
+Serial chk(USBTX, USBRX);
+#endif // DEBUG
 
-//Serial pc(USBTX, USBRX);            // usb-serialの設定
-Serial pc(p9, p10);
+BufferedSerial pc(USBTX, USBRX);
+//BufferedSerial pc(p9, p10);
 Timeout txSend; // 送信間隔作成用
 
 DigitalOut ledopen(LED1);   // 1:file open 0:file close
 DigitalOut ledout(LED2);    // 1: serial out
 //DigitalOut lederror(LED4);
 
-char buffer[500]; // 読みだしたデータの保管先
+#define Z_bufferNumber (500)
+char buffer[Z_bufferNumber]; // 読みだしたデータの保管先
+
+int D_start_wait_us = 100; // 送信開始時の待ち時間 (1/1 [us]/bit) min = 100[us]
+int D_char_wait_us = 100;   // キャラクタ間の送信間隔 ( 1/1 [ms]/bit) min = 100[us]
 
 // 送信処理状態遷移
 typedef enum {
@@ -92,7 +106,7 @@
         case Z_txSend:
             if(*p != 0x00) {
                 pc.putc(*p++);
-                txSend.attach_us(&txDataSend, 1);   // 次回送信開始まで2[us]セット(時間は可変設定にする)
+                txSend.attach_us(&txDataSend, D_char_wait_us);   // 次回送信開始まで2[us]セット(時間は可変設定にする)
             }
 
             else {
@@ -101,7 +115,7 @@
                 txSend.detach();
             }
             break;
-            case Z_txIdle: // defaultと同じ処理
+        case Z_txIdle: // defaultと同じ処理
         default:
             // nothing
             break;
@@ -114,10 +128,11 @@
  * 受信終了から送信開始までの20[ms]遅延設定
  *
  */
-void txDataWait(int wait_ms)
+void txDataWait(void)
 {
-    txSend.attach_us(&txDataSend, wait_ms * 1000);  // 受信完了から20[ms]経過待ち
+    txSend.attach_us(&txDataSend, D_start_wait_us);  // 受信完了からx[ms]経過待ち
     M_txSend = Z_txStart;
+
 }
 
 /**
@@ -144,8 +159,9 @@
 
 int main()
 {
+    pc.baud(9600);
     FILE *fp;
-    int ans;
+//    int ans;
     char *p;
     int timer;  // serial送信時間間隔 ( 1/1 [ms]/bit)
     int baud;   // usb-serialのbaudrate ( 1/1 [bps]/bit)
@@ -155,58 +171,108 @@
 
 
     while(1) {
-        ans = fscanf(fp,"%s",buffer);
-        if(ans != -1) {
+       if(fgets(buffer, Z_bufferNumber, fp) != NULL){ 
+//        ans = fscanf(fp,"%s",buffer);
+//        if(ans != -1) {
             p = buffer;
             // 文字列 or 制御コマンド
-            if(*p++ == '>') {
+            //ここ
+            switch(*p){
+                case '>':
+//            if(*p == '>') {
                 // コマンドとして処理する
+                p++;
                 switch(*p++) {
                     case 'T':
                     case 't':
-                        // serial data の送信間隔時間を設定
-                        timer = 0;
-                        while(isdigit(*p) == 1) {
-                            timer *= 10;
-                            timer += (*p++ - '0');
+                        switch(*p++) {
+                            case 'F':
+                            case 'f':
+                                // serial data の送信間隔時間を設定
+                                timer = 0;
+                                while(isdigit(*p) != 0) {
+                                    timer *= 10;
+                                    timer += (*p++ - '0');
+                                }
+                                                                if(timer == 0) {
+                                    // 設定値が0の時は、最小値1[us]を設定する
+                                    // 100[us]以下にすると割り込みがかからなくなるのでその対策
+                                    D_start_wait_us = 100;
+                                } else {
+                                    D_start_wait_us = timer * 1000;
+                                }
+#ifdef DEBUG
+                                chk.printf("timer = %06d\r\n",timer);
+#endif // DEBUG
+                                break;
+                            case 'C':
+                            case 'c':
+                                // キャラクタ間隔時間(第二引数)の確認
+                                 timer = 0;
+                                while(isdigit(*p) != 0) {
+                                    timer *= 10;
+                                    timer += (*p++ - '0');
+                                }
+                                if(timer == 0) {
+                                    // 設定値が0の時は、最小値1[us]を設定する
+                                    // 100[us]以下にすると割り込みがかからなくなるのでその対策
+                                    D_char_wait_us = 100;
+                                } else {
+                                    D_char_wait_us = timer * 1000;
+                                }
+                                break;
+                            default:
+                                break;
                         }
                         break;
-                        case 'B':
-                        case 'b':
-                            // baudrate 設定
+                    case 'B':
+                    case 'b':
+                        // baudrate 設定
                         baud = 0;
-                        while(isdigit(*p) == 1) {
+                        while(isdigit(*p) != 0) {
                             baud *= 10;
                             baud += (*p++ - '0');
                         }
                         pc.baud(baud);
+#ifdef DEBUG
+                        chk.printf("baud = %d\r\n",baud);
+#endif //DEBUG
                         break;
                     default:
                         // nothing
                         break;
                 }
-
-            } else {
+            //ここ
+                break;
+                case ';':
+                    // comment
+                    break;
+                default:
+ //              } else {
                 // 出力文字列として処理する
 
-                txDataWait(1);
-                while(txSendEndCheck() == 0){
+                txDataWait();
+                while(txSendEndCheck() == 0) {
                     // 割り込みで送信中
                     ledout = !ledout;   // この行がないとwhile文から抜けなくなる。原因不明
-                    }
+                }
+
 
-               // pc.printf("%s\n",buffer);
+//                pc.printf("%s\n",buffer);
                 wait_ms(timer);
+            //ここ
+                break;
             }
         } else {
             // 読みだすデータがなくなったら、先頭に戻す
             fclose(fp);
             ledopen = 0;
-
-            wait_ms(timer);
+//            wait_ms(timer);
 
             fp = fopen("/local/data.txt", "r");
             ledopen = 1;
         }
     }
 }
+
+