void demo_bitmap_open(struct rtgui_object* object, struct rtgui_event* event) { char *str; rtgui_button_t *button = RTGUI_BUTTON(object); /* 从textbox控件中取得文件名 */ str = (char*)rtgui_textbox_get_value(bmpdt.box); if(str == RT_NULL) return; if(*str == '/' && (rt_strstr(str, ".bmp")!=RT_NULL || rt_strstr(str, ".BMP")!=RT_NULL)) { /* 如果是bmp文件, 且文件名有效, 则读入图像数据 */ if(bmpdt.filename != RT_NULL) rt_free(bmpdt.filename); bmpdt.filename = rt_strdup(str); if(bmpdt.image != RT_NULL) rtgui_image_destroy(bmpdt.image); bmpdt.image = rtgui_image_create_from_file("bmp", bmpdt.filename, RT_TRUE); if(bmpdt.image != RT_NULL) { bmpdt.showimg = bmpdt.image; bmpdt.scale = 1.0; bmpdt.angle = 0.0; rtgui_widget_update(RTGUI_WIDGET(bmpdt.showbox)); } } else rt_kprintf("Bad filename!"); }
/* 打开按钮的回调函数 */ static void open_btn_onbutton(rtgui_widget_t* widget, struct rtgui_event* event) { rtgui_filelist_view_t *view; rtgui_workbench_t *workbench; rtgui_rect_t rect; /* 获得顶层的workbench */ workbench = RTGUI_WORKBENCH(rtgui_widget_get_toplevel(widget)); rtgui_widget_get_rect(RTGUI_WIDGET(workbench), &rect); /* WIN32平台上和真实设备上的初始路径处理 */ #ifdef _WIN32 view = rtgui_filelist_view_create(workbench, "d:\\", "*.*", &rect); #else view = rtgui_filelist_view_create(workbench, "/", "*.*", &rect); #endif /* 模态显示一个文件列表视图,以提供给用户选择图像文件 */ if (rtgui_view_show(RTGUI_VIEW(view), RT_TRUE) == RTGUI_MODAL_OK) { char path[32], image_type[8]; /* 设置文件路径的标签 */ rtgui_filelist_view_get_fullpath(view, path, sizeof(path)); if (image != RT_NULL) { rtgui_image_destroy(image); image = RT_NULL; } rt_memset(image_type, 0, sizeof(image_type)); /* 获得图像的类型 */ if (rt_strstr(path, ".bmp") != RT_NULL || rt_strstr(path, ".BMP") != RT_NULL) strcat(image_type, "bmp"); if (rt_strstr(path, ".png") != RT_NULL || rt_strstr(path, ".PNG") != RT_NULL) strcat(image_type, "png"); if (rt_strstr(path, ".jpg") != RT_NULL || rt_strstr(path, ".JPG") != RT_NULL) strcat(image_type, "jpeg"); if (rt_strstr(path, ".hdc") != RT_NULL || rt_strstr(path, ".HDC") != RT_NULL) strcat(image_type, "hdc"); /* 如果图像文件有效,创建相应的rtgui_image对象 */ if (image_type[0] != '\0') image = rtgui_image_create_from_file(image_type, path, RT_TRUE); } /* 删除 文件列表 视图 */ rtgui_view_destroy(RTGUI_VIEW(view)); rtgui_view_show(_view, RT_FALSE); }
void tc_thread_entry(void* parameter) { struct finsh_syscall* index; /* create tc semaphore */ rt_sem_init(&_tc_sem, "tc", 0, RT_IPC_FLAG_FIFO); while (_tc_stat & TC_STAT_RUNNING) { for (index = _syscall_table_begin; index < _syscall_table_end; FINSH_NEXT_SYSCALL(index)) { /* search testcase */ if (rt_strstr(index->name, _tc_prefix) == index->name) { long tick; _tc_current = index->name + 4; rt_kprintf("Run TestCase: %s\n", _tc_current); _tc_stat = TC_STAT_PASSED | TC_STAT_RUNNING; tick = index->func(); if (tick > 0) { rt_sem_take(&_tc_sem, tick * _tc_scale); if (_tc_cleanup != RT_NULL) { /* perform testcase cleanup */ _tc_cleanup(); _tc_cleanup = RT_NULL; } rt_sem_trytake(&_tc_sem);/* by nl1031 */ if (_tc_stat & TC_STAT_FAILED) rt_kprintf("TestCase[%s] failed\n", _tc_current); else rt_kprintf("TestCase[%s] passed\n", _tc_current); } else { if (_tc_cleanup != RT_NULL) { /* perform testcase cleanup */ _tc_cleanup(); _tc_cleanup = RT_NULL; } } } } } rt_kprintf("RT-Thread TestCase Running Done!\n"); /* detach tc semaphore */ rt_sem_detach(&_tc_sem); }
/** * Calc hardware version's Integer value */ void calc_hardware_version(void) { char const *start_addr = NULL; char *match_addr = NULL; char c_value[4] = { 0 }; uint8_t c_length = 0, i = 0; start_addr = get_hardware_version(); match_addr = rt_strstr((char *) start_addr, "."); while (match_addr != NULL) { c_length = match_addr - start_addr; rt_memcpy(c_value, start_addr, c_length); hardware_version[i++] = atoi(c_value); match_addr++; start_addr = match_addr; match_addr = rt_strstr((char *) start_addr, "."); } c_length = rt_strlen(start_addr); rt_memcpy(c_value, start_addr, c_length); hardware_version[i] = atoi(c_value); }
/* 打开按钮的回调函数 */ static void open_btn_onbutton(rtgui_widget_t *widget, struct rtgui_event *event) { rtgui_filelist_view_t *view; rtgui_workbench_t *workbench; rtgui_rect_t rect; /* 获得顶层的workbench */ workbench = RTGUI_WORKBENCH(rtgui_widget_get_toplevel(widget)); rtgui_widget_get_rect(RTGUI_WIDGET(workbench), &rect); /* WIN32平台上和真实设备上的初始路径处理 */ #ifdef _WIN32 view = rtgui_filelist_view_create(workbench, "d:\\", "*.*", &rect); #else view = rtgui_filelist_view_create(workbench, "/", "*.*", &rect); #endif /* 模态显示一个文件列表视图,以提供给用户选择图像文件 */ if (rtgui_container_show(RTGUI_CONTAINER(view), RT_TRUE) == RTGUI_MODAL_OK) { char path[32], name[8]; /* 设置文件路径的标签 */ rtgui_filelist_view_get_fullpath(view, path, sizeof(path)); rt_memset(name, 0, sizeof(name)); /* 获得应用模块的类型 */ if (rt_strstr(path, ".mo") != RT_NULL || rt_strstr(path, ".so") != RT_NULL) { rt_module_open(path); } } /* 删除 文件列表 视图 */ rtgui_container_destroy(RTGUI_CONTAINER(view)); rtgui_container_show(_view, RT_FALSE); }
/*GPRS串口发送和接收*/ rt_bool_t gprs_send_data_package(char *cmd,char *ack,uint16_t waittime, uint8_t retrytime) { rt_bool_t res = RT_FALSE; rt_err_t result = RT_EOK; rt_uint32_t event; char gprs_rx_buffer[512]={0x00}; rt_thread_t thread; thread = rt_thread_find("gprswatch"); if( thread != RT_NULL) rt_thread_delete(thread); do { rt_device_write(gprs_device, 0, cmd, rt_strlen(cmd)); result = rt_event_recv(&rev_event, REV_MASK, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, waittime*RT_TICK_PER_SECOND, &event); if (result == RT_EOK) { if (event & REV_DATA) { rt_memset(gprs_rx_buffer,0x00,sizeof(gprs_rx_buffer)); rt_thread_delay(RT_TICK_PER_SECOND*2); rt_device_read(gprs_device, 0, gprs_rx_buffer, 512); rt_kprintf(gprs_rx_buffer); if((rt_strstr(gprs_rx_buffer,ack))||(rt_strstr(gprs_rx_buffer,"OK"))) res = RT_TRUE; else res = RT_FALSE; } } retrytime--; }while((!res)&&(retrytime>=1)); gprswatch(); return res; }
void list_tc() { struct finsh_syscall* index; rt_kprintf("TestCases List:\n"); for (index = _syscall_table_begin; index < _syscall_table_end; FINSH_NEXT_SYSCALL(index)) { /* search testcase */ if (rt_strstr(index->name, "_tc_") == index->name) { #ifdef FINSH_USING_DESCRIPTION rt_kprintf("%-16s -- %s\n", index->name + 4, index->desc); #else rt_kprintf("%s\n", index->name + 4); #endif } } }
void httpclient(void) { char *recv_data; int sock, bytes_received; struct hostent *yeelink_host; struct in_addr yeelink_ipaddr; struct sockaddr_in yeelink_sockaddr; recv_data = rt_malloc(1024); if (recv_data == RT_NULL) { rt_kprintf("No memory\r\n"); return; } // 第一步 DNS地址解析 rt_kprintf("calling gethostbyname with: %s\r\n", YEELINK_HOSTNAME); yeelink_host = gethostbyname(YEELINK_HOSTNAME); yeelink_ipaddr.s_addr = *(unsigned long *) yeelink_host->h_addr_list[0]; rt_kprintf("Yeelink IP Address:%s\r\n" , inet_ntoa(yeelink_ipaddr)); yeelink_sockaddr.sin_family = AF_INET; yeelink_sockaddr.sin_port = htons(80); yeelink_sockaddr.sin_addr = yeelink_ipaddr; rt_memset(&(yeelink_sockaddr.sin_zero), 0, sizeof(yeelink_sockaddr.sin_zero)); // while(1) // { // 第二步 创建套接字 if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { rt_kprintf("Socket error\n"); rt_free(recv_data); return; } // 第三步 连接yeelink if (connect(sock, (struct sockaddr *)&yeelink_sockaddr, sizeof(struct sockaddr)) == -1) { rt_kprintf("Connect fail!\n"); lwip_close(sock); rt_free(recv_data); return; } // 第4步 发送Http请求 send(sock,send_data,strlen(send_data), 0); // 第5步 获得Http响应 bytes_received = recv(sock, recv_data, 1024 - 1, 0); recv_data[bytes_received] = '\0'; // 响应内容为 {"timestamp":"2013-11-19T08:50:11","value":1} // 截取“value”之后的内容 char* actuator_info = rt_strstr( recv_data , "\"value\""); int offset = rt_strlen("\"value\":"); char actuator_status = *(actuator_info + offset); rt_kprintf("actuator status :%c\r\n",actuator_status); // 获得开关状态,并设置LED指示灯 (actuator_status == '1')?rt_hw_led_on(0):rt_hw_led_off(0); rt_memset(recv_data , 0 , sizeof(recv_data)); // 关闭套接字 closesocket(sock); // 释放recv_data rt_free(recv_data); // // 延时5S之后重新连接 // rt_thread_delay( RT_TICK_PER_SECOND * 5 ); // } }