CARPLAY版本整理

This commit is contained in:
2025-01-21 16:49:37 +08:00
commit f0fb64e4e6
26542 changed files with 13719676 additions and 0 deletions

View File

@ -0,0 +1,86 @@
#include "awtk.h"
#include "../common/navigator.h"
#include "../common/data_port.h"
#include "user_data.h"
#ifndef WITH_MVVM
extern daily_data_t custom_data;
extern Device_t device;
#ifndef AMT630HV100
uint32_t tire_front_time = 0;
uint32_t tire_rear_time = 0;
// uint8_t save_tire_flag = 0;
uint8_t mile_flag = 0;
void TXCMD_Other_Set(unsigned char time_buffer[],uint8_t len){
DEBUG_PRINT("TXXMD: ");
for(uint8_t i=0;i<13;i++){
DEBUG_PRINT("%x ",time_buffer[i]);
}
DEBUG_PRINT("\n");
}
// uint8_t save_tire_flag = 0;
uint8_t bt2_switch_time = 1;
uint8_t power_on_flag = 0;
uint8_t tcs_twinkle = 0;
uint8_t tcs_switch = 0;
uint8_t can101_flag = 0;
uint8_t can_flag = 0;
uint8_t flash_flag = 0;
uint8_t dtc_flag = 0;
uint8_t bt_upgrade_flag = 0;
uint8_t time_flag = 0;
int test_light = 0;
SfudData_t sfud_data_saved = {0};
char bt121_name[50];
char bt121_name1[50];
void SaveDataToFlash(SfudData_t user_data){
}
void BT2_Switch(int type){
switch(type){
case 0://关闭蓝牙
Set_sys_bt_on_off(0);
break;
case 1://开启蓝牙
Set_sys_bt_on_off(1);
break;
default:
break;
}
}
void cat1_enable(void){}
void BT2_init_open(void){}
void BT2_init_close(void){}
void light_off(void){}
void cp_wlan_start(void){}
void oil_led_off(void){}
void oil_led_on(void){}
void vbat_led_on(void){}
void vbat_led_off(void){}
void SaveMileageData(uint32_t trip_data,uint32_t total_data){}
void read_mileage(uint32_t trip_data,uint32_t total_data){}
int console_send_atcmd(char* cAtCmd, unsigned short length){}
void Phone_book_analysis(void){}
void BW_121_Switch(uint8_t type){
Set_sys_bt_on_off(type);
}
void UART3_Type_regression(void){}
void UART3_Modification_Type(void){}
void carlink_cp_enable(uint8_t type){}
void carlink_aa_enable(uint8_t type){}
void carlink_ec_enable(uint8_t type){}
// 封装的函数,根据位位置获取对应的值
uint8_t getBitValue(uint8_t count, int bitPosition) {
return (count >> bitPosition) & 0x1;
}
#endif
#endif /*WITH_MVVM*/

View File

@ -0,0 +1,110 @@
#include "awtk.h"
#include "navigator.h"
#include "code_protocol.h"
#define MAX_SIZE 16
// 初始化链表
void initFifoLinkedList(struct FifoLinkedList* list) {
list->head = NULL;
list->tail = NULL;
list->size = 0;
}
// 在链表尾部插入数据
void push(struct FifoLinkedList* list, uint32_t data) {
printf("push-------------------------data =%d , %04x.\r\n",data,data);
//当数据满了之后不再写入数据
if (list->size == MAX_SIZE) {
printf("Error: The list is full. Cannot push more data.\n");
return;
}
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
if (list->size == 0) {
list->head = list->tail = newNode;
} else {
list->tail->next = newNode;
list->tail = newNode;
}
list->size++;
/*
//当数据满了之后覆盖之前的数据
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
if (list->size == 0) {
list->head = list->tail = newNode;
} else {
list->tail->next = newNode;
list->tail = newNode;
}
if (list->size < 16) {
list->size++;
} else {
// 如果链表大小超过16则删除头部节点
struct Node* temp = list->head;
list->head = list->head->next;
free(temp);
}*/
}
// 从链表头部弹出数据
uint16_t pop(struct FifoLinkedList* list) {
if (list->size == 0) {
printf("Error: The list is empty.\n");
return 0; // 返回默认值
}
struct Node* temp = list->head;
uint16_t data = list->head->data;
list->head = list->head->next;
free(temp);
list->size--;
return data;
}
// 从链表中取出指定的目标数据并赋值给count
void retrieveData(struct FifoLinkedList* list, uint8_t target, uint32_t* count) {
struct Node* current = list->head;
while (current != NULL) {
if (current->data == target) {
*count = current->data;
printf("Found the target data: %d\n", target);
return;
}
current = current->next;
}
//printf("The target data is not found in the list.\n");
}
// 打印链表中的数据
void printList(struct FifoLinkedList* list) {
struct Node* current = list->head;
printf("FifoLinkedList: ");
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
// int main() {
// struct FifoLinkedList fifoList1;
// struct FifoLinkedList fifoList2;
// initFifoLinkedList(&fifoList1);
// initFifoLinkedList(&fifoList2);
// push(&fifoList1, 123);
// push(&fifoList1, 456);
// push(&fifoList1, 789);
// printList(&fifoList1); // 输出: FifoLinkedList: 123 456 789
// pop(&fifoList1);
// printList(&fifoList1); // 输出: FifoLinkedList: 456 789
// return 0;
// }

View File

@ -0,0 +1,31 @@
#ifndef CODE_PROTOCOL_H
#define CODE_PROTOCOL_H
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include "tkc/types_def.h"
// 定义链表节点
struct Node {
uint32_t data; // 存储的16位数据
struct Node* next; // 指向下一个节点的指针
};
// 定义链表结构
struct FifoLinkedList {
struct Node* head; // 链表头指针
struct Node* tail; // 链表尾指针
int size; // 链表当前大小
};
void initFifoLinkedList(struct FifoLinkedList* list);
void push(struct FifoLinkedList* list, uint32_t data);
uint16_t pop(struct FifoLinkedList* list);
void printList(struct FifoLinkedList* list);
void retrieveData(struct FifoLinkedList* list, uint8_t target, uint32_t* count);
extern struct FifoLinkedList code_fifoList1;
extern struct FifoLinkedList code_fifoList2;
#endif

View File

@ -0,0 +1,324 @@
#include "awtk.h"
#include "navigator.h"
#include "navigator.h"
#include "data_port.h"
#include "user_data.h"
#include "universal.h"
#include "data_communication_send.h"
#include "moto_config.h"
unsigned char time_software_request[9] = {0xAA,0x06,0x01,0x04,0,0,0,0,0x0c};
unsigned char ota_request[8] = {0x7e,0x00,0x05,0x02,0x03,0x01,0x00,0x01};
unsigned char defect_code_request[9] = {0xAA,0x06,0x04,0x04,0,0,0,0,0x0c};
unsigned char trip_reset[9] = {0xAA,0x06,0x03,0x04,0,0,0,0,0x07};
unsigned char time_buffer[13] = {0xAA,0x06,0x02,0x04,0,0,0,0,0,0,0,0};
unsigned char wifi_buffer[6] = {0xAA,0x03,0x08,0x01,0,0};
uint8_t wifi_flag = 0;
extern uint32_t tire_front_time;
extern uint32_t tire_rear_time;
extern unsigned char time_buffer[13];
uint8_t send_flag = 0;
extern uint8_t uart3_flag;
extern uint8_t flash_flag;
//发送询问时间+版本号查询
void Send_software_version(void){
DEBUG_PRINT("Send_software_version.\r\n");
if(uart3_flag){
uart3_flag = 0;
printf("uart3>>open.\r\n");
UART3_Type_regression();
// urtflag = 2;
}
time_software_request[4] = Get_sys_softwar_host();
time_software_request[5] = Get_sys_softwar_order();
uint8_t count = 0;
for(uint8_t i=0;i<6;i++){
count += time_software_request[2+i];
}
time_software_request[8] = count;
TXCMD_Other_Set(time_software_request,9);
send_flag++;
if(send_flag>=3 && flash_flag){
send_flag = 0;
uart3_flag = 1;
}
}
//发送胎压信息
void Send_tire_pressure_information(void){
#if UI_VIEW_TIRE_PRESSURE
unsigned char trie_reset[19] = {0xAA,0x10,0x05,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
uint8_t i=0;
if(mac_address_normal(custom_data.front_pressure.mac_address,6)){
trie_reset[4] = 0x01;
for(i=0;i<6;i++){
trie_reset[5+i] = custom_data.front_pressure.mac_address[i];
}
}
if(mac_address_normal(custom_data.rear_pressure.mac_address,6)){
trie_reset[11] = 0x01;
for(i=0;i<6;i++){
trie_reset[12+i] = custom_data.rear_pressure.mac_address[i];
}
}
uint8_t count = 0;
for(uint8_t i=0;i<16;i++){
count += trie_reset[2+i];
}
trie_reset[18] = count;
TXCMD_Other_Set(trie_reset,19);
#endif
}
//发送OTA升级判断
void Send_ota_state(uint8_t state){
ota_request[1] = state;
ota_request[6] = Get_sys_softwar_host();
ota_request[7] = Get_sys_softwar_order();
// vTaskDelay(100);
#ifdef AMT630HV100
vTaskDelay(100);
#else
sleep_ms(100);
#endif
TXCMD_Other_Set(ota_request,8);
}
//发送当前故障码+历史故障码 有数据更新才会发送
void Send_defect_code(void){
defect_code_request[4] = custom_data.now_defect_code>>8&0xFF;
defect_code_request[5] = custom_data.now_defect_code&0xFF;
defect_code_request[6] = custom_data.his_defect_code>>8&0xFF;
defect_code_request[7] = custom_data.his_defect_code&0xFF;
uint8_t count = 0;
for(uint8_t i=0;i<6;i++){
count += defect_code_request[2+i];
}
defect_code_request[8] = count;
TXCMD_Other_Set(defect_code_request,9);
}
void Send_trip_reset(void){
DEBUG_PRINT("trip reset .\r\n");
TXCMD_Other_Set(trip_reset,9);
Set_sys_odo_reset(5);
}
void Send_bt_time(void){
TXCMD_Other_Set(time_buffer,9);
Set_sys_ttrb_time(5);
}
void Send_list_set_time(uint32_t sum){
uint32_t sum1,sum2,sum3,sum4;
uint8_t count=0;
printf("sum1 = %d , %08x.\n",sum,sum);
sum4=sum & 0xFF;
sum3=sum>>8 & 0xFF;
sum2=sum>>16 & 0xFF;
sum1=sum>>24 & 0xFF;
time_buffer[0] = 0xAA;//
time_buffer[1] = 0x06;//命令长度
time_buffer[2] = 0x02;//时间指令
time_buffer[3] = 0x04;//TLV结构
time_buffer[4] = sum1;
time_buffer[5] = sum2;
time_buffer[6] = sum3;
time_buffer[7] = sum4;
count = 0;
for(uint8_t i=0;i<6;i++){
count += time_buffer[2+i];
}
time_buffer[8] = count;
Send_bt_time();
DEBUG_PRINT("start send time information.\r\n");
#ifdef AMT630HV100
vTaskDelay(5);
#else
sleep_ms(5);
#endif
DEBUG_PRINT("send time information ok.\r\n");
}
void send_wifi_set_time(int time_buf[]){
date_time_t dt;
date_time_init(&dt);
uint32_t sum;
//uint8_t sum1,sum2,sum3,sum4;
dt.year = time_buf[0];
dt.month = time_buf[1];
dt.wday = time_buf[2];
dt.hour = time_buf[3];
dt.minute = time_buf[4];
dt.second = time_buf[5];
date_time_set(&dt);
uint32_t check_buffer[6];
check_buffer[0] = dt.year;
check_buffer[1] = dt.month;
check_buffer[2] = dt.day;
check_buffer[3] = dt.hour;
check_buffer[4] = dt.minute;
check_buffer[5] = dt.second;
sum = fml_time_to_stamp(check_buffer);
sum += 28800;
Send_list_set_time(sum);
}
//获取ap名字
void ap_get_ssid(char *strQrText, char *text) {
int len = strlen(strQrText);
int i;
int ssidIndex = -1;
// 找到 "ssid=" 的位置
for (i = 0; i < len - 5; i++) {
if (strncmp(strQrText + i, "ssid=", 5) == 0) {
ssidIndex = i + 5;
break;
}
}
if (ssidIndex != -1) {
int j = ssidIndex;
while (j < len && strQrText[j] != '&') {
text[j - ssidIndex] = strQrText[j];
j++;
}
text[j - ssidIndex] = '\0'; // 添加字符串结束符
} else {
strcpy(text, ""); // 如果未找到 "ssid=",则将 text 置为空字符串
}
}
//获取ap密码
void ap_get_pwd(char *strQrText, char *text) {
int len = strlen(strQrText);
int i;
int pwdIndex = -1;
// 找到 "pwd=" 的位置
for (i = 0; i < len - 4; i++) {
if (strncmp(strQrText + i, "pwd=", 4) == 0) {
pwdIndex = i + 4;
break;
}
}
if (pwdIndex != -1) {
int j = pwdIndex;
while (j < len && strQrText[j] != '&') {
text[j - pwdIndex] = strQrText[j];
j++;
}
text[j - pwdIndex] = '\0'; // 添加字符串结束符
} else {
strcpy(text, ""); // 如果未找到 "pwd=",则将 text 置为空字符串
}
}
extern char strQrText[200];
#define FRAMELEN 100
uint8_t GetWifiName(unsigned char *pBuff)
{
uint8_t data_len = 0;
uint8_t count = 0;
memset(pBuff, 0, FRAMELEN); //buff初始化
pBuff[0] = 0xAA;
pBuff[2] = 0x07;
char tmpStr[50] = {0};
#if (MOTO_WARE_HOSE == MOTO_ICMX_A580A)
strcpy(tmpStr, strQrText);
#elif (MOTO_WARE_HOSE == MOTO_ICMX_A590A)
ap_get_ssid(strQrText, tmpStr);
#endif
//获取长度
uint8_t ssid_len = strlen(tmpStr);
// printf("ssid_len=%d,data>",ssid_len);
for(data_len=0;data_len<ssid_len;data_len++){
pBuff[4+data_len] = tmpStr[data_len];
}
// printf("\r\n");
//填充完成,填写帧数据长度
pBuff[3] = data_len;
pBuff[1] = pBuff[3]+2;
count = 0;
for(uint8_t i=0;i<(data_len+2);i++){
count += pBuff[2+i];
}
pBuff[4+data_len] = count;
return (pBuff[1]+3);
}
//发送WIFI信息
void Send_wifi_name(void){
unsigned char uarttx[FRAMELEN];
uint8_t len = 0;
len = GetWifiName(uarttx);
if(Get_sys_power_on_self_test() && len>5)
TXCMD_Other_Set(uarttx,len);
}
//发送WIFI界面操作状态
void Send_wifi_win_state(uint8_t state){
uint8_t len = 0;
if(state){//开启操作
if(Get_sys_veer_velocity()){//有转速回复失败
wifi_buffer[4] = 0x0;
}else{//打开界面回复成功 或 当前界面若打开 回复成功
wifi_buffer[4] = 0x1;
if(!wifi_flag)
wifi_flag = 1;
}
}else{//关闭操作
if(wifi_flag){//若当前界面打开 则关闭界面
wifi_flag = 10;
printf("app>>wifi close.\r\n");
wifi_buffer[4] = 0x1;
}else{//若当前界面是关闭状态 则回复失败
wifi_buffer[4] = 0x1;
}
}
//校验和
uint8_t count = 0;
for(uint8_t i=0;i<3;i++){
count += wifi_buffer[2+i];
}
wifi_buffer[5] = count;
TXCMD_Other_Set(wifi_buffer,6);
}

View File

@ -0,0 +1,25 @@
#ifndef DATA_COMMUNICATION_H
#define DATA_COMMUNICATION_H
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include "tkc/types_def.h"
void Send_software_version(void);
void Send_tire_pressure_information(void);
//发送OTA升级判断
void Send_ota_state(uint8_t state);
//发送当前故障码+历史故障码 有数据更新才会发送
void Send_defect_code(void);
void Send_trip_reset(void);
void Send_bt_time(void);
void Send_list_set_time(uint32_t sum);
void send_wifi_set_time(int time_buf[]);
void Send_wifi_name(void);
void Send_wifi_win_state(uint8_t state);
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,228 @@
#ifndef DATA_PORT_H
#define DATA_PORT_H
#include "user_data.h"
#include "moto_config.h"
#include "tkc/types_def.h"
//extern daily_data_t custom_data;
uint8_t Get_sys_language(void);
uint8_t Get_sys_unit(void);
uint8_t Get_sys_light_value(void);
uint8_t Get_sys_theme(void);
uint8_t Get_sys_theme_state(void);
uint8_t Get_sys_bt_on_off(void);
uint8_t Get_sys_trip_unit(void);
uint16_t Get_sys_veer_velocity(void);
uint8_t Get_sys_wireless(void);
uint16_t Get_sys_grade(void);
uint16_t Get_sys_velocity(void);
uint16_t Get_sys_temp(void);
uint16_t Get_sys_gas(void); //当前得到的油量为阻值
uint8_t Get_sys_veer(void);
uint8_t Get_sys_veer_hint(void);
uint8_t Get_sys_lamplight(void);
uint32_t Get_sys_trip_mileage(void);
uint32_t Get_sys_total_mileage(void);
uint8_t Get_sys_warning_engine(void);
uint8_t Get_sys_warning_machine_oil(void);
uint8_t Get_sys_warning_fan(void);
uint8_t Get_sys_warning_abs(void);
uint8_t Get_sys_warning_tcs(void);
uint8_t Get_sys_warning_neutral_gear(void);
float Get_sys_voltage(void);
uint8_t Get_sys_light_perception_value(void);
void Set_sys_upgrade_Flag(uint8_t value);
uint8_t Get_sys_upgrade_Flag(void);
void Set_sys_bt_upgrade(uint8_t value);
uint8_t Get_sys_bt_upgrade(void);
uint8_t Get_sys_warning_maintenance(void);
void Set_sys_warning_maintenance(uint8_t value);
uint8_t Get_sys_warning_tire(void);
void Set_sys_warning_tire(uint8_t value);
uint8_t Get_sys_display_theme(void);
void Set_sys_display_theme(uint8_t value);
void Set_sys_demo_position(uint8_t value);
void Set_sys_power_on_self_test(uint8_t value);
uint8_t Get_sys_power_on_self_test(void);
uint8_t Get_sys_light(void);
void Set_sys_light(uint8_t value);
char *Get_sys_uuid(void);
char *Get_sys_bt_name(void);
uint32_t Get_sys_now_defect_code(void);
uint32_t Get_sys_his_defect_code(void);
void Set_sys_his_defect_code(uint32_t value);
void Set_sys_now_defect_code(uint32_t value);
void Set_sys_language(uint8_t value);//语言
void Set_sys_unit(uint8_t value);
void Set_sys_light_value(uint8_t value);
void Set_sys_theme(uint8_t value);
void Set_sys_theme_state(uint8_t value);
void Set_sys_bt_on_off(uint8_t value);
void Set_sys_trip_unit(uint8_t value);
void Set_sys_wireless(uint8_t value);
void Set_sys_grade(uint16_t value);
void Set_sys_velocity(uint16_t value);
void Set_sys_temp(uint16_t value);
void Set_sys_gas(uint16_t value);
void Set_sys_veer(uint8_t value);
void Set_sys_veer_hint(uint8_t value);
void Set_sys_lamplight(uint8_t value);
void Set_sys_trip_mileage(uint32_t value);
void Set_sys_total_mileage(uint32_t value);
void Set_sys_veer_velocity(uint16_t value);
//void Set_sys_maintenance_mileage(double value);
//void Set_sys_total_mileage(double value);
void Set_sys_warning_engine(uint8_t value);
void Set_sys_warning_machine_oil(uint8_t value);
void Set_sys_warning_fan(uint8_t value);
void Set_sys_warning_abs(uint8_t value);
void Set_sys_warning_tcs(uint8_t value);
void Set_sys_warning_neutral_gear(uint8_t value);
void Set_sys_voltage(float value);
void Set_sys_light_perception_value(uint8_t value);
uint8_t Get_sys_return_demo(void);
void Set_sys_return_demo(uint8_t value);
void Set_sys_bt_data_inheritance(uint8_t value);
uint8_t Get_sys_bt_data_inheritance(void);
void Set_sys_ttrb(uint8_t value);
uint8_t Get_sys_ttrb(void);
void Set_sys_tire_pressure_mesg(uint8_t value);
uint8_t Get_sys_tire_pressure_mesg(void);
void Set_sys_ttrb_time(uint8_t value);
uint8_t Get_sys_ttrb_time(void);
void Set_sys_odo_reset(uint8_t value);
uint8_t Get_sys_odo_reset(void);
void Set_sys_fault_code(uint8_t value);
uint8_t Get_sys_fault_code(void);
uint16_t Get_sys_display_velocity(void);
void Set_sys_display_velocity(uint16_t value);
uint16_t Get_sys_display_veer_velocity(void);
void Set_sys_display_veer_velocity(uint16_t value);
uint8_t Get_sys_bt_connect_state(void);
void Set_sys_bt_connect_state(uint8_t value);
ret_t ttrb_mesg(void);
ret_t tire_pressure_mesg(void);
ret_t ttrb_time_mesg(void);
ret_t odo_reset_mesg(void);
ret_t demo_position_mesg(void);
ret_t fault_code_mesg(void);
uint8_t Get_sys_softwar_host(void);//返回软件主版本号
uint8_t Get_sys_softwar_order(void);//返回软件次版本号
uint16_t Get_sys_plan(void);//返回升级总进度
uint16_t Get_sys_pace(void);//返回升级当前进度
uint8_t Get_sys_upgrade(void);//内存拷贝标志
void Set_sys_plan(uint16_t value);
void Set_sys_pace(uint16_t value);
void Set_sys_upgrade(uint8_t value);
void Uart_set_time(int time[]);//设置时间
void Key_Distinction(uint8_t type , int key);
//光感接口
uint16_t Get_sys_sensor_light(void);
void Set_sys_sensor_light(uint16_t value);
uint8_t Get_sys_sensor_switch(void);
void update_sensor_switch(void);
//设备数据接口
char *Get_device_equipment_num(void);
void Set_device_equipment_num(char *value);
char *Get_device_produce_num(void);
void Set_device_produce_num(char *value);
char *Get_device_voucher(void);
void Set_device_voucher(char *value);
char *Get_device_mac(void);
void Set_device_mac(char *value);
uint8_t Get_device_client_num(void);
void Set_device_client_num(uint8_t value);
uint8_t Get_device_moto_type(void);
void Set_device_moto_type(uint8_t value);
uint8_t Get_device_screen_type(void);
void Set_device_screen_type(uint8_t value);
uint8_t Get_device_ability(void);
void Set_device_ability(uint8_t value);
// BottomData *Get_device_bottom_data(void);
// void Set_device_bottom_data(BottomData * value);
uint8_t Get_device_bottom_id(void);
void Set_device_bottom_id(uint8_t value);
uint8_t Get_device_bottom_softwar_host(void);
void Set_device_bottom_softwar_host(uint8_t value);
uint8_t Get_device_bottom_softwar_order(void);
void Set_device_bottom_softwar_order(uint8_t value);
uint8_t Get_device_hardware_version_host(void);
void Set_device_hardware_version_host(uint8_t value);
uint8_t Get_device_hardware_version_order(void);
void Set_device_hardware_version_order(uint8_t value);
//通话状态
uint8_t Get_sys_call_key_state(void);
void Set_sys_call_key_state(uint8_t value);
uint8_t Get_sys_call_display(void);
void Set_sys_call_display(uint8_t value);
uint8_t Get_sys_call_state(void);
void Set_sys_call_state(uint8_t value);
char *Get_sys_call_number(void);
void Set_sys_call_number(char *value);
char *Get_sys_call_renumber(void);
void Set_sys_call_renumber(char *value);
//通话时间
uint32_t Get_sys_call_time(void);
void Set_sys_call_time(uint32_t value);
//前后胎压
Pressure_t Get_sys_front_pressure(void);
Pressure_t Get_sys_rear_pressure(void);
void Set_sys_front_pressure(Pressure_t value);
void Set_sys_rear_pressure(Pressure_t value);
//胎压信号
void Set_sys_pressure_signal(uint8_t value);
uint8_t Get_sys_pressure_signal(void);
//保养里程
uint32_t Get_sys_maintenance_mileage(void);
void Set_sys_maintenance_mileage(uint32_t value);
uint32_t Get_sys_start_mileage(void);
void Set_sys_start_mileage(uint32_t value);
ret_t mileage_detection_mesg(void);
uint16_t Get_sys_can_temp(void);//温度
void Set_sys_can_temp(uint16_t value);
uint8_t Get_sys_wifi_state(void);
void Set_sys_wifi_state(uint8_t value);
uint8_t Get_sys_quickly_arrange(void);//快排功能
void Set_sys_quickly_arrange(uint8_t value);
uint8_t Get_sys_quickly_arrange_state(void);//快排功能
void Set_sys_quickly_arrange_state(uint8_t value);
#endif /*DATA_PORT_H*/

View File

@ -0,0 +1,282 @@
#ifndef MOTO_CONFIG_H
#define MOTO_CONFIG_H
// #define AMT630HV100 1 //控制模拟器和开发板运行 注释掉模拟器可用 打开开发板可用
#define MOTO_ICMX_GB518_A270M 1
#define MOTO_ICMX_GB518_A270M_KP 2
#define MOTO_ICMX_GB518_A270S 3
#define MOTO_WARE_HOSE MOTO_ICMX_GB518_A270S
#if (MOTO_WARE_HOSE == MOTO_ICMX_GB518_A270M)
#define SOFT_WARE_HOST 1
#define SOFT_WARE_ORDER 17
#define HARD_WARE "MXC-A27-M V4.0"
#define HARD_WARE_LABEL "4.0"
#define KEY_EXCHANGE 1
#elif (MOTO_WARE_HOSE == MOTO_ICMX_GB518_A270M_KP)
#define SOFT_WARE_HOST 0
#define SOFT_WARE_ORDER 4
#define HARD_WARE "MXC-A27-M-KP V4.0"
#define HARD_WARE_LABEL "4.0"
#define KEY_EXCHANGE 1
#define UI_VIEW_QUICKLY_ARRANGE 1//快排功能宏
#elif (MOTO_WARE_HOSE == MOTO_ICMX_GB518_A270S)
#define SOFT_WARE_HOST 0
#define SOFT_WARE_ORDER 2
#define HARD_WARE "MXC-A27-M V4.5"
#define HARD_WARE_LABEL "4.5"
#define KEY_EXCHANGE 1
#else
#define SOFT_WARE_HOST 0
#define SOFT_WARE_ORDER 1
#define HARD_WARE "MXC-A27-A V4.0"
#define HARD_WARE_LABEL "4.0"
#endif
//#define SOFT_WARE "MXC-A27-A V0.8"
// #define HARD_WARE "MXC-A27-A V4.0"
// #define HARD_WARE_LABEL "4.0"
#define LOW_BRIGHTNESS_MODE 20
//胎压功能宏
#define UI_VIEW_TIRE_PRESSURE 1
#define CALL_BW121_KEY 1
//数据通道选择 can和蓝牙
#define DATA_CAN 1
#ifdef DATA_CAN
//速度通道
#define SPEED_DATA_CAN 1
#else
#endif
// 打印
// #define DEBUG 1
#ifdef DEBUG
#define DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)
#else
#define DEBUG_PRINT(fmt, ...)
#endif
/**
* A270D客户需求
* 范围
* kpa 前185-250kpa 后190-250
* 单位换算
* bar 前1.85-2.50 后1.90-2.50
* psi 前26.8-36.2 后27.5-36.2 268-362 275-362
* 广播收到的胎压数据单位为0.1psi
* 即 0xAF =>175 => 17.5 17.5psi-14.6psi = 2.9psi
* 换算需要使用2.9psi进行换算
* 换算公式
* 1 磅力/平方英寸(psi)=0.06894757 巴(bar) 取舍1psi=0.069bar
* 1 磅力/平方英寸=6.894757 千帕 取舍1psi=6.9kpa
* 1 千帕=0.1450377 磅力/平方英寸 1kpa = 0.145psi
* 1 千帕=0.01 巴 1kpa = 0.01bar
*/
//前胎压阈值限制
#define TIRE_PRESSURE_FRONT_UPPER 362+146
#define TIRE_PRESSURE_FRONT_LOWER 268+146
//后胎压阈值限制
#define TIRE_PRESSURE_REAR_UPPER 362+146
#define TIRE_PRESSURE_REAR_LOWER 275+146
// /** 油量限制 低于16°显示一格并图标闪烁 高于80%显示满格
// * 6格
// * 一格平均占比16% 最后剩余一格时占比20%
// * 低于20%显示最后一格
// * 低于15%图标闪烁
// * 高于80%显示满格
// */
// #define UI_TORAL6_GRIDS_OIL_WARNING 15
// #define UI_TORAL6_GRIDS_OIL_1 20
// #define UI_TORAL6_GRIDS_OIL_2 32
// #define UI_TORAL6_GRIDS_OIL_3 48
// #define UI_TORAL6_GRIDS_OIL_4 64
// #define UI_TORAL6_GRIDS_OIL_5 80
#define UI_TORAL6_GRIDS_OIL_WARNING 0
#define UI_TORAL6_GRIDS_OIL_0 0
#define UI_TORAL6_GRIDS_OIL_1 20
#define UI_TORAL6_GRIDS_OIL_2 40
#define UI_TORAL6_GRIDS_OIL_3 60
#define UI_TORAL6_GRIDS_OIL_4 80
#define UI_TORAL6_GRIDS_OIL_5 99
// /** 温度限制 高于90°显示满格并图标闪烁
// * 6格
// * 一格占比10℃
// * 低于60℃%显示一格
// * 高于110℃显示满格
// * 高于116℃(包括)图标闪烁
// */
// #define UI_TORAL6_GRIDS_TEMP_WARNING 116
// #define UI_TORAL6_GRIDS_TEMP_0 65
// #define UI_TORAL6_GRIDS_TEMP_1 70
// #define UI_TORAL6_GRIDS_TEMP_2 80
// #define UI_TORAL6_GRIDS_TEMP_3 90
// #define UI_TORAL6_GRIDS_TEMP_4 100
// #define UI_TORAL6_GRIDS_TEMP_5 110
#define UI_TORAL6_GRIDS_TEMP_WARNING 116
#define UI_TORAL6_GRIDS_TEMP_0 52
#define UI_TORAL6_GRIDS_TEMP_1 66
#define UI_TORAL6_GRIDS_TEMP_2 76
#define UI_TORAL6_GRIDS_TEMP_3 93
#define UI_TORAL6_GRIDS_TEMP_4 103
#define UI_TORAL6_GRIDS_TEMP_5 114
#define UI_TORAL6_GRIDS_TEMP_6 114
#define UI_CAN_TORAL6_GRIDS_TEMP_WARNING 116
#define UI_CAN_TORAL6_GRIDS_TEMP_0 45
#define UI_CAN_TORAL6_GRIDS_TEMP_1 57
#define UI_CAN_TORAL6_GRIDS_TEMP_2 69
#define UI_CAN_TORAL6_GRIDS_TEMP_3 81
#define UI_CAN_TORAL6_GRIDS_TEMP_4 93
#define UI_CAN_TORAL6_GRIDS_TEMP_5 105
#define UI_CAN_TORAL6_GRIDS_TEMP_6 116
/**转速限制(客户需求)
* 转速保持在15 不需要上下抖动
*
*/
#define SPEED_STABILTY_LIMIT_LOWER 13
#define SPEED_STABILTY_LIMIT 15
#define SPEED_STABILTY_LIMIT_UPPER 18
//一些通用运算
#define JUDGE_BIN_0(data) (data % 2 == 1)
#define JUDGE_BIN_1(data) (data % 4 > 1)
#define JUDGE_BIN_2(data) (data % 8 > 3)
#define JUDGE_BIN_3(data) (data % 16 > 7)
#define JUDGE_BIN_4(data) (data % 32 > 15)
#define JUDGE_BIN_5(data) (data % 64 > 31)
#define JUDGE_BIN_6(data) (data % 128 > 63)
#define JUDGE_BIN_7(data) (data % 256 > 127)
//当前模式
#define DEMO_UI_SELF_START 50//开始自检标志
#define DEMO_UI_SELF_CHECKING 75//自检中标志
#define DEMO_UI_SELF_FINISH 100//正常模式
#define DEMO_UI_SELF_UPGRADE_BEGINS 150//升级模式
//转速arc速率
#define ANIMATE_SPEED 50
#define ANIMATE_SPEED_VALUE 100
#define ANIMATE_SPEED_LITTLE_VALUE 200
//数组大小 水温 油量 亮度
#define SAVE_DATA_SIZE 10
#define TK_KEY_ENTER
/******* 主题界面UI切换 ***********/
#define RESOURCE_OFFSET_UI_BG_COLOR 0
#define RESOURCE_OFFSET_UI_BG 1
#define RESOURCE_OFFSET_VEER_VELOCITY 2
#define RESOURCE_OFFSET_VEER_VELOCITY_ARC_IMG 3
#define RESOURCE_OFFSET_SPEED 4
#define RESOURCE_OFFSET_CLOCK 14
#define RESOURCE_OFFSET_CLOCK_COLON 24
#define RESOURCE_OFFSET_GRADE 25
#define RESOURCE_OFFSET_GRADE_BG 33
#define RESOURCE_OFFSET_OIL 35
#define RESOURCE_OFFSET_OIL_BG 42
#define RESOURCE_OFFSET_TEMP 44
#define RESOURCE_OFFSET_TEMP_BG 51
#define RESOURCE_OFFSET_CELL 54
#define RESOURCE_OFFSET_SPEED_UNIT 56
#define RESOURCE_OFFSET_TEXT_COLOR 58
#define RESOURCE_OFFSET_SERVICE 59
#define RESOURCE_IMG_NORMAL 0
#define RESOURCE_IMG_ERROR 1
#define RESOURCE_IMG_NULL 2
#define RESOURCE_SPEED_UNIT_KM 0
#define RESOURCE_SPEED_UNIT_MPH 1
#define RESOURCE_UI_BLACK 0
#define RESOURCE_UI_WHITE 60
/******* list界面UI切换 ***********/
#define RESOURCE_LIST_BLACK 0
#define RESOURCE_LIST_WHITE 11
#define RESOURCE_OFFSET_LIST_BG 0
#define RESOURCE_OFFSET_LIST_TITLE 1
#define RESOURCE_OFFSET_LIST_TITLE_BG 2
#define RESOURCE_OFFSET_LIST_SET_BTN 3
#define RESOURCE_OFFSET_LIST_INFORMATION_BTN 4
#define RESOURCE_OFFSET_LIST_THEME_BTN 5
#define RESOURCE_OFFSET_LIST_LIGHT_BTN 6
#define RESOURCE_OFFSET_SET_BTN 7
#define RESOURCE_OFFSET_SET_BTN_IMG 8
#define RESOURCE_OFFSET_SET_BTN_LABEL 9
#define RESOURCE_OFFSET_SET_BTN_SWITCH 10
#define FLOCKER_IMG_DISPLAY(data) (data%10==0?1:0)
#define FLOCKER_IMG_HIDE(data) (data%10==5?1:0)
#define GRADE_NULL 0
#define GRADE_BG_NUAMAL 0
#define GRADE_BG_NULL 1
// #define ANIMATE_SPEED 50
// #define ANIMATE_SPEED_VALUE 100
// #define ANIMATE_SPEED_LITTLE_VALUE 200
// #define COLOR_USER_BLUE "0xff23015e"//客户蓝色
#define COLOR_USER_BLUE "0xff5e0123"//客户蓝色1
#define COLOR_USER_BLUE2 "0xffDDFF77"//客户蓝色2 用于通话
#define COLOR_BLACK "0xff000000"//黑色
#define COLOR_WHITE "0xffffffff"//白色
#define COLOR_RED "0xff0000ff"//红色
#define COLOR_GREEN "0xff00ff00"//绿色
#define COLOR_ORANGE "0xffff6138"//橙色
// FF6138//橙色
#define OUTPUT_COLOR_USER_BLUE str_to_num(COLOR_USER_BLUE)
#define OUTPUT_COLOR_USER_BLACK str_to_num(COLOR_BLACK)
#define OUTPUT_COLOR_BLACK str_to_num(COLOR_BLACK)
#define OUTPUT_COLOR_ORANGE str_to_num(COLOR_ORANGE)
#define OUTPUT_COLOR_WHITE str_to_num(COLOR_WHITE)
#define OUTPUT_COLOR_RED str_to_num(COLOR_RED)
#define OUTPUT_COLOR_GREEN str_to_num(COLOR_GREEN)
#define TIME_TO_NUM(num) int(num%5)
#define OUTPUT_COLOR(data) str_to_num(data)
//亮度统一处理
#define LIGHTGEARS 0
#define LIGHTVALUE 1
#define LIGHT_PROPORTION_OF_CONTROL 12
#define LIGHTCALUEDATA(data) (data*LIGHT_PROPORTION_OF_CONTROL)
#define LIGHTVALUEDATAONE(data) (data*LIGHT_PROPORTION_OF_CONTROL*10000/25)
#define LIGHTVALUEDATATWO(data) (data*10000/25)
#define NORMAL_LIGHTVALUEDATAONE(data) (data*10*10000)
#define NORMAL_LIGHTVALUEDATATWO(data) (data*5000)
#endif /*MOTO_CONFIG_H*/

View File

@ -0,0 +1,138 @@
#include "awtk.h"
#include "navigator.h"
extern ret_t ToolTip_box_init(widget_t* win, void* ctx);
extern ret_t prompt_init(widget_t* win, void* ctx);
extern ret_t call_init(widget_t* win, void* ctx);
extern ret_t set_mile_init(widget_t* win, void* ctx);
extern ret_t new_init(widget_t* win, void* ctx);
extern ret_t home_page_init(widget_t* win, void* ctx);
extern ret_t set_tire_pressure_init(widget_t* win, void* ctx);
extern ret_t set_time_init(widget_t* win, void* ctx);
extern ret_t set_list_init(widget_t* win, void* ctx);
#ifndef WITH_MVVM
static ret_t navigator_window_init(const char* name, widget_t* win, void* ctx) {
if (tk_str_eq(name, "ToolTip_box")) {
return ToolTip_box_init(win, ctx);
} else if (tk_str_eq(name, "prompt")) {
return prompt_init(win, ctx);
} else if (tk_str_eq(name, "call")) {
return call_init(win, ctx);
} else if (tk_str_eq(name, "set_mile")) {
return set_mile_init(win, ctx);
} else if (tk_str_eq(name, "new")) {
return new_init(win, ctx);
} else if (tk_str_eq(name, "home_page")) {
return home_page_init(win, ctx);
} else if (tk_str_eq(name, "set_tire_pressure")) {
return set_tire_pressure_init(win, ctx);
} else if (tk_str_eq(name, "set_time")) {
return set_time_init(win, ctx);
} else if (tk_str_eq(name, "set_list")) {
return set_list_init(win, ctx);
}
return RET_OK;
}
static ret_t navigator_window_open_and_close(const char* name,
widget_t* to_close, void* ctx) {
ret_t ret = RET_OK;
widget_t* wm = window_manager();
widget_t* win = widget_child(wm, name);
if (win != NULL) {
bool_t single_instance = widget_get_prop_bool(win, WIDGET_PROP_SINGLE_INSTANCE, FALSE);
if (single_instance) {
window_manager_close_window_force(wm, win);
}
}
win = window_open_and_close(name, to_close);
return_value_if_fail(win != NULL, RET_FAIL);
ret = navigator_window_init(name, win, ctx);
return_value_if_fail(ret == RET_OK, ret);
if (widget_is_dialog(win) &&
widget_get_prop_bool(win, NAVIGATOR_PROP_DIALOG_TO_MODAL, TRUE)) {
return (ret_t)dialog_modal(win);
}
return ret;
}
ret_t navigator_to(const char* target) {
return navigator_to_with_context(target, NULL);
}
ret_t navigator_to_with_context(const char* target, void* ctx) {
return_value_if_fail(target != NULL &&* target != '\0', RET_BAD_PARAMS);
return navigator_window_open_and_close(target, NULL, ctx);
}
ret_t navigator_replace(const char* target) {
widget_t* curr_win = NULL;
widget_t* wm = window_manager();
return_value_if_fail(target != NULL &&* target != '\0', RET_BAD_PARAMS);
curr_win = window_manager_get_top_main_window(wm);
if (curr_win != NULL) {
log_debug("close current window: %s\n", curr_win->name);
}
return navigator_window_open_and_close(target, curr_win, NULL);
}
ret_t navigator_switch_to(const char* target, bool_t close_current) {
widget_t* target_win;
widget_t* wm = window_manager();
return_value_if_fail(target != NULL &&* target != '\0', RET_BAD_PARAMS);
target_win = widget_child(wm, target);
if (target_win != NULL) {
widget_t* curr_win = window_manager_get_top_window(wm);
return window_manager_switch_to(wm, curr_win, target_win, close_current);
} else {
return navigator_to(target);
}
}
ret_t navigator_back_to_home(void) {
return window_manager_back_to_home(window_manager());
}
ret_t navigator_back(void) {
return window_manager_back(window_manager());
}
ret_t navigator_close(const char* target) {
widget_t* win;
widget_t* wm = window_manager();
return_value_if_fail(target != NULL &&* target != '\0', RET_BAD_PARAMS);
win = widget_child(wm, target);
return_value_if_fail(win != NULL, RET_FAIL);
return window_manager_close_window_force(wm, win);
}
ret_t navigator_request_close(const char* target) {
widget_t* win;
widget_t* wm = window_manager();
return_value_if_fail(target != NULL &&* target != '\0', RET_BAD_PARAMS);
win = widget_child(wm, target);
return_value_if_fail(win != NULL, RET_FAIL);
return widget_dispatch_simple_event(win, EVT_REQUEST_CLOSE_WINDOW);
}
ret_t navigator_global_widget_on(uint32_t type, event_func_t on_event, void* ctx) {
widget_t* wm = window_manager();
widget_on(wm, type, on_event, ctx);
return RET_OK;
}
#endif /*WITH_MVVM*/

View File

@ -0,0 +1,121 @@
#ifndef APP_NAVIGATOR_H
#define APP_NAVIGATOR_H
#include "tkc/types_def.h"
BEGIN_C_DECLS
#ifndef WITH_MVVM
/**
* 用于标识打开对话框时是否模态显示,如果需非模态显示,请在对话框初始化时使用 widget_set_prop 显式设置为FALSE。
*/
#define NAVIGATOR_PROP_DIALOG_TO_MODAL "to_modal"
/**
* @class navigator_t
* @annotation ["fake"]
* 导航器。负责打开指定的窗口。
*
*/
/**
* @method navigator_to
* 请求打开指定的窗口。
* @annotation ["static"]
* @param {const char*} target 目标窗口的名称。
*
* @return {ret_t} 返回RET_OK表示成功否则表示失败。
*/
ret_t navigator_to(const char* target);
/**
* @method navigator_to_with_context
* 请求打开指定的窗口,并可传递参数和返回结果。
* @annotation ["static"]
* @param {const char*} target 目标窗口的名称。
* @param {void*} ctx 上下文。
*
* @return {ret_t} 返回RET_OK表示成功否则表示失败。
*/
ret_t navigator_to_with_context(const char* target, void* ctx);
/**
* @method navigator_replace
* 请求打开指定的窗口,并关闭当前窗口。
* @annotation ["static"]
* @param {const char*} target 目标窗口的名称。
*
* @return {ret_t} 返回RET_OK表示成功否则表示失败。
*/
ret_t navigator_replace(const char* target);
/**
* @method navigator_switch_to
* 如果目标窗口已经存在,直接切换到该窗口,否则打开新窗口。
* @annotation ["static"]
* @param {const char*} target 目标窗口的名称。
* @param {bool_t} close_current 是否关闭当前窗口。
*
* @return {ret_t} 返回RET_OK表示成功否则表示失败。
*/
ret_t navigator_switch_to(const char* target, bool_t close_current);
/**
* @method navigator_back_to_home
* 回到主屏。
* @annotation ["static"]
*
* @return {ret_t} 返回RET_OK表示成功否则表示失败。
*/
ret_t navigator_back_to_home(void);
/**
* @method navigator_back
* 关闭当前窗口,回到前一窗口。
* @annotation ["static"]
*
* @return {ret_t} 返回RET_OK表示成功否则表示失败。
*/
ret_t navigator_back(void);
/**
* @method navigator_close
* 关闭指定窗口。
* @param {const char*} target 目标窗口的名称。
* @annotation ["static"]
*
* @return {ret_t} 返回RET_OK表示成功否则表示失败。
*/
ret_t navigator_close(const char* target);
/**
* @method navigator_request_close
* 请求关闭指定窗口。
* > 窗口是否被关闭,取决于窗口本身的处理逻辑。
* @param {const char*} target 目标窗口的名称。
* @annotation ["static"]
*
* @return {ret_t} 返回RET_OK表示成功否则表示失败。
*/
ret_t navigator_request_close(const char* target);
/**
* @method navigator_global_widget_on
* 注册全局事件。
* @param {event_type_t} type 事件类型。
* @param {event_func_t} on_event 事件处理函数。
* @param {void*} ctx 事件处理函数上下文。
* @annotation ["static"]
*
* @return {ret_t} 返回RET_OK表示成功否则表示失败。
*/
ret_t navigator_global_widget_on(uint32_t type, event_func_t on_event, void* ctx);
#else
#include "mvvm/base/navigator.h"
#endif /*WITH_MVVM*/
END_C_DECLS
#endif /*APP_NAVIGATOR_H*/

View File

@ -0,0 +1,121 @@
#include "awtk.h"
#include "../common/navigator.h"
#include "../common/universal.h"
#include "../common/data_port.h"
#include "../common/user_data.h"
#include "tkc/object_date_time.h"
#include "pwm.h"
#include "../common/qr_event.h"
extern char *strsub(char *dest, char *src, int start);
bitmap_t* bitmap = NULL;
//二维码函数
#ifdef AWTK_630HV
static bitmap_t* qr_to_bmp(widget_t* widget){
rect_t r = {40 ,81 ,widget->w,widget->h};
bitmap_t* img;
uint32_t w = 0;
uint32_t h = 0;
canvas_t* c = NULL;
vgcanvas_t* vg = NULL;
framebuffer_object_t fbo;
printf(" test qr_to_bmp start --------------\r\n");
native_window_t* native_window =
(native_window_t*)widget_get_prop_pointer(window_manager(), WIDGET_PROP_NATIVE_WINDOW);
return_value_if_fail(native_window != NULL, NULL);
c = native_window_get_canvas(native_window);
vg = lcd_get_vgcanvas(c->lcd);
return_value_if_fail(c != NULL && vg != NULL, NULL);
vgcanvas_create_fbo(vg, widget->w, widget->h, FALSE, &fbo);
vgcanvas_bind_fbo(vg, &fbo);
canvas_save(c);
canvas_translate(c, 0, 0);
canvas_set_clip_rect(c, &r);
widget_paint(widget, c);
canvas_translate(c, -0, -0);
canvas_restore(c);
vgcanvas_unbind_fbo(vg, &fbo);
w = r.w;
h = r.h;
img = bitmap_create_ex(w, h, 0, BITMAP_FMT_BGRA8888);
vgcanvas_fbo_to_bitmap(vg, &fbo, img, &r);
vgcanvas_destroy_fbo(vg, &fbo);
printf(" end qr_to_bmp -> w=%d,h=%d,img = %p\n",w,h,img);
return img;
}
#else
static bitmap_t* qr_to_bmp(widget_t* widget){
}
#endif
//二维码字符串
char* fun(char *qr_str){
char str[400] = "http://www.carbit.com.cn/down6/642/643/_ylqx?modelid=33205&sn=Ut3F&action=128&bm=";
char data[100] = {0};
//char data2[100] = {0};
int i;
//printf("qr_str = %s\r\n",qr_str);
for(i=0; qr_str[i]!='\0';i++){
if(i%3==1 && qr_str[i+1]!='\0'){
strcpy(data,&qr_str[i+1]);
qr_str[i+1]='%';
strcpy(&qr_str[i+2],data);
}
}
//printf("qr_str = %s\r\n",qr_str);
strcat(str,qr_str);//连接字符串
printf("qr netaddress :s %s\r\n",str);
return str;
}
//延时保存qr控件 等待qr控件绘制完成
static ret_t on_add_timer_qr_to_bmp(const timer_info_t* timer){
widget_t* qr = WIDGET(timer->ctx);
widget_t* win = window_manager();
widget_t* qr_img = widget_lookup(win,"qr_img",TRUE);
bitmap = qr_to_bmp(qr);
image_manager_add(image_manager(),"bitmap_qr",bitmap);
widget_destroy(qr);
printf("Save qr as picture and destroy control.\n");
image_base_set_image(qr_img,"bitmap_qr");
widget_resize(qr_img, 210,210);
widget_set_visible(qr_img,TRUE);
// img_save_flag = 2;
// qr_imgdisplay_flag = 1;
return RET_OK;
}
extern widget_t* qr_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
//为系统保存qr控件的bmp图片
void Savesystem_qr_to_bmp( widget_t* win ,widget_t* qr_img){
char buffer[50] = {0};
char tmpStr[100] = {0};
tk_snprintf(tmpStr, sizeof(tmpStr), "%s",custom_data.uuid);
strsub(buffer,tmpStr,6);
widget_t* qr = qr_create(win,40,81,200,200);
printf("Create qr to demo = %s\n",win->name);
tk_snprintf(tmpStr, sizeof(tmpStr), "%s",fun(buffer));
widget_set_text_utf8(qr,tmpStr);
widget_add_timer(qr,on_add_timer_qr_to_bmp,1500);
}
uint8_t bitmap_Existence_or_not(){
if(bitmap !=NULL || image_manager_has_bitmap(image_manager(),bitmap) == TRUE )
return 1;
else
return 0;
}

View File

@ -0,0 +1,7 @@
#include "awtk.h"
#include "../common/navigator.h"
static ret_t on_add_timer_qr_to_bmp(const timer_info_t* timer);
void Savesystem_qr_to_bmp( widget_t* win ,widget_t* qr_img);
uint8_t bitmap_Existence_or_not(void);

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,81 @@
#ifndef UNIVERSAL_H
#define UNIVERSAL_H
#include "awtk.h"
#include "../common/navigator.h"
#include "../common/moto_config.h"
typedef struct {
uint32_t dtc_code; // 故障码
char *dtc_desc_en; // 故障码描述(英文)
char *dtc_desc_cn; // 故障码描述(中文)
} DTC_INFO;
void Power_On_Self_Test(void);
void Universal_count_transfer(widget_t* parent,uint32_t num);
void refresh_win(widget_t* child);
void refresh_icon( widget_t* child);
void light_refresh(widget_t* child);
void call_refresh(widget_t* child);
void Universal_enter_win_boot_retrieval(widget_t* progress_circle);
void Update_theme(void);
uint32_t str_to_num(char* a);
char *strsub(char *dest, char *src, int start);
void SaveBtInformation(char *data);
void Unified_brightness_processing(uint8_t data,uint8_t type);
void theme_state_black(widget_t* win , widget_t* child);
void theme_state_white(widget_t* win , widget_t* child);
void ui_demo_theme_state_black(widget_t* win , widget_t* child);
void ui_demo_theme_state_white(widget_t* win , widget_t* child);
void Return_demo_win(void);
void return_demo(void);
void new_refreshes(widget_t* child);
void list_win_init(widget_t* child);
void refresh_animate(widget_t* child);
void defect_code_event_handing(int *buf);
// void speed_event_handing(int *buf);
void tcs_control_event_handing(int *buf);
void mil_control_event_handing(int *buf);
ret_t long_key_event_handling(uint8_t key);
uint8_t mac_address_normal(char mac[],int size);// 如果数组全为0或全为FF认为不是正常的 MAC 地址 正常地址返回1
uint16_t fml_leap_year(uint16_t year);
uint32_t fml_time_to_stamp(int time[]);
uint32_t fml_stamp_to_time(uint32_t timep , int time[]);
#define LIST_NUMBER_OF_OPTION 4
#define LIST_NUMBER_OF_OPTION_MAX LIST_NUMBER_OF_OPTION+1
extern char *set_label[];
extern char *set_en_label[];
extern char* resource_style[120];
extern char* list_resource[];
void Universal_widget_display(widget_t*parent,uint8_t value);
void veer_display_animo(widget_t* parent,uint8_t value);
// uint32_t str_to_num(char* a);
void UI_power_on_self(widget_t*win);
void Update_theme_init(void);
void newA27_return_theme(void);
ret_t change_locale(const char* str);
void newA27_list_win_init(widget_t* child);
void list_button1_init(widget_t* tab_button);
void list_theme_init(widget_t* set_list);
void theme_win_init(widget_t* win);
void list_theme_button1_init(void);
void list_theme_button2_init(void);
void list_theme_button4_init(void);
void speed_event_handing(int *buf);
#endif

View File

@ -0,0 +1,513 @@
#include "awtk.h"
#include "navigator.h"
#include "user_data.h"
#include "data_port.h"
#include "universal.h"
#include "pwm.h"
#ifndef WITH_MVVM
daily_data_t custom_data;
Device_t device = {0};
static Current_fault_code_record_saved_struct current_fault_data;
static Historical_fault_code_record_saved_struct historical_fault_data;
extern void SaveDataToFlash(SfudData_t user_data);
//uint8_t temp_buffer[SAVE_DATA_SIZE];
//uint8_t oil_buffer[SAVE_DATA_SIZE];
uint8_t light_buffer[SAVE_DATA_SIZE];
double cell_buffer[SAVE_DATA_SIZE];
uint8_t data_storage=0;
uint8_t flash_bt_state = 0;
Current_fault_code_record_saved_struct* userData_getCurrentFaultRecordSaved(void)
{
return &current_fault_data;
}
Historical_fault_code_record_saved_struct* userData_getHistorFaultRecordSaved(void)
{
return &historical_fault_data;
}
//数据初始化
void system_date_init(void){
//胎压测试
/*
device.ability = 0xff;
for(uint8_t i=0;i<6;i++){
custom_data.front_pressure.mac_address[i] = i;
custom_data.rear_pressure.mac_address[i] = i;
}
*/
Pressure_t pressure ={0};
Set_sys_front_pressure(pressure);
Set_sys_rear_pressure(pressure);
Set_sys_warning_tire(0);
//版本号修改
custom_data.softwar_host = SOFT_WARE_HOST;
custom_data.softwar_order = SOFT_WARE_ORDER;
custom_data.user_data.language = 0;
custom_data.user_data.display_unit = 0;
custom_data.user_data.theme = 0;
custom_data.user_data.theme_state = 1;//0为黑色 1为白色
custom_data.user_data.light_value = 2;
// custom_data.user_data.total_mileage = 0;
custom_data.user_data.bt_on_off = 1;
custom_data.user_data.trip_unit = 0;
custom_data.user_data.maintenance_mileage = 0;
custom_data.user_data.mileage_flag = 0;
custom_data.power_on_self_test =0;
custom_data.wifi_state = 0;
custom_data.wireless =0;
custom_data.velocity = 0;
custom_data.veer_velocity = 0;
custom_data.veer = 0;
custom_data.veer_hint = 0;
custom_data.lamplight = 0;
// custom_data.trip_mileage = 0;
custom_data.warning.engine = 0;
custom_data.warning.machine_oil = 0;
custom_data.warning.fan = 0;
custom_data.warning.abs = 1;
custom_data.warning.tcs = 0;
custom_data.warning.neutral_gear = 0;//默认为空挡
custom_data.voltage =0;
if(custom_data.light_perception_value == 0)
custom_data.light_perception_value=100;
custom_data.return_demo = 0;
custom_data.bt_data_inheritance = 0;
//SaveBtInformation("CARBITDC0D30329E1A");
//custom_data.light = 5;
//tk_snprintf(tmpStr, sizeof(tmpStr), "%d",speed_num*2);
//widget_set_text_utf8(speed,tmpStr);
// custom_data.now_defect_code = 0x2255;
// custom_data.his_defect_code = 0x400;
custom_data.ttrb = 0;
custom_data.ttrb_time = 10;
custom_data.odo_reset = 10;
custom_data.demo_position = 0;
custom_data.upgrade_Flag = 0;
custom_data.plan = 0;
custom_data.pace = 0;
custom_data.upgrade = 0;
//custom_data.Upgrade = 0;
custom_data.call.call_display=0;
custom_data.call.call_state=0;
custom_data.call.call_key_state=0;
custom_data.call.time=0;
extern Device_t device;
device.ability = 0xff;
custom_data.display_velocity = 0;
custom_data.bt_connect_state = 0;
custom_data.temp = 0;
custom_data.user_data.gas = 0;
custom_data.quickly_arrange = 1;
}
extern SfudData_t sfud_data_saved;
extern void ReadDataToFlash(void);
void copy_tire_pressure_front(void){
Pressure_t pressure ={0};
custom_data.front_pressure = pressure;
strcpy(custom_data.front_pressure.mac_address,sfud_data_saved.f_mac_address);
if(mac_address_normal(custom_data.front_pressure.mac_address,6) == 1){//判断mac是否正常
strcpy(custom_data.user_data.f_mac_address,sfud_data_saved.f_mac_address);
custom_data.front_pressure.temp = custom_data.user_data.f_mac_address[6];
custom_data.front_pressure.psi = custom_data.user_data.f_mac_address[7];
custom_data.front_pressure.psi = custom_data.front_pressure.psi<<8 | custom_data.user_data.f_mac_address[8];
custom_data.front_pressure.blow_by_state = 0;
custom_data.front_pressure.voltage_state = 0;
custom_data.front_pressure.temp_state = 0;
custom_data.front_pressure.lose_flag = 0;
}else{
printf("front mac_address error.\r\n");
}
}
void copy_tire_pressure_rear(void){
Pressure_t pressure ={0};
custom_data.rear_pressure = pressure;
strcpy(custom_data.rear_pressure.mac_address,sfud_data_saved.r_mac_address);
if(mac_address_normal(custom_data.rear_pressure.mac_address,6) == 1){//判断mac是否正常
strcpy(custom_data.user_data.r_mac_address,sfud_data_saved.r_mac_address);
custom_data.rear_pressure.temp = custom_data.user_data.r_mac_address[6];
custom_data.rear_pressure.psi = custom_data.user_data.r_mac_address[7];
custom_data.rear_pressure.psi = custom_data.rear_pressure.psi<<8 | custom_data.user_data.r_mac_address[8];
custom_data.rear_pressure.blow_by_state = 0;
custom_data.rear_pressure.voltage_state = 0;
custom_data.rear_pressure.temp_state = 0;
custom_data.rear_pressure.lose_flag = 0;
}else{
printf("rear mac_address error.\r\n");
}
}
void system_flash_to_date_event_handling(void){//上电后数据同步
#ifdef AMT630HV100
/*printf("**************read flash init***********************\r\n");
printf("MXCA27_A => sfud_data_saved :%d-%d-%d-%d-%d %d %d ,",sfud_data_saved.language,
sfud_data_saved.display_unit,sfud_data_saved.theme,sfud_data_saved.theme_state,
sfud_data_saved.light_value,sfud_data_saved.bt_on_off,sfud_data_saved.factory_reset);
printf("mac: %02X%02X%02X%02X%02X%02X , %02X%02X%02X%02X%02X%02X end\r\n",
sfud_data_saved.f_mac_address[0],sfud_data_saved.f_mac_address[1],sfud_data_saved.f_mac_address[2],
sfud_data_saved.f_mac_address[3],sfud_data_saved.f_mac_address[4],sfud_data_saved.f_mac_address[5],
sfud_data_saved.r_mac_address[0],sfud_data_saved.r_mac_address[1],sfud_data_saved.r_mac_address[2],
sfud_data_saved.r_mac_address[3],sfud_data_saved.r_mac_address[4],sfud_data_saved.r_mac_address[5]);
printf("mile data: %02X,%02X end\r\n"
,sfud_data_saved.maintenance_mileage,sfud_data_saved.mileage_flag);
printf("*************************************\r\n");*/
ReadDataToFlash();//读一次数据
/*printf("MXCA27_A => flash data: %d-%d-%d-%d-%d %d\r\n",sfud_data_saved.language,
sfud_data_saved.display_unit,sfud_data_saved.theme,sfud_data_saved.theme_state,
sfud_data_saved.light_value,sfud_data_saved.factory_reset);*/
if(sfud_data_saved.factory_reset == 1 && sfud_data_saved.language <2){//保存过数据
printf("Non first flash.\n");
custom_data.user_data.language = sfud_data_saved.language;
custom_data.user_data.display_unit = sfud_data_saved.display_unit;
custom_data.user_data.theme = sfud_data_saved.theme;
custom_data.user_data.theme_state = sfud_data_saved.theme_state;
custom_data.user_data.light_value = sfud_data_saved.light_value;
custom_data.user_data.bt_on_off = sfud_data_saved.bt_on_off;
flash_bt_state = sfud_data_saved.bt_on_off;
if(sfud_data_saved.maintenance_mileage!=0xFFFFFFFF){
custom_data.user_data.maintenance_mileage = sfud_data_saved.maintenance_mileage;
}else{
custom_data.user_data.maintenance_mileage = 0;
}
if(sfud_data_saved.mileage_flag!=0xFFFFFFFF){
custom_data.user_data.mileage_flag = sfud_data_saved.mileage_flag;
}else{
custom_data.user_data.mileage_flag = 0;
}
if(custom_data.user_data.tp_state<2)
custom_data.user_data.tp_state = sfud_data_saved.tp_state;
else
custom_data.user_data.tp_state = sfud_data_saved.tp_state = 0;
if(sfud_data_saved.uuid_state<3)
custom_data.user_data.uuid_state = sfud_data_saved.uuid_state;
else
sfud_data_saved.uuid_state = custom_data.user_data.uuid_state = 0;
copy_tire_pressure_front();
copy_tire_pressure_rear();
if(sfud_data_saved.display_unit>2 || sfud_data_saved.theme>2){
custom_data.user_data.display_unit = 0;
custom_data.user_data.theme = 0;
}
}else{//首次启动 保存初始化数据
printf("First flash.\n");
sfud_data_saved.language = custom_data.user_data.language ;
sfud_data_saved.display_unit = custom_data.user_data.display_unit;
sfud_data_saved.theme = custom_data.user_data.theme ;
sfud_data_saved.theme_state = custom_data.user_data.theme_state;
sfud_data_saved.light_value = custom_data.user_data.light_value;
//sfud_data_saved.gas = custom_data.user_data.gas;
sfud_data_saved.bt_on_off = custom_data.user_data.bt_on_off ;
flash_bt_state = sfud_data_saved.bt_on_off;
strcpy(sfud_data_saved.f_mac_address,custom_data.front_pressure.mac_address);
strcpy(sfud_data_saved.r_mac_address,custom_data.rear_pressure.mac_address);
strcpy(sfud_data_saved.f_mac_address,custom_data.user_data.f_mac_address);
strcpy(sfud_data_saved.r_mac_address,custom_data.user_data.r_mac_address);
custom_data.front_pressure.temp = custom_data.user_data.f_mac_address[6];
custom_data.front_pressure.psi = custom_data.user_data.f_mac_address[7];
custom_data.front_pressure.psi = custom_data.front_pressure.psi<<8 | custom_data.user_data.f_mac_address[8];
custom_data.rear_pressure.temp = custom_data.user_data.r_mac_address[6];
custom_data.rear_pressure.psi = custom_data.user_data.r_mac_address[7];
custom_data.rear_pressure.psi = custom_data.rear_pressure.psi<<8 | custom_data.user_data.r_mac_address[8];
sfud_data_saved.maintenance_mileage = custom_data.user_data.maintenance_mileage;
sfud_data_saved.mileage_flag = custom_data.user_data.mileage_flag;
sfud_data_saved.display_mileage = custom_data.user_data.display_mileage;
sfud_data_saved.tcs_on_off = custom_data.user_data.tcs_on_off;
sfud_data_saved.mile_state = custom_data.user_data.mile_state;
sfud_data_saved.uuid_state = custom_data.user_data.uuid_state = 0;
sfud_data_saved.tp_state = custom_data.user_data.tp_state = 0;
SaveDataToFlash(custom_data.user_data);
}
#endif
custom_data.user_data.bt_on_off = 1;
sfud_data_saved.bt_on_off = 1;
flash_bt_state = 1;
}
void BrightnessPowerOnSetting(void){
#ifdef AMT630HV100
int buf;
ReadDataToFlash();
if(sfud_data_saved.light_value>6 || sfud_data_saved.light_value == 0)
sfud_data_saved.light_value=3;
// buf = sfud_data_saved.light_value * 10000;
buf = sfud_data_saved.light_value * LIGHT_PROPORTION_OF_CONTROL *10000 /25;
// if(Get_sys_veer_velocity()==0)
// buf = buf/LOW_BRIGHTNESS_MODE;
// buf = sfud_data_saved.light_value * 200000;
printf(" Brightness Power On Setting light_value = %d %d\r\n",sfud_data_saved.light_value,buf);
pwm_config(2, buf,40000);
#endif
}
//键盘数据仿真
ret_t on_key_set_data(void* ctx, event_t* e){
double buf =0;
uint8_t value =0;
key_event_t* evt = key_event_cast(e);
// TODO: 在此添加控件事件处理程序代码
if(evt->key == TK_KEY_z){//灯光开关
custom_data.veer = 1;
}else if(evt->key == TK_KEY_x){//远光
custom_data.veer = 2;
}else if(evt->key == TK_KEY_c){//速度
custom_data.veer = 3;
custom_data.velocity +=1;
}else if(evt->key == TK_KEY_v){
custom_data.velocity -=1;
}else if(evt->key == TK_KEY_b){//转速
// custom_data.veer_velocity +=1;
custom_data.user_data.gas +=1;
custom_data.temp +=1;
printf("gas=%d,temp =%d,\r\n",custom_data.user_data.gas,custom_data.temp);
}else if(evt->key == TK_KEY_n){
// custom_data.veer_velocity -=1;
custom_data.user_data.gas -=1;
custom_data.temp -=1;
printf("gas=%d,temp =%d,\r\n",custom_data.user_data.gas,custom_data.temp);
}else if(evt->key == TK_KEY_m){
// custom_data.user_data.gas +=1;
// custom_data.temp +=1;
custom_data.eng_temp += 10;
buf = custom_data.eng_temp; //值为60-120
if(buf>5280)
buf = 255;
else if(buf>2730)
buf = ((buf*0.1)-273);
else
buf = 0;
value = (int)buf;
printf("eng_temp = %d ,value = %d.\r\n",custom_data.eng_temp,value);
}else if(evt->key == TK_KEY_a){
// custom_data.user_data.gas -=1;
// custom_data.temp -=1;
custom_data.eng_temp -= 10;
// custom_data.eng_temp += 10;
buf = custom_data.eng_temp; //值为60-120
if(buf>5280)
buf = 255;
else if(buf>2730)
buf = ((buf*0.1)-273);
else
buf = 0;
value = (int)buf;
printf("eng_temp = %d ,value = %d.\r\n",custom_data.eng_temp,value);
}else if(evt->key == TK_KEY_s){
if(custom_data.lamplight == 0)
custom_data.lamplight = 1;
else
custom_data.lamplight = 0;
}else if(evt->key == TK_KEY_d){
custom_data.user_data.grade +=1;
}else if(evt->key == TK_KEY_f){
custom_data.user_data.grade -=1;
}else if(evt->key == TK_KEY_g){
custom_data.user_data.total_mileage +=1;
}else if(evt->key == TK_KEY_h){
custom_data.user_data.total_mileage -=1;
}else if(evt->key == TK_KEY_j){
/*if(custom_data.user_data.bt_state < 2)
custom_data.user_data.bt_state +=1;
else
custom_data.user_data.bt_state =0;*/
}else if(evt->key == TK_KEY_k){
if(custom_data.wifi_state !=1)
custom_data.wifi_state =1;
else
custom_data.wifi_state =0;
}else if(evt->key == TK_KEY_l){
}
return RET_OK;
}
// extern uint8_t speed_flag;
// static uint16_t test_flag = 1;
// int test_value[8] = {0,0,0xff,0,0,0,0,0};
// void test_mile(void){
// if(test_flag<1000){
// test_flag++;
// speed_flag = 5;
// speed_event_handing(test_value);
// }
// }
//数据模拟更新
void Simulating_data_changes(void){
static uint32_t n=0;
uint8_t m=1;
if((int)(n/140)%2==0)
m=1;
else
m=-1;
if(n%20==0)
custom_data.user_data.grade +=m;
if(n%20==0){
//custom_data.user_data.bt_state =0;
custom_data.wireless =0;
custom_data.warning.engine =0;
custom_data.warning.machine_oil = 0;
custom_data.warning.fan = 0;
custom_data.warning.abs = 0;
custom_data.warning.tcs = 0;
//custom_data.warning.neutral_gear = 0;
custom_data.user_data.bt_on_off = 0;
custom_data.veer = 0;
custom_data.lamplight = 0;
custom_data.warning.maintenance = 0;
}else if(n%20==10){
//custom_data.user_data.bt_state =1;
custom_data.wireless =1;
custom_data.warning.engine =1;
custom_data.warning.machine_oil = 1;
custom_data.warning.fan = 1;
custom_data.warning.abs = 1;
custom_data.warning.tcs = 1;
custom_data.user_data.bt_on_off = 1;
custom_data.veer = 3;
custom_data.lamplight = 1;
custom_data.warning.maintenance = 1;
//custom_data.warning.neutral_gear = 1;
}
if(n%12==0){
custom_data.veer_hint = 1;
}else if(n%12==3){
custom_data.veer_hint = 2;
}else if(n%12==6){
custom_data.veer_hint = 0;
}else if(n%12==9){
}
if((int)(n/100)%2 == 0){
custom_data.user_data.gas++;
custom_data.trip_mileage+=0.1;
custom_data.user_data.total_mileage++;
}else{
custom_data.user_data.gas--;
custom_data.trip_mileage-=0.1;
custom_data.user_data.total_mileage--;
}
if((int)(n/130)%2 == 0){
custom_data.temp++;
}else{
custom_data.temp--;
}
if((int)(n/255)%2 == 0){
// custom_data.velocity++;
custom_data.display_velocity++;
}else{
// custom_data.velocity--;
custom_data.display_velocity--;
}
if((int)(n/120)%2 == 0){
custom_data.veer_velocity+=100;
}else{
custom_data.veer_velocity-=100;
}
// printf("display speed %d .\r\n",custom_data.display_velocity);
/*
if((int)(n/255)%2 == 0){
custom_data.voltage +=0.01;
}else{
custom_data.voltage -=0.01;
}*/
if(n>=999999)
n=0;
n++;
}
void power_on_self_data(void){
static uint16_t number=0;
uint8_t value = (int)(number/255);
uint8_t num = 0;
//速度
if(value%2 == 0){
custom_data.velocity++;
if(custom_data.velocity<=240)
custom_data.veer_velocity = custom_data.velocity/2;
}else{
custom_data.velocity--;
if(custom_data.velocity<=240)
custom_data.veer_velocity = custom_data.velocity/2;
// if(custom_data.velocity == 0)
// Set_sys_power_on_self_test(100);
}
num = (int)custom_data.velocity/26;
custom_data.user_data.total_mileage = num*11111111;
custom_data.trip_mileage = (int)(num*111111.1);
custom_data.voltage = (int)(num*11.1);
num = (int)custom_data.velocity/32;
//档位
custom_data.user_data.grade = num;
// printf("number = %d , custom_data.velocity =%d .\r\n",number,custom_data.velocity);
if(number>=510){
Set_sys_power_on_self_test(100);
number=0;
}
number++;
}
daily_data_t* userData_getCustom(void)
{
return &custom_data;
}
#endif /*WITH_MVVM*/

View File

@ -0,0 +1,228 @@
#ifndef USER_DATA_H
#define USER_DATA_H
#include "moto_config.h"
#include "tkc/types_def.h"
typedef struct{
char equipment_num[16]; //设备编号
char produce_num[5]; //产品型号
char voucher[20]; //凭证
char mac[6]; //mac地址
uint8_t client_num; //客户编号
uint8_t moto_type; //摩托类型
uint8_t screen_type; //屏幕类型
uint8_t ability; //支持功能
//BottomData *bottom_data; //底层数据数组
uint8_t bottom_id; //底层平台ID
uint8_t bottom_softwar_host; //底层主版本号
uint8_t bottom_softwar_order; //底层次版本号
uint8_t hardware_version_host; //硬件主版本号
uint8_t hardware_version_order; //硬件次版本号
}Device_t;
typedef struct{
uint8_t engine; //发动机故障
uint8_t machine_oil; //机油报警
uint8_t abs; //abs防抱死
uint8_t tcs; //tcs牵引力系统
uint8_t fan; //风扇
uint8_t neutral_gear; //空挡
uint8_t maintenance; //保养里程提示
uint8_t tire; //胎压
}warning_t;
typedef struct Pressure_t{
char mac_address[6]; //物理地址
uint8_t state; //状态 0未匹配/未学习 1已配对/已学习
uint8_t blow_by_state; //漏气状态
uint8_t voltage_state; //低电压状态
uint8_t temp_state; //温度状态
uint8_t voltage; //电压数据
uint8_t temp; //温度数据
uint16_t psi; //压强数据
uint8_t unit; //单位
uint8_t lose_flag; //丢失
}Pressure_t;
typedef struct sfuddata_t{
uint8_t factory_reset; //出厂设置
uint8_t language; //语言
uint8_t display_unit; //单位
uint8_t theme; //当前主题
uint8_t theme_state; //主题状态
uint8_t light_value; //亮度
uint8_t bt_on_off; //蓝牙
uint8_t trip_unit; //trip单位
uint8_t grade; //档位
uint16_t gas; //油量
uint32_t total_mileage; //里程数
char f_mac_address[9]; //前胎压物理地址
char r_mac_address[9]; //后胎压物理地址
uint32_t maintenance_mileage; //保养里程数max
uint32_t mileage_flag; //保养里程设置时的开始里程
uint8_t display_mileage; // 里程显示类型
uint8_t tcs_on_off; //tcs开关类型
uint8_t mile_state; //保养里程状态
uint8_t uuid_state; //uuid激活状态
uint8_t tp_state; //投屏状态
// Pressure_t f_data;
// Pressure_t r_data;
}SfudData_t;
typedef struct{
uint8_t sensor_switch; //test开关
uint8_t light; //实时光感数据
}sensordata_t;
typedef enum _CALL_STATE_ID_ {
CALL_NORMAL, //常规
CALL_INCOMING, //来电
CALL_ANSWER, //接听
CALL_DURING, //通话中
CALL_HANG_UP, //挂断
}CALL_STATE_ID;
typedef struct{
uint8_t call_display; // call 显示状态
uint8_t call_state; // call 状态
char number[32]; // 电话号码
char renumber[32]; // 电话号码2
char name[50]; //姓名
char rename[50]; //姓名2
uint8_t call_type; //来电状态
uint8_t call_key_state; // call 按键回复状态
uint32_t time;
uint32_t retime;
}calldate_t;
//#define BT_NAME_MAX_LEN 24
typedef struct{
uint8_t display_theme;//光感控制当前应该显示的主题
//蓝牙
uint8_t bt_connect_state;
uint8_t wifi_state;
uint8_t softwar_host; //主版本号
uint8_t softwar_order; //次版本号
//uint8_t bt_name[BT_NAME_MAX_LEN];
uint8_t wireless; //WIFI
//uint8_t grade; //档位
//uint16_t gas; //油量
uint8_t veer; //转向 0-无 1-左转 2-右转
uint8_t veer_hint; //转向提示 0无 1左 2右
uint8_t lamplight; //灯光 0-无灯光 1-远光 2-近光 3-自动大灯
uint8_t side_marker; // 示宽灯
uint8_t power_on_self_test; //开机自检
uint8_t light_perception_value; //光感亮度
uint8_t light; //具体的light_value值
uint8_t return_demo;
uint16_t velocity; //速度
uint16_t display_velocity; //UI显示速度
uint16_t display_veer_velocity;
uint16_t veer_velocity; //转速
uint16_t temp; //温度
//里程数
uint32_t trip_mileage;
double voltage; //电压
char uuid[32];
char bt_name[32];
uint32_t now_defect_code; //当前故障码
uint32_t his_defect_code; //历史故障码
uint8_t bt_data_inheritance;
uint8_t ttrb; //开机检测是否获取到时间的标志
uint8_t tire_pressure_flag; //胎压标志
uint8_t ttrb_time; //设施时间后检测是否正常设置时间的标志
uint8_t odo_reset; //小计里程清零后检测是否正常设置时间的标志
uint8_t fault_code; //故障码发送后检测是否发送成功的标志
uint8_t demo_position; //是否在demo展示界面的标志
Pressure_t front_pressure; //前胎压
Pressure_t rear_pressure; //后胎压
uint8_t pressure_signal; //胎压信号 判断当前应该学习的是哪一个胎压 0正常 1前 2后 3先前再后 4先后再前
warning_t warning;
SfudData_t user_data;
uint8_t upgrade_Flag; //开始升级传输标志 用于UI线程开关升级界面
uint16_t plan; //总进度标志
uint16_t pace; //分进度标志
uint8_t upgrade; //内存拷贝标志
uint8_t bt_upgrade; //蓝牙升级判断 特殊机型 用于开关can升级
sensordata_t sensor;
calldate_t call;
uint16_t eng_temp;
uint8_t quickly_arrange; //快排功能
uint8_t quickly_arrange_state; //快排灯状态
}daily_data_t;
typedef struct {
uint8_t state;
uint32_t utc;
uint8_t value;
}DefectCodeRecord_t;
#define HEALTH_RECORD_MAX_NUM 10
typedef struct{
uint8_t size;
DefectCodeRecord_t records[HEALTH_RECORD_MAX_NUM];
}Historical_fault_code_record_saved_struct;
typedef struct{
uint8_t size;
DefectCodeRecord_t records[HEALTH_RECORD_MAX_NUM];
}Current_fault_code_record_saved_struct;
extern Current_fault_code_record_saved_struct* userData_getCurrentFaultRecordSaved(void);
extern Historical_fault_code_record_saved_struct* userData_getHistorFaultRecordSaved(void);
extern daily_data_t custom_data;
daily_data_t* userData_getCustom(void);
void system_date_init(void);
void Simulating_data_changes(void);
void system_flash_to_date_event_handling(void);
void power_on_self_data(void);
#if 0
#define AMT630HV100 1 //控制模拟器和开发板运行 注释掉模拟器可用 打开开发板可用
#define SOFT_WARE "MXC-A27-A V0.1"
#define HARD_WARE "MXC-A27-A V4.0"
#define HARD_WARE_LABEL "4.0"
//胎压温度报警
//前
#define TIRE_PRESSURE_FRONT_UPPER 362+146
#define TIRE_PRESSURE_FRONT_LOWER 268+146
//后
#define TIRE_PRESSURE_REAR_UPPER 362+146
#define TIRE_PRESSURE_REAR_LOWER 275+146
extern Current_fault_code_record_saved_struct* userData_getCurrentFaultRecordSaved(void);
extern Historical_fault_code_record_saved_struct* userData_getHistorFaultRecordSaved(void);
extern daily_data_t custom_data;
daily_data_t* userData_getCustom(void);
void system_date_init(void);
void Simulating_data_changes(void);
void system_flash_to_date_event_handling(void);
#define DEBUG 1
#ifdef DEBUG
#define DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)
#else
#define DEBUG_PRINT(fmt, ...)
#endif
#endif
#endif /*USER_DATA_H*/