2024-10-14 22:11:43 +08:00
|
|
|
|
#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"
|
2024-11-08 18:02:29 +08:00
|
|
|
|
#include "cm_modem.h"
|
2024-10-14 22:11:43 +08:00
|
|
|
|
#include "app_uart.h"
|
|
|
|
|
|
#include "gps_config.h"
|
2024-11-08 18:02:29 +08:00
|
|
|
|
#include "app_common.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include "jt808_msg_pkg.h"
|
|
|
|
|
|
#include "jt808_msg_parse.h"
|
|
|
|
|
|
#include "jt808_pkg_transmit.h"
|
|
|
|
|
|
#include "tcp_client.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include "local_tts.h"
|
|
|
|
|
|
|
|
|
|
|
|
#define SECOND_OF_DAY (24*60*60)
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct cm_tm {
|
|
|
|
|
|
int tm_sec; /* 秒 – 取值区间为[0,59] */
|
|
|
|
|
|
int tm_min; /* 分 - 取值区间为[0,59] */
|
|
|
|
|
|
int tm_hour; /* 时 - 取值区间为[0,23] */
|
|
|
|
|
|
int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */
|
|
|
|
|
|
int tm_mon; /* 月份 */
|
|
|
|
|
|
int tm_year; /* 年份 */
|
|
|
|
|
|
}cm_tm_t;
|
|
|
|
|
|
|
|
|
|
|
|
// static const char * weekday[] = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
|
|
|
|
|
|
// static const char DayOfMon[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
|
|
|
|
|
|
|
2024-10-14 22:11:43 +08:00
|
|
|
|
|
|
|
|
|
|
osThreadId_t OC_APP_TaskHandle;
|
|
|
|
|
|
|
2024-11-08 18:02:29 +08:00
|
|
|
|
|
|
|
|
|
|
// void oc_ring_cb(unsigned char *param)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// if(0 == strncmp((char *)param, "\r\nRING",6))//来电提示
|
|
|
|
|
|
// {
|
|
|
|
|
|
// app_printf("oc_ring_cb:%s\n",param);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// else if (0 == strncmp((char *)param, "\r\n+CLCC:",8)) //来电信息
|
|
|
|
|
|
// {
|
|
|
|
|
|
// app_printf("oc_ring_cb:%s\n",param);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// else if(0 == strncmp((char *)param, "\r\nNO CARRIER",12))//对方挂断
|
|
|
|
|
|
// {
|
|
|
|
|
|
// app_printf("oc_ring_cb:%s\n",param);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// if (0 == strncmp((char *)param, "\r\n+CMTI:",8))//短信信息
|
|
|
|
|
|
// {
|
|
|
|
|
|
// app_printf("message:%s\n",param);
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// static void cm_sec_to_date(long lSec, cm_tm_t *tTime)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// unsigned short i,j,iDay;
|
|
|
|
|
|
// unsigned long lDay;
|
|
|
|
|
|
|
|
|
|
|
|
// lDay = lSec / SECOND_OF_DAY;
|
|
|
|
|
|
// lSec = lSec % SECOND_OF_DAY;
|
|
|
|
|
|
|
|
|
|
|
|
// i = 1970;
|
|
|
|
|
|
// while(lDay > 365)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// if(((i%4==0)&&(i%100!=0)) || (i%400==0))
|
|
|
|
|
|
// {
|
|
|
|
|
|
// lDay -= 366;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// else
|
|
|
|
|
|
// {
|
|
|
|
|
|
// lDay -= 365;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// i++;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// if((lDay == 365) && !(((i%4==0)&&(i%100!=0)) || (i%400==0)))
|
|
|
|
|
|
// {
|
|
|
|
|
|
// lDay -= 365;
|
|
|
|
|
|
// i++;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// tTime->tm_year = i;
|
|
|
|
|
|
// for(j=0;j<12;j++)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// if((j==1) && (((i%4==0)&&(i%100!=0)) || (i%400==0)))
|
|
|
|
|
|
// {
|
|
|
|
|
|
// iDay = 29;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// else
|
|
|
|
|
|
// {
|
|
|
|
|
|
// iDay = DayOfMon[j];
|
|
|
|
|
|
// }
|
|
|
|
|
|
// if(lDay >= iDay) lDay -= iDay;
|
|
|
|
|
|
// else break;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// tTime->tm_mon = j+1;
|
|
|
|
|
|
// tTime->tm_mday = lDay+1;
|
|
|
|
|
|
// tTime->tm_hour = ((lSec / 3600))%24;//这里注意,世界时间已经加上北京时间差8,
|
|
|
|
|
|
// tTime->tm_min = (lSec % 3600) / 60;
|
|
|
|
|
|
// tTime->tm_sec = (lSec % 3600) % 60;
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// static uint8_t cm_time_to_weekday(cm_tm_t *t)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// uint32_t u32WeekDay = 0;
|
|
|
|
|
|
// uint32_t u32Year = t->tm_year;
|
|
|
|
|
|
// uint8_t u8Month = t->tm_mon;
|
|
|
|
|
|
// uint8_t u8Day = t->tm_mday;
|
|
|
|
|
|
// if(u8Month < 3U)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// /*D = { [(23 x month) / 9] + day + 4 + year + [(year - 1) / 4] - [(year - 1) / 100] + [(year - 1) / 400] } mod 7*/
|
|
|
|
|
|
// u32WeekDay = (((23U * u8Month) / 9U) + u8Day + 4U + u32Year + ((u32Year - 1U) / 4U) - ((u32Year - 1U) / 100U) + ((u32Year - 1U) / 400U)) % 7U;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// else
|
|
|
|
|
|
// {
|
|
|
|
|
|
// /*D = { [(23 x month) / 9] + day + 4 + year + [year / 4] - [year / 100] + [year / 400] - 2 } mod 7*/
|
|
|
|
|
|
// u32WeekDay = (((23U * u8Month) / 9U) + u8Day + 4U + u32Year + (u32Year / 4U) - (u32Year / 100U) + (u32Year / 400U) - 2U ) % 7U;
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// if (0U == u32WeekDay)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// u32WeekDay = 7U;
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// return (uint8_t)u32WeekDay;
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void print_network_info(void){
|
|
|
|
|
|
cm_cereg_state_t cereg_state = {0};
|
|
|
|
|
|
|
|
|
|
|
|
if(0 == cm_modem_get_cpin()){
|
|
|
|
|
|
app_printf("sim card ready!\r\n\n");
|
|
|
|
|
|
}else{
|
|
|
|
|
|
app_printf("sim card not ready!\r\n\n");
|
|
|
|
|
|
}
|
|
|
|
|
|
if(0 ==cm_modem_get_cereg_state(&cereg_state)){ // 获取PS网络注册状态
|
|
|
|
|
|
app_printf("cereg_state:%d\n",cereg_state.state); // 注册状态
|
|
|
|
|
|
}else{
|
|
|
|
|
|
app_printf("cereg_get_state fail!\n\n");
|
|
|
|
|
|
}
|
|
|
|
|
|
if(cm_modem_get_pdp_state(1) == 1){ //网络就绪
|
|
|
|
|
|
app_printf("network ready\n");
|
|
|
|
|
|
}else{
|
|
|
|
|
|
app_printf("waiting for network...\n");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
led_status_t led_status = {0};
|
|
|
|
|
|
osEventFlagsId_t LED_EventFlags = NULL;
|
|
|
|
|
|
|
2024-10-14 22:11:43 +08:00
|
|
|
|
void my_appimg_enter(char *param){
|
2024-10-18 00:41:54 +08:00
|
|
|
|
|
2024-11-08 18:02:29 +08:00
|
|
|
|
LED_EventFlags =osEventFlagsNew(NULL);
|
|
|
|
|
|
if(NULL == LED_EventFlags){
|
|
|
|
|
|
app_printf("LED_EventFlags create fail\n");
|
|
|
|
|
|
// return;
|
|
|
|
|
|
}
|
2024-10-14 22:11:43 +08:00
|
|
|
|
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);//初始化之前一定要先设置引脚复用
|
2024-11-08 18:02:29 +08:00
|
|
|
|
cm_gpio_init(CM_GPIO_NUM_0, &cfg);
|
|
|
|
|
|
cm_gpio_set_level(CM_GPIO_NUM_0, 0);
|
|
|
|
|
|
|
|
|
|
|
|
// cm_iomux_set_pin_func(CM_IOMUX_PIN_77, CM_IOMUX_FUNC_FUNCTION2);//初始化之前一定要先设置引脚复用
|
|
|
|
|
|
// cm_gpio_init(CM_GPIO_NUM_13, &cfg);
|
|
|
|
|
|
// cm_gpio_set_level(CM_GPIO_NUM_13, 0);
|
2024-10-14 22:11:43 +08:00
|
|
|
|
|
|
|
|
|
|
app_uart_init();
|
|
|
|
|
|
app_printf("Hello, world!\r\n");
|
2024-11-08 18:02:29 +08:00
|
|
|
|
// adc_dac_init();
|
|
|
|
|
|
local_tts_init();
|
|
|
|
|
|
|
|
|
|
|
|
local_tts_mute(0);// 取消静音
|
|
|
|
|
|
local_tts_volume(10); // 设置音量为5
|
|
|
|
|
|
local_tts_set(8, 15, CM_LOCAL_TTS_DIGIT_AUTO);
|
|
|
|
|
|
|
|
|
|
|
|
while(1){
|
|
|
|
|
|
|
|
|
|
|
|
cm_gpio_set_level(CM_GPIO_NUM_0, 1);
|
|
|
|
|
|
local_tts_text_play("欢迎使用莱昂特智能终端设备...。",0 ,osWaitForever); // 0:表示自动计算字符串长度,10000表示最大等待时间
|
|
|
|
|
|
// osDelay(3000/5);
|
|
|
|
|
|
cm_gpio_set_level(CM_GPIO_NUM_0, 0);
|
|
|
|
|
|
// osDelay(3000/5);
|
|
|
|
|
|
local_tts_text_play("欢迎使用游园猫,您的专属智能向导。",0 ,osWaitForever); // 0:表示自动计算字符串长度,10000表示最大等待时间
|
2024-10-18 00:41:54 +08:00
|
|
|
|
}
|
2024-11-08 18:02:29 +08:00
|
|
|
|
//--------------------------------------------
|
|
|
|
|
|
{
|
|
|
|
|
|
// cm_tm_t t;
|
|
|
|
|
|
// int i;
|
|
|
|
|
|
int ret;
|
|
|
|
|
|
char buf[CM_VER_LEN] = {0};
|
|
|
|
|
|
int pdp_time_out=0;
|
|
|
|
|
|
cm_fs_system_info_t info = {0, 0};
|
|
|
|
|
|
cm_heap_stats_t stats = {0};
|
|
|
|
|
|
app_printf("\n\n\n\n\n");
|
|
|
|
|
|
app_printf("CM OpenCPU Starts\n");
|
|
|
|
|
|
cm_sys_get_cm_ver(buf, CM_VER_LEN);
|
|
|
|
|
|
app_printf("SDK VERSION:%s\n", buf);
|
|
|
|
|
|
cm_fs_getinfo(&info);
|
|
|
|
|
|
cm_mem_get_heap_stats(&stats);
|
|
|
|
|
|
app_printf("fs total:%d,remain:%d\n", info.total_size, info.free_size);
|
|
|
|
|
|
app_printf("heap total:%d,remain:%d\n",stats.total_size,stats.free);
|
|
|
|
|
|
|
|
|
|
|
|
// app_printf("waiting for network...\n");
|
|
|
|
|
|
// while(1){
|
|
|
|
|
|
// if(pdp_time_out>10){
|
|
|
|
|
|
// app_printf("network timeout\n");
|
|
|
|
|
|
// break;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// if(cm_modem_get_pdp_state(1) == 1){
|
|
|
|
|
|
// app_printf("network ready\n");
|
|
|
|
|
|
// break;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// osDelay(200);
|
|
|
|
|
|
// pdp_time_out++;
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
// -----------------------------------------------------
|
|
|
|
|
|
jt808_set_term_param_init();
|
|
|
|
|
|
jt808_init();
|
|
|
|
|
|
tcp_client_init();
|
|
|
|
|
|
gps_config_init();
|
|
|
|
|
|
|
|
|
|
|
|
uint32_t led_event = 0;
|
2024-10-14 22:11:43 +08:00
|
|
|
|
while(1){
|
2024-11-08 18:02:29 +08:00
|
|
|
|
led_event = osEventFlagsWait(LED_EventFlags, 0x0000000f, osFlagsWaitAny, 0); //0等待
|
|
|
|
|
|
if (led_event & 0x80000000) { // 错误处理
|
|
|
|
|
|
// app_printf("led task error\n");
|
|
|
|
|
|
}else if(led_event & EVENT_NETWORK_READY){ // 网络就绪
|
|
|
|
|
|
app_printf("led network ready\n");
|
|
|
|
|
|
led_status.network_ready = 1;
|
|
|
|
|
|
}else if(led_event & EVENT_NETWORK_DISCONNECT){ // 网络断开
|
|
|
|
|
|
app_printf("led network disconnect\n");
|
|
|
|
|
|
led_status.network_ready = 0;
|
|
|
|
|
|
}else if(led_event & EVENT_GPS_LOCATE_SUCCESS){ // GPS定位成功
|
|
|
|
|
|
app_printf("led GPS locate success\n");
|
|
|
|
|
|
led_status.gps_ready = 1;
|
|
|
|
|
|
}else if(led_event & EVENT_GPS_NO_LOCATE){ // GPS无定位
|
|
|
|
|
|
app_printf("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
|
|
|
|
|
|
}
|
2024-10-14 22:11:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-09-02 17:54:29 +08:00
|
|
|
|
|
2024-11-08 18:02:29 +08:00
|
|
|
|
void led_set_event(led_event_t event){
|
|
|
|
|
|
if(NULL == LED_EventFlags){
|
|
|
|
|
|
app_printf("LED_EventFlags is NULL\n");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
osEventFlagsSet(LED_EventFlags, event);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-09-02 17:54:29 +08:00
|
|
|
|
|
|
|
|
|
|
int cm_opencpu_entry(char * param)
|
|
|
|
|
|
{
|
2024-10-14 22:11:43 +08:00
|
|
|
|
osThreadAttr_t app_task_attr = {0};
|
|
|
|
|
|
app_task_attr.name = "main_task";
|
2024-11-08 18:02:29 +08:00
|
|
|
|
app_task_attr.stack_size = 4096 * 4;
|
2024-10-14 22:11:43 +08:00
|
|
|
|
app_task_attr.priority = osPriorityNormal;
|
|
|
|
|
|
|
|
|
|
|
|
OC_APP_TaskHandle = osThreadNew((osThreadFunc_t)my_appimg_enter,0,&app_task_attr);
|
|
|
|
|
|
|
2024-09-02 17:54:29 +08:00
|
|
|
|
return 0;
|
|
|
|
|
|
}
|