AKM Development Platform. This is the D7.014 version.
Dependencies: AK09970 AK099XX AK7401 AK7451 AK8963X AK9750 AK9752 AkmSensor BLE_API I2CNano MCP342x SerialNano SpiNano TCA9554A mbed nRF51822
Fork of AKDP by
Message.h@0:c240899240e7, 2016-04-28 (annotated)
- Committer:
- masahikofukasawa
- Date:
- Thu Apr 28 21:24:22 2016 +0000
- Revision:
- 0:c240899240e7
- Child:
- 1:0914af311974
First commit. ; ; Tested sensors:; EM1781, EM1771, AK8776, EQ-432L, AK7451, AK8963, AK09911, AK09912, AK09915, AK09916
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
masahikofukasawa | 0:c240899240e7 | 1 | #ifndef __MESSAGE_H__ |
masahikofukasawa | 0:c240899240e7 | 2 | #define __MESSAGE_H__ |
masahikofukasawa | 0:c240899240e7 | 3 | |
masahikofukasawa | 0:c240899240e7 | 4 | /** |
masahikofukasawa | 0:c240899240e7 | 5 | * Message is sent from the host. A message consists of a command and arguments. |
masahikofukasawa | 0:c240899240e7 | 6 | */ |
masahikofukasawa | 0:c240899240e7 | 7 | class Message { |
masahikofukasawa | 0:c240899240e7 | 8 | public: |
masahikofukasawa | 0:c240899240e7 | 9 | typedef enum { |
masahikofukasawa | 0:c240899240e7 | 10 | CMD_GET_FW_VERSION = 0x01, /**< Gets FW version. */ |
masahikofukasawa | 0:c240899240e7 | 11 | CMD_GET_MAG_PART = 0x02, /**< Gets magnetic sensor ID */ |
masahikofukasawa | 0:c240899240e7 | 12 | CMD_GET_THRESHOLD = 0x80, /**< Gets threshold of AK0997x */ |
masahikofukasawa | 0:c240899240e7 | 13 | CMD_SET_THRESHOLD_FROM_HOST = 0x81, /**< Sets threshold of AK0997x from host. */ |
masahikofukasawa | 0:c240899240e7 | 14 | CMD_SET_MEASUREMENT_FREQUENCY = 0x82, /**< Sets measurement frequency. */ |
masahikofukasawa | 0:c240899240e7 | 15 | CMD_SEND_SWITCH_MODE_MEASUREMENT_DATA = 0x83, /**< Sends measurement data on/off */ |
masahikofukasawa | 0:c240899240e7 | 16 | CMD_SWITCH_MODE_MEASUREMENT_DATA = 0x84, /**< Measurement data in switch mode */ |
masahikofukasawa | 0:c240899240e7 | 17 | CMD_GET_POLARITY = 0x85, /**< Gets polarity of AK0997x */ |
masahikofukasawa | 0:c240899240e7 | 18 | CMD_SET_POLARITY = 0x86, /**< Sets polarity of AK0997x */ |
masahikofukasawa | 0:c240899240e7 | 19 | |
masahikofukasawa | 0:c240899240e7 | 20 | CMD_IR_GET_THRESHOLD = 0x90, /**< Gets threshold of AK9750. */ |
masahikofukasawa | 0:c240899240e7 | 21 | CMD_IR_SET_THRESHOLD = 0x91, /**< Sets threshold of AK9750. */ |
masahikofukasawa | 0:c240899240e7 | 22 | CMD_IR_GET_HYSTERESIS = 0x92, /**< Gets hysteresis setting of AK9750 */ |
masahikofukasawa | 0:c240899240e7 | 23 | CMD_IR_SET_HYSTERESIS = 0x93, /**< Sets hysteresis to AK9750 */ |
masahikofukasawa | 0:c240899240e7 | 24 | |
masahikofukasawa | 0:c240899240e7 | 25 | CMD_DOOR_STATE_CHANGED = 0xA0, /**< Door state changed. */ |
masahikofukasawa | 0:c240899240e7 | 26 | CMD_UPDATE_MAG_VECTOR = 0xA1, /**< Update magnetic vector state. */ |
masahikofukasawa | 0:c240899240e7 | 27 | CMD_THRESHOLD_UPDATED = 0xA2, /**< Threshold updated. */ |
masahikofukasawa | 0:c240899240e7 | 28 | CMD_GET_CURRENT_DOOR_STATE = 0xA3, /**< Gets the current door state. */ |
masahikofukasawa | 0:c240899240e7 | 29 | CMD_IR_STATE_CHANGED = 0xA5, /**< IR state changed. */ |
masahikofukasawa | 0:c240899240e7 | 30 | CMD_UPDATE_IR_STATE = 0xA6, /**< Update IR state 1 or 2 */ |
masahikofukasawa | 0:c240899240e7 | 31 | CMD_GET_CURRENT_HUMAN_PRESENCE_STATE = 0xA7, /**< Gets the current human presence state. */ |
masahikofukasawa | 0:c240899240e7 | 32 | CMD_IR_THRESHOLD_UPDATED = 0xA8, /**< IR threshold updated. */ |
masahikofukasawa | 0:c240899240e7 | 33 | |
masahikofukasawa | 0:c240899240e7 | 34 | // CMD_MOTION_DETECTED = 0xB1, /**< Motion detected. */ |
masahikofukasawa | 0:c240899240e7 | 35 | // CMD_GET_MOTION_THRESHOLD = 0xB2, /**< Get motion threshold */ |
masahikofukasawa | 0:c240899240e7 | 36 | // CMD_SET_MOTION_THRESHOLD = 0xB3, /**< Set motion threshold */ |
masahikofukasawa | 0:c240899240e7 | 37 | CMD_UNKNOWN = 0x00, /**< Unknown command. */ |
masahikofukasawa | 0:c240899240e7 | 38 | |
masahikofukasawa | 0:c240899240e7 | 39 | CMD_SET_SERIAL_TARGET = 0x0A, /**< Set serial output target */ |
masahikofukasawa | 0:c240899240e7 | 40 | CMD_REG_WRITE = 0x11, /**< Register write 1 byte */ |
masahikofukasawa | 0:c240899240e7 | 41 | CMD_REG_WRITEN = 0x12, /**< Register write N bytes */ |
masahikofukasawa | 0:c240899240e7 | 42 | CMD_REG_READ = 0x13, /**< Register read 1 byte */ |
masahikofukasawa | 0:c240899240e7 | 43 | CMD_REG_READN = 0x14, /**< Register read N bytes */ |
masahikofukasawa | 0:c240899240e7 | 44 | CMD_GET_ID = 0xB0, /**< Get connected sensor ID */ |
masahikofukasawa | 0:c240899240e7 | 45 | CMD_STOP_MEASUREMENT = 0xBA, /**< Stop Measurement */ |
masahikofukasawa | 0:c240899240e7 | 46 | CMD_START_MEASUREMENT = 0xBB, /**< Start Measurement */ |
masahikofukasawa | 0:c240899240e7 | 47 | CMD_ANGLE_ZERO_RESET = 0xBC, /**< Angle sensor zero reset */ |
masahikofukasawa | 0:c240899240e7 | 48 | } Command; |
masahikofukasawa | 0:c240899240e7 | 49 | |
masahikofukasawa | 0:c240899240e7 | 50 | typedef enum { |
masahikofukasawa | 0:c240899240e7 | 51 | ARG_MAG_FREQ_1HZ = 0x00, /**< Frequency setting 1 Hz */ |
masahikofukasawa | 0:c240899240e7 | 52 | ARG_MAG_FREQ_10HZ = 0x01, /**< Frequency setting 10 Hz */ |
masahikofukasawa | 0:c240899240e7 | 53 | ARG_MAG_FREQ_20HZ = 0x02, /**< Frequency setting 20 Hz */ |
masahikofukasawa | 0:c240899240e7 | 54 | ARG_MAG_FREQ_50HZ = 0x03, /**< Frequency setting 50 Hz */ |
masahikofukasawa | 0:c240899240e7 | 55 | ARG_MAG_FREQ_100HZ = 0x04, /**< Frequency setting 100 Hz */ |
masahikofukasawa | 0:c240899240e7 | 56 | ARG_MAG_FREQ_POWER_DOWN = 0x05, /**< Frequency setting 0 Hz (Power-down) */ |
masahikofukasawa | 0:c240899240e7 | 57 | ARG_MAG_FREQ_0P5HZ = 0x06, /**< Frequency setting 0.5 Hz */ |
masahikofukasawa | 0:c240899240e7 | 58 | ARG_MAG_FREQ_0P25HZ = 0x07, /**< Frequency setting 0.25 Hz */ |
masahikofukasawa | 0:c240899240e7 | 59 | } MagFrequency; |
masahikofukasawa | 0:c240899240e7 | 60 | |
masahikofukasawa | 0:c240899240e7 | 61 | typedef enum{ |
masahikofukasawa | 0:c240899240e7 | 62 | SW_OFF = 0x00, |
masahikofukasawa | 0:c240899240e7 | 63 | SW_ON = 0x01, |
masahikofukasawa | 0:c240899240e7 | 64 | } SwitchState; |
masahikofukasawa | 0:c240899240e7 | 65 | |
masahikofukasawa | 0:c240899240e7 | 66 | typedef enum { |
masahikofukasawa | 0:c240899240e7 | 67 | SUCCESS = 0, |
masahikofukasawa | 0:c240899240e7 | 68 | END_OF_STR, |
masahikofukasawa | 0:c240899240e7 | 69 | ERROR_ILLEGAL_CHAR, |
masahikofukasawa | 0:c240899240e7 | 70 | ERROR_INDEX_OUT_OF_BOUNDS, |
masahikofukasawa | 0:c240899240e7 | 71 | } Status; |
masahikofukasawa | 0:c240899240e7 | 72 | |
masahikofukasawa | 0:c240899240e7 | 73 | /** |
masahikofukasawa | 0:c240899240e7 | 74 | * Constructor. |
masahikofukasawa | 0:c240899240e7 | 75 | */ |
masahikofukasawa | 0:c240899240e7 | 76 | Message() : cmd(CMD_UNKNOWN), num_arg(0){ |
masahikofukasawa | 0:c240899240e7 | 77 | }; |
masahikofukasawa | 0:c240899240e7 | 78 | |
masahikofukasawa | 0:c240899240e7 | 79 | /** |
masahikofukasawa | 0:c240899240e7 | 80 | * Convert an ascii into one byte value. |
masahikofukasawa | 0:c240899240e7 | 81 | * @param out Pointer to the buffer stores result value |
masahikofukasawa | 0:c240899240e7 | 82 | * @param in Pointer to a hex format ascii value. The value must be expressed by two-byte ascii chars. For example, the value 5 must be expressed as "05", not "5". |
masahikofukasawa | 0:c240899240e7 | 83 | */ |
masahikofukasawa | 0:c240899240e7 | 84 | static Status asciiToChar(char *out, const char *in); |
masahikofukasawa | 0:c240899240e7 | 85 | |
masahikofukasawa | 0:c240899240e7 | 86 | /** |
masahikofukasawa | 0:c240899240e7 | 87 | * Convert a byte value into a hex format ascii value. The result value have two-byte length. If the input value is 5, the result string is "05", not "5". |
masahikofukasawa | 0:c240899240e7 | 88 | * @param out Pointer to the buffer stores result ascii. The buffer must have two byte length. |
masahikofukasawa | 0:c240899240e7 | 89 | * @param in Pointer to a byte value to be converted. |
masahikofukasawa | 0:c240899240e7 | 90 | */ |
masahikofukasawa | 0:c240899240e7 | 91 | static void charToAscii(char *out, const char *in); |
masahikofukasawa | 0:c240899240e7 | 92 | |
masahikofukasawa | 0:c240899240e7 | 93 | /** |
masahikofukasawa | 0:c240899240e7 | 94 | * Parses given string and construct a message object. |
masahikofukasawa | 0:c240899240e7 | 95 | * @param msg Pointer to an message object. |
masahikofukasawa | 0:c240899240e7 | 96 | * @param str Pointer to an string to be parsed. |
masahikofukasawa | 0:c240899240e7 | 97 | * @return Returns SUCCESS if parsed successfully, otherwise returns other code. |
masahikofukasawa | 0:c240899240e7 | 98 | */ |
masahikofukasawa | 0:c240899240e7 | 99 | static Status parse(Message *msg, const char *str); |
masahikofukasawa | 0:c240899240e7 | 100 | |
masahikofukasawa | 0:c240899240e7 | 101 | /** |
masahikofukasawa | 0:c240899240e7 | 102 | * Sets command of this message. |
masahikofukasawa | 0:c240899240e7 | 103 | * @param cmd Command to be set. |
masahikofukasawa | 0:c240899240e7 | 104 | */ |
masahikofukasawa | 0:c240899240e7 | 105 | void setCommand(Command cmd); |
masahikofukasawa | 0:c240899240e7 | 106 | |
masahikofukasawa | 0:c240899240e7 | 107 | /** |
masahikofukasawa | 0:c240899240e7 | 108 | * Sets argument(s) to this message. |
masahikofukasawa | 0:c240899240e7 | 109 | * @param arg pointer to the argument(s) to be stored. |
masahikofukasawa | 0:c240899240e7 | 110 | * @param len length of the argument in bytes |
masahikofukasawa | 0:c240899240e7 | 111 | */ |
masahikofukasawa | 0:c240899240e7 | 112 | void setArguments(const char *arg, int len); |
masahikofukasawa | 0:c240899240e7 | 113 | |
masahikofukasawa | 0:c240899240e7 | 114 | /** |
masahikofukasawa | 0:c240899240e7 | 115 | * Sets argument at the specified index. |
masahikofukasawa | 0:c240899240e7 | 116 | * @param arg value of the argument |
masahikofukasawa | 0:c240899240e7 | 117 | */ |
masahikofukasawa | 0:c240899240e7 | 118 | void setArgument(int index, char arg); |
masahikofukasawa | 0:c240899240e7 | 119 | |
masahikofukasawa | 0:c240899240e7 | 120 | /** |
masahikofukasawa | 0:c240899240e7 | 121 | * Gets the command contained in this message. |
masahikofukasawa | 0:c240899240e7 | 122 | * @return The command contained in this message. |
masahikofukasawa | 0:c240899240e7 | 123 | */ |
masahikofukasawa | 0:c240899240e7 | 124 | Command getCommand() const; |
masahikofukasawa | 0:c240899240e7 | 125 | |
masahikofukasawa | 0:c240899240e7 | 126 | /** |
masahikofukasawa | 0:c240899240e7 | 127 | * Gets n th argument of the message. |
masahikofukasawa | 0:c240899240e7 | 128 | * @param index argument to be gotten. Index must be less than the number obtained from getArgNum(). |
masahikofukasawa | 0:c240899240e7 | 129 | * @return Returns value of the argument specified by index. If the value larger than argsize is specified, returns 0. |
masahikofukasawa | 0:c240899240e7 | 130 | */ |
masahikofukasawa | 0:c240899240e7 | 131 | char getArgument(int index) const; |
masahikofukasawa | 0:c240899240e7 | 132 | |
masahikofukasawa | 0:c240899240e7 | 133 | /** |
masahikofukasawa | 0:c240899240e7 | 134 | * Gets number of arguments. |
masahikofukasawa | 0:c240899240e7 | 135 | * @return Returns number of arguments included in this message. |
masahikofukasawa | 0:c240899240e7 | 136 | */ |
masahikofukasawa | 0:c240899240e7 | 137 | int getArgNum() const; |
masahikofukasawa | 0:c240899240e7 | 138 | |
masahikofukasawa | 0:c240899240e7 | 139 | /** |
masahikofukasawa | 0:c240899240e7 | 140 | * Gets maximum message length in byte unit. |
masahikofukasawa | 0:c240899240e7 | 141 | * @return maximum length of message in byte. |
masahikofukasawa | 0:c240899240e7 | 142 | */ |
masahikofukasawa | 0:c240899240e7 | 143 | static int getMaxMessageLength(); |
masahikofukasawa | 0:c240899240e7 | 144 | |
masahikofukasawa | 0:c240899240e7 | 145 | /** |
masahikofukasawa | 0:c240899240e7 | 146 | * Gets arguments. |
masahikofukasawa | 0:c240899240e7 | 147 | * @param buf |
masahikofukasawa | 0:c240899240e7 | 148 | * @param maxNum maximum number of arguments to be get |
masahikofukasawa | 0:c240899240e7 | 149 | */ |
masahikofukasawa | 0:c240899240e7 | 150 | void getArguments(char *buf, int maxNum) const; |
masahikofukasawa | 0:c240899240e7 | 151 | |
masahikofukasawa | 0:c240899240e7 | 152 | |
masahikofukasawa | 0:c240899240e7 | 153 | private: |
masahikofukasawa | 0:c240899240e7 | 154 | const static int NUM_MAX_ARG = 16; /**< Maximum number of arguments in message. */ |
masahikofukasawa | 0:c240899240e7 | 155 | const static int MAX_LEN = 1 + 2 + 2*NUM_MAX_ARG + 1 + 1; /**< Maximum length of message in byte unit. $ + command(2bytes) + data + \r + \n */ |
masahikofukasawa | 0:c240899240e7 | 156 | |
masahikofukasawa | 0:c240899240e7 | 157 | Command cmd; /**< Holds command. */ |
masahikofukasawa | 0:c240899240e7 | 158 | char arg[NUM_MAX_ARG]; /**< Holds arguments. */ |
masahikofukasawa | 0:c240899240e7 | 159 | int num_arg; /**< Holds number of arguments. */ |
masahikofukasawa | 0:c240899240e7 | 160 | }; |
masahikofukasawa | 0:c240899240e7 | 161 | |
masahikofukasawa | 0:c240899240e7 | 162 | #endif // __MESSAGE_H__ |