uint8_t型とunsigned char型に対応した多バイトシリアル通信用ライブラリ

Dependents:   multiserial_test serial_check_controller receiverA receiver_transmitter ... more

Files at this revision

API Documentation at this revision

Comitter:
Hatter
Date:
Tue Sep 23 10:25:59 2014 +0000
Parent:
10:ce09c92e33b4
Child:
13:afc65bff2e6b
Commit message:
????

Changed in this revision

MultiSerial.cpp Show annotated file Show diff for this revision Revisions of this file
MultiSerial.h Show annotated file Show diff for this revision Revisions of this file
--- a/MultiSerial.cpp	Wed Sep 03 08:48:44 2014 +0000
+++ b/MultiSerial.cpp	Tue Sep 23 10:25:59 2014 +0000
@@ -6,8 +6,8 @@
 #include "MultiSerial.h"
 
     
-        MultiSerial::MultiSerial(PinName tx,PinName rx,dir_state state) : __serial__(tx,rx){
-            
+        MultiSerial::MultiSerial(PinName tx,PinName rx) : __serial__(tx,rx){
+            /*
             switch(state){
             
             case read:
@@ -31,8 +31,39 @@
             __serial__.attach(this,&MultiSerial::TX,Serial::TxIrq);
             __serial__.putc(1);
             }
+            
         }
+        */
     }
+    
+        void MultiSerial::start_write(){
+            
+            __stop_write = 0;
+            __serial__.attach(this,&MultiSerial::TX,Serial::TxIrq);
+            __serial__.putc(1);
+            
+            }
+            
+        void MultiSerial::stop_write(){
+            
+            __stop_write  = 1;
+            
+            }
+            
+            
+        void MultiSerial::start_read(){
+            
+            __stop_read = 0;
+            __serial__.attach(this,&MultiSerial::RX,Serial::RxIrq);
+            uint8_t k = __serial__.getc();
+            
+            }
+            
+        void MultiSerial::stop_read(){
+            
+            __stop_read = 1;
+            
+            }
 
         void MultiSerial::read_data(uint8_t* readData,uint8_t readKey){
 
@@ -43,6 +74,9 @@
 
 
         void MultiSerial::write_data(uint8_t* writeData,uint8_t writeKey){
+            
+            __serial__.attach(this,&MultiSerial::TX,Serial::TxIrq);
+            __serial__.putc(1);
 
             __writeData=writeData;
             __writeSize = __SIZE(__writeData);
@@ -52,11 +86,13 @@
 
         void MultiSerial::TX(void){//送信バッファ空き割り込み用関数
 
+            if(__stop_write==1){return;} 
+
             static uint8_t tx=__writeSize+2, i;
             static uint8_t txData[MAX_DATA_NUM]={__writeKey};   
             static uint8_t tx_checkcode=0;
             if(tx >= __writeSize+2){
-                txData[KEY] = __writeKey;;
+                txData[KEY] = __writeKey;
 
                 for(int k=1;k<=__writeSize;k++){
                     txData[k] = __writeData[k-1];
@@ -74,7 +110,9 @@
         }//受信割り込み用関数
 
         void MultiSerial::RX(void){
-
+            
+            if(__stop_read==1){return;}
+            
             static uint8_t rx=0, i;
             static uint8_t rxData[MAX_DATA_NUM]={__readKey};
             static uint8_t rx_checkcode=0;
--- a/MultiSerial.h	Wed Sep 03 08:48:44 2014 +0000
+++ b/MultiSerial.h	Tue Sep 23 10:25:59 2014 +0000
@@ -43,12 +43,14 @@
  * @endcode
  */
  
+/*
  typedef enum {     
      write,
      read,
      both
      
      }dir_state;
+ */    
 
 class MultiSerial{
 
@@ -61,7 +63,7 @@
          * @param state 通信方向 read,write,both
          */ 
 
-        MultiSerial(PinName tx,PinName rx,dir_state state=both);
+        MultiSerial(PinName tx,PinName rx);
         
         /**データ読み込みするよ 
          *
@@ -90,18 +92,28 @@
          */
         void RX(void);
         
+        void start_read();
+        
+        void stop_read();
+        
+        void start_write();
+        
+        void stop_write();
 
     protected:
 
         Serial __serial__;
 
-        volatile    uint8_t* __readData;
-        volatile    uint8_t __readSize;
-        volatile    uint8_t __readKey;
+        volatile    uint8_t*    __readData;
+        volatile    uint8_t     __readSize;
+        volatile    uint8_t     __readKey;
 
-        volatile    uint8_t* __writeData;
-        volatile    uint8_t __writeSize;
-        volatile    uint8_t __writeKey;
+        volatile    uint8_t*    __writeData;
+        volatile    uint8_t     __writeSize;
+        volatile    uint8_t     __writeKey;
+        
+        volatile    uint8_t     __stop_read;
+        volatile    uint8_t     __stop_write;
 
 };
 #endif
\ No newline at end of file