CyberAtom C++ Library

2.5.0

cyberatom.hpp
1 
2 
3 
4 #pragma once
5 #include <memory>
6 #include <stdint.h>
7 
8 #include <vector>
9 #include <string>
10 
11 
12 namespace cyberatom
13 {
14 
16  class UnsupportedMessageIdException : public std::exception { };
17 
19  class DataTransferException : public std::exception { };
20 
22  class CannotOpenPortException : public std::exception { };
23 
25  class DeviceNotFoundException : public std::exception { };
26 
28  class CannotOpenDeviceException : public std::exception { };
29 
30  // forward declarations
31  class IDevice;
32  class IConnection;
33  class IResponse;
34 
38  class IDevice
39  {
40  public:
41  virtual ~IDevice() {}
42 
50  virtual void onMessage(uint8_t code, const uint8_t* payload, size_t payload_size)=0;
51 
60  virtual void checkForMessages()=0;
61 
62  };
63 
68  {
69  public:
70  virtual ~IConnection() {}
71 
79  virtual void sendMessage(uint8_t code, const uint8_t* payload, size_t len)=0;
80 
85  virtual void checkForMessages(IDevice& receiver)=0;
86 
87  };
88 
92  class IResponse
93  {
94  public:
95  virtual ~IResponse() {}
96 
103  virtual void sysInfo(const char* model, const char* firmwareVersion)=0;
104 
113  virtual void quatData(float q0, float q1, float q2, float q3)=0;
114 
122  virtual void eulerData(float p, float r, float y)=0;
123 
131  virtual void rotRateData(float x, float y, float z)=0;
132 
139  virtual void accCalibMatrix(float* cal, float* bias)=0;
140 
147  virtual void magCalibMatrix(float* cal, float* bias)=0;
148 
155  virtual void gyrCalibMatrix(float* cal, float* bias)=0;
156 
162  virtual void filterMagMatrix(float* mat)=0;
163 
169  virtual void filterAccMatrix(float* mat)=0;
170 
176  virtual void filterGyrMatrix(float* mat)=0;
177 
183  virtual void filterProcMatrix(float* mat)=0;
184 
190  virtual void temperature(float temp)=0;
191 
197  virtual void baudRate(uint8_t rate)=0;
198 
204  virtual void i2cAddress(uint8_t addr)=0;
205 
210  virtual void confirm()=0;
211 
219  virtual void rawAccData(int16_t x, int16_t y, int16_t z)=0;
220 
228  virtual void rawMagData(int16_t x, int16_t y, int16_t z)=0;
229 
237  virtual void rawGyrData(int16_t x, int16_t y, int16_t z)=0;
238 
246  virtual void normAccData(float x, float y, float z)=0;
247 
255  virtual void normMagData(float x, float y, float z)=0;
256 
264  virtual void normGyrData(float x, float y, float z)=0;
265 
273  virtual void calibAccData(float x, float y, float z)=0;
274 
282  virtual void calibMagData(float x, float y, float z)=0;
283 
291  virtual void calibGyrData(float x, float y, float z)=0;
292 
305  virtual void stats(uint32_t perf0, uint32_t perf1, uint32_t perf2, uint32_t perf3, uint32_t perf4, uint32_t perf5, uint32_t perf6, uint32_t perf7)=0;
306 
307  };
308 
309 
311  class DevicePriv;
312 
313 
317  class Device : public IDevice
318  {
319  std::shared_ptr<DevicePriv> _private = nullptr;
320  public:
321 
326  Device(IConnection& connection, IResponse& response);
327 
328  virtual ~Device();
329 
337  virtual void onMessage(uint8_t code, const uint8_t* payload, size_t payload_size) override;
338 
347  virtual void checkForMessages() override;
348 
353  virtual void getSysInfo();
354 
359  virtual void getQuatData();
360 
365  virtual void getEulerData();
366 
371  virtual void getRotRateData();
372 
377  virtual void reboot();
378 
383  virtual void factoryReset();
384 
391  virtual void setAccCalibMatrix(float* cal, float* bias);
392 
399  virtual void setMagCalibMatrix(float* cal, float* bias);
400 
407  virtual void setGyrCalibMatrix(float* cal, float* bias);
408 
414  virtual void setFilterMagMatrix(float* mat);
415 
421  virtual void setFilterAccMatrix(float* mat);
422 
428  virtual void setFilterGyrMatrix(float* mat);
429 
435  virtual void setFilterProcMatrix(float* mat);
436 
441  virtual void getFilterMagMatrix();
442 
447  virtual void getFilterAccMatrix();
448 
453  virtual void getFilterGyrMatrix();
454 
459  virtual void getFilterProcMatrix();
460 
465  virtual void getTemperature();
466 
472  virtual void setBaudRate(uint8_t rate);
473 
479  virtual void setI2cAddress(uint8_t address);
480 
485  virtual void getI2cAddress();
486 
491  virtual void getBaudRate();
492 
497  virtual void resetGyr();
498 
503  virtual void writeFlash();
504 
509  virtual void getRawAccData();
510 
515  virtual void getRawMagData();
516 
521  virtual void getRawGyrData();
522 
527  virtual void getNormAccData();
528 
533  virtual void getNormMagData();
534 
539  virtual void getNormGyrData();
540 
545  virtual void getCalibAccData();
546 
551  virtual void getCalibMagData();
552 
557  virtual void getCalibGyrData();
558 
563  virtual void getAccCalibMatrix();
564 
569  virtual void getMagCalibMatrix();
570 
575  virtual void getGyrCalibMatrix();
576 
581  virtual void getStats();
582 
583  };
584 
585 
587  class SerialConnectionPriv;
588 
589 
594  {
595  std::shared_ptr<SerialConnectionPriv> _private = nullptr;
596  public:
597 
605 SerialConnection(const char* portName, int baudRate);
606 
607  virtual ~SerialConnection();
608 
616  virtual void sendMessage(uint8_t code, const uint8_t* payload, size_t len) override;
617 
622  virtual void checkForMessages(IDevice& receiver) override;
623 
624  };
625 
626 
628  class UsbConnectionPriv;
629 
630 
636  class UsbConnection : public IConnection
637  {
638  std::shared_ptr<UsbConnectionPriv> _private = nullptr;
639  public:
640 
649 UsbConnection();
650 
660 UsbConnection(const char* serialNumber);
661 
662  virtual ~UsbConnection();
663 
671  virtual void sendMessage(uint8_t code, const uint8_t* payload, size_t len) override;
672 
677  virtual void checkForMessages(IDevice& receiver) override;
678 
679  static std::vector<std::string> enumerateDevices();
680 
681  };
682 
683 
690  class Response : public IResponse
691  {
692  public:
693  virtual void sysInfo(const char* model, const char* firmwareVersion) override {}
694  virtual void quatData(float q0, float q1, float q2, float q3) override {}
695  virtual void eulerData(float p, float r, float y) override {}
696  virtual void rotRateData(float x, float y, float z) override {}
697  virtual void accCalibMatrix(float* cal, float* bias) override {}
698  virtual void magCalibMatrix(float* cal, float* bias) override {}
699  virtual void gyrCalibMatrix(float* cal, float* bias) override {}
700  virtual void filterMagMatrix(float* mat) override {}
701  virtual void filterAccMatrix(float* mat) override {}
702  virtual void filterGyrMatrix(float* mat) override {}
703  virtual void filterProcMatrix(float* mat) override {}
704  virtual void temperature(float temp) override {}
705  virtual void baudRate(uint8_t rate) override {}
706  virtual void i2cAddress(uint8_t addr) override {}
707  virtual void confirm() override {}
708  virtual void rawAccData(int16_t x, int16_t y, int16_t z) override {}
709  virtual void rawMagData(int16_t x, int16_t y, int16_t z) override {}
710  virtual void rawGyrData(int16_t x, int16_t y, int16_t z) override {}
711  virtual void normAccData(float x, float y, float z) override {}
712  virtual void normMagData(float x, float y, float z) override {}
713  virtual void normGyrData(float x, float y, float z) override {}
714  virtual void calibAccData(float x, float y, float z) override {}
715  virtual void calibMagData(float x, float y, float z) override {}
716  virtual void calibGyrData(float x, float y, float z) override {}
717  virtual void stats(uint32_t perf0, uint32_t perf1, uint32_t perf2, uint32_t perf3, uint32_t perf4, uint32_t perf5, uint32_t perf6, uint32_t perf7) override {}
718  };
719 
720 }
721 
722 
virtual void normGyrData(float x, float y, float z) override
Handles retrieval of NORM_GYR message from the device.
Definition: cyberatom.hpp:713
virtual void normMagData(float x, float y, float z) override
Handles retrieval of NORM_MAG message from the device.
Definition: cyberatom.hpp:712
virtual void temperature(float temp) override
Handles retrieval of TEMP message from the device.
Definition: cyberatom.hpp:704
virtual void sysInfo(const char *model, const char *firmwareVersion) override
Handles retrieval of SYS_INFO message from the device.
Definition: cyberatom.hpp:693
Thrown when there was a problem to retrieve data packet from the device.
Definition: cyberatom.hpp:19
virtual void rawAccData(int16_t x, int16_t y, int16_t z) override
Handles retrieval of RAW_ACC message from the device.
Definition: cyberatom.hpp:708
Occurs when specified serial port cannot be open.
Definition: cyberatom.hpp:22
Definition: cyberatom.hpp:12
virtual void normAccData(float x, float y, float z) override
Handles retrieval of NORM_ACC message from the device.
Definition: cyberatom.hpp:711
virtual void stats(uint32_t perf0, uint32_t perf1, uint32_t perf2, uint32_t perf3, uint32_t perf4, uint32_t perf5, uint32_t perf6, uint32_t perf7) override
Handles retrieval of STATS message from the device.
Definition: cyberatom.hpp:717
Implementation of logical CyberAtom device.
Definition: cyberatom.hpp:317
Implementation of IResponse interface that does nothing.
Definition: cyberatom.hpp:690
virtual void i2cAddress(uint8_t addr) override
Handles retrieval of I2C_ADDR message from the device.
Definition: cyberatom.hpp:706
virtual void quatData(float q0, float q1, float q2, float q3) override
Handles retrieval of QUAT_DATA message from the device.
Definition: cyberatom.hpp:694
virtual void gyrCalibMatrix(float *cal, float *bias) override
Handles retrieval of GYR_CALIB_MAT message from the device.
Definition: cyberatom.hpp:699
Definition: cyberatom.hpp:92
virtual void calibGyrData(float x, float y, float z) override
Handles retrieval of CALIB_GYR message from the device.
Definition: cyberatom.hpp:716
virtual void eulerData(float p, float r, float y) override
Handles retrieval of EULER_DATA message from the device.
Definition: cyberatom.hpp:695
Occurs when no CyberAtom device has been found connected to the computer.
Definition: cyberatom.hpp:25
virtual void calibMagData(float x, float y, float z) override
Handles retrieval of CALIB_MAG message from the device.
Definition: cyberatom.hpp:715
virtual void confirm() override
Handles retrieval of CONFIRM message from the device.
Definition: cyberatom.hpp:707
Thrown when connected CyberAtom device sends message with code unknown to the API library...
Definition: cyberatom.hpp:16
virtual void rawGyrData(int16_t x, int16_t y, int16_t z) override
Handles retrieval of RAW_GYR message from the device.
Definition: cyberatom.hpp:710
virtual void rawMagData(int16_t x, int16_t y, int16_t z) override
Handles retrieval of RAW_MAG message from the device.
Definition: cyberatom.hpp:709
virtual void filterAccMatrix(float *mat) override
Handles retrieval of FILTER_ACC message from the device.
Definition: cyberatom.hpp:701
Represents communication interface to the device.
Definition: cyberatom.hpp:67
virtual void rotRateData(float x, float y, float z) override
Handles retrieval of ROT_RATE_DATA message from the device.
Definition: cyberatom.hpp:696
virtual void filterProcMatrix(float *mat) override
Handles retrieval of FILTER_PROCN message from the device.
Definition: cyberatom.hpp:703
virtual void filterMagMatrix(float *mat) override
Handles retrieval of FILTER_MAG_MAT message from the device.
Definition: cyberatom.hpp:700
virtual void accCalibMatrix(float *cal, float *bias) override
Handles retrieval of ACC_CALIB_MAT message from the device.
Definition: cyberatom.hpp:697
virtual void baudRate(uint8_t rate) override
Handles retrieval of BAUD_RATE message from the device.
Definition: cyberatom.hpp:705
virtual void calibAccData(float x, float y, float z) override
Handles retrieval of CALIB_ACC message from the device.
Definition: cyberatom.hpp:714
virtual void magCalibMatrix(float *cal, float *bias) override
Handles retrieval of MAG_CALIB_MAT message from the device.
Definition: cyberatom.hpp:698
Provides connection to the device via computer&#39;s USB port.
Definition: cyberatom.hpp:636
virtual void filterGyrMatrix(float *mat) override
Handles retrieval of FILTER_GYR message from the device.
Definition: cyberatom.hpp:702
Occurs when connection with CyberAtom device cannot be established.
Definition: cyberatom.hpp:28
Provides connection to the device via computer&#39;s serial port.
Definition: cyberatom.hpp:593
Definition: cyberatom.hpp:38