データの保存、更新、取得ができるWebサービス「milkcocoa」に接続し、データのプッシュ、送信、取得ができるライブラリです。 https://mlkcca.com/
Dependents: MilkcocoaSample MilkcocoaSampleESP8266_LED MilkcocoaSampleESP8266 MilkcocoaSample_3G ... more
Diff: SoftSerialSendOnly/SoftSerialSendOnry_tx.cpp
- Revision:
- 0:23e533c4b1ec
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/SoftSerialSendOnly/SoftSerialSendOnry_tx.cpp Tue Dec 15 09:56:32 2015 +0000
@@ -0,0 +1,80 @@
+#include "SoftSerialSendOnry.h"
+
+int SoftSerialSendOnry::_putc(int c)
+{
+ while(!writeable());
+ prepare_tx(c);
+ tx_bit = 0;
+ txticker.prime();
+ tx_handler();
+ return 0;
+}
+
+void SoftSerialSendOnry::send_break(void) {
+ while(!writeable());
+ tx_bit = 0; //Just to make sure it appears as non-writable to other threads/IRQs
+ tx->write(0);
+ wait_us((bit_period * _total_bits * 3) / 2);
+ tx->write(1);
+ tx_bit = -1;
+}
+
+int SoftSerialSendOnry::writeable(void)
+{
+ if (!tx_en)
+ return false;
+ if (tx_bit == -1)
+ return true;
+ return false;
+}
+
+void SoftSerialSendOnry::tx_handler(void)
+{
+ if (tx_bit == _total_bits) {
+ tx_bit = -1;
+ fpointer[TxIrq].call();
+ return;
+ }
+
+ //Flip output
+ int cur_out = tx->read();
+ tx->write(!cur_out);
+
+ //Calculate when to do it again
+ int count = bit_period;
+ tx_bit++;
+ while(((_char >> tx_bit) & 0x01) == !cur_out) {
+ count+=bit_period;
+ tx_bit++;
+ }
+
+ txticker.setNext(count);
+}
+
+void SoftSerialSendOnry::prepare_tx(int c)
+{
+ _char = c << 1;
+
+ bool parity;
+ switch (_parity) {
+ case Forced1:
+ _char |= 1 << (_bits + 1);
+ case Even:
+ parity = false;
+ for (int i = 0; i<_bits; i++) {
+ if (((_char >> i) & 0x01) == 1)
+ parity = !parity;
+ }
+ _char |= parity << (_bits + 1);
+ case Odd:
+ parity = true;
+ for (int i = 0; i<_bits; i++) {
+ if (((_char >> i) & 0x01) == 1)
+ parity = !parity;
+ }
+ _char |= parity << (_bits + 1);
+ }
+
+ _char |= 0xFFFF << (1 + _bits + (bool)_parity);
+ _char &= ~(1<<_total_bits);
+}
Milkcocoa