ユースケース変更後に試験を行いましたが,レビュー後に再び変更する可能性があります
Revision 0:393297a738c5, committed 2017-09-03
- Comitter:
- yousei
- Date:
- Sun Sep 03 01:05:38 2017 +0000
- Commit message:
- ?????
Changed in this revision
diff -r 000000000000 -r 393297a738c5 bundle_photo_data_downlink.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bundle_photo_data_downlink.cpp Sun Sep 03 01:05:38 2017 +0000 @@ -0,0 +1,215 @@ +#include "mbed.h" +#include "type_define.h" +#include "bundle_photo_data_downlink.h" +#include "fm_dd.h" +#include "missionDR.h" + +#pragma diag_suppress 870 + +Timer BPDDtimer; + +Fm transmitter; +MissionDR dr; + +BPDD::BPDD()//コンストラクタ +{ + flag_BPDD=0; + permit[0]=0; + permit[1]=0; + permit[2]=0; + permit[3]=0; + camera_id=0; + downlink_num=1;//最低1回は送信するので + downlink_cnt=0; + com_style=0; + save_data_id=1; + readout_block_num=0; + send_cnt=0; + num_repeat=0; + total_cnt=0; + size=1;//デバッグ + block_num=0; + +} + +void BPDD::photo_info_sending(void) +{ + uint8_t photo_info[512]= {0}; + uint8_t first_telemetry[128]= {0}; + + bpdd_debug_printf("photo info readout process\r\n"); + bpdd_debug_printf("save_data_id(in photo info sending func):%d\r\n",save_data_id); + block_num = 1 + save_data_id*321; + bpdd_debug_printf("block num for photo info:%d\r\n",block_num); + //dr.read(photo_info,block_num,1); + bpdd_debug_printf("photo info reading...\r\n"); + + size = photo_info[4+camera_id];//DRマップ参照のこと + size=2;//SDに0しか書かれていなくて困るので、今だけ + + //bpdd_debug_printf("画像サイズ(ブロック):%d\r\n",size); + + first_telemetry[0] = 3;//テレメトリID + first_telemetry[1] = camera_id+1;//カメラ番号(1~4) + first_telemetry[2] = save_data_id+1;//画像保存データID(1~10) + for(int i=3; i<34; i++) { + first_telemetry[i]=photo_info[i-3];//RTC時刻(4byte)画像容量(4byte),姿勢データ(24byte)を保存 + } + bpdd_debug_printf("first telemetly has formed\r\n"); + + /*printf("first telemetry of photo data\r\n"); + for(int i=0;i<128;i++){ + printf("%d,",first_telemetry[i]); + }*/ + + transmitter.baud(com_style); + //transmitter.send(first_telemetry,128); + printf("first telemetly sended\r\n"); + block_num=block_num+1+80*camera_id;//画像データ保存先へ移動 + printf("block_num:%d\r\n",block_num); + num_repeat++; + //printf("photo info processing time:%d\r\n",BPDDtimer.read_ms()); +} + +void BPDD::photo_data_AFSK_sending(void) +{ + bpdd_debug_printf("send_cnt:%d\r\n",send_cnt); + uint8_t photo_data_AFSK[512]= {0}; + uint8_t photo_packet_afsk[128]= {0}; + printf("block_num : %d\r\n",block_num); + if(send_cnt<=4) { + if(send_cnt==0) { + //dr.read(photo_data_AFSK,block_num,1); + bpdd_debug_printf("photo data reading...\r\n"); + } + /*printf("photo data\r\n"); + for(int i=0;i<512;i++){ + printf("%d,",photo_data[i]); + }*/ + for(int i=0; i<128; i++) { + photo_packet_afsk[i]=photo_data_AFSK[i+128*send_cnt]; + } + //transmitter.baud(com_style); + //transmitter.send(photo_packet_afsk,128); + bpdd_debug_printf("photo data sending...\r\n"); + send_cnt++; + //printf("%dブロック目、%dパケット目送信完了\r\n",block_num,send_cnt); + num_repeat++; + //printf("AFSK photo data send processing time:%d\r\n",BPDDtimer.read_ms()); + if(send_cnt>=4) { + printf("%dblock sended\r\n",block_num); + send_cnt=0; + readout_block_num++; + block_num++; + //printf("block number send processing time:%d\r\n",BPDDtimer.read_ms()); + + //bpdd_debug_printf("readout_block_num:%d\r\n",readout_block_num); + //printf("num_repeat:%d\r\n",num_repeat); + } + } +} + +void BPDD::photo_data_GFSK_sending(void) +{ + bpdd_debug_printf("GMSK or rapid communication process\r\n"); + + uint8_t photo_data_GFSK[512]= {0}; + uint8_t photo_packet1[256]= {0}; + uint8_t photo_packet2[256]= {0}; + ///dr.read(photo_data_GFSK,block_num,1); + for(int i = 0; i<256; i++) { + photo_packet1[i] = photo_data_GFSK[i]; + photo_packet2[i] = photo_data_GFSK[i+256]; + } + transmitter.baud(com_style); + transmitter.send(photo_packet1,256); + transmitter.send(photo_packet2,256); + + printf("%d sending complete\r\n",block_num); + num_repeat++; + readout_block_num++; + block_num++; + //printf("GFSK photo data send processing time:%d\r\n",BPDDtimer.read_ms()); +} + + +bool BPDD::bundle_photo_data_downlink(u8* uart_data) +{ + BPDDtimer.reset(); + BPDDtimer.start(); + + //printf("%dループ目\r\n",num_repeat+1); + + if(total_cnt==0) { + uint8_t p=0; + for(int i=0; i<4; i++) { + p=uart_data[6]<<(7-i); + permit[i]=p>>7; + } + + save_data_id = uart_data[3]; + com_style = uart_data[4]<<5; + com_style = com_style>>5; + downlink_num = uart_data[4]>>6; + + printf("%d,%d,%d,%d\r\n",permit[0],permit[1],permit[2],permit[3]);//test + printf("save_data_ID:%d\r\n",save_data_id);//test + printf("com_style%d\r\n",com_style);//test + printf("downlink_num:%d\r\n",downlink_num);//test + } + + total_cnt++; + + for(int i=0; i<4; i++) { + if(permit[3-i]==1) { + camera_id=3-i; + } + } + bpdd_debug_printf("camera_id is %d\r\n",camera_id); + //printf("カメラID:%d\r\n",camera_id);//test + bpdd_debug_printf("num_repeat is %d\r\n",num_repeat); + if(num_repeat == 0) { + bpdd_debug_printf("photo info sending process\r\n"); + photo_info_sending(); + } else { + bpdd_debug_printf("photo data sending process\r\n"); + printf("downlink_cnt :%d,downlink_num :%d\r\n",downlink_cnt,downlink_num); + printf("com_style is %d\r\n",com_style); + if(downlink_cnt<downlink_num) { //分割データ送信回数回データを送る + if(com_style == 0) { + printf("AFSK sending process\r\n"); + photo_data_AFSK_sending(); + } else { + photo_data_GFSK_sending(); + } + }else{ + printf("downlink count is not inputed\r\n"); + return 1;//ダウンリンクする回数が指定されていなかったとき用の例外処理 + } + } + + if(readout_block_num == size) { //読み出したブロックの数と画像のブロックサイズが一致している + downlink_cnt++; + readout_block_num=0; + //if(num_repeat-1==downlink_num*4*readout_block_num||downlink_num*readout_block_num == num_repeat-1) { //画像を実際送信した回数と指定した送信回数が一致している(cnt実装前)} + if(downlink_cnt>=downlink_num) { + permit[camera_id]=0; + downlink_cnt=0; + num_repeat=0; + if((permit[0]|permit[1]|permit[2]|permit[3])==0) { + printf("permit=%d\r\n",permit[0]|permit[1]|permit[2]|permit[3]); + total_cnt=0; + printf("mission complete!\r\n"); + flag_BPDD = 1; + } else { + flag_BPDD = 0; + } + } else { + flag_BPDD = 0; + } + } else { + flag_BPDD = 0; + } + + return flag_BPDD; +} \ No newline at end of file
diff -r 000000000000 -r 393297a738c5 bundle_photo_data_downlink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bundle_photo_data_downlink.h Sun Sep 03 01:05:38 2017 +0000 @@ -0,0 +1,47 @@ +#include "type_define.h" +#include "mbed.h" + +#define DEBUG +#ifdef DEBUG +#define bpdd_debug_printf(...) printf(__VA_ARGS__) +#else +#define bpdd_debug_printf(...) (void)0 +#endif + +class BPDD +{ + public: + bool bundle_photo_data_downlink(u8* uart_data); + void photo_info_sending(void); + void photo_data_AFSK_sending(void); + void photo_data_GFSK_sending(void); + + BPDD(); + + private: + bool flag_BPDD; + //フラグ,この処理の中で1度送信を行っているか判断するためのフラグ,block数,SDが異常かのフラグ + bool permit[4]; + //カメラ許可/不許可 + uint8_t camera_id; + //ダウンリンクするカメラ番号(0~3) + uint8_t downlink_num; + //コマンドで指定された送信回数 + uint8_t downlink_cnt; + //実際の送信回数 + uint8_t com_style; + //通信方式 + uint8_t save_data_id; + //画像保存データID(0~9) + int readout_block_num; + //読み出しが完了したブロック数 + int send_cnt; + //パケット + int num_repeat; + //画像データを何回送信したか + int total_cnt; + //1コマンドで行う全てのループ回数 + uint8_t size; + //目的の画像の容量 + int block_num; +}; \ No newline at end of file