/* * test activation */ void test_activation_ack_cmd_callback(ProHeader *header) { /* #define ACTIVATION_SUCCESS 0x0000 #define PARAM_ERROR 0x0001 #define DATA_ENC_ERROR 0x0002 #define NEW_DEVICE_TRY_AGAIN 0x0003 #define DJI_APP_TIMEOUT 0x0004 #define DJI_APP_NO_INTERNET 0x0005 #define SERVER_REFUSED 0x0006 #define LEVEL_ERROR 0x0007 */ unsigned short ack_data; printf("Sdk_ack_cmd0_callback,sequence_number=%d,session_id=%d,data_len=%d\n", header->sequence_number, header->session_id, header->length - EXC_DATA_SIZE); memcpy((unsigned char *)&ack_data,(unsigned char *)&header->magic, (header->length - EXC_DATA_SIZE)); if( is_sys_error(ack_data)) { printf("[DEBUG] SDK_SYS_ERROR!!! \n"); } else { char result[][50]={{"ACTIVATION_SUCCESS"},{"PARAM_ERROR"},{"DATA_ENC_ERROR"},{"NEW_DEVICE_TRY_AGAIN"},{"DJI_APP_TIMEOUT"},{" DJI_APP_NO_INTERNET"},{"SERVER_REFUSED"},{"LEVEL_ERROR"}}; printf("[ACTIVATION] Activation result: %s \n", *(result+ack_data)); activation_status_s = (unsigned char)ack_data; if(ack_data == 0) { Pro_Config_Comm_Encrypt_Key(key); printf("[ACTIVATION] set key %s\n",key); } else if(ack_data == 3) { /* new device, try again when activation is failed */ alarm(2); } } }
void cmd_callback_fun(unsigned short *ack) { /* * #define REQ_TIME_OUT 0x0000 #define REQ_REFUSE 0x0001 #define CMD_RECIEVE 0x0002 #define STATUS_CMD_EXECUTING 0x0003 #define STATUS_CMD_EXE_FAIL 0x0004 #define STATUS_CMD_EXE_SUCCESS 0x0005 */ unsigned short ack_data = *ack; if( is_sys_error(ack_data)) { printf("[DEBUG] SDK_SYS_ERROR!!! \n"); } else { printf("[DEBUG] recv_ack %#x \n", ack_data); char result[6][50]={{"REQ_TIME_OUT"},{"REQ_REFUSE"},{"CMD_RECIEVE"},{"STATUS_CMD_EXECUTING"},{"STATUS_CMD_EXE_FAIL"},{"STATUS_CMD_EXE_SUCCESS"}}; printf("random_test Cmd result: %s \n", *(result+ack_data)); } cmd_send_flag = 1; }
/* * random test cmd */ void random_test_ack_cmd_callback(ProHeader *header) { /* * #define REQ_TIME_OUT 0x0000 #define REQ_REFUSE 0x0001 #define CMD_RECIEVE 0x0002 #define STATUS_CMD_EXECUTING 0x0003 #define STATUS_CMD_EXE_FAIL 0x0004 #define STATUS_CMD_EXE_SUCCESS 0x0005 */ unsigned short ack_data; printf("Sdk_ack_cmd0_callback,sequence_number=%d,session_id=%d,data_len=%d\n", header->sequence_number, header->session_id, header->length - EXC_DATA_SIZE); memcpy((unsigned char *)&ack_data,(unsigned char *)&header->magic, (header->length - EXC_DATA_SIZE)); if( is_sys_error(ack_data)) { printf("[DEBUG] SDK_SYS_ERROR!!! \n"); } else { char result[6][50]={{"REQ_TIME_OUT"},{"REQ_REFUSE"},{"CMD_RECIEVE"},{"STATUS_CMD_EXECUTING"},{"STATUS_CMD_EXE_FAIL"},{"STATUS_CMD_EXE_SUCCESS"}}; printf("random_test Cmd result: %s \n", *(result+ack_data)); } }
static void * CmdRecvThread(void * arg) { arg = arg; //For eliminating the warning messages. while(1) { if(cmd_unit.is_send_cmd) { printf("[DEBUG] in send\n"); cmd_unit.is_send_cmd = 0; App_Send_Data(2,1,MY_CTRL_CMD_SET, API_CMD_REQUEST,(uint8_t*)&cmd_unit.cmd,sizeof(cmd_unit.cmd),sdk_ack_cmd_callback, 10, 0); printf("[DEBUG] send req cmd ok\n"); sleep(2); if( (cmd_unit.ack_result&0xFF00) == 0xFF00 ) { cmd_unit.ack_callback(&cmd_unit.ack_result); continue; } else if(cmd_unit.ack_result == REQ_TIME_OUT) { printf("[DEBUG] recv ack cmd time out \n"); cmd_unit.ack_callback(&cmd_unit.ack_result); continue; } else if(cmd_unit.ack_result == REQ_REFUSE) { cmd_unit.ack_callback(&cmd_unit.ack_result); continue; } else if (cmd_unit.ack_result == CMD_RECIEVE) { printf("[DEBUG] CMD_RECIEVE \n"); uint8_t req_status = cmd_unit.cmd.cmd_sequence; // can be anything sleep(7); App_Send_Data(2, 1,MY_CTRL_CMD_SET, API_CMD_STATUS_REQUEST,(uint8_t*)&req_status,sizeof(uint8_t),sdk_ack_cmd_callback, 10, 0); printf("[DEBUG] send req status ok\n"); sleep(1); printf("[DEBUG] recv ack1 status ok\n"); if( is_sys_error(cmd_unit.ack_result)) { printf("SDK_SYS_ERROR!!! \n"); continue; } else { cmd_unit.ack_callback(&cmd_unit.ack_result); } // for debug if(cmd_unit.ack_result != STATUS_CMD_EXE_SUCCESS) { printf("[DEBUG] WARNING CMD UN-SECCUSS\n"); } } } else { usleep(100000); } } return NULL; }