a_team_fep_rx_from_kinect_sample

Files at this revision

API Documentation at this revision

Comitter:
skouki
Date:
Thu Oct 04 10:54:05 2018 +0000
Commit message:
v1;

Changed in this revision

FEP2/FEP.cpp Show annotated file Show diff for this revision Revisions of this file
FEP2/FEP.h Show annotated file Show diff for this revision Revisions of this file
fep_kinect/fep_kinect.cpp Show annotated file Show diff for this revision Revisions of this file
fep_kinect/fep_kinect.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 338b7241e445 FEP2/FEP.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FEP2/FEP.cpp	Thu Oct 04 10:54:05 2018 +0000
@@ -0,0 +1,72 @@
+#include "FEP.h"
+
+FEP::FEP(PinName tx, PinName rx, uint8_t addr, int baud) :
+    RawSerial(tx, rx, baud)
+{
+    _address = addr;
+}
+
+void FEP::startReceive(uint16_t dataSize)
+{
+    bufferSize = dataSize + 15;
+    bufferPoint = 0;
+    receivedBytes = 0;
+    buffer = new uint8_t[bufferSize];
+    data  = new uint8_t[dataSize];
+    attach(callback(this, &FEP::receiveByte));
+}
+
+void FEP::getData(uint8_t data_[])
+{
+    for(int i = 0; i < bufferSize - 15; i++) {
+        data_[i] = data[i];
+    }
+}
+
+void FEP::sendData(uint8_t data_[], uint8_t length)
+{
+    uint8_t checksum = 0x00;
+
+    printf("@TBN%03d%03d", _address, length + 1);
+    for (int j = 0; j < length; j++) {
+        checksum += data_[j];
+        putc(data_[j]);
+    }
+    putc(checksum);
+    putc('\r');
+    putc('\n');
+}
+
+void FEP::receiveByte()
+{
+    buffer[bufferPoint % bufferSize] = getc();
+
+    if(bufferPoint != 0xff) {
+        ++bufferPoint;
+    } else {
+        bufferPoint = (255%bufferSize)+1;
+    }
+
+    ++receivedBytes;
+
+    if(receivedBytes >= bufferSize) checkData();
+}
+
+void FEP::checkData()
+{
+    for(int i = 0; i < bufferSize; i++) {
+        if(buffer[i % bufferSize] == FEP_HEADER0 && buffer[(i + 1) % bufferSize] == FEP_HEADER1 && buffer[(i + 2) % bufferSize] == FEP_HEADER2) {
+            uint8_t checksum = 0x00;
+            for(int j = 9; j < bufferSize - 6; j++) {
+                checksum += buffer[(i + j)% bufferSize];
+            }
+            if(checksum == buffer[(i + bufferSize - 6)% bufferSize]) {
+                for(int j = 9; j < bufferSize - 6; j++) {
+                    data[j - 9] = buffer[(i + j) % bufferSize];
+                }
+                receivedBytes = 0;
+                return;
+            }
+        }
+    }
+}
diff -r 000000000000 -r 338b7241e445 FEP2/FEP.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FEP2/FEP.h	Thu Oct 04 10:54:05 2018 +0000
@@ -0,0 +1,34 @@
+#ifndef FEP_H
+#define FEP_H
+
+#include "mbed.h"
+
+#define FEP_BUFFER_SIZE 22
+#define FEP_HEADER0 'R'
+#define FEP_HEADER1 'B'
+#define FEP_HEADER2 'N'
+
+class FEP : public RawSerial
+{
+public :
+    FEP(PinName tx, PinName rx, uint8_t addr, int baud=115200);
+
+    void startReceive(uint16_t dataSize);
+    void getData(uint8_t data_[]);
+    void sendData(uint8_t data_[], uint8_t length);
+
+private :
+    void receiveByte();
+    void checkData();
+
+    uint8_t *buffer;
+    uint8_t bufferPoint;
+    uint8_t receivedBytes;
+
+    uint16_t bufferSize;
+    uint8_t* data;
+
+    uint8_t _address;
+};
+
+#endif
\ No newline at end of file
diff -r 000000000000 -r 338b7241e445 fep_kinect/fep_kinect.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fep_kinect/fep_kinect.cpp	Thu Oct 04 10:54:05 2018 +0000
@@ -0,0 +1,25 @@
+#include"fep_kinect.h"
+
+fep_kinect::fep_kinect(PinName tx,PinName rx,uint8_t addr,int baud) :
+    fep_(tx,rx,addr,baud)
+{
+    fep_.startReceive(2);
+}
+
+
+uint16_t fep_kinect::get_distance()
+{
+    return data_[0];
+}
+
+uint16_t fep_kinect::get_mode()
+{
+    return data_[1];
+}
+void fep_kinect::newdata()
+{
+    fep_.getData(data);
+    data_[2] = (int(data[0]) << 8) | int(data[1]);
+    data_[1] = data_[2] % 10;
+    data_[0] = data_[2] / 10;
+}
\ No newline at end of file
diff -r 000000000000 -r 338b7241e445 fep_kinect/fep_kinect.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fep_kinect/fep_kinect.h	Thu Oct 04 10:54:05 2018 +0000
@@ -0,0 +1,20 @@
+#ifndef FEP_KINECT_H
+#define FEP_KINECT_H
+
+#include"FEP.h"
+#include"mbed.h"
+
+class fep_kinect
+{
+public:
+    fep_kinect(PinName tx, PinName rx, uint8_t addr, int baud=115200);
+    uint16_t get_distance(void);
+    uint16_t get_mode(void);
+    void newdata(void);
+private:
+    FEP fep_;
+    uint8_t data[2];
+    uint16_t data_[3];
+};
+
+#endif
\ No newline at end of file
diff -r 000000000000 -r 338b7241e445 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Oct 04 10:54:05 2018 +0000
@@ -0,0 +1,13 @@
+#include"fep_kinect.h"
+#include"mbed.h"
+fep_kinect fep(PC_12,PD_2,151,115200);
+Serial pc(USBTX,USBRX,115200);
+int main()
+{
+    while(true) {
+        fep.newdata();
+        int distance = fep.get_distance();
+        int mode = fep.get_mode();
+        pc.printf("%d,%d\n\r",distance,mode);
+    }
+}
\ No newline at end of file
diff -r 000000000000 -r 338b7241e445 mbed-os.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-os.lib	Thu Oct 04 10:54:05 2018 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/mbed-os/#c9e63f14085f5751ff5ead79a7c0382d50a813a2