#include "stdio.h" #include "stdlib.h" // #include "cm_demo_main.h" // #include "cm_demo_uart.h" // #include "cm_demo_asocket.h" // #include "cm_demo_fs.h" #include "cm_fs.h" #include "cm_mem.h" #include "cm_sys.h" #include "cm_sim.h" #include "cm_virt_at.h" #include "cm_rtc.h" #include "cm_gpio.h" #include "cm_iomux.h" #include "cm_modem.h" #include "app_uart.h" #include "gps_config.h" #include "app_common.h" #include "jt808_msg_pkg.h" #include "jt808_msg_parse.h" #include "jt808_pkg_transmit.h" #include "tcp_client.h" #include "control_out.h" #include "radar.h" #include "attr_broadcast.h" #include "local_tts.h" #if 0 #include "app_uart.h" #define DEBUG(fmt, args...) app_printf("[main]" fmt, ##args) #else #include "app_uart.h" #define DEBUG(fmt, ...) #endif osThreadId_t OC_APP_TaskHandle; void print_network_info(void){ cm_cereg_state_t cereg_state = {0}; if(0 == cm_modem_get_cpin()){ DEBUG("sim card ready!\r\n"); }else{ DEBUG("sim card not ready!\r\n"); } if(0 ==cm_modem_get_cereg_state(&cereg_state)){ // 获取PS网络注册状态 DEBUG("cereg_state:%d\n",cereg_state.state); // 注册状态 }else{ DEBUG("cereg_get_state fail!\n"); } if(cm_modem_get_pdp_state(1) == 1){ //网络就绪 DEBUG("network ready\n"); }else{ DEBUG("waiting for network...\n"); } } osEventFlagsId_t LED_EventFlags = NULL; void led_set_event(led_event_t event){ // 支持多线程并发调用 if(NULL == LED_EventFlags){ DEBUG("LED_EventFlags is NULL\n"); return; } osEventFlagsSet(LED_EventFlags, event); } void led_task(char *param){ led_status_t led_status = {0}; uint32_t led_event = 0; while(1){ led_event = osEventFlagsWait(LED_EventFlags, 0x0000000f, osFlagsWaitAny, 0); //0等待 if (led_event & 0x80000000) { // 错误处理 // DEBUG("led task error\n"); }else if(led_event & EVENT_NETWORK_READY){ // 网络就绪 DEBUG("led network ready\n"); led_status.network_ready = 1; }else if(led_event & EVENT_NETWORK_DISCONNECT){ // 网络断开 DEBUG("led network disconnect\n"); led_status.network_ready = 0; }else if(led_event & EVENT_GPS_LOCATE_SUCCESS){ // GPS定位成功 DEBUG("led GPS locate success\n"); led_status.gps_ready = 1; }else if(led_event & EVENT_GPS_NO_LOCATE){ // GPS无定位 DEBUG("led GPS no locate\n"); led_status.gps_ready = 0; } if(led_status.network_ready && led_status.gps_ready){ // 网络就绪,GPS定位成功 cm_gpio_set_level(CM_GPIO_NUM_0, 1); // 常亮 osDelay(1000/5);//300ms }else if(led_status.network_ready && (0 ==led_status.gps_ready)){ // 网络就绪,GPS无定位 cm_gpio_set_level(CM_GPIO_NUM_0, 1); osDelay(500/5);//300ms cm_gpio_set_level(CM_GPIO_NUM_0, 0); osDelay(500/5);//300ms }else if((0 ==led_status.network_ready) && led_status.gps_ready){ // 网络断开,GPS定位成功 for(int i=0;i<5;i++){ // 快闪500ms,灭500ms cm_gpio_set_level(CM_GPIO_NUM_0, 1); osDelay(100/5);//300ms cm_gpio_set_level(CM_GPIO_NUM_0, 0); osDelay(100/5);//300ms } cm_gpio_set_level(CM_GPIO_NUM_0, 0); osDelay(500/5);//300ms }else{ // 网络断开,GPS无定位 cm_gpio_set_level(CM_GPIO_NUM_0, 1); // 快闪 osDelay(100/5);//300ms cm_gpio_set_level(CM_GPIO_NUM_0, 0); osDelay(100/5);//300ms } } } void led_task_init(void){ LED_EventFlags =osEventFlagsNew(NULL); if(NULL == LED_EventFlags){ DEBUG("LED_EventFlags create fail\n"); } cm_gpio_cfg_t cfg = {0}; cfg.direction = CM_GPIO_DIRECTION_OUTPUT; cfg.pull = CM_GPIO_PULL_UP; cm_iomux_set_pin_func(CM_IOMUX_PIN_16, CM_IOMUX_FUNC_FUNCTION1);//初始化之前一定要先设置引脚复用 cm_gpio_init(CM_GPIO_NUM_0, &cfg); cm_gpio_set_level(CM_GPIO_NUM_0, 0); osThreadAttr_t led_task_attr = { .name = "led_task", .stack_size = 1024, .priority = osPriorityNormal, }; osThreadNew((osThreadFunc_t)led_task,0,&led_task_attr); } void my_appimg_enter(char *param){ app_uart_init(); led_task_init(); cm_uart_write(0, "\n\n---zsxfly---\n\n", 16, 1000); if(1){ char buf[CM_VER_LEN] = {0}; cm_fs_system_info_t info = {0, 0}; cm_heap_stats_t stats = {0}; DEBUG("\n\n\n\n\n"); DEBUG("CM OpenCPU Starts\n"); cm_sys_get_cm_ver(buf, CM_VER_LEN); DEBUG("SDK VERSION:%s\n", buf); cm_fs_getinfo(&info); cm_mem_get_heap_stats(&stats); DEBUG("fs total:%d,remain:%d\n", info.total_size, info.free_size); DEBUG("heap total:%d,remain:%d\n",stats.total_size,stats.free); } local_tts_init(); local_tts_mute(0);// 取消静音 local_tts_volume(100); // 设置音量为55 // local_tts_set(7, 7, CM_LOCAL_TTS_DIGIT_AUTO); local_tts_text_play("已开机",0,0); #if 0 int ret=0; uint32_t scenic_Fence_Polygon_count = 0; uint32_t ban_Fence_Polygon_count = 0; AreaPoint_t point[4] = { {39939236, 116369446}, {39939236, 126379446}, {49929236, 126379446}, {49929236, 116369446} }; for(int i=0;i<4;i++){ point[i].lat = Swap32(point[i].lat); point[i].lng = Swap32(point[i].lng); } if(0 == jt808_get_areafile_state()){ ret = jt808_load_Fence_area(); // 加载围栏区域信息 DEBUG("load fence area ret:%d\n", ret); }else{ DEBUG("no fence area file\n"); jt808_add_tail_fence_Polygon_area(0x0003, 0x0001, 4, point); // 增加景区围栏多边形区域ID信息 jt808_add_tail_fence_Polygon_area(0x0004, 0x0002, 4, point); // 增加景区围栏多边形区域ID信息 jt808_add_tail_fence_Polygon_area(0x0AAA, 0x0002, 4, point); // 增加景区围栏多边形区域ID信息 ret = jt808_save_Fence_area(); // 保存围栏区域信息 DEBUG("save fence area ret0:%d\n", ret); jt808_remove_fence_Polygon_area(0); ret = jt808_save_Fence_area(); // 保存围栏区域信息 DEBUG("save fence area ret1:%d\n", ret); } while(1){ uint32_t lat = 44939236; uint32_t lng = 121369446; Rsp_Bigscenic_Fence_Polygon_area_ID = Swap32(jt808_Polygon_fence_check(0x0001, lat, lng)); // lat = 34939236; // lng = 121369446; Rsp_Bigban_Fence_Polygon_area_ID = Swap32(jt808_Polygon_fence_check(0x0002, lat, lng)); DEBUG("scenic:%d,ban:%d\n\n",Swap32(Rsp_Bigscenic_Fence_Polygon_area_ID),Swap32(Rsp_Bigban_Fence_Polygon_area_ID)); if(Rsp_Bigscenic_Fence_Polygon_area_ID == 0){ // 在景区围栏 scenic_Fence_Polygon_count++; if(scenic_Fence_Polygon_count >= 7){ scenic_Fence_Polygon_count = 0; local_tts_text_play("您已离开景区!",0,0); } }else{ scenic_Fence_Polygon_count = 0; } if(Rsp_Bigban_Fence_Polygon_area_ID != 0){ ban_Fence_Polygon_count++; if(ban_Fence_Polygon_count >= 7){ // 7S ban_Fence_Polygon_count = 0; local_tts_text_play("您已进入禁区,请尽快离开!",0,0); } }else{ ban_Fence_Polygon_count = 0; } osDelay(1000/5); } #endif control_out_init(); jt808_set_term_param_init(); // /* if( 0 ){ while(1){ cm_gpio_set_level(CM_GPIO_NUM_0, 1); osDelay(500/5); cm_gpio_set_level(CM_GPIO_NUM_0, 0); osDelay(500/5); } }else if( 0 ){ // cm_gpio_level_e level = 0; while(1){ // // cm_gpio_set_level(CM_GPIO_NUM_0, 1); // cm_gpio_set_pull(CM_GPIO_NUM_0, CM_GPIO_PULL_UP); // cm_gpio_set_direction(CM_GPIO_NUM_0, CM_GPIO_DIRECTION_INPUT); // // DEBUG("set_level 1\r\n"); // if(0 ==cm_gpio_get_level(CM_GPIO_NUM_0, &level)){ // 更新状态 // // DEBUG("gpio_get_level:%d\r\n",level); // } // osDelay(800/5); // cm_gpio_set_direction(CM_GPIO_NUM_0, CM_GPIO_DIRECTION_OUTPUT); // cm_gpio_set_level(CM_GPIO_NUM_0, 0); // // cm_gpio_set_pull(CM_GPIO_NUM_0, CM_GPIO_PULL_DOWN); // // DEBUG("set_level 0\r\n"); // if(0 ==cm_gpio_get_level(CM_GPIO_NUM_0, &level)){ // 更新状态 // // DEBUG("gpio_get_level:%d\r\n",level); // } // osDelay(800/5); // local_tts_set(7, 7, CM_LOCAL_TTS_DIGIT_AUTO); // local_tts_text_play("风和日丽的日子。阳光,洒下诸多幻影,让我重温当初。漫步时光,携一身清爽走一程简单的凉薄,回味中,",0,0); // local_tts_text_play("是否,悠然还在?一路足迹,是否还可以寻回当初?是否青春的影子还残留在那些剪影中?",0,0); // local_tts_text_play("回望沿途的风景,朦胧中,似乎少了几许张扬的味道,多了几许成熟的风韵。",0,0); // local_tts_text_play("轻盈步伐,让流逝的永远流逝,让脚下的路延伸到尽头,依一素颜,走自己该走的路..…",0,0); // osDelay(25000/5); local_tts_volume(15); // local_tts_set(2, 2, CM_LOCAL_TTS_DIGIT_AUTO); cm_gpio_set_level(CM_GPIO_NUM_0, 1); local_tts_text_play("测试0",0 ,1); local_tts_text_play("测试1",0 ,1); local_tts_text_play("测试2",0 ,1); cm_gpio_set_level(CM_GPIO_NUM_0, 0); local_tts_text_play("测试3",0 ,0); osDelay(5000/5); local_tts_volume(25); // local_tts_set(7, 7, CM_LOCAL_TTS_DIGIT_AUTO); cm_gpio_set_level(CM_GPIO_NUM_0, 1); local_tts_text_play("测试4",0 ,1); local_tts_text_play("测试5",0 ,1); // 不可打断 local_tts_text_play("测试6",0 ,1); cm_gpio_set_level(CM_GPIO_NUM_0, 0); local_tts_text_play("测试7",0 ,1); osDelay(5000/5); local_tts_volume(50); // local_tts_set(7, 12, CM_LOCAL_TTS_DIGIT_AUTO); cm_gpio_set_level(CM_GPIO_NUM_0, 1); local_tts_text_play("测试8",0 ,1); local_tts_text_play("测试9",0 ,1); // 不可打断 local_tts_text_play("测试10",0 ,1); cm_gpio_set_level(CM_GPIO_NUM_0, 0); local_tts_text_play("测试11",0 ,1); osDelay(5000/5); local_tts_volume(75); // local_tts_set(7, 15, CM_LOCAL_TTS_DIGIT_AUTO); cm_gpio_set_level(CM_GPIO_NUM_0, 1); local_tts_text_play("测试12",0 ,1); local_tts_text_play("测试13",0 ,1); // 不可打断 local_tts_text_play("测试14",0 ,1); cm_gpio_set_level(CM_GPIO_NUM_0, 0); local_tts_text_play("测试15",0 ,0); osDelay(5000/5); local_tts_volume(100); // local_tts_set(6, 0, CM_LOCAL_TTS_DIGIT_AUTO); cm_gpio_set_level(CM_GPIO_NUM_0, 1); local_tts_text_play("测试16",0 ,0); local_tts_text_play("测试17",0 ,0); // 不可打断 local_tts_text_play("测试18",0 ,0); cm_gpio_set_level(CM_GPIO_NUM_0, 0); local_tts_text_play("测试19",0 ,0); osDelay(5000/5); } } // */ jt808_init(); tcp_client_init(); gps_config_init(); radar_init();// 雷达测离初始化 attr_broadcast_init(); while(1){ osDelay(1000/5); } } int cm_opencpu_entry(char * param){ osThreadAttr_t app_task_attr = {0}; app_task_attr.name = "main_task"; app_task_attr.stack_size = 4096 * 4; app_task_attr.priority = osPriorityNormal; OC_APP_TaskHandle = osThreadNew((osThreadFunc_t)my_appimg_enter,0,&app_task_attr); return 0; }