From 924d3e96352100d9e0581d14ed36d4721e48a131 Mon Sep 17 00:00:00 2001 From: wjw Date: Fri, 11 Jul 2025 11:22:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9C=AC=E5=9C=B0=E7=94=B5?= =?UTF-8?q?=E5=AD=90=E5=9B=B4=E6=A0=8F=E5=8A=9F=E8=83=BD=EF=BC=8C=E4=BA=91?= =?UTF-8?q?=E7=AB=AF=E4=B8=8B=E5=8F=91=E7=94=B5=E5=AD=90=E5=9B=B4=E6=A0=8F?= =?UTF-8?q?=E6=97=A0=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- custom/attr_broadcast/src/attr_broadcast.c | 69 +++++++++++-- custom/jt808/inc/jt808_set_TermParam.h | 11 ++ custom/jt808/src/jt808_msg_parse.c | 10 +- custom/jt808/src/jt808_set_TermParam.c | 112 +++++++++++++++++++++ custom/radar/inc/radar.h | 3 + custom/radar/src/radar.c | 10 +- 6 files changed, 200 insertions(+), 15 deletions(-) diff --git a/custom/attr_broadcast/src/attr_broadcast.c b/custom/attr_broadcast/src/attr_broadcast.c index e72c36f..07623a0 100644 --- a/custom/attr_broadcast/src/attr_broadcast.c +++ b/custom/attr_broadcast/src/attr_broadcast.c @@ -28,7 +28,7 @@ #define PLAY_DISTANCE_THRESHOLD 50.0 // 有效播报距离(米) #define DISTANCE_CHANGE_THRESHOLD 10.0 // 距离变化阈值(米) #define TTS_PRIORITY 5 // TTS播报优先级 -#define MAX_TTS_SEGMENT_LEN 50 // TTS每段最大长度(字符) +#define MAX_TTS_SEGMENT_LEN 70 // TTS每段最大长度(字符) static nmeaPARSER parser; @@ -201,7 +201,7 @@ void attr_broadcast_add_attraction(double lon, double lat, osMutexAcquire(attractions_mutex, osWaitForever); - AttractionNode* new_node = malloc(sizeof(AttractionNode)); + AttractionNode* new_node = cm_malloc(sizeof(AttractionNode)); if (!new_node) { osMutexRelease(attractions_mutex); return; @@ -396,14 +396,61 @@ void attr_broadcast_init(void) { } //增加初始景点 - attr_broadcast_add_attraction(121.364371, 31.343164, "2号门便民处", "测试景点,看起来应该非常的方便游客"); - attr_broadcast_add_attraction(121.364270, 31.343103, "2号门归还点", "您好二号门停放点到了,您可以把我归还至这里,并在手机小程序中结束订单,如果"); - attr_broadcast_add_attraction(121.364350, 31.342175, "彩虹桥", "测试景点,看起来有很多很多彩虹"); - attr_broadcast_add_attraction(121.36799,31.34449, "恐龙乐园正门", "您好自然谷恐龙园到了,这是一个人工搭建的,模拟三叠纪,侏罗纪,白垩纪等时代的恐龙生活场景的乐园,在这里您可以穿梭于恐龙像群,欣赏超前的7D电影,在自然中感受野趣,在怪石和岩洞中穿行,充分体验远古时代洪荒洞窟的神奇刺激和绝妙采用,这里的各类恐龙有着高仿真,活动自如的特性,虫现远古时代恐龙生活打斗等场景,让恐龙如同真的复活,园内霸王龙,三角龙,阿马加龙,剑龙,恐爪龙等几十条恐龙与您零距离接触,带您进入远古霸主的惊险旅程"); - attr_broadcast_add_attraction(121.362142,31.340588, "想家桥", "测试景点,看起来非常的让人想要回家"); - attr_broadcast_add_attraction(121.362796,31.339624, "3号游船码头", "游客三号游船码头到了,顾村公园浏中湖景区有约10公顷的湖面和沿岸森林湿地"); - attr_broadcast_add_attraction(121.36613,31.33925, "樱花广场", "亲爱的游客现在您看到的是顾村公园樱花广场,一寸春心十年相守,为纪念上海樱花节十周"); - attr_broadcast_add_attraction(121.366656983, 31.344300423, "集装箱房间", "测试景点,看起来应该非常的方便测试"); + attr_broadcast_add_attraction(121.377232, 31.347311, "谭杨桥", ""); + attr_broadcast_add_attraction(121.378406, 31.346974, "荷花亭", ""); + attr_broadcast_add_attraction(121.377243, 31.346191, "广福桥", "取名于顾村镇(原刘行镇)广福村,广福村以广福寺得名。传说广福寺规模庞大,鼎盛时期占地方圆近1公里,号称江南第一寺,为当年名僧的游学之地。 \"八·一三\"淞沪抗战,广福寺及广福桥等建筑物毁于战火。而今,杏花疏影中的广福寺虽不复存在,然而公园内新建的汉白玉七孔长桥——广福桥,犹如一道彩虹飞架于粼粼碧波之上,为公园徒增许多诗情画意。"); + attr_broadcast_add_attraction(121.377107, 31.345321, "梅樱林", "梅樱林位于樱花大道和红粉路交叉口,占地面积约5000平方米,种植以梅花和樱花相融合为主题的特色林带,樱花品种以华中樱为主。"); + attr_broadcast_add_attraction(121.363918, 31.342592, "恐龙乐园后门", ""); + attr_broadcast_add_attraction(121.377183, 31.345215, "小卖部", ""); + attr_broadcast_add_attraction(121.377747, 31.344542, "紫藤阁", ""); + attr_broadcast_add_attraction(121.375954, 31.343419, "梦熊桥", "原位于顾村镇白杨村境内。经查,原\"梦熊桥\",建于公元1695年(即康熙33年),距今已有314年历史。\"梦熊\"一词出自《诗经·小雅·斯干》,意指生男孩,或为祝贺生男孩之语。据说,该桥的来历与当时宅上妇女大都生育男孩有关。顾村公园的梦熊桥是园内唯一的一座双桥,采用超越天然大理石建造。桥旁碧水荡漾,绿树掩映,是绝佳的赏景之桥。"); + attr_broadcast_add_attraction(121.375293, 31.345056, "太平桥", "原太平桥位于顾村镇(原刘行镇)老安村境内沪太路上,始建于清同治年间。沪太路曾是上海市最早的一条省际公路,故太平桥的作用十分重要。现顾村公园太平桥又称十二生肖桥,桥两侧栏杆共雕刻着二十四只栩栩如生相对应的生肖动物。如此走在桥上,游客都会情不自禁地边走边摸生肖动物,看看属于自己的生肖可爱形象,真是情趣横生。"); + attr_broadcast_add_attraction(121.374492, 31.344662, "严家港桥", ""); + attr_broadcast_add_attraction(121.373485, 31.344425, "砚池桥", ""); + attr_broadcast_add_attraction(121.373685, 31.346686, "东南亚风情园", ""); + attr_broadcast_add_attraction(121.373297, 31.346479, "樱花文化艺术展示馆", "顾村公园\"樱花文化艺术展示馆\"建于2020年,展馆以顾村公园樱花文化为设计理念,以\"永不落幕的·上海樱花节\"为主题,浓缩了十届\"上海樱花节\"的盛景,多形态的展示樱花摄影作品、樱花历史文化、樱花科普知识、樱花系列文创产品等内容,传播并丰富公园的樱花文化,呈现更绚烂的樱花情景。"); + attr_broadcast_add_attraction(121.371509, 31.345411, "樱悦书院", ""); + attr_broadcast_add_attraction(121.372022, 31.344942, "万年桥", ""); + attr_broadcast_add_attraction(121.372601, 31.344801, "1号游船码头", ""); + attr_broadcast_add_attraction(121.373195, 31.342009, "2号游船码头", ""); + attr_broadcast_add_attraction(121.372599, 31.342228, "樱舞桥", ""); + attr_broadcast_add_attraction(121.371710, 31.341834, "小樱广场", ""); + attr_broadcast_add_attraction(121.370535, 31.342174, "游乐园", ""); + attr_broadcast_add_attraction(121.370519, 31.342064, "摩天轮", ""); + attr_broadcast_add_attraction(121.369894, 31.341977, "商店", ""); + attr_broadcast_add_attraction(121.370991, 31.343946, "樱悦大桥", ""); + attr_broadcast_add_attraction(121.369933, 31.341000, "星火服务站", ""); + attr_broadcast_add_attraction(121.369659, 31.340968, "汉服体验馆", ""); + attr_broadcast_add_attraction(121.36613, 31.33925, "樱花广场", "亲爱的游客现在您看到的是顾村公园樱花广场,一寸春心十年相守,为纪念上海樱花节十周年,顾村公园特意打造了樱花广场,广场设计简洁通畅,十朵樱花十个花坛,十颗樱树,片片花瓣和公园图标都融入了广场之中,十年之恋景观墙更是将上海樱花节十年历程铭刻记录,让我们可以借此回顾过往,展望将来,愿明年的樱花更烂漫,祖国的未来更辉煌"); + attr_broadcast_add_attraction(121.364349, 31.339023, "盛宅桥", ""); + attr_broadcast_add_attraction(121.363623, 31.338906, "迎春林", ""); + attr_broadcast_add_attraction(121.362796, 31.339624, "3号游船码头", "游客三号游船码头到了,顾村公园浏中湖景区有约10公顷的湖面和沿岸森林湿地,沿岸包括水上码头,鸟岛,湿地,垂钓,索桥等景点,绝对会让您觉得不虚此行"); + attr_broadcast_add_attraction(121.364350, 31.342175, "彩虹桥", ""); + attr_broadcast_add_attraction(121.36799, 31.34449, "恐龙乐园正门", "您好自然谷恐龙园到了,这是一个人工搭建的,模拟三叠纪,侏罗纪,白垩纪等时代的恐龙生活场景的乐园,在这里您可以穿梭于恐龙像群,欣赏超前的7D电影,在自然中感受野趣,在怪石和岩洞中穿行,充分体验远古时代洪荒洞窟的神奇刺激和绝妙采用,这里的各类恐龙有着高仿真,活动自如的特性,虫现远古时代恐龙生活打斗等场景,让恐龙如同真的复活,园内霸王龙,三角龙,阿马加龙,剑龙,恐爪龙等几十条恐龙与您零距离接触,带您进入远古霸主的惊险旅程"); + attr_broadcast_add_attraction(121.367888, 31.343220, "矮人部落站", ""); + attr_broadcast_add_attraction(121.361532, 31.341848, "彩弹射击射箭运动中心", "上海顾村公园彩弹射击射箭运动中心坐落于顾村公园2号门往西200米冬青路,游客在这里可以进行彩弹射击真人CS实战对抗、气手枪竞技射击培训体验、M4-16气步枪打靶、10-50米靶射箭体验、worgame_BB弹真人吃鸡大作战。欢迎广大游客朋友们前来体验、游玩。"); + attr_broadcast_add_attraction(121.362142, 31.340588, "想家桥", ""); + attr_broadcast_add_attraction(121.359204, 31.337386, "孔雀园", "这里是东方鸟世界的孔雀园,园内看到的是六大明星之一孔雀\"花花\"。在进入孔雀园时,请仔细阅读入园须知,不要投喂自带食物,照顾好您的宝宝,防止抓伤啄伤,如果您不认同与鸟类接触行为,请在护栏外观赏哦!孔雀园内居住着上百只孔雀,孔雀是鸡形目、雉科动物。一直以来,孔雀被视为\"百鸟之王\",是最美丽的观赏鸟,象征着爱情,更是吉祥、善良、美丽、华贵的象征。我们园内的孔雀是以蓝孔雀和白孔雀为主,孔雀体长可达2米以上,其中尾屏长约1.5米,体重达6公斤左右。尾部华丽的为雄孔雀,而雌孔雀其貌不扬。"); + attr_broadcast_add_attraction(121.359030, 31.337262, "东方鸟世界便利店", ""); + attr_broadcast_add_attraction(121.359178, 31.337357, "鸵鸟园", "这里是东方鸟世界的\"鸵鸟园\",眼前看到的是六大明星之一\"大个\"。鸵鸟属鸵形目、鸵鸟科,是世界上最大的一种鸟类,成鸟身高可达2.5米,雄鸵鸟体重可达150千克。像蛇一样细长的脖颈上支撑着一个很小的头部,上面有一张短而扁平的、由数片角质鞘所组成的三角形的嘴,主要特点是龙骨突不发达,不能飞行,也是世界上现存鸟类中唯一的二趾鸟类,在它双脚的每个大脚趾上都长有长约7厘米的危险趾甲,后肢粗壮有力,适于奔走。作为世界上最大的鸟类,它的蛋也异乎寻常的坚毅,一般人的力量根本踩不碎它。它的长度15公分,宽度则有八公分左右,重量却能达到1.5公斤。我们园内有鸵鸟和鸸鹋两种。鸸鹋原产于澳洲,是澳洲的国鸟,体形大但不会飞,生活在较开阔的半沙漠、草原和开阔的林地等栖息地。鸸鹋是澳大利亚个子最高的鸟,以擅长奔跑而著名,是澳洲地区的特产,是世界上第二大的鸟类,由于外形与鸵鸟相似,因而也被称作澳洲鸵鸟。翅膀比非洲鸵鸟和美洲鸵鸟的更加退化,足三趾,是世界上最古老的鸟种之一。非洲鸵鸟拥有世界上最大的眼球,美丽而明亮,赶快把小游停在路边,和她比一比吧!"); + attr_broadcast_add_attraction(121.357985, 31.338391, "仙境奇缘", ""); + attr_broadcast_add_attraction(121.358695, 31.337023, "小鸟市集", "在天鹅湖的马路对面就是小鸟市集哦,这里是儿童的欢乐营地,更是各种萌宠的温馨之家,小朋友可以在这里与萌宠和小鸟们亲密互动,同时还有各种小朋友喜欢的精彩活动哦!"); + attr_broadcast_add_attraction(121.357883, 31.336482, "鹦鹉世界", "这是一个彩色的世界,来自五大洲的鹦鹉在此集结,是一个名副其实的世界鹦鹉博览园,这里有大型鹦鹉、中型和小型鹦鹉,这里不仅可以观赏到五彩缤纷的毛孩子,大朋友小朋友还可以与它们近距离亲密互动哦,但是在互动过程中千万不要用力抓它们,以免把他们弄疼哦,爱护鸟类,人人有责,从我做起。"); + attr_broadcast_add_attraction(121.356022, 31.336296, "孔雀东南飞", "孔雀被誉为百鸟之王,是最美丽的观赏鸟,是美丽、华贵、吉祥的象征。孔雀的头顶翠绿,羽冠蓝绿而呈尖形;尾部上覆羽特别长,形成尾屏,开屏的时候像一个圆形的扇子,鲜艳美丽;孔雀东南飞表演非常的壮观美丽,上百只孔雀倾情演绎,一场凄美壮观的爱情故事让您不虚此行,流连忘返。孔雀东南飞,五里一徘徊。 大家一定要记好表演时间,准时前往孔雀东南飞表演场看台观看壮观的表演哦!"); + attr_broadcast_add_attraction(121.355376, 31.335896, "彩虹滑梯", ""); + attr_broadcast_add_attraction(121.355366, 31.336917, "兰兰广场", "兰兰广场位于悦林湖畔,1972年9月29日,将大熊猫\"兰兰\"和\"康康\"赠送给日本,没想到在日本大受欢迎,后为纪念熊猫\"兰兰\",松前在熊猫纪念日将这个新品种命名为\"兰兰\",2021年1月1日在公园建此兰兰广场,并树立熊猫雕塑,愿美好与和平永在。"); + attr_broadcast_add_attraction(121.355916, 31.337299, "望湖桥", ""); + attr_broadcast_add_attraction(121.355457, 31.339899, "胭脂林", ""); + attr_broadcast_add_attraction(121.353600, 31.339272, "悦林湖", "悦林湖位于公园二期,湖上鸟类汇集、且拥有皮划艇这项老少皆宜的娱乐项目,沿湖岸边走一圈能欣赏到各种各样精彩纷呈的美景,有娇艳的月季、有灿烂的樱花、有羞涩的小花一阵风徐徐吹来,感受到别具一格的公园风采。"); + attr_broadcast_add_attraction(121.34949, 31.33833, "樱花烧烤园", "您好樱花烧烤园到了,顾村公园樱花烧烤园通过户外野趣的烧烤方式,让您在享受美食的同时还可以尽情享受绿树红花和湖边美景,是家人,友人以及团体聚会的绝佳场所,在绿草如茵的花园旁品尝美食,与大自然共同感受此刻的美好"); + attr_broadcast_add_attraction(121.364371, 31.343164, "2号门便民处", ""); + attr_broadcast_add_attraction(121.359268, 31.339659, "洋庭花园餐厅", ""); + attr_broadcast_add_attraction(121.35677, 31.33876, "水上运动基地", "在上海大都市里,不需要经过严格的专业学习和训练,就可以亲身体验集健身,休闲,娱乐于一体的奥运会水上比赛项目,顾村公园水上运动基地带给您的绝对是一份意外的惊喜,这里阳光和煦,碧水蓝天,清新怡人,和公园集生态,休闲,娱乐一体的公园设施融为一体,水上运动基地设有皮划艇,平台舟,独木舟,SUP浆板,摩托艇,冲锋艇,香蕉船,拖拉圈,OP帆船,滑水等娱乐项目,或惊险刺激,或悠然自得,在悦林湖亦静亦动的水面,无论是运动,休闲,还是观水,赏景,都别有一番情趣,让人亲近自然之水,生命之水"); + attr_broadcast_add_attraction(121.35781, 31.33859, "东方鸟世界", "亲爱的游客东方鸟世界到了,这里是一个集观赏性,趣味性,参与性,科普性为一体的鸟类主题园区, 园内栖息着来自世界各地分属六十多个物种的两千余只珍稀鸟禽,建有孔雀东南飞,飞禽知识馆,鹦鹉世界,火烈鸟湾,鸵鸟园,游禽综合园,猛禽园,孵化中心等16个展区,涵盖游禽,涉禽,攀禽,鸣禽,猛禽,走禽六大鸟类品种,这里是要单独购票的哟,您要去游览的话记得将我停放在路边临时锁定哦"); + attr_broadcast_add_attraction(121.357591, 31.338533, "月季园", "月季主题花园位于二期悦林湖畔,总面积约534亩,其中陆地面积约358亩,月季种植面积22575平方米,展示品种128种,有灌木月季、藤本月季、大花月季、微型月季、树状月季等11个类别。月季主题花园将二期由生态林带向生态花园的品质内涵提升,建造上海第一大以月季为主题的花园。"); + attr_broadcast_add_attraction(121.376079, 31.347508, "1号门归还点", "您好一号门停放点到了,您可以把我归还至这里,并在手机小程序中结束订单,如果还想与我去其他地方玩耍我们就继续出发吧"); + attr_broadcast_add_attraction(121.364270, 31.343103, "2号门归还点", "您好二号门停放点到了,您可以把我归还至这里,并在手机小程序中结束订单,如果还想陪我去其他地方玩耍我们就继续出发吧"); + attr_broadcast_add_attraction(121.356886, 31.340930, "3号门归还点", "您好三号门停放点到了,您可以把我归还至这里,并在手机小程序中结束订单,如果还想陪我去其他地方玩耍我们就继续出发吧"); // 初始化状态 @@ -412,7 +459,7 @@ void attr_broadcast_init(void) { osThreadAttr_t attr_broadcast_task_attr = {0}; attr_broadcast_task_attr.name = "attr_broadcast_task"; - attr_broadcast_task_attr.stack_size = 4096 * 8; + attr_broadcast_task_attr.stack_size = 4096 * 10; attr_broadcast_task_attr.priority= osPriorityNormal; Attr_Broadcast_ThreadId= osThreadNew(attr_broadcast_task, 0, &attr_broadcast_task_attr); diff --git a/custom/jt808/inc/jt808_set_TermParam.h b/custom/jt808/inc/jt808_set_TermParam.h index 6188be5..df7cfb6 100644 --- a/custom/jt808/inc/jt808_set_TermParam.h +++ b/custom/jt808/inc/jt808_set_TermParam.h @@ -6,6 +6,17 @@ #pragma pack(1) + + +// 本地围栏配置结构(用于预置电子围栏) +typedef struct { + uint32_t area_id; // 围栏区域ID + uint16_t area_att; // 区域属性:0x0001=景区围栏, 0x0002=禁停区围栏 + uint16_t points_num; // 区域顶点数量 + AreaPoint_t *points; // 区域顶点坐标(最多支持4边形) +} LocalFenceConfig_t; + + // 终端参数设置项参数ID typedef enum { ID_HeartBeatInterval = 0x0001, // DWORD, 终端心跳发送间隔(s) diff --git a/custom/jt808/src/jt808_msg_parse.c b/custom/jt808/src/jt808_msg_parse.c index f7e8ca4..05cc39a 100644 --- a/custom/jt808/src/jt808_msg_parse.c +++ b/custom/jt808/src/jt808_msg_parse.c @@ -130,7 +130,7 @@ static int jt808_BodyParse(void *Prsmsg_body, PrsResult_t *Result){ break; } case ID_Set_Polygon_area:{// 设置多边形区域 - int ret = 0; + /* int ret = 0; uint32_t Area_ID; // 区域ID uint16_t Area_att; // 区域属性 uint16_t Area_Points_Num; // 区域内点的数量 @@ -150,13 +150,15 @@ static int jt808_BodyParse(void *Prsmsg_body, PrsResult_t *Result){ }else{ Result->Rsp_result = Msg_invalid; } + + */ Result->Rsp_flow_num = Result->msg_head.msg_flow_num; Result->Rsp_msg_id = Result->msg_head.msg_id; jt808_pkg_send(ID_Term_GenResp, 0);// 发送终端通用应答 - break; + break; } case ID_Delete_Polygon_area:{// 删除多边形区域 - int ret = 0; + /* int ret = 0; uint8_t Area_ID_Num = ((uint8_t *)Prsmsg_body)[0]; // 区域ID个数 Prsmsg_body = (void *)((uint8_t *)Prsmsg_body + 1); // 跳过1字节 Result->Rsp_result = Msg_ok; @@ -167,9 +169,11 @@ static int jt808_BodyParse(void *Prsmsg_body, PrsResult_t *Result){ break; } } + */ Result->Rsp_flow_num = Result->msg_head.msg_flow_num; Result->Rsp_msg_id = Result->msg_head.msg_id; jt808_pkg_send(ID_Term_GenResp, 0);// 发送终端通用应答 + break; } case ID_Data_Down:{// 数据下行透传 diff --git a/custom/jt808/src/jt808_set_TermParam.c b/custom/jt808/src/jt808_set_TermParam.c index ccdbf1d..3900775 100644 --- a/custom/jt808/src/jt808_set_TermParam.c +++ b/custom/jt808/src/jt808_set_TermParam.c @@ -3,6 +3,7 @@ #include "jt808_msg_pkg.h" #include "jt808_msg_parse.h" #include "jt808_pkg_transmit.h" +#include "jt808_electronic_fence.h" #include "cm_sys.h" #include "cm_os.h" #include "cm_fs.h" @@ -13,10 +14,121 @@ #include "local_tts.h" #include "control_out.h" + +#define LOCAL_FENCE_COUNT (sizeof(local_fences) / sizeof(LocalFenceConfig_t)) + Term_Param_item_t jt808_term_param_item; // 终端参数项 osMutexId_t term_param_mutex = NULL; // 终端参数项互斥锁 osMutexId_t Polygon_fence_mutex = NULL; // 多边形围栏互斥锁 +static const LocalFenceConfig_t local_fences[] = { + { // 第一个围栏 (8边形禁停区) + .area_id = 1, + .area_att = 0x0001, // 禁停区围栏 + .points_num = 8, + .points = (AreaPoint_t[]){ // 使用复合字面量 + {.lat = 31338039, .lng = 121342339}, // 31.338039, 121.342339 + {.lat = 31345049, .lng = 121357544}, // 31.345049, 121.357544 + {.lat = 31342006, .lng = 121359044}, // 31.342006, 121.359044 + {.lat = 31351253, .lng = 121378608}, // 31.351253, 121.378608 + {.lat = 31347419, .lng = 121389395}, // 31.347419, 121.389395 + {.lat = 31339808, .lng = 121373808}, // 31.339808, 121.373808 + {.lat = 31333732, .lng = 121354182}, // 31.333732, 121.354182 + {.lat = 31333178, .lng = 121345380} // 31.333178, 121.345380 + } + }, + { // 第二个围栏 (4边形景区) + .area_id = 2, + .area_att = 0x0002, // 景区围栏 + .points_num = 4, + .points = (AreaPoint_t[]){ + {.lat = 31344904, .lng = 121366191}, // 31.344904, 121.366191 + {.lat = 31345361, .lng = 121367180}, // 31.345361, 121.367180 + {.lat = 31344801, .lng = 121367561}, // 31.344801, 121.367561 + {.lat = 31344336, .lng = 121366509} // 31.344336, 121.366509 + } + }, + { // 第三个围栏 (4边形禁停区) + .area_id = 3, + .area_att = 0x0002, // 禁停区围栏 + .points_num = 4, + .points = (AreaPoint_t[]){ + {.lat = 31339885, .lng = 121358303}, // 31.339885, 121.358303 + {.lat = 31340580, .lng = 121359765}, // 31.340580, 121.359765 + {.lat = 31340179, .lng = 121359985}, // 31.340179, 121.359985 + {.lat = 31339484, .lng = 121358856} // 31.339484, 121.358856 + } + } +}; + + +// 打印已加载的围栏信息 +void print_loaded_fences(void) { + osMutexAcquire(Polygon_fence_mutex, osWaitForever); + + fence_Polygon_area_t *area = jt808_term_param_item.fence_polygon_area; + int count = 0; + + if (area == NULL) { + JT808_DEBUG("No fence areas loaded\n"); + osMutexRelease(Polygon_fence_mutex); + return; + } + + JT808_DEBUG("Loaded fence areas:\n"); + while (area != NULL) { + JT808_DEBUG("Area %d: ID=%u, Attr=0x%04X, Points=%d\n", + ++count, + area->Area_ID, + area->Area_att, + area->Area_Points_Num); + + for (int i = 0; i < area->Area_Points_Num; i++) { + uint32_t lat = Swap32(area->Area_Points[i].lat); + uint32_t lng = Swap32(area->Area_Points[i].lng); + + JT808_DEBUG(" Point %d: Lat=%.6f(%u), Lng=%.6f(%u)\n", + i, + (double)lat / 1e6, lat, + (double)lng / 1e6, lng); + } + area = area->next; + } + + osMutexRelease(Polygon_fence_mutex); +} + + +void load_local_fence_data(void) { + JT808_DEBUG("Loading local fence data...\n"); + + // 清除所有现有围栏 + jt808_remove_fence_Polygon_area(0); + + // 加载预置围栏 + for (int i = 0; i < LOCAL_FENCE_COUNT; i++) { + const LocalFenceConfig_t *config = &local_fences[i]; + + // 跳过无效配置 + if (config->points_num < 3) continue; + + jt808_add_tail_fence_Polygon_area( + config->area_id, + config->area_att, + config->points_num, + config->points + ); + + JT808_DEBUG(" - Added fence ID %u: %s with %d points\n", + config->area_id, + (config->area_att == 0x0001) ? "Scenic" : "Forbidden", + config->points_num); + } + + // 打印加载结果 + print_loaded_fences(); +} + // 控制车辆状态 void jt808_Set_CarStatus(uint8_t status){ diff --git a/custom/radar/inc/radar.h b/custom/radar/inc/radar.h index d13ca96..0cd3165 100644 --- a/custom/radar/inc/radar.h +++ b/custom/radar/inc/radar.h @@ -24,6 +24,9 @@ typedef struct radar_data{ uint16_t distance; } radar_data_t; + +extern osMutexId_t radar_mutex; // 互斥锁 + extern radar_data_t radar_data; // 雷达测离初始化 diff --git a/custom/radar/src/radar.c b/custom/radar/src/radar.c index 57e8e08..b18b808 100644 --- a/custom/radar/src/radar.c +++ b/custom/radar/src/radar.c @@ -127,6 +127,11 @@ void radar_CheckData(uint8_t *data, uint16_t data_len){ static void RADAR_TaskHandle(void *param){ uint8_t temp_count =0; while(1){ + + + + if (1==sys_sta.P_Radar_EN) + { if(radar_CMDSend_cnt != radar_CMDReceive_cnt){ // 发送命令和接收命令计数不一致时,复位自动刹车和减速状态 temp_count++; if(temp_count > 10){ // 连续10次未收到数据,复位自动刹车和减速状态 @@ -147,8 +152,11 @@ static void RADAR_TaskHandle(void *param){ sys_sta.A_Speed_Cut =0; // 清空自动减速状态 sys_sta.A_brake =0; // 清空自动刹车状态 } + + } + osDelay(140/5); // 140ms - } + } } // 雷达测离初始化