Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
SerialConnect.hpp
00001 // -*- coding:utf-8-unix -*- 00002 /*! 00003 @file SerialConnect.hpp 00004 @author Takuma Kawamura <bitpositive@MacBook-Pro-13.local> 00005 @date Wed Jan 23 13:40:32 2019 00006 00007 @brief Nerve-SerialConnect 00008 00009 MbedのUARTポートを使って,uint8_t(unsigned char)型の配列を送受信するためのライブラリ.割り込み処理を使うため効率的.チェックサムやバイト間タイムアウトを搭載しているので安全かつ,完全な状態で通信を行うことができる. 00010 00011 @version 1.0 00012 00013 @see Mbed OS 2のリビジョンは,必ずRev.146以下にすること. 00014 00015 @see このソースコードのコメントにはDoxygen方式を使っています.Doxygenを使ってコンパイルすることで,html形式のAPIドキュメントを生成できます. 00016 00017 @copyright T.Kawamura (C) 2019 <contact@bit-plus.work> 00018 00019 */ 00020 00021 #ifndef NSC_SENDRECV_H 00022 #define NSC_SENDRECV_H 00023 00024 // Includes //////////////////////////////////////////////////////////////////// 00025 #include "mbed.h" // mbed OS 2.0 Rev 146 00026 #include <cstring> 00027 // mbed のサイトからAsyncSerialをインポートすること 00028 #include "AsyncSerial.hpp" 00029 00030 using namespace std; 00031 00032 // Definitions //////////////////////////////////////////////////////////////// 00033 #define NSC_HEADER 0x40 00034 #define NSC_FOOTER 0x0A 00035 #define NSC_TIMEOUT 1000 00036 00037 #ifndef NSC_MAX_PACKET_SIZE 00038 #define NSC_MAX_PACKET_SIZE 128 00039 #endif 00040 00041 // 受信状態 00042 enum loadstate_e{ 00043 STATE_WAIT_HEADER, 00044 STATE_WAIT_LENGTH, 00045 STATE_WAIT_PAYLOAD, 00046 STATE_WAIT_CHECKSUM, 00047 STATE_WAIT_FOOTER 00048 }; 00049 // 受信結果取得用 00050 enum update_result_e{ 00051 NOT_READY, 00052 READY 00053 }; 00054 00055 // Class ////////////////////////////////////////////////////////////////////// 00056 /*! 00057 @class SerialConnect 00058 @brief NSC形式パケットの送受信 00059 */ 00060 class SerialConnect { 00061 private: 00062 00063 // シリアルポート 00064 AsyncSerial *serial_port; 00065 // バイト間タイムアウト用タイマ 00066 Timer *time_out_timer; 00067 // 送信パケットのバッファ 00068 uint8_t send_buffer[NSC_MAX_PACKET_SIZE]; 00069 // ペイロードの大きさ(Byte) 00070 int payload_size; 00071 // 状態遷移用 00072 loadstate_e load_status; 00073 // パケットの受信処理で使用するバッファ 00074 uint8_t recv_buffer[NSC_MAX_PACKET_SIZE]; 00075 // ペイロードの受信完了データの大きさ 00076 uint8_t payload_data_count; 00077 // ペイロードの格納場所 00078 uint8_t recieved_payload[NSC_MAX_PACKET_SIZE]; 00079 00080 00081 public: 00082 /*! 00083 @brief コンストラクタ 00084 片方向通信でTx, Rxのどちらかのピンを使わない場合は,ピン番号を"NC"とすること. 00085 00086 @param txpin パケットを送信するピン(PinNames.hで定義されたもの) 00087 @param rxpin パケットを受信するピン(PinNames.hで定義されたもの) 00088 @param payload_size やりとりするパケットのペイロードの大きさ(Byte) 00089 @param baudrate ボーレート(省略可,デフォルトは115200bps) 00090 @param uart_fifo_buffer_size UARTのリングバッファのサイズ(省略可,デフォルトは256Byte) 00091 */ 00092 SerialConnect(PinName txpin, PinName rxpin, uint32_t payload_size, uint32_t baudrate=115200, uint32_t uart_fifo_buffer_size=256); 00093 00094 /*! 00095 @brief デストラクタ 00096 */ 00097 virtual ~SerialConnect( void ); 00098 00099 /*! 00100 @brief パケットの送信 00101 00102 @param uint8_t* payload_array 送信したい配列のポインタ 00103 */ 00104 virtual void send( const uint8_t *payload_array ); 00105 00106 /*! 00107 @brief パケット受信処理を行う 00108 00109 メインループ内で毎回必ずこのメソッドを呼び、返り値を見てOKならペイロードの格納が完了しています。 00110 00111 @retval update_result_e READY ペイロードの正常な受信および格納が完了 00112 @retval update_result_e NOT_READY ペイロードの受信処理が続行中 00113 */ 00114 virtual update_result_e update( void ); 00115 00116 /*! 00117 @brief ペイロードのGetter 00118 00119 格納済みのペイロードを読み出します。 00120 配列の要素取得と同じように、インデックスを引数として渡します。 00121 00122 注意: 必ずupdateメソッドでペイロードの受信完了を確認し,その後実行してください 00123 00124 @param index 要素のインデックス 00125 00126 @return uint8_t 要素 00127 */ 00128 virtual uint8_t get_payload_by_1byte( uint8_t index ) { return recieved_payload[index]; } 00129 00130 }; 00131 00132 00133 #endif // NSC_SENDRECV_H
Generated on Wed Jul 13 2022 01:06:17 by
1.7.2