/* modify shell prompt */ void tinysh_set_prompt(char *str) { int i; for(i=0;str[i] && i<PROMPT_SIZE;i++) prompt[i]=str[i]; prompt[i]=0; /* force prompt display by generating empty command */ tinysh_char_in('\r'); }
void vTinyshTask(void * pvParameters) { int again = 1; unsigned char c; tinysh_set_prompt(":>"); tinysh_add_command(&myfoocmd); tinysh_add_command(&ctxcmd); tinysh_add_command(&item1); tinysh_add_command(&item2); { tinysh_cmd_t quitcmd={0, "quit", "exit shell", 0, reset_to_0, (void *) &again,0,0}; tinysh_add_command(&quitcmd); } while(again) { c=UART0_Getchar(); tinysh_char_in((unsigned char) c); } printf("\n\rTinysh exiting\n\r"); while(1); }
/* try to complete current command line */ static int complete_command_line(tinysh_cmd_t *cmd, uchar *_str) { uchar *str=_str; while(1) { int ret; int common_len=BUFFER_SIZE; int _str_len; int i; uchar *__str=str; tinysh_cmd_t *_cmd=cmd; ret=parse_command(&cmd,&str); for(_str_len=0;__str[_str_len]&&__str[_str_len]!=' ';_str_len++); if(ret==MATCH && *str) { cmd=cmd->child; } else if(ret==AMBIG || ret==MATCH || ret==NULLMATCH) { tinysh_cmd_t *cm; tinysh_cmd_t *matched_cmd=0; int nb_match=0; for(cm=cmd;cm;cm=cm->next) { int r=strstart(cm->name,__str); if(r==FULLMATCH) { for(i=_str_len;cmd->name[i];i++) tinysh_char_in(cmd->name[i]); if(*(str-1)!=' ') tinysh_char_in(' '); if(!cmd->child) { if(cmd->usage) { puts(cmd->usage); putchar('\n'); return 1; } else return 0; } else { cmd=cmd->child; break; } } else if(r==PARTMATCH) { nb_match++; if(!matched_cmd) { matched_cmd=cm; common_len=strlen(cm->name); } else { for(i=_str_len;cm->name[i] && i<common_len && cm->name[i]==matched_cmd->name[i];i++); if(i<common_len) common_len=i; } } } if(cm) continue; if(matched_cmd) { if(_str_len==common_len) { putchar('\n'); for(cm=cmd;cm;cm=cm->next) { int r=strstart(cm->name,__str); if(r==FULLMATCH || r==PARTMATCH) { puts(cm->name); putchar('\n'); } } return 1; } else { for(i=_str_len;i<common_len;i++) tinysh_char_in(matched_cmd->name[i]); if(nb_match==1) tinysh_char_in(' '); } } return 0; } else /* UNMATCH */ { return 0; } } }
portTASK_FUNCTION(shell, pvParameters ) { int c; xTaskHandle xHandle; printf("\n%s v%s\r\n", NAMA_BOARD, VERSI_KOMON); printf("Daun Biru Engineering, Des 2008\r\n"); printf("=========================================\r\n"); printf("ARM-GCC %s : %s : %s\r\n", __VERSION__, __DATE__, __TIME__); printf("CPU = LPC 2387, %d MHz,", configCPU_CLOCK_HZ/1000000); printf(" FreeRTOS 5.1.1\r\n"); if (configUSE_PREEMPTION == 0) printf("NON Preemptive kernel digunakan !\r\n"); else printf("Preemptive kernel digunakan !\r\n"); #ifdef USB_TEST Host_Init(); /* Initialize the lpc2468 host controller */ //c = Host_EnumDev(); /* Enumerate the device connected */ // if (c == 0) printf("Ketemu !\r\n"); #if 1 if (OHCIInit() == 0) { printf("------------ Init error \r\n"); } //install_usb_interrupt(); #endif #endif /* * add command */ //tinysh_add_command(&myfoocmd); tinysh_add_command(&printenv_cmd); tinysh_add_command(&setenv_cmd); // tinysh_add_command(&save_env_cmd); tinysh_add_command(&reset_cmd); tinysh_add_command(&cek_stack_cmd); tinysh_add_command(&uptime_cmd); tinysh_add_command(&version_cmd); #ifdef BOARD_KOMON_KONTER tinysh_add_command(&cek_rpm_cmd); tinysh_add_command(&set_kanal_cmd); #endif //#ifdef BOARD_TAMPILAN #ifdef CARI_SUMBER tinysh_add_command(&cek_sumber_cmd); tinysh_add_command(&set_sumber_cmd); //tinysh_add_command(&cek_mesin_cmd); //tinysh_add_command(&set_mesin_cmd); //tinysh_add_command(&cek_titik_cmd); //tinysh_add_command(&set_titik_cmd); tinysh_add_command(&save_sumber_cmd); //tinysh_add_command(&save_mesin_cmd); //tinysh_add_command(&save_titik_cmd); #endif #ifdef BOARD_KOMON_A_RTD tinysh_add_command(&cek_adc_cmd); tinysh_add_command(&set_kanal_cmd); #endif #ifdef BOARD_KOMON_420_SAJA #ifdef PAKAI_ADC tinysh_add_command(&cek_adc_cmd); tinysh_add_command(&lihat_data_cmd); #endif tinysh_add_command(&set_kanal_cmd); #endif #ifdef BOARD_KOMON_420_SABANG #ifdef PAKAI_ADC tinysh_add_command(&cek_adc_cmd); //tinysh_add_command(&lihat_data_cmd); tinysh_add_command(&set_kanal_cmd); #endif #endif #ifdef BOARD_KOMON_B_THERMO tinysh_add_command(&cek_adc_cmd); tinysh_add_command(&set_kanal_cmd); #endif #ifdef PAKE_TELNETD tinysh_add_command(&matikan_telnet_cmd); #endif #ifdef PAKAI_PM // tinysh_add_command(&cek_pm_cmd); // tinysh_add_command(&set_pm_cmd); // tinysh_add_command(&cek_konfig_pmnya_cmd); #endif #ifdef PAKAI_GSM_FTP tinysh_add_command(&set_modem_ftp_cmd); tinysh_add_command(&cek_modem_cmd); tinysh_add_command(&set_modem_gsm_cmd); tinysh_add_command(&gsm_ftp_cmd); tinysh_add_command(&cek_ftp_cmd); #endif #ifdef PAKAI_SMS tinysh_add_command(&cek_pulsa_cmd); tinysh_add_command(&kirim_sms_cmd); tinysh_add_command(&hapus_sms_cmd); tinysh_add_command(&baca_sms_cmd); tinysh_add_command(&baca_sms_semua_cmd); tinysh_add_command(&sms_monita_cmd); #endif #ifdef PAKAI_CRON tinysh_add_command(&set_cron_cmd); tinysh_add_command(&cek_cron_cmd); #endif //#ifdef CARI_SUMBERNYA #ifdef BOARD_TAMPILAN tinysh_add_command(&cek_group_cmd); tinysh_add_command(&set_group_cmd); //tinysh_add_command(&cek_sumber_cmd); //tinysh_add_command(&set_sumber_cmd); // data //tinysh_add_command(&set_data_cmd); //tinysh_add_command(&cek_data_cmd); //printf("board_tampilan\r\n"); #endif vTaskDelay(100); #ifdef BANYAK_SUMBER tinysh_add_command(&cek_sumber_cmd); tinysh_add_command(&set_sumber_cmd); tinysh_add_command(&set_data_cmd); tinysh_add_command(&cek_data_cmd); //printf("banyak sumber\r\n"); #endif vTaskDelay(100); #if (VERSI_KONFIGx == 2) tinysh_add_command(&cek_group_cmd); tinysh_add_command(&set_group_cmd); tinysh_add_command(&cek_sumber_cmd); tinysh_add_command(&set_sumber_cmd); // data tinysh_add_command(&set_data_cmd); tinysh_add_command(&cek_data_cmd); #endif // simpan file #ifdef PAKAI_FILE_SIMPAN tinysh_add_command(&cek_file_cmd); tinysh_add_command(&set_file_cmd); tinysh_add_command(&del_direktori_cmd); tinysh_add_command(&cari_doku_cmd); tinysh_add_command(&hapus_filenya_cmd); #endif #ifdef CENDOL tinysh_add_command(&cek_konfig_cmd); tinysh_add_command(&set_konfig_cmd); #endif #ifdef PAKAI_MULTI_SERIAL #if defined(PAKAI_SERIAL_1) || defined(PAKAI_SERIAL_2) || defined(PAKAI_SERIAL_3) tinysh_add_command(&kirim_serial_cmd); #endif #endif /* add sub commands */ //tinysh_add_command(&ctxcmd); //tinysh_add_command(&item1); //tinysh_add_command(&item2); /* use a command from the stack * !!! this is only possible because the shell will have exited * before the stack of function main !!! */ /* { tinysh_cmd_t quitcmd={0,"quit","exit shell",0,reset_to_0, (void *)&again,0,0}; tinysh_add_command(&quitcmd); }*/ /* add atoxi support test command */ //tinysh_add_command(&atoxi_cmd); /* add a background command */ //tinysh_add_command(&bgcmd); //xTaskCreate( bg_cmd_thread, "bg_cmd", 1000, NULL, 2, &xHandle); #ifdef PAKAI_MMC vTaskDelay(340); #else vTaskDelay(450); #endif #ifdef PAKAI_SELENOID static tinysh_cmd_t set_relay_cmd={0,"set_relay","setting relay", "help default ",set_relay,0,0,0}; tinysh_add_command(&set_relay_cmd); #endif //#ifdef BOARD_TAMPILAN #ifdef CARI_SUMBERx // cek ukuran struk printf("size struct Mesin = %d\r\n", sizeof (struct t_mesin) * JML_MESIN); printf("size struct Sumber = %d\r\n", sizeof (struct t_sumber) * JML_SUMBER); printf("size struct Titik = %d\r\n", sizeof (struct t_titik) * JML_MESIN * TIAP_MESIN); //printf("size struct sambungan = %d\r\n", sizeof (samb)); #endif #ifdef BOARD_KOMON_420_SAJA kalibrasi_adc1(); vTaskDelay(100); start_adc_1(); #endif #ifdef BOARD_KOMON_420_SABANG #ifdef PAKAI_ADC kalibrasi_adc1(); vTaskDelay(100); start_adc_1(); #endif vTaskDelay(100); #endif #ifdef BOARD_KOMON_A_RTD kalibrasi_adc1(); vTaskDelay(100); start_adc_1(); #endif #ifdef BOARD_KOMON_B_THERMO kalibrasi_adc1(); vTaskDelay(100); start_adc_1(); #endif #ifdef BOARD_KOMON_KONTER #ifdef PAKAI_RTC rtc_init(); vTaskDelay(100); //baca_rtc_mem(); #endif #endif #ifdef PAKAI_MMC tinysh_add_command(&util_ls_cmd); tinysh_add_command(&util_mkdir_cmd); tinysh_add_command(&util_cd_cmd); tinysh_add_command(&util_pwd_cmd); tinysh_add_command(&util_view_cmd); init_gpio_mmc(); uncs_mmc(); vTaskDelay(5); set_fs_mount(); vTaskDelay(5); status_MMC = cek_fs_free(); struct t_simpan_file *ts; ts = (char *) ALMT_SFILE; vTaskDelay(5); if (status_MMC) { printf("_____MMC ERROR !!!!_____ %d\r\n", status_MMC); if (status_MMC==13) printf("_____MMC FR_NO_FILESYSTEM, kudu diformat FAT32 !!!\r\n"); if (ts->set==1) { set_file_mati(); printf("simpan data ke file dimatikan !!\r\n"); } } else { status_MMC = 1; printf("MMC aktif. Siap simpan data: %d\r\n", status_MMC); } /* FR_NOT_READY, 3 FR_NO_FILE, 4 FR_NO_PATH, 5 FR_INVALID_NAME, 6 FR_DENIED, 7 FR_EXIST, 8 FR_INVALID_OBJECT, 9 FR_WRITE_PROTECTED, 10 FR_INVALID_DRIVE, 11 FR_NOT_ENABLED, 12 FR_NO_FILESYSTEM, 13 FR_MKFS_ABORTED, 14 FR_TIMEOUT 15 //*/ sprintf(abs_path, "%s", ""); #endif #ifdef PAKAI_RTC tinysh_add_command(&set_date_cmd); #endif struct t_env *envx; envx = (char *) ALMT_ENV; sprintf(str,"%s%d$ ", PROMPT, (envx->IP3)); tinysh_set_prompt(str); //tinysh_set_prompt( PROMPT ); /* force untuk tampil prompt */ tinysh_char_in('\r'); int perdetiknya=0; /* printf("nChr: %d, nInt: %d, nLInt: %d, nFloat: %d, nDouble: %d\r\n", \ sizeof(char), sizeof(int), sizeof(long int), sizeof(float), sizeof(double)); printf("nChr: %d, nInt: %d, nLInt: %d, nFloat: %d, nDouble: %d\r\n", \ 255, 20000000, 20000000, 20000000, 20000000); //*/ /* * main loop shell */ int lop = 0; while(1) { vTaskDelay(1); lop++; if (xSerialGetChar(1, &c, 100 ) == pdTRUE) { lop = 0; tinysh_char_in((unsigned char)c); } /* dilindungi password setiap menit tidak ada aktifitas*/ if (lop > 6000) { lop = 0; printf("\r\nPasswd lock!\r\n"); while(1) { if (xSerialGetChar(1, &c, 100) == pdTRUE) { if (proses_passwd( &c ) == 1) break; } #ifdef PAKAI_MMC #ifdef PAKAI_FILE_SIMPAN perdetiknya++; if (perdetiknya==10 && status_MMC==1) { proses_simpan_file(); perdetiknya=0; } #endif #endif #ifdef PAKAI_ADC #ifdef BOARD_KOMON_A_RTD proses_data_adc(); #endif #ifdef BOARD_KOMON_B_THERMO proses_data_adc(); #endif #ifdef BOARD_KOMON_420_SABANG proses_data_adc(); #endif #ifdef BOARD_KOMON_420_SAJA proses_data_adc(); hitung_datanya(); #endif simpan_ke_data_f(); #endif #ifdef BOARD_KOMON_KONTER data_frek_rpm(); #endif } } // pembacaaan ADC dipindah dari task eth ke shell 1 Okt 2010. #ifdef PAKAI_ADC #ifdef BOARD_KOMON_A_RTD proses_data_adc(); #endif #ifdef BOARD_KOMON_B_THERMO proses_data_adc(); #endif #ifdef BOARD_KOMON_420_SAJA proses_data_adc(); hitung_datanya(); #endif #ifdef BOARD_KOMON_420_SABANG proses_data_adc(); #endif simpan_ke_data_f(); #endif #ifdef BOARD_KOMON_KONTER data_frek_rpm(); #endif #ifdef PAKAI_MMC #ifdef PAKAI_FILE_SIMPAN perdetiknya++; if (perdetiknya==10 && status_MMC==1) { proses_simpan_file(); perdetiknya=0; } #endif #endif #ifdef USB_TEST c = HC_INT_STAT ; { printf("%4d: usb stat 0x%X\r\n", lop, c); HC_INT_STAT |= c; usb_terup = 0; } #endif } return; }
static portTASK_FUNCTION( vComRxTask, pvParameters ) { signed char cExpectedByte, cByteRxed; portBASE_TYPE xResyncRequired = pdFALSE, xErrorOccurred = pdFALSE; portBASE_TYPE xGotChar; int ch, mm=0; char s[30]; /* Just to stop compiler warnings. */ ( void ) pvParameters; vTaskDelay(1); //vSerialPutString(xPort, "mulakan\r\n", 9); init_banner(); //set_env_default(); baca_konfig_rom(); // hardware/iap.c //load_data_rtc(); cmd_shell(); st_hw.init++; #ifdef PAKAI_RTC //init_RTC_sh(); start_uptime(); #endif #ifdef PAKAI_SDCARD st_hw.sdc = 0; //disk_initialize(SDC); disk_initialize(0); set_fs_mount(); cek_fs_free(); //mount_disk(0); // 0: SDCARD //uprintf("Cek Memori SDCARD: ..."); //cek_free_cluster(); st_hw.sdc = 1; #endif #ifdef configUSE_IDLE_HOOK st_hw.init++; #endif do { vTaskDelay(100); } while (st_hw.init != uxTaskGetNumberOfTasks()); //vTaskDelay(100); #ifdef PAKAI_SDCARD //uprintf("Cek Memori SDCARD: ..."); //cek_free_cluster(); #endif vTaskDelay(100); sprintf(s, "%s$ ", PROMPT); #ifdef PAKAI_FREERTOS_CLI // gak jadi pake FreeRTOS-CLI uprintf(s); vRegisterCLICommands(); for(;;) { //uprintf("Merdeka!!!\r\n"); //vSerialPutString(xPort, "tes\r\n", 5); xGotChar = xSerialGetChar( xPort, &ch, 10 ); if( xGotChar == pdTRUE ) { //if( xSerialGetChar( xPort, &ch, comRX_BLOCK_TIME ) ) { // comRX_BLOCK_TIME = 0xffff //tinysh_char_in((unsigned char) ch); toogle_led_utama(); if ((uchr) ch=='\r') { sprintf(s, "\r\n%s$ ", PROMPT); uprintf(s); } } vTaskDelay(10); } #endif #ifdef PAKAI_TINYSH tinysh_set_prompt(s); tinysh_char_in('\r'); vTaskDelay(500); for( ;; ) { //vTaskDelay(10); //printf("testing\r\n"); xGotChar = xSerialGetChar( xPort, &ch, 10 ); if( xGotChar == pdTRUE ) { tinysh_char_in((unsigned char) ch); toogle_led_utama(); } if (st_hw.mm>=120) { // cron tiap 1 menit //if (st_hw.mm >= 10) { // cron tiap 10detik //if (st_hw.mm>=2) { // cron tiap 1 detik st_hw.mm = 0; st_hw.uuwaktu++; #ifdef PAKAI_FILE_SIMPAN simpan_file_data(); #endif } qrprintf(0); } #endif for( ;; ) { vTaskDelay(10); } }