void interpret_command(UART_HandleTypeDef *UartHandle){ //if return is sent, create a new line: uint8_t result[RESULTLENGTH] = {0}; //printf("%s\n\r",(UartHandle->pRxBuffPtr)); //check the incoming character: if((*UartHandle->pRxBuffPtr) == 13 || (*UartHandle->pRxBuffPtr) == 0x0A){ //newline: return: //strcat((char *) result, "\n\r"); //interpret message interpret_message(command,incoming_length,result); //add > - to result //strcat((char*)result,"\n> "); //reset command reset_message(command, &incoming_length, COMMANDLENGTH); //}else if((*UartHandle->pRxBuffPtr) == 127){ //backspace: /* if(incoming_length > 0){ result[0] = (*UartHandle->pRxBuffPtr); result[1] = '\0'; command[--incoming_length] = '\0'; } */ //send if there is something to send via UART if(strlen((const char*)result) > 0){ txFunction(UartHandle,result, strlen((const char*)result)); } }else if(strlen((char*)command) >= COMMANDLENGTH-1){ reset_message(command,&incoming_length,COMMANDLENGTH-1); strcat((char*)result, "message too long...\n\r"); show_help(result); //add > - to result strcat((char*)result,"\n> "); }else{ //legal char: result[0] = (*UartHandle->pRxBuffPtr); result[1] = '\0'; command[incoming_length++] = (*UartHandle->pRxBuffPtr); } //enable RX again: irqfunc(&huart3); }
/*############################ print_button() ###########################*/ void print_button(Widget w, XtPointer client_data, XtPointer call_data) { reset_message(statusbox_w); print_data(w, client_data, call_data); return; }
/* 功能: 处理硬盘相关请求的任务进程。初始化后,永久运行接收有关硬盘请求的信息 参数: (无) 返回值: (无) */ void task_hd(){ MESSAGE message; #ifdef DEBUG_HD printl("in task_hd\n"); #endif //初始化硬盘 init_hd(); while(1){ reset_message(&message); send_receive(RECEIVE,ANY,&message); int src=message.source_pid; switch(message.type){ case INFO_FS_OPEN: hd_open(&message); break; case INFO_FS_CLOSE: hd_close(&message); break; case INFO_FS_READ: case INFO_FS_WRITE: hd_rdwt(&message); break; case INFO_FS_IOCTL: hd_ioctl(&message); break; case INFO_FS_DEVICE: hd_device_info(&message); break; default: //panic("unkonw message type(%d) in task_hd",src); break; } #ifdef DEBUG_HD printl("in task_hd\n"); #endif /* message.source_pid=process2pid(p_process_ready); */ send_receive(SEND,src,&message); } }