Takeuchi Issei / Mbed 2 deprecated Serial_Writer

Dependencies:   mbed

Revision:
0:1779b0a23b09
Child:
1:a9cd302df0c5
diff -r 000000000000 -r 1779b0a23b09 Serial_Writer.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Serial_Writer.h	Thu Apr 29 03:16:39 2021 +0000
@@ -0,0 +1,53 @@
+/*---------------------------
+  
+Author:Issaimaru
+
+----------------------------*/
+#ifndef SERIAL_WRITER
+#define SERIAL_WRITER
+#include <mbed.h>
+class Serial_Writer
+{
+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++){
+            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(']');
+        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);
+                }
+                return 1;
+            }
+            return -1;
+        }
+        return 0;
+    }
+    
+private:
+    Serial _Serial;
+};
+
+#endif
\ No newline at end of file