Takeuchi Issei / Mbed 2 deprecated Serial_Writer

Dependencies:   mbed

Revision:
1:a9cd302df0c5
Parent:
0:1779b0a23b09
Child:
2:4f7655735c6f
diff -r 1779b0a23b09 -r a9cd302df0c5 Serial_Writer.h
--- a/Serial_Writer.h	Thu Apr 29 03:16:39 2021 +0000
+++ b/Serial_Writer.h	Fri May 07 08:56:38 2021 +0000
@@ -10,40 +10,37 @@
 {
 public:
     Serial_Writer(PinName TxPin,PinName RxPin,int baudrate);
-    
     template <typename T>
-    
     inline void write(T &send,int delay){
         int num=sizeof(send);
-        char buffer[num];
-        for (int i=0,k=0;i<num;k++){
+        char buffer[num+2];
+        for (int i=1,k=0;i<=num;k++){
             for(int _bitNum=sizeof(send[0])-1;_bitNum>=0;i++,_bitNum--)buffer[i]=(send[k]>>(8*_bitNum))&0xFF;
         }
-        _Serial.putc('[');
-        _Serial.putc(uint8_t(num)&0xFF);
-        _Serial.putc(uint8_t(sizeof(send[0]))&0xFF);
-        for (int p=0;p<num;p++)_Serial.putc(buffer[p]);
-        _Serial.putc(']');
+        buffer[0]='[';
+        buffer[num+1]=']';
+        for (int p=0;p<sizeof(buffer);p++)_Serial.putc(buffer[p]);
         wait_ms(delay);
     }
     
     template <typename R>
-    inline int receive(R &get){//getの各要素に0x0を必ず代入してください。
-        if (_Serial.readable()&&_Serial.getc()=='['){
-            uint8_t num=_Serial.getc();
-            uint8_t bits=_Serial.getc();
-            if !(num%bits)return;
-            char buffer[num];
-            for (int i=0;i<num;i++)buffer[i]=_Serial.getc();
-            if (_Serial.getc()=']'){
-                for (int p=0,k=0;p<num/bits;p++){
-                    for(uint8_t _bits=bits-1;_bits>=0;k++,_bits--)get[p]|=buffer[k]<<(8*_bits);
+    inline int receive(R &get){
+        int num=sizeof(get);
+        int num_0=sizeof(get[0]);
+        char buffer[num+2];
+        if (_Serial.readable()){
+            for(int i=0;i<sizeof(buffer);i++){
+                buffer[i]=_Serial.getc();
+                if(buffer[0]!='[')return -1;
+            }
+            if(buffer[num+1]==']'){
+                for (int s=0;s<(num/num_0);s++)get[s]=0x0;
+                for (int p=1,k=0;p<=num;k++){
+                    for (int _byte=num_0-1;_byte>=0;p++,_byte--)get[k]|=buffer[p]<<(8*_byte);
                 }
-                return 1;
-            }
-            return -1;
-        }
-        return 0;
+                return 0;//正常終了
+            }else return -1;//異常終了1
+        }else return -2;//異常終了2
     }
     
 private: