4G_module/custom/custom_main/src/custom_main.c

335 lines
12 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}