Titouan Soulard / MX12

Dependents:   DISCO_L475VG_IOT01-Sensors-BSP

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MX12.h Source File

MX12.h

00001 #ifndef MBED_MX12_H
00002 #define MBED_MX12_H
00003 
00004 #include "mbed.h"
00005 
00006 #define MX12_DATA_MAX_SIZE 256
00007 #define MX12_MAX_MOTOR_COUNT 16
00008 
00009 class MX12 {
00010 public:
00011     enum Status {
00012         InstructionError,
00013         OverloadError,
00014         ChecksumError,
00015         RangeError,
00016         OverheatingError,
00017         AngleLimitError,
00018         InputVoltageError,
00019         Unknown,
00020         Ok
00021     };
00022     
00023     enum ParsingState {
00024         Header,
00025         Id,
00026         Length,
00027         Data,
00028         Checksum,
00029     };
00030 
00031     enum SerialState {
00032         Writing,
00033         Reading,
00034         Idling,
00035     };
00036 
00037     struct Frame {
00038         unsigned char motorId;
00039         unsigned char length;
00040         unsigned char data[MX12_DATA_MAX_SIZE];
00041         unsigned char valid;
00042     };
00043 
00044     struct StateContext {
00045         unsigned char headingCount;
00046         unsigned char dataCount;
00047         unsigned char checksum;
00048     };
00049 
00050     MX12(PinName tx, PinName rx, int baud=115200);
00051     
00052     void SetSpeed(unsigned char mot_id, float speed);
00053     char IsAvailable(void);
00054     void rw(unsigned char mot_id, char adress, char len, char *data);
00055     void PrintSerial();
00056     MX12::Status GetStatus(void);
00057 
00058 private:
00059     UnbufferedSerial _mx12;
00060     MX12::ParsingState _pstate;
00061     MX12::SerialState _sstate;
00062     MX12::StateContext _scontext;
00063     MX12::Frame _current_frame;
00064 
00065     unsigned char _answer;
00066     unsigned char _stored_frame[MX12_DATA_MAX_SIZE];
00067     unsigned char _frame_pointer;
00068 
00069     void _ReadCallback();
00070 };
00071 
00072 #endif /* MBED_MX12_H */