明石高専ロボ研 mbedライブラリ
Dependents: MDD_L432KC USB2RS485 pathtracking odometry ... more
Diff: scrp_slave.hpp
- Revision:
- 10:25af94dd1668
- Parent:
- 9:9f43b2ead060
- Child:
- 11:eaf2e3166d20
--- a/scrp_slave.hpp Thu Feb 25 05:37:29 2021 +0000 +++ b/scrp_slave.hpp Thu Feb 25 07:20:15 2021 +0000 @@ -11,7 +11,7 @@ *ScrpSlave(PinName TX1,PinName RX1,PinName REDE1,PinName TX2,PinName RX2,uint32_t addr);//RedePinあり、1ポート+RedePinなし、1ポート *example not usb port *L432KC : TX = PA_9 , RX = PA_10 , REDE = PA_12 , addr = 0x0803e000 - *F446RE : TX = PC_12 , RX = PD_2 , RDDE = PH_1 , addr = 0x0807ffff + *F446RE : TX = PC_12 , RX = PD_2 , RDDE = PH_1 , addr = 0x0807f800 *H743ZI : TX = PD_5 , RX = PD_6 , REDE = PD_7 , addr = 0x081ee000 *<obj>.addCMD(int cmd, bool (*proc)(int rx_data, int& tx_data)) *でcmdで指定したコマンドを受信したときに呼び出される @@ -26,6 +26,13 @@ *シリアルポートに外部からアクセスして通信することもできるようになりました。 *このライブラリでは同時に2個シリアルポートを開いていますが、それぞれport1,port2としてアクセスできます。 *シリアルポートを1つだけ開いているときは、port1とport2,send1とsend2は同じモノ扱いになります。 + *sendのレスポンスはisResponceがtrueの時に、receiveDataの返り値として知ることができます。 + *isWaitingで、今レスポンス待ち状態かどうか知ることができます。 + *レスポンス受信前に他の命令などを受信するとレスポンス待ちはキャンセルされます。 + *両方引数は0か1で、どちらのシリアルポートかを指定します。 + *レスポンスを受信した時に割り込みで関数を作ることができます。 + *void型。引数は(uint8_t id, uint8_t cmd, int16_t res)です。 + *attachResponceで関数を指定してください。 *printfしたいときなどは、 *<obj>.port1.printf("hello\n"); *と書くことできます。 @@ -58,9 +65,11 @@ RawSerial port1; RawSerial port2; void addCMD(uint8_t cmd, bool (*proc)(int rx_data,int& tx_data)); + void attachResponce(void (*func)(uint8_t id, uint8_t cmd, int16_t responce));//レスポンス受信割り込み関数 bool send1(uint8_t id,uint8_t cmd,int16_t tx_data);//返り値 成功:true 失敗:false bool send2(uint8_t id,uint8_t cmd,int16_t tx_data); bool isWaiting(uint8_t port);//send,send2の通信のレスポンス待ち状況確認。 + bool getResponce(uint8_t port);//レスポンスを受信したらtrueになる。 int16_t receiveData(uint8_t port);//0か1か send1のレスポンスは0、send2のレスポンスは1を指定。データがない時は-1を返す。 private: DigitalOut *rede_; @@ -77,6 +86,7 @@ uint8_t tmp_data_[2][5]; uint8_t data_count_[2]; int16_t rx_data_[2]; + void (*responceFunc_)(uint8_t id, uint8_t cmd, int16_t responce); bool (*procs_[256])(int rx_data, int& tx_data); bool sending(int,uint8_t,uint8_t,int16_t); void changeID(uint8_t); @@ -84,8 +94,8 @@ void check(int port); void receive0(); void receive1(); - void data_send0(); - void data_send1(); + void dataSend0(); + void dataSend1(); void prime(int); };