Compare commits
24 Commits
Author | SHA1 | Date |
---|---|---|
|
487a554c1f | 3 months ago |
|
e716c7f2fe | 3 months ago |
|
f9af868744 | 3 months ago |
|
2891dfe1cd | 3 months ago |
|
a43fe6d4b6 | 3 months ago |
|
21336bba3b | 4 months ago |
|
97b0dbf954 | 4 months ago |
|
a291edf9d8 | 4 months ago |
|
0e9a61bdf4 | 4 months ago |
|
9995f72a8c | 4 months ago |
|
ca141eaf9b | 4 months ago |
|
4fb50f3755 | 4 months ago |
|
6ede45ccdd | 4 months ago |
|
6306b7d38f | 4 months ago |
|
6e1364f5e3 | 4 months ago |
|
70ef799e2f | 4 months ago |
|
74f2b17b66 | 4 months ago |
|
66ece2a061 | 4 months ago |
|
b4c179b0a1 | 4 months ago |
|
3d25f444e7 | 4 months ago |
|
ec570b9afc | 4 months ago |
|
7a730c06cd | 4 months ago |
|
d723fed230 | 4 months ago |
|
146c6d8b3f | 4 months ago |
63 changed files with 5788 additions and 1258 deletions
@ -0,0 +1,5 @@ |
|||
{ |
|||
"files.associations": { |
|||
"stdio.h": "c" |
|||
} |
|||
} |
@ -1,58 +0,0 @@ |
|||
#include "../app/app_data_save.h" |
|||
#include "../msp/msp_eeprom.h" |
|||
#include "app_config.h" |
|||
|
|||
|
|||
DATA_SAVE data_save_arr[DATA_SAVE_LEN] = {0}; |
|||
|
|||
//初始化存放数据的结构体数组data_save_arr
|
|||
void data_save_init() |
|||
{ |
|||
int i = 0; |
|||
for(i = 0;i < DATA_SAVE_LEN; i++) |
|||
{ |
|||
data_save_arr[i].head[0] = HEAD0; |
|||
data_save_arr[i].head[1] = HEAD1; |
|||
data_save_arr[i].available = 1; |
|||
data_save_arr[i].val = 0; |
|||
data_save_arr[i].tail[0] = TAIL0; |
|||
data_save_arr[i].tail[1] = TAIL1; |
|||
} |
|||
} |
|||
//存放数据到eeprom中:1.从eeprom中取出数组 2.遍历寻找空位 3.把数组放回(写入)eeprom中
|
|||
void data_save_push(U8 Data) |
|||
{ |
|||
int i = 0; |
|||
int free = 0; |
|||
// 从eeprom中取出数组
|
|||
L0_Iap_Read_array(EEPROM_DATA_ADDR, data_save_arr,sizeof(data_save_arr)); |
|||
if(data_save_arr[0].head[0] != HEAD0 || data_save_arr[0].head[1] != HEAD1 |
|||
|| data_save_arr[0].tail[0] != TAIL0 || data_save_arr[0].tail[1] != TAIL1) |
|||
{ |
|||
data_save_init(); |
|||
} |
|||
// 遍历寻找空位
|
|||
for(i = 0;i < DATA_SAVE_LEN; i++) |
|||
{ |
|||
if(data_save_arr[i].available == 1) |
|||
{ |
|||
free = i; |
|||
break; |
|||
} |
|||
} |
|||
// 当都有数据时
|
|||
if(i == DATA_SAVE_LEN) |
|||
{ |
|||
for(i = 0; i < DATA_SAVE_LEN - 1; i++) |
|||
{ |
|||
data_save_arr[i] = data_save_arr[i+1]; |
|||
} |
|||
free = DATA_SAVE_LEN - 1; |
|||
} |
|||
// 放到free位置
|
|||
data_save_arr[free].available = 0; |
|||
data_save_arr[free].val = Data; |
|||
|
|||
// 把数组放回(写入)eeprom中
|
|||
L0_Iap_Program_array(EEPROM_DATA_ADDR, data_save_arr,sizeof(data_save_arr)); |
|||
} |
@ -1,32 +0,0 @@ |
|||
#ifndef _APP_DATA_SAVE_H |
|||
#define _APP_DATA_SAVE_H |
|||
|
|||
#include "../bsp/bsp_config.h" |
|||
|
|||
//定义所使用内存的起始和结尾标志
|
|||
#define HEAD0 0xa3 |
|||
#define HEAD1 0xa4 |
|||
#define TAIL0 0xa5 |
|||
#define TAIL1 0xa6 |
|||
|
|||
#define DATA_SAVE_LEN 10 //寄存器需要存放的最大数量为10组
|
|||
|
|||
#define EEPROM_DATA_ADDR 0x00 //定义一个起始地址为0x00的寄存器
|
|||
|
|||
//用来存储重量数据的结构体(数组)
|
|||
typedef struct |
|||
{ |
|||
U8 head[2]; |
|||
U8 available; |
|||
U8 val; |
|||
U8 tail[2]; |
|||
|
|||
}DATA_SAVE; |
|||
|
|||
extern DATA_SAVE data_save_arr[DATA_SAVE_LEN]; |
|||
|
|||
|
|||
extern void data_save_init(void); |
|||
extern void data_save_push(U8 Data); |
|||
|
|||
#endif |
@ -0,0 +1,13 @@ |
|||
#include "../app/app_eeprom.h" |
|||
#include "../app/app_config.h" |
|||
|
|||
|
|||
// 读取EEPROM中的参数到G结构体
|
|||
void L3_param_read(void) |
|||
{ |
|||
L0_Iap_Read_array(EEPROM_DATA_ADDR, (U8*)&G,sizeof(G)); |
|||
if(G.head[0] != HEAD0 || G.head[1] != HEAD1 || G.tail[0] != TAIL0 || G.tail[1] != TAIL1) |
|||
{ |
|||
L3_param_init(); |
|||
} |
|||
} |
@ -0,0 +1,9 @@ |
|||
#ifndef _APP_EEPROM_H |
|||
#define _APP_EEPROM_H |
|||
|
|||
#include "../msp/msp_eeprom.h" |
|||
|
|||
|
|||
extern void L3_param_read(void); |
|||
|
|||
#endif |
@ -0,0 +1,78 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.c
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#include "../app/task_smartconfig.h" |
|||
#include "../app/app_config.h" |
|||
#include "../app/task_w600.h" |
|||
#include "../msp/uartx.h" |
|||
#include "../msp/uart0.h" |
|||
#include "../msp/uart2.h" |
|||
#include "../clib/clib.h" |
|||
|
|||
|
|||
S_TASK_SMART_CONFIG task_smartconfig; |
|||
|
|||
|
|||
void L3_task_SmartConfig_init(void) |
|||
{ |
|||
L1_task_init(&task_smartconfig.task); |
|||
task_smartconfig.status = 0; |
|||
L3_task_s_go(task_smartconfig,D_task_init); |
|||
} |
|||
|
|||
#define D_task_SAMRTCONFIG 0x50 |
|||
#define D_task_SMARTCSUCCESS 0x52 |
|||
#define D_task_SAMRTCSTOP 0x53 |
|||
#define D_task_SAMRTCSTOPPED 0x54 |
|||
|
|||
|
|||
void L3_task_SmartConfig_handler(S_TASK_SMART_CONFIG *s) |
|||
{ |
|||
// TTSS_Task_init()
|
|||
// L2_task_go(D_task_SAMRTCONFIG);
|
|||
// // L0_uart0_uc('*');
|
|||
// // L0_uart0_uchex(task_smartconfig.status);
|
|||
// // L0_uart0_uchex(s->status);
|
|||
// // L0_uart0_0d0a();
|
|||
// // L0_uart0_ulhex((U32)s);
|
|||
|
|||
// TTSS_Task_step(D_task_SAMRTCONFIG)
|
|||
// L3_gm35_send_str(AT_INS_ST_STARTSMART); //开启SmartC
|
|||
// L2_task_go_Tdelay(D_task_SAMRTCONFIG,D_Tdelay_500ms);
|
|||
// TTSS_Task_step(D_task_SAMRTCONFIG)
|
|||
// if(Lc_strStartsWith(ts_uart[uNum2].r.buf,"\r\nOK"))
|
|||
// {
|
|||
// L0_uart0_sendstr("SmartConfig Enter-->");
|
|||
// // 语音输出:进入配网模式,请配合手机
|
|||
// L2_task_go_Tdelay(D_task_SMARTCSUCCESS,D_Tdelay_300ms);
|
|||
// }
|
|||
// TTSS_Task_step(D_task_SMARTCSUCCESS)
|
|||
// if(Lc_strStartsWith(ts_uart[uNum2].r.buf,"\r\nsmartconfig type"))
|
|||
// {
|
|||
// L0_uart0_sendstr("SmartConfig Success!");
|
|||
// // 语音输出:配网模式成功,请重启设备
|
|||
// L2_task_go_Tdelay(D_task_SAMRTCSTOP,D_Tdelay_300ms);
|
|||
// }
|
|||
// TTSS_Task_step(D_task_SAMRTCSTOP)
|
|||
// L3_gm35_send_str(AT_INS_ST_STOPSMART);
|
|||
// L2_task_go_Tdelay(D_task_SAMRTCSTOPPED,D_Tdelay_300ms);
|
|||
|
|||
// TTSS_Task_step(D_task_SAMRTCSTOPPED)
|
|||
// if (Lc_strStartsWith(ts_uart[uNum2].r.buf,"\r\nOK"))
|
|||
// {
|
|||
// L0_uart0_sendstr("SmartConfig Stop!");
|
|||
// R.app_status = WIFI_CONNECTED;
|
|||
// L2_task_go_Tdelay(D_task_DETECTCHANGE,D_Tdelay_300ms);
|
|||
// }
|
|||
|
|||
// TTSS_Task_end();
|
|||
} |
@ -0,0 +1,34 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.h
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#ifndef _TASK_SMARTC_H |
|||
#define _TASK_SMARTC_H |
|||
|
|||
#include "../ctask/task.h" |
|||
#include "../app/app_config.h" |
|||
#include "../clib/type.h" |
|||
|
|||
|
|||
|
|||
typedef struct _s_task_smartc |
|||
{ |
|||
TS_task task; |
|||
APP_STATUS status; |
|||
}S_TASK_SMART_CONFIG; |
|||
|
|||
extern S_TASK_SMART_CONFIG task_smartconfig; |
|||
|
|||
extern void L3_task_SmartConfig_init(void); |
|||
extern void L3_task_SmartConfig_handler(S_TASK_SMART_CONFIG *s); |
|||
|
|||
#endif // #ifndef
|
@ -0,0 +1,94 @@ |
|||
#include "../app/task_adc.h" |
|||
#include "../msp/msp_adc.h" |
|||
#include "../app/app_config.h" |
|||
#include "../msp/uart0.h" |
|||
#include "../bsp/bsp_WT2605B.h" |
|||
|
|||
|
|||
|
|||
S_TASK_ADC _s_task_adc; |
|||
|
|||
|
|||
void L3_task_Adc_init(void) |
|||
{ |
|||
L1_task_init(&_s_task_adc.task); |
|||
_s_task_adc.index = 0; |
|||
_s_task_adc.SUM = 0; |
|||
_s_task_adc.LowPower_Flag = 0; |
|||
_s_task_adc.LowPower_Count = 0; |
|||
L3_task_s_go(_s_task_adc,D_task_init); |
|||
} |
|||
|
|||
#define D_task_ADC_READ 0x50 |
|||
#define D_task_ADC_COUNT 0x51 |
|||
#define D_task_LOWPOWER_DETECT 0x52 |
|||
|
|||
|
|||
void L3_task_Adc_handler(S_TASK_ADC *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_100ms); |
|||
|
|||
TTSS_Task_step(D_task_ADC_READ) |
|||
s->adc_val[_s_task_adc.index] = L1_ADC_Read(12); |
|||
s->SUM += s->adc_val[_s_task_adc.index++]; |
|||
if (_s_task_adc.index >= 10) |
|||
{ |
|||
_s_task_adc.index = 0; |
|||
L2_task_go_Tdelay(D_task_ADC_COUNT,D_Tdelay_100ms); |
|||
} |
|||
else |
|||
{ |
|||
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_100ms); |
|||
} |
|||
TTSS_Task_step(D_task_ADC_COUNT) |
|||
// U8 i;
|
|||
// 计算平均值
|
|||
s->Aver = s->SUM / ADC_NUM; |
|||
// L0_uart0_sendstr("s->SUM = ");
|
|||
// L0_uart0_ulhex(s->SUM);
|
|||
// L0_uart0_0d0a();
|
|||
// L0_uart0_sendstr("s->Aver = ");
|
|||
// L0_uart0_ushex(s->Aver);
|
|||
s->SUM = 0; |
|||
// s->Variance = 0;
|
|||
// 计算方差
|
|||
// for(i = 0; i < ADC_NUM; i++)
|
|||
// {
|
|||
// S16 diff = s->adc_val[i] - s->Aver;
|
|||
// s->Variance += diff >= 0 ? diff : -diff;
|
|||
// }
|
|||
// s->Variance /= ADC_NUM;
|
|||
// if (s->Variance <= 200)
|
|||
// {
|
|||
// s->Vin = (s->Aver / 0x1000) * 33;
|
|||
// }
|
|||
// 分压 0.5
|
|||
s->Vin = (s->Aver * 33 * 2) / 0x1000; |
|||
G.Vin = s->Vin; |
|||
|
|||
L2_task_go_Tdelay(D_task_LOWPOWER_DETECT,D_Tdelay_100ms); |
|||
|
|||
TTSS_Task_step(D_task_LOWPOWER_DETECT) |
|||
if (s->LowPower_Flag == 0) |
|||
{ |
|||
if (s->Vin < Alarm_Vol) |
|||
{ |
|||
s->LowPower_Count ++; |
|||
if (s->LowPower_Count > Count_Max) |
|||
{ |
|||
L0_uart0_sendstr("s->Aver = "); |
|||
s->LowPower_Flag = 1; |
|||
// 语音提醒
|
|||
L2_WT2605B_Broadcast(&audio_low_power); |
|||
s->LowPower_Count = 0; |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
s->LowPower_Count = 0; |
|||
} |
|||
} |
|||
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_100ms); |
|||
TTSS_Task_end(); |
|||
} |
@ -0,0 +1,44 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.h
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#ifndef _TASK_ADC_H |
|||
#define _TASK_ADC_H |
|||
|
|||
#include "../ctask/task.h" |
|||
|
|||
#define ADC_NUM 10 |
|||
//电压:3.65v 剩余容量:10%
|
|||
#define Alarm_Vol 45 |
|||
// 最大次数
|
|||
#define Count_Max 5 |
|||
|
|||
typedef struct _s_task_adc |
|||
{ |
|||
TS_task task; |
|||
U16 adc_val[ADC_NUM]; |
|||
U8 index; |
|||
U32 SUM; |
|||
U32 Aver; |
|||
U32 Variance; |
|||
U16 Vin; |
|||
U8 LowPower_Flag; |
|||
// 计数
|
|||
U8 LowPower_Count; |
|||
}S_TASK_ADC; |
|||
|
|||
extern S_TASK_ADC _s_task_adc; |
|||
|
|||
extern void L3_task_Adc_init(void); |
|||
extern void L3_task_Adc_handler(S_TASK_ADC *s); |
|||
|
|||
#endif // #ifndef
|
@ -0,0 +1,67 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.c
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#include "../app/task_appTEST.h" |
|||
#include "app_config.h" |
|||
|
|||
|
|||
S_TASK_APPTEST _s_task_apptest; |
|||
|
|||
void L3_task_AppTest_init(void) |
|||
{ |
|||
L1_task_init(&_s_task_apptest.task); |
|||
L3_task_s_go(_s_task_apptest,D_task_init); |
|||
} |
|||
|
|||
#define D_task_Status00 0x50 |
|||
#define D_task_Status01 0x51 |
|||
#define D_task_Status02 0x52 |
|||
#define D_task_Status03 0x53 |
|||
#define D_task_Status04 0x54 |
|||
|
|||
// POW_OFF = 0, //开机状态
|
|||
// POW_ON = 1, //关机状态
|
|||
// WIFI_CONNECTED = 2, //WIFI连接成功
|
|||
// TCP_CONNECTED = 3, //TCP连接成
|
|||
// WIFI_CONFIG = 9, //WIFI配置连接中
|
|||
|
|||
void L3_task_AppTest_handler(S_TASK_APPTEST *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L2_task_go(D_task_Status00); |
|||
|
|||
TTSS_Task_step(D_task_Status00) |
|||
|
|||
R.app_status = POW_OFF; |
|||
L2_task_go_Tdelay(D_task_Status01,D_Tdelay_10s); |
|||
|
|||
TTSS_Task_step(D_task_Status01) |
|||
|
|||
R.app_status = POW_ON; |
|||
L2_task_go_Tdelay(D_task_Status02,D_Tdelay_10s); |
|||
|
|||
TTSS_Task_step(D_task_Status02) |
|||
R.app_status = WIFI_CONFIG; |
|||
L2_task_go_Tdelay(D_task_Status03,D_Tdelay_10s); |
|||
|
|||
TTSS_Task_step(D_task_Status03) |
|||
|
|||
R.app_status = WIFI_CONNECTED; |
|||
L2_task_go_Tdelay(D_task_Status04,D_Tdelay_10s); |
|||
|
|||
TTSS_Task_step(D_task_Status04) |
|||
|
|||
R.app_status = TCP_CONNECTED; |
|||
L2_task_go_Tdelay(D_task_Status00,D_Tdelay_10s); |
|||
|
|||
TTSS_Task_end(); |
|||
} |
@ -0,0 +1,28 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.h
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#ifndef _TASK_APPTEST_H |
|||
#define _TASK_APPTEST_H |
|||
|
|||
#include "../ctask/task.h" |
|||
|
|||
typedef struct _s_task_apptest |
|||
{ |
|||
TS_task task; |
|||
}S_TASK_APPTEST; |
|||
|
|||
extern S_TASK_APPTEST _s_task_apptest; |
|||
extern void L3_task_AppTest_init(void); |
|||
extern void L3_task_AppTest_handler(S_TASK_APPTEST *s); |
|||
|
|||
#endif // #ifndef
|
@ -0,0 +1,148 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.c
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#include "../app/task_appstatus.h" |
|||
#include "../bsp/bsp_led.h" |
|||
#include "../bsp/bsp_key.h" |
|||
#include "../bsp/bsp_WT2605B.h" |
|||
#include "../app/app_config.h" |
|||
#include "../bsp/bsp_config.h" |
|||
#include "../msp/uart0.h" |
|||
#include "../bsp/bsp_led.h" |
|||
#include "../app/task_game.h" |
|||
#include "../app/task_Adc.h" |
|||
#include "../app/task_w600.h" |
|||
#include "../bsp/bsp_wifi.h" |
|||
|
|||
|
|||
S_TASK_APPSTATUS _s_task_appstatus; |
|||
|
|||
void L3_task_AppStatus_init(void) |
|||
{ |
|||
L1_task_init(&_s_task_appstatus.task); |
|||
_s_task_appstatus.status = R.app_status; |
|||
L3_task_s_go(_s_task_appstatus,D_task_init); |
|||
} |
|||
|
|||
#define D_task_DETECTCHANGE 0x50 |
|||
#define D_task_HANDLECHANGE 0x51 |
|||
#define D_task_WIFICONFIG_STATUS01 0x52 |
|||
#define D_task_WIFICONFIG_STATUS02 0x53 |
|||
#define D_task_WIFICONN_STATUS01 0x54 |
|||
#define D_task_WIFICONN_STATUS02 0x55 |
|||
|
|||
|
|||
void L3_task_appstatus_handler(S_TASK_APPSTATUS *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L2_task_go(D_task_DETECTCHANGE); |
|||
|
|||
TTSS_Task_step(D_task_DETECTCHANGE) |
|||
if(s->status != R.app_status) |
|||
{ |
|||
s->status = R.app_status; |
|||
L2_task_go_Tdelay(D_task_HANDLECHANGE,D_Tdelay_300ms); |
|||
} |
|||
else if (s->status == WIFI_CONFIG) |
|||
{ |
|||
L2_task_go_Tdelay(D_task_WIFICONFIG_STATUS01,0); |
|||
} |
|||
else if (s->status == WIFI_CONNECTED) |
|||
{ |
|||
L2_task_go_Tdelay(D_task_WIFICONN_STATUS01,0); |
|||
} |
|||
|
|||
TTSS_Task_step(D_task_HANDLECHANGE) |
|||
if(s->status == POW_OFF) |
|||
{ |
|||
// LED灯灭
|
|||
L2_LED_OFF(); |
|||
// // 音频播放关机语音后断电
|
|||
L2_WT2605B_Broadcast(&audio_powerdown); |
|||
// Lc_delay_ms(1000);
|
|||
// L2_WT2605B_PWROFF();
|
|||
// OID、WIFI关闭
|
|||
L2_OID_WIFI_Close(); |
|||
} |
|||
else if (s->status == POW_ON) |
|||
{ |
|||
// LED红灯常亮,LED绿灯灭
|
|||
L2_RED_LED_ON(); |
|||
// 音频通电后播放开机语音
|
|||
// L2_WT2605B_PWRON();
|
|||
// Lc_delay_ms(1000);
|
|||
L2_WT2605B_Broadcast(&audio_poweron); |
|||
// OID、WIFI开启
|
|||
L2_OID_WIFI_Open(); |
|||
//wifi任务初始化
|
|||
L3_task_W600_flow_init(W600_ST); |
|||
// Adc任务初始化
|
|||
L3_task_Adc_init(); |
|||
// game任务初始化
|
|||
L3_task_game_init(); |
|||
|
|||
|
|||
} |
|||
else if (s->status == WIFI_CONFIG) |
|||
{ |
|||
// 灯灭
|
|||
L2_LED_OFF(); |
|||
// 音频播放
|
|||
L2_WT2605B_Broadcast(&audio_config_mode); |
|||
// 配网任务初始化,进入配网
|
|||
// L3_gm35_send_str("+++");
|
|||
L3_task_W600_flow_init(W600_SC); |
|||
} |
|||
else if (s->status == WIFI_CONFIG_Phone) |
|||
{ |
|||
L2_WT2605B_Broadcast(&audio_config_phone); |
|||
|
|||
} |
|||
else if (s->status == WIFI_CONFIG_COMPLETE) |
|||
{ |
|||
L2_WT2605B_Broadcast(&audio_config_complete); |
|||
// 配网成功,进入STAION模式
|
|||
L3_task_W600_flow_init(W600_ST); |
|||
} |
|||
else if (s->status == WIFI_CONNECTED) |
|||
{ |
|||
// 灯灭
|
|||
L2_LED_OFF(); |
|||
// 音频播放
|
|||
L2_WT2605B_Broadcast(&audio_wifi_connected); |
|||
} |
|||
else if (s->status == TCP_CONNECTED) |
|||
{ |
|||
// LED红灯灭,LED绿灯常亮
|
|||
L2_GREEN_LED_ON(); |
|||
// 音频播放
|
|||
L2_WT2605B_Broadcast(&audio_TCP_connected); |
|||
|
|||
} |
|||
L2_task_go_Tdelay(D_task_DETECTCHANGE,D_Tdelay_300ms); |
|||
|
|||
TTSS_Task_step(D_task_WIFICONFIG_STATUS01) |
|||
L2_RED_LED_ON(); |
|||
L2_task_go_Tdelay(D_task_WIFICONFIG_STATUS02,D_Tdelay_500ms); |
|||
TTSS_Task_step(D_task_WIFICONFIG_STATUS02) |
|||
L2_LED_OFF(); |
|||
L2_task_go_Tdelay(D_task_DETECTCHANGE,D_Tdelay_500ms); |
|||
|
|||
TTSS_Task_step(D_task_WIFICONN_STATUS01) |
|||
L2_GREEN_LED_ON(); |
|||
L2_task_go_Tdelay(D_task_WIFICONN_STATUS02,D_Tdelay_500ms); |
|||
TTSS_Task_step(D_task_WIFICONN_STATUS02) |
|||
L2_LED_OFF(); |
|||
L2_task_go_Tdelay(D_task_DETECTCHANGE,D_Tdelay_500ms); |
|||
|
|||
TTSS_Task_end(); |
|||
} |
@ -0,0 +1,31 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.h
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#ifndef _TASK_APPSTATUS_H |
|||
#define _TASK_APPSTATUS_H |
|||
|
|||
#include "../ctask/task.h" |
|||
#include "../clib/clib.h" |
|||
#include "app_config.h" |
|||
|
|||
typedef struct _s_task_appstatus |
|||
{ |
|||
TS_task task; |
|||
APP_STATUS status; |
|||
}S_TASK_APPSTATUS; |
|||
|
|||
extern S_TASK_APPSTATUS _s_task_appstatus; |
|||
extern void L3_task_AppStatus_init(void); |
|||
extern void L3_task_appstatus_handler(S_TASK_APPSTATUS *s); |
|||
|
|||
#endif // #ifndef
|
@ -0,0 +1,110 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.c
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#include "../app/task_keystatus.h" |
|||
#include "../app/app_config.h" |
|||
#include "../app/task_w600.h" |
|||
#include "../bsp/bsp_key.h" |
|||
#include "../bsp/bsp_WT2605B.h" |
|||
#include "../msp/uart0.h" |
|||
|
|||
S_TASK_KEYSTATUS _s_task_keystatus; |
|||
|
|||
|
|||
void L3_task_KeyStatus_init(void) |
|||
{ |
|||
L1_task_init(&_s_task_keystatus.task); |
|||
_s_task_keystatus.Key1_Down_Begin_Time = 0; |
|||
_s_task_keystatus.Key2_Down_Begin_Time = 0; |
|||
_s_task_keystatus.Key3_Down_Begin_Time = 0; |
|||
_s_task_keystatus.Key1_handled = 0; |
|||
_s_task_keystatus.Key2_handled = 0; |
|||
_s_task_keystatus.Key3_handled = 0; |
|||
|
|||
L3_task_s_go(_s_task_keystatus,D_task_init); |
|||
} |
|||
|
|||
#define D_task_KEY_DETECT 0x50 |
|||
|
|||
|
|||
void L3_task_keystatus_handler(S_TASK_KEYSTATUS *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L2_task_go_Tdelay(D_task_KEY_DETECT,D_Tdelay_300ms); |
|||
|
|||
TTSS_Task_step(D_task_KEY_DETECT) |
|||
if(L2_ReadKey3() == Key_Down) |
|||
{ |
|||
if (s->Key3_Down_Begin_Time == 0) |
|||
{ |
|||
s->Key3_Down_Begin_Time = D_sys_now; |
|||
} |
|||
else |
|||
{ |
|||
U32 diff = D_sys_now -s->Key3_Down_Begin_Time; |
|||
// L0_uart0_ulhex(diff);
|
|||
if (diff >= LongKey_PWR_MSeconds/JIFFIES && s->Key3_handled == 0) |
|||
{ |
|||
if (R.app_status == POW_OFF) |
|||
{ |
|||
R.app_status = POW_ON; |
|||
s->Key3_Down_Begin_Time = 0; |
|||
s->Key3_handled = 1; |
|||
} |
|||
else |
|||
{ |
|||
R.app_status = POW_OFF; |
|||
s->Key3_Down_Begin_Time = 0; |
|||
s->Key3_handled = 1; |
|||
} |
|||
} |
|||
else if (diff >= LongKey_WIFICONF_MSeconds/JIFFIES && s->Key3_handled == 0) |
|||
{ |
|||
if (L2_ReadKey1() == Key_Down) |
|||
{ |
|||
if (R.app_status != POW_OFF) |
|||
{ |
|||
R.app_status = WIFI_CONFIG; |
|||
s->Key3_handled = 1; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
else if (L2_ReadKey1() == Key_Down) |
|||
{ |
|||
if (s->Key1_handled == 0) |
|||
{ |
|||
s->Key1_handled = 1; |
|||
L0_uart0_uc('1'); |
|||
L2_WT2605B_VioceUp(); // 音量增加
|
|||
} |
|||
} |
|||
else if (L2_ReadKey2() == Key_Down) |
|||
{ |
|||
if (s->Key2_handled == 0) |
|||
{ |
|||
s->Key2_handled = 1; |
|||
L0_uart0_uc('2'); |
|||
L2_WT2605B_VioceDown(); // 音量减少
|
|||
} |
|||
} |
|||
else |
|||
{ |
|||
s->Key3_Down_Begin_Time = 0; |
|||
s->Key1_handled = 0; |
|||
s->Key2_handled = 0; |
|||
s->Key3_handled = 0; |
|||
} |
|||
L2_task_go_Tdelay(D_task_KEY_DETECT,D_Tdelay_300ms); |
|||
TTSS_Task_end(); |
|||
} |
@ -0,0 +1,40 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.h
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#ifndef _TASK_KEYSTATUS_H |
|||
#define _TASK_KEYSTATUS_H |
|||
|
|||
#include "../ctask/task.h" |
|||
|
|||
|
|||
#define LongKey_PWR_MSeconds 3000 |
|||
#define LongKey_WIFICONF_MSeconds 2000 |
|||
|
|||
|
|||
typedef struct _s_task_keystatus |
|||
{ |
|||
TS_task task; |
|||
U32 Key1_Down_Begin_Time; |
|||
U32 Key2_Down_Begin_Time; |
|||
U32 Key3_Down_Begin_Time; |
|||
U8 Key1_handled; |
|||
U8 Key2_handled; |
|||
U8 Key3_handled; |
|||
}S_TASK_KEYSTATUS; |
|||
|
|||
extern S_TASK_KEYSTATUS _s_task_keystatus; |
|||
|
|||
extern void L3_task_KeyStatus_init(void); |
|||
extern void L3_task_keystatus_handler(S_TASK_KEYSTATUS *s); |
|||
|
|||
#endif // #ifndef
|
@ -0,0 +1,744 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_test.c.c
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#include "task_w600.h" |
|||
|
|||
#include "app_config.h" |
|||
#include "../msp/uart0.h" |
|||
#include "../msp/uart2.h" |
|||
#include "../asp/asp_oid.h" |
|||
#include "../bsp/bsp_config.h" |
|||
|
|||
struct _s_task_W600_Para _s_task_w600_para; |
|||
//TS_tcp_control ts_tcp_control;
|
|||
//TS_tcp ts_tcp;
|
|||
|
|||
|
|||
|
|||
#define LEN_GPRS_TCP_PKG 18 |
|||
|
|||
U8 ins_cipsend[30] = "AT+CIPSEND=000\r\n"; |
|||
|
|||
U8 * _cipsend_hex(U8 len) |
|||
{ |
|||
U8 pos = Lc_strlen("AT+CIPSEND="); |
|||
ins_cipsend[pos++] = len % 1000 / 100 + '0'; |
|||
ins_cipsend[pos++] = len % 100 / 10 + '0'; |
|||
ins_cipsend[pos++] = len % 10 / 1 + '0'; |
|||
|
|||
return ins_cipsend; |
|||
} |
|||
|
|||
void L3_gm35_send_str(U8 *str) |
|||
{ |
|||
L0_uart2_sendstr(str); |
|||
if(G.debug) |
|||
{ |
|||
L0_uart0_sendstr(str); |
|||
} |
|||
} |
|||
|
|||
//将数据放入gm35待发送缓冲区
|
|||
void L3_gm35_send_data(U8 *buf , U16 len) |
|||
{ |
|||
//L3_gm35_send_str(_cipsend_hex(len));
|
|||
// L0_uart2_sendArray(buf,len);
|
|||
if(G.debug) |
|||
{ |
|||
L0_uart0_sendArray(buf,len); |
|||
} |
|||
} |
|||
|
|||
void L3_gm35_rcv_data(U8* buf,U8 num) |
|||
{ |
|||
if(G.debug) |
|||
{ |
|||
L0_uart0_sendstr("ATRCV="); |
|||
L0_uart0_uchex(num); |
|||
L0_uart0_sendArray(buf,num+3); |
|||
} |
|||
} |
|||
|
|||
U8 wifi_ins[64]; |
|||
char *GET_WIFI_INS() |
|||
{ |
|||
//AT+CWJAP_DEF=\"ccsens\",\"ccsens123\"\r\n"
|
|||
Lc_strcpy(wifi_ins,"AT+CWJAP_DEF=\""); |
|||
Lc_strcpy(wifi_ins+Lc_strlen(wifi_ins),G.st_sid); |
|||
Lc_strcpy(wifi_ins+Lc_strlen(wifi_ins),"\",\""); |
|||
Lc_strcpy(wifi_ins+Lc_strlen(wifi_ins),G.st_pwd); |
|||
Lc_strcpy(wifi_ins+Lc_strlen(wifi_ins),"\"\r\n"); |
|||
return wifi_ins; |
|||
} |
|||
|
|||
U8 wifi_rev_buf[64], wifi_tmp[64]; |
|||
U8 tmp_num = 0; |
|||
void L3_uart2_wifi_parse(void) |
|||
{ |
|||
if (ts_uart[uNum2].r.ok == 1) |
|||
{ |
|||
U8 *ptr = wifi_rev_buf; |
|||
ts_uart[uNum2].r.ok = 0; |
|||
Lc_buf_copy_uc(wifi_rev_buf, ts_uart[uNum2].r.buf, ts_uart[uNum2].r.num); |
|||
wifi_rev_buf[ts_uart[uNum2].r.num] = 0; |
|||
while(*ptr) |
|||
{ |
|||
U8 c = *ptr++; |
|||
if(c != '\r' && c != '\n') |
|||
{ |
|||
wifi_tmp[tmp_num++] = c; |
|||
} |
|||
else |
|||
{ |
|||
wifi_tmp[tmp_num] = 0; |
|||
if(tmp_num == 0) |
|||
{ |
|||
continue; |
|||
} |
|||
L0_uart0_uc('>'); |
|||
L0_uart0_sendstr(wifi_tmp); |
|||
L0_uart0_0d0a(); |
|||
if(Lc_strcmp(wifi_tmp,"OK") == 0) |
|||
{ |
|||
// L0_uart0_sendstr("Moudle Answer:OK AND ins_ok = 1");
|
|||
_s_task_w600_para.ins_ok = 1; |
|||
} |
|||
else if(Lc_strcmp(wifi_tmp,"WIFI GOT IP") == 0) |
|||
{ |
|||
_s_task_w600_para.st_wifi_ok = 1; |
|||
} |
|||
else if(Lc_strcmp(wifi_tmp,"CONNECT") == 0) |
|||
{ |
|||
_s_task_w600_para.serve_ok = 1; |
|||
} |
|||
tmp_num = 0; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
void L3_uart2_wifi_parse111(void) |
|||
{ |
|||
if (ts_uart[uNum2].r.ok == 1) |
|||
{ |
|||
U8 *pPara = ts_uart[uNum2].r.buf; |
|||
pPara[ts_uart[uNum2].r.num] = 0; |
|||
ts_uart[uNum2].r.ok = 0; |
|||
L0_uart0_uc('$'); |
|||
// L0_uart0_sendArray(ts_uart[uNum2].r.buf,ts_uart[uNum2].r.num);
|
|||
L0_uart0_sendstr(ts_uart[uNum2].r.buf); |
|||
|
|||
if(Lc_strStartsWith(pPara,"\r\nOK")) |
|||
{ |
|||
LED3 = ~LED3; |
|||
L0_uart0_sendstr("Moudle Answer:OK AND ins_ok = 1"); |
|||
L0_uart0_0d0a(); |
|||
_s_task_w600_para.ins_ok = 1; |
|||
} |
|||
// if (Lc_strStartsWith(pPara,"WIFI DISCONNECT"))
|
|||
// {
|
|||
// LED3 = ~LED3;
|
|||
// }
|
|||
else if(Lc_strStartsWith(pPara,"WIFI GOT IP")) |
|||
{ |
|||
_s_task_w600_para.st_wifi_ok = 1; |
|||
} |
|||
else if(Lc_strStartsWith(pPara,"ERROR")) |
|||
{ |
|||
_s_task_w600_para.st_error= 1; |
|||
} |
|||
else if(Lc_strStartsWith(pPara,"no change")) |
|||
{ |
|||
_s_task_w600_para.serve_ok= 1; |
|||
} |
|||
else if(Lc_strStartsWith(pPara,"CIPMUX and")) |
|||
{ |
|||
_s_task_w600_para.ap_serve_ok = 1; |
|||
} |
|||
|
|||
//Station模式判定
|
|||
if(_s_task_w600_para.mode == W600_ST) |
|||
{ |
|||
if(Lc_strStartsWith(pPara,"WIFI GOT IP")) |
|||
{ |
|||
_s_task_w600_para.st_wifi_ok = 1; |
|||
} |
|||
else if(Lc_strStartsWith(pPara,"ALREADY CONNECTED")) |
|||
{ |
|||
_s_task_w600_para.st_cip_ok = 1; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
#if 0 |
|||
|
|||
void L3_uart2_exp_protocol(struct _s_PC1_0D0A_ *p) |
|||
{ |
|||
if (1 == p->ok ) |
|||
{ |
|||
U8 *pPara = p->buf + 1; |
|||
_s_task_w600_para.gprs_last_recv_stmp = s_nos_tick.t_1s; |
|||
//通用判定
|
|||
if(Lc_strStartsWith(pPara,"OK")) |
|||
{ |
|||
_s_task_w600_para.ins_ok = 1; |
|||
} |
|||
else if(Lc_strStartsWith(pPara,"ERROR")) |
|||
{ |
|||
_s_task_w600_para.st_error= 1; |
|||
} |
|||
else if(Lc_strStartsWith(pPara,"no change")) |
|||
{ |
|||
_s_task_w600_para.serve_ok= 1; |
|||
} |
|||
else if(Lc_strStartsWith(pPara,"CIPMUX and")) |
|||
{ |
|||
_s_task_w600_para.ap_serve_ok = 1; |
|||
} |
|||
|
|||
//Station模式判定
|
|||
if(_s_task_w600_para.mode == W600_ST) |
|||
{ |
|||
if(Lc_strStartsWith(pPara,"WIFI GOT IP")) |
|||
{ |
|||
_s_task_w600_para.st_wifi_ok = 1; |
|||
} |
|||
else if(Lc_strStartsWith(pPara,"ALREADY CONNECTED")) |
|||
{ |
|||
_s_task_w600_para.st_cip_ok = 1; |
|||
} |
|||
} |
|||
//AP模式判定
|
|||
else if(_s_task_w600_para.mode == W600_AP) |
|||
{ |
|||
if(Lc_strStartsWith(pPara,"+IPD,")) |
|||
{ |
|||
//解析协议,success
|
|||
//1将id,pwd放入寄存器2.ok=1
|
|||
//失败不处理不设置标志位
|
|||
//buf: [20]+IPD,0,5:#ccsens:ccsens123$ 后面没\0
|
|||
//pPara: +IPD,0,5:#ccsens:ccsens123$
|
|||
|
|||
int j = 0 , len = p->buf[0]; |
|||
p->buf[len+1] = 0;//在+IPD,0,5:#ccsens:ccsens123$后加0
|
|||
for(j=0;j<len;j++) |
|||
{ |
|||
if(pPara[j] == ':') |
|||
{ |
|||
break; |
|||
} |
|||
} |
|||
pPara += (j+1);//pPara ===== #ccsens:ccsens123$
|
|||
L0_uart0_sendstr(pPara); |
|||
len = Lc_strlen(pPara); |
|||
if(pPara[0] == '#' && pPara[len-1] == '$') |
|||
{ |
|||
pPara[len-1] = 0; |
|||
pPara++;//pPara ===== ccsens:ccsens123
|
|||
for(j=0;j<len;j++) |
|||
{ |
|||
if(pPara[j] == ':') |
|||
{ |
|||
break; |
|||
} |
|||
} |
|||
pPara[j] = 0;//ccsens\0ccsens123
|
|||
Lc_strcpy(G.st_sid, pPara); |
|||
pPara += j+1;//ccsens123
|
|||
Lc_strcpy(G.st_pwd, pPara); |
|||
//标志位
|
|||
_s_task_w600_para.ap_rec_ok = 1; |
|||
} |
|||
|
|||
} |
|||
|
|||
else if(Lc_strStartsWith(pPara,"0,CONNECT")) |
|||
{ |
|||
_s_task_w600_para.ap_tcp_ok = 1; |
|||
} |
|||
else if(Lc_strStartsWith(pPara,"1,CONNECT")) |
|||
{ |
|||
_s_task_w600_para.ap_tcp_ok = 1; |
|||
} |
|||
else if(Lc_strStartsWith(pPara,"SEND OK")) |
|||
{ |
|||
_s_task_w600_para.ap_data_ok= 1; |
|||
} |
|||
else if(Lc_strStartsWith(pPara,"+DIST_STA_IP")) |
|||
{ |
|||
_s_task_w600_para.ap_conn_ok = 1; |
|||
} |
|||
|
|||
} |
|||
p->ok = 0; |
|||
} |
|||
} |
|||
#endif |
|||
|
|||
//------------------------------------------------------ gm35 tasks --------------------------------
|
|||
|
|||
|
|||
void L3_task_W600_flow_init(U8 mode) |
|||
{ |
|||
L1_task_init(&_s_task_w600_para.task); |
|||
L3_task_s_go(_s_task_w600_para,D_task_init); |
|||
_s_task_w600_para.mode = mode; |
|||
_s_task_w600_para.send = 0; |
|||
_s_task_w600_para.conn_ok = 0; |
|||
#if 0 |
|||
g_at_send_status.send_lock = 0; |
|||
g_at_send_status.module_ok = 0; |
|||
g_at_send_status.sim_ok = 0; |
|||
g_at_send_status.net_ok = 0; |
|||
g_at_send_status.gprs_ok = 0; |
|||
g_at_send_status.conn_ok = 0; |
|||
|
|||
g_at_send_status.ins_stmp = 0; //每次发送指令时设置
|
|||
|
|||
g_at_send_status.heart_stmp = 0; //连接成功时设置
|
|||
g_at_send_status.data_stmp = 0; |
|||
g_at_send_status.sign_flag = 0; |
|||
g_at_send_status.ack_flag = 0; |
|||
|
|||
g_at_send_status.gprs_last_recv_stmp = 0; //接收到指令时设置
|
|||
g_at_send_status.tcp_last_recv_stmp = 0; //连接成功和接收到数据时设置
|
|||
g_at_send_status.tcp_close_stmp = 0; //重新上电和检测到断开时设置
|
|||
g_at_send_status.gm35_reboot_times = 0; //连接成功时清0
|
|||
#endif |
|||
} |
|||
|
|||
|
|||
//------------------------ GM35 Flow Handle -----------------------------------
|
|||
#define TTSS_TASK_GM35_MODE 0x01 |
|||
|
|||
#define TTSS_TASK_GM35_FLOW_ATEQV 0x02 |
|||
#define TTSS_TASK_GM35_FLOW_ST 0x03 |
|||
#define TTSS_TASK_GM35_FLOW_ST_WIFI 0x04 |
|||
#define TTSS_TASK_GM35_FLOW_ST_CIPMUX0 0x05 |
|||
#define TTSS_TASK_GM35_FLOW_ST_TCP 0x06 |
|||
#define TTSS_TASK_GM35_FLOW_ST_CIPMODE1 0x07 |
|||
#define TTSS_TASK_GM35_FLOW_ST_CIPSEND 0x08 |
|||
#define TTSS_TASK_GM35_FLOW_ST_DATA 0x09 |
|||
#define TTSS_TASK_GM35_FLOW_ST_CIPMODE0 0x10 |
|||
#define TTSS_TASK_GM35_FLOW_ST_SERVE 0x11 |
|||
|
|||
#define TTSS_TASK_GM35_FLOW_AP 0x20 |
|||
#define TTSS_TASK_GM35_FLOW_AP_WIFI 0x21 |
|||
#define TTSS_TASK_GM35_FLOW_AP_CIPMUX1 0x22 |
|||
#define TTSS_TASK_GM35_FLOW_AP_SERVER 0x23 |
|||
#define TTSS_TASK_GM35_FLOW_AP_CIPMUX0 0x24 |
|||
|
|||
#define TTSS_TASK_GM35_FLOW_TCP_TIME 0x25 |
|||
#define TTSS_TASK_GM35_FLOW_AP_DATA 0x26 |
|||
#define TTSS_TASK_GM35_FLOW_AP_TCP_CONN_WAIT 0x27 |
|||
#define TTSS_TASK_GM35_FLOW_AP_WIFI_DATA_STA_WAIT 0x28 |
|||
#define TTSS_TASK_MODE_TRAN 0x29 |
|||
#define TTSS_TASK_MODE_CONFIG_WAIT 0x2A |
|||
#define TTSS_TASK_MODE_SERVER_CLOSE 0x2B |
|||
|
|||
#define INS_TIMEOUT 5 |
|||
#define GM35_SEND_DATA_INTERVAL 300 |
|||
#define GM35_SEND_HEART_INTERVAL 60 |
|||
#define GM35_SEND_CIPSTATUS_INTERVAL 5 |
|||
|
|||
void L2_task_W600_flow_handle(struct _s_task_W600_Para *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV,D_Tdelay_5s);//上电等待1s
|
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ATEQV) |
|||
if(s->send == 0) |
|||
{//发送
|
|||
L3_gm35_send_str(AT_INS_ATE0); //"ATE0\r\n" //模块查询+关闭回显
|
|||
s->ins_ok = 0; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
s->send = 1; |
|||
} |
|||
else if(1 == s->ap_serve_ok) //等待
|
|||
{ |
|||
s->send = 0; |
|||
s->ap_serve_ok = 0; |
|||
L3_gm35_send_str(AT_INS_AP_SERVER_CLOSE); |
|||
} |
|||
else if(s->serve_ok == 1 || s->ins_ok == 1) //等待
|
|||
{ |
|||
s->send = 0; |
|||
s->serve_ok = 0; |
|||
L2_task_go_Tdelay(s->mode == W600_ST ? TTSS_TASK_GM35_FLOW_ST |
|||
:TTSS_TASK_GM35_FLOW_ST_SERVE,D_Tdelay_1s); |
|||
} |
|||
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) |
|||
{//超时重发
|
|||
s->send = 0; |
|||
} |
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST) |
|||
if(s->send == 0) |
|||
{//发送
|
|||
L3_gm35_send_str(AT_INS_ST); |
|||
s->ins_ok = 0; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
s->send = 1; |
|||
} |
|||
else if(s->ins_ok == 1) //等待
|
|||
{ |
|||
s->send = 0; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI,D_Tdelay_1s); |
|||
} |
|||
|
|||
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) |
|||
{//超时重发
|
|||
s->send = 0; |
|||
} |
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_WIFI) |
|||
if(s->send == 0) |
|||
{//发送
|
|||
L3_gm35_send_str(GET_WIFI_INS()); |
|||
s->ins_ok = 0; |
|||
s->st_wifi_ok = 0; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
s->send = 1; |
|||
} |
|||
else if(1 == s->st_wifi_ok) |
|||
{ |
|||
s->send = 0; |
|||
R.app_status = WIFI_CONNECTED; //wifi连接成功
|
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0,D_Tdelay_1s); |
|||
} |
|||
|
|||
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) |
|||
{//超时重发
|
|||
s->send = 0; |
|||
} |
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMUX0) |
|||
if(s->send == 0) |
|||
{//发送
|
|||
L3_gm35_send_str(AT_INS_ST_CIPMUX0); |
|||
s->ins_ok = 0; |
|||
s->st_wifi_ok = 0; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
s->send = 1; |
|||
} |
|||
else if(1 == s->ins_ok) //等待
|
|||
{ |
|||
s->send = 0; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,D_Tdelay_1s); |
|||
} |
|||
|
|||
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) |
|||
{//超时重发
|
|||
s->send = 0; |
|||
} |
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_TCP) |
|||
if(s->send == 0) |
|||
{//发送
|
|||
L3_gm35_send_str(AT_INS_ST_TCP); |
|||
s->ins_ok = 0; |
|||
s->st_cip_ok = 0; |
|||
s->serve_ok = 0; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
s->send = 1; |
|||
} |
|||
// else if(1 == s->ins_ok || 1 == s->st_cip_ok) //等待
|
|||
else if(1 == s->serve_ok) //等待
|
|||
{ |
|||
s->send = 0; |
|||
R.app_status = TCP_CONNECTED; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1,D_Tdelay_1s); |
|||
} |
|||
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) |
|||
{//超时重发
|
|||
s->send = 0; |
|||
} |
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMODE1) |
|||
if(s->send == 0) |
|||
{//发送
|
|||
L3_gm35_send_str(AT_INS_ST_CIPMODE1); |
|||
s->ins_ok = 0; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
s->send = 1; |
|||
} |
|||
else if(1 == s->ins_ok) //等待
|
|||
{ |
|||
s->send = 0; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPSEND,D_Tdelay_1s); |
|||
} |
|||
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) |
|||
{//超时重发
|
|||
s->send = 0; |
|||
} |
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPSEND) |
|||
if(s->send == 0) |
|||
{//发送
|
|||
L3_gm35_send_str(AT_INS_ST_CIPSEND); |
|||
s->ins_ok = 0; |
|||
s->st_error = 0; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
s->send = 1; |
|||
// L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPSEND,D_Tdelay_300ms);//发完之后要等,不然st_error == 0没用 ,没收到error之前也是=0
|
|||
} |
|||
else if((s->ins_ok == 1) && (s->st_error == 1)) |
|||
{ |
|||
s->send = 0; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,0); |
|||
} |
|||
else if((s->ins_ok == 1) && (s->st_error == 0)) |
|||
{ |
|||
s->send = 0; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,0); |
|||
} |
|||
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) |
|||
{//超时重发
|
|||
s->send = 0; |
|||
} |
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_DATA) |
|||
//L0_uart2_sendstr("abcdefg");
|
|||
_s_task_w600_para.conn_ok = 1; |
|||
L2_task_go(TTSS_TASK_GM35_FLOW_ST_DATA); |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
/********************s->mode = W600_AP****************************** */ |
|||
|
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_SERVE) |
|||
if(s->send == 0) |
|||
{//发送
|
|||
L3_gm35_send_str(AT_INS_AP_SERVER_CLOSE); //关闭服务器
|
|||
s->ins_ok = 0; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
s->send = 1; |
|||
} |
|||
else if(s->st_error) |
|||
{ |
|||
s->send = 0; |
|||
s->st_error = 0; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE0,D_Tdelay_300ms); |
|||
} |
|||
else if((s->serve_ok == 1)|| (s->ins_ok == 1)) //等待
|
|||
{ |
|||
s->send = 0; |
|||
s->serve_ok = 0; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE0,D_Tdelay_300ms); |
|||
} |
|||
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) |
|||
{//超时重发
|
|||
s->send = 0; |
|||
} |
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMODE0) |
|||
if(s->send == 0) |
|||
{//发送
|
|||
L3_gm35_send_str(AT_INS_ST_CIPMODE0); |
|||
s->ins_ok = 0; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
s->send = 1; |
|||
} |
|||
else if(1 == s->ins_ok) //等待(等待过程中,进入AP模式)
|
|||
{ |
|||
s->send = 0; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP,D_Tdelay_300ms); |
|||
} |
|||
|
|||
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) |
|||
{//超时重发(超时,设置单连接模式)
|
|||
s->send = 0; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_CIPMUX0,D_Tdelay_300ms); |
|||
} |
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_CIPMUX0) |
|||
if(s->send == 0) |
|||
{//发送
|
|||
L3_gm35_send_str(AT_INS_ST_CIPMUX0); |
|||
s->ins_ok = 0; |
|||
s->st_wifi_ok = 0; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
s->send = 1; |
|||
} |
|||
else if(1 == s->ins_ok) //等待
|
|||
{ |
|||
s->send = 0; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE0,D_Tdelay_300ms); |
|||
} |
|||
|
|||
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) |
|||
{//超时重发
|
|||
s->send = 0; |
|||
} |
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP) |
|||
if(s->send == 0) |
|||
{//发送
|
|||
L3_gm35_send_str(AT_INS_AP); |
|||
s->ins_ok = 0; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
s->send = 1; |
|||
} |
|||
else if(1 == s->ins_ok) //等待
|
|||
{ |
|||
s->send = 0; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_WIFI,D_Tdelay_300ms); |
|||
} |
|||
|
|||
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) |
|||
{//超时重发
|
|||
s->send = 0; |
|||
} |
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_WIFI) |
|||
if(s->send == 0) |
|||
{//发送
|
|||
L3_gm35_send_str(AT_INS_AP_WIFI); |
|||
s->ins_ok = 0; |
|||
s->st_error = 0; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
s->send = 1; |
|||
} |
|||
else if((1 == s->ins_ok)||(1 == s->st_error)) //等待
|
|||
{ |
|||
s->send = 0; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_CIPMUX1,D_Tdelay_300ms); |
|||
} |
|||
|
|||
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) |
|||
{//超时重发
|
|||
s->send = 0; |
|||
} |
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_CIPMUX1) |
|||
if(s->send == 0) |
|||
{//发送
|
|||
L3_gm35_send_str(AT_INS_AP_CIPMUX1); |
|||
s->ins_ok = 0; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
s->send = 1; |
|||
} |
|||
else if(1 == s->ins_ok) //等待
|
|||
{ |
|||
s->send = 0; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_SERVER,D_Tdelay_300ms); |
|||
} |
|||
|
|||
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) |
|||
{//超时重发
|
|||
s->send = 0; |
|||
} |
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_SERVER) |
|||
if(s->send == 0) |
|||
{//发送
|
|||
L3_gm35_send_str(AT_INS_AP_SERVER); |
|||
s->ins_ok = 0; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
s->send = 1; |
|||
} |
|||
else if(1 == s->ins_ok) //等待
|
|||
{ |
|||
s->send = 0; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_TCP_TIME,D_Tdelay_300ms); |
|||
} |
|||
|
|||
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) |
|||
{//超时重发
|
|||
s->send = 0; |
|||
} |
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_TCP_TIME) |
|||
if(s->send == 0) |
|||
{//发送
|
|||
L3_gm35_send_str(AT_INS_AP_TCP_TIME); |
|||
// LED2 = 0;
|
|||
s->ins_ok = 0; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
s->send = 1; |
|||
} |
|||
else if(1 == s->ins_ok) //等待
|
|||
{ |
|||
s->send = 0; |
|||
s->ap_tcp_ok = 0; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_TCP_CONN_WAIT,D_Tdelay_300ms); |
|||
} |
|||
|
|||
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) |
|||
{//超时重发
|
|||
s->send = 0; |
|||
} |
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_TCP_CONN_WAIT) //等待TCP连接
|
|||
if(1 == s->ap_tcp_ok) |
|||
{ |
|||
s->ap_conn_ok = 0; |
|||
s->ap_tcp_ok = 0; |
|||
s->ap_rec_ok = 0; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_WIFI_DATA_STA_WAIT,0); |
|||
} |
|||
|
|||
TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_WIFI_DATA_STA_WAIT) |
|||
if(1 == s->ap_rec_ok)//收到正确的数据才会ok=1
|
|||
{//ok回复#ok$\r\n
|
|||
s->ap_rec_ok = 0; |
|||
s->rev = 1; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
//L0_uart0_sendstr("ap config ok");
|
|||
//L3_gm35_send_str(AT_INS_AP_SEND);//进入发送模式
|
|||
//L2_task_go(TTSS_TASK_MODE_TRAN);
|
|||
} |
|||
else if(1 == s->ap_conn_ok) |
|||
{ |
|||
s->ap_conn_ok = 0; |
|||
s->ap_tcp_ok = 0; |
|||
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_CIPMUX1,D_Tdelay_300ms); |
|||
} |
|||
else if((s_nos_tick.t_1s - s->ins_stmp > 3) && (s->rev == 1)) |
|||
{//超时重发
|
|||
s->ap_data_ok = 0; |
|||
s->rev= 0; |
|||
L3_gm35_send_str(AT_INS_AP_SEND); |
|||
L2_task_go_Tdelay(TTSS_TASK_MODE_TRAN,D_Tdelay_100ms); |
|||
} |
|||
TTSS_Task_step(TTSS_TASK_MODE_TRAN) |
|||
if(s->send == 0) |
|||
{//发送
|
|||
L3_gm35_send_str("#OK$\r\n"); |
|||
// LED2 = 1;
|
|||
s->ap_rec_ok = 0; |
|||
s->ins_ok = 0; |
|||
s->send = 1; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
} |
|||
else if(1 == s->ap_data_ok) //等待//此处进入ins_ok,不进入send_ok,因为之前有一个no change OK,在进入AP关闭服务器那里
|
|||
{ |
|||
s->send = 0; |
|||
s->ap_tcp_ok = 0; |
|||
L2_task_go_Tdelay(TTSS_TASK_MODE_SERVER_CLOSE,D_Tdelay_100ms); |
|||
} |
|||
TTSS_Task_step(TTSS_TASK_MODE_SERVER_CLOSE) |
|||
if(s->send == 0) |
|||
{//发送
|
|||
L3_gm35_send_str(AT_INS_AP_SERVER_CLOSE); |
|||
s->ins_ok = 0; |
|||
s->ins_stmp = s_nos_tick.t_1s; |
|||
s->send = 1; |
|||
} |
|||
else if(1 == s->ins_ok) //等待
|
|||
{ |
|||
s->send = 0; |
|||
// LED1 = 1;
|
|||
// LED2 = 1;
|
|||
L3_task_W600_flow_init(W600_ST); |
|||
} |
|||
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) |
|||
{//超时重发
|
|||
s->send = 0; |
|||
} |
|||
TTSS_Task_end(); |
|||
} |
|||
|
|||
|
@ -0,0 +1,92 @@ |
|||
#include "../app/task_w600_ptc.h" |
|||
#include "../app/task_w600.h" |
|||
#include "../app/app_config.h" |
|||
|
|||
|
|||
U8 constructor_HeartBeatPkg() |
|||
{ |
|||
_s_task_w600_para.heartbeatpkg.filter[0] = 0xAA; |
|||
_s_task_w600_para.heartbeatpkg.filter[1] = 0xBB; |
|||
_s_task_w600_para.heartbeatpkg.num = 0x07; |
|||
_s_task_w600_para.heartbeatpkg.cmd = 0xA0; |
|||
_s_task_w600_para.heartbeatpkg.did[0] = G.mcu_id[3]; |
|||
_s_task_w600_para.heartbeatpkg.did[1] = G.mcu_id[4]; |
|||
_s_task_w600_para.heartbeatpkg.did[2] = G.mcu_id[5]; |
|||
_s_task_w600_para.heartbeatpkg.did[3] = G.mcu_id[6]; |
|||
_s_task_w600_para.heartbeatpkg.crc[0] = 0xCC; |
|||
_s_task_w600_para.heartbeatpkg.crc[1] = 0xDD; |
|||
|
|||
return _s_task_w600_para.heartbeatpkg.num + 3; |
|||
} |
|||
|
|||
U8 constructor_QueryTaskPkg() |
|||
{ |
|||
_s_task_w600_para.querytaskpkg.filter[0] = 0xAA; |
|||
_s_task_w600_para.querytaskpkg.filter[1] = 0xBB; |
|||
_s_task_w600_para.querytaskpkg.num = 0x07; |
|||
_s_task_w600_para.querytaskpkg.cmd = 0xA1; |
|||
_s_task_w600_para.querytaskpkg.did[0] = G.mcu_id[3]; |
|||
_s_task_w600_para.querytaskpkg.did[1] = G.mcu_id[4]; |
|||
_s_task_w600_para.querytaskpkg.did[2] = G.mcu_id[5]; |
|||
_s_task_w600_para.querytaskpkg.did[3] = G.mcu_id[6]; |
|||
_s_task_w600_para.querytaskpkg.crc[0] = 0xCC; |
|||
_s_task_w600_para.querytaskpkg.crc[1] = 0xDD; |
|||
|
|||
return _s_task_w600_para.querytaskpkg.num + 3; |
|||
} |
|||
|
|||
U8 constructor_SubmitTaskPkg() |
|||
{ |
|||
_s_task_w600_para.submittaskpkg.filter[0] = 0xAA; |
|||
_s_task_w600_para.submittaskpkg.filter[1] = 0xBB; |
|||
_s_task_w600_para.submittaskpkg.num = 0x12; |
|||
_s_task_w600_para.submittaskpkg.cmd = 0xA3; |
|||
_s_task_w600_para.submittaskpkg.did[0] = G.mcu_id[3]; |
|||
_s_task_w600_para.submittaskpkg.did[1] = G.mcu_id[4]; |
|||
_s_task_w600_para.submittaskpkg.did[2] = G.mcu_id[5]; |
|||
_s_task_w600_para.submittaskpkg.did[3] = G.mcu_id[6]; |
|||
// 其他属性在游戏完成时赋值
|
|||
_s_task_w600_para.submittaskpkg.crc[0] = 0xCC; |
|||
_s_task_w600_para.submittaskpkg.crc[1] = 0xDD; |
|||
|
|||
return _s_task_w600_para.submittaskpkg.num + 3; |
|||
|
|||
} |
|||
|
|||
U8 parse_QueryAckPkg(U8* d,U8 num) |
|||
{ |
|||
if (num != 0x0F) |
|||
{ |
|||
return 0; |
|||
} |
|||
_s_task_w600_para.queryackpkg.filter[0] = d[0]; |
|||
_s_task_w600_para.queryackpkg.filter[1] = d[1]; |
|||
|
|||
if ( _s_task_w600_para.queryackpkg.filter[0] != 0xAA || |
|||
_s_task_w600_para.queryackpkg.filter[1] != 0xBB ) |
|||
{ |
|||
return 0; |
|||
} |
|||
_s_task_w600_para.queryackpkg.num = d[2]; |
|||
_s_task_w600_para.queryackpkg.cmd = d[3]; |
|||
_s_task_w600_para.queryackpkg.did[0] = d[4]; |
|||
_s_task_w600_para.queryackpkg.did[1] = d[5]; |
|||
_s_task_w600_para.queryackpkg.did[2] = d[6]; |
|||
_s_task_w600_para.queryackpkg.did[3] = d[7]; |
|||
_s_task_w600_para.queryackpkg.Plan_ID[0] = d[8]; |
|||
_s_task_w600_para.queryackpkg.Plan_ID[1] = d[9]; |
|||
_s_task_w600_para.queryackpkg.Game_ID[0] = d[10]; |
|||
_s_task_w600_para.queryackpkg.Game_ID[1] = d[11]; |
|||
_s_task_w600_para.queryackpkg.Tranning_Status = d[12]; |
|||
_s_task_w600_para.queryackpkg.crc[0] = d[13]; |
|||
_s_task_w600_para.queryackpkg.crc[1] = d[14]; |
|||
|
|||
if ( _s_task_w600_para.queryackpkg.crc[0] != 0xCC || |
|||
_s_task_w600_para.queryackpkg.crc[1] != 0xDD ) |
|||
{ |
|||
return 0; |
|||
} |
|||
return 1; |
|||
} |
|||
|
|||
|
@ -0,0 +1,122 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_gc6133.c.h
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#ifndef _app_task_w600_TPC_H |
|||
#define _app_task_w600_TPC_H |
|||
|
|||
#include "../clib/type.h" |
|||
|
|||
//心跳数据包
|
|||
typedef struct { |
|||
//起始码
|
|||
U8 filter[2]; |
|||
//长度
|
|||
U8 num; |
|||
//Cmd
|
|||
U8 cmd; |
|||
//设备ID
|
|||
U8 did[4]; |
|||
//校验
|
|||
U8 crc[2]; |
|||
}HeartBeatPkg; |
|||
|
|||
//任务请求数据包
|
|||
typedef struct { |
|||
//起始码
|
|||
U8 filter[2]; |
|||
//长度
|
|||
U8 num; |
|||
//Cmd
|
|||
U8 cmd; |
|||
//设备ID
|
|||
U8 did[4]; |
|||
//校验
|
|||
U8 crc[2]; |
|||
}QueryTaskPkg; |
|||
|
|||
//请求响应数据包
|
|||
typedef struct { |
|||
//起始码
|
|||
U8 filter[2]; |
|||
//长度
|
|||
U8 num; |
|||
//Cmd
|
|||
U8 cmd; |
|||
//设备ID
|
|||
U8 did[4]; |
|||
//训练方案编号
|
|||
U8 Plan_ID[2]; |
|||
//游戏ID
|
|||
U8 Game_ID[2]; |
|||
//训练完成情况
|
|||
U8 Tranning_Status; //0正常训练;1今日训练完成;2今日无训练任务
|
|||
//校验
|
|||
U8 crc[2]; |
|||
}QueryAckPkg; |
|||
|
|||
//成绩提交数据包
|
|||
typedef struct { |
|||
//起始码
|
|||
U8 filter[2]; |
|||
//长度
|
|||
U8 num; |
|||
//Cmd
|
|||
U8 cmd; |
|||
//设备ID
|
|||
U8 did[4]; |
|||
//训练方案编号
|
|||
U8 Plan_ID[2]; |
|||
//游戏ID
|
|||
U8 Game_ID[2]; |
|||
//游戏时长
|
|||
U8 Second[2]; |
|||
//错误次数
|
|||
U8 Error_Time[2]; |
|||
//超时标志 0未超时 1超时
|
|||
U8 TimeOver_Flag; |
|||
//得分
|
|||
U8 Score[2]; |
|||
//校验
|
|||
U8 crc[2]; |
|||
}SubmitTaskPkg; |
|||
|
|||
|
|||
extern U8 constructor_HeartBeatPkg(void); |
|||
extern U8 constructor_QueryTaskPkg(void); |
|||
extern U8 constructor_SubmitTaskPkg(void); |
|||
extern U8 parse_QueryAckPkg(U8* d,U8 num); |
|||
|
|||
|
|||
|
|||
#endif |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
@ -0,0 +1,123 @@ |
|||
#include "../bsp/bsp_WT2605B.h" |
|||
#include "../app/app_config.h" |
|||
#include "../msp/UART3.h" |
|||
#include "../msp/UART0.h" |
|||
#include "../msp/msp_eeprom.h" |
|||
|
|||
|
|||
TS_SPEECH_AUDIO audio_powerdown = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x31,0x8F,0xEF}; //T001电源关闭
|
|||
TS_SPEECH_AUDIO audio_poweron = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x32,0x90,0xEF}; //T002电源开启
|
|||
TS_SPEECH_AUDIO audio_wifi_connected = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x33,0x91,0xEF}; //T003WIFI连接成功
|
|||
TS_SPEECH_AUDIO audio_TCP_connected = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x34,0x92,0xEF}; //T004TCP连接成功
|
|||
TS_SPEECH_AUDIO audio_config_mode = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x35,0x93,0xEF}; //T005配置模式
|
|||
TS_SPEECH_AUDIO audio_config_complete = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x36,0x94,0xEF}; //T006配置完成
|
|||
TS_SPEECH_AUDIO audio_config_phone = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x37,0x95,0xEF}; //T007手机APP配置
|
|||
TS_SPEECH_AUDIO audio_volume_up = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x38,0x96,0xEF}; //T008音量增加
|
|||
TS_SPEECH_AUDIO audio_volume_down = {0x7E,0x07,0xA3,0x54,0x30,0x30,0x39,0x97,0xEF}; //T009音量减少
|
|||
|
|||
TS_SPEECH_AUDIO audio_game_maze = {0x7E,0x07,0xA3,0x54,0x30,0x31,0x30,0x8F,0xEF}; //T010迷宫
|
|||
TS_SPEECH_AUDIO audio_game_different = {0x7E,0x07,0xA3,0x54,0x30,0x31,0x31,0x90,0xEF}; //T011找不同
|
|||
TS_SPEECH_AUDIO audio_game_shulte = {0x7E,0x07,0xA3,0x54,0x30,0x31,0x32,0x91,0xEF}; //T012舒尔特方格
|
|||
TS_SPEECH_AUDIO audio_game_error = {0x7E,0x07,0xA3,0x54,0x30,0x31,0x33,0x92,0xEF}; //T013错误
|
|||
TS_SPEECH_AUDIO audio_game_correct = {0x7E,0x07,0xA3,0x54,0x30,0x31,0x34,0x93,0xEF}; //T014正确提示音
|
|||
TS_SPEECH_AUDIO audio_game_overtime = {0x7E,0x07,0xA3,0x54,0x30,0x31,0x35,0x94,0xEF}; //T015训练时间到
|
|||
TS_SPEECH_AUDIO audio_game_complete = {0x7E,0x07,0xA3,0x54,0x30,0x31,0x36,0x95,0xEF}; //T016训练完成
|
|||
|
|||
TS_SPEECH_AUDIO audio_tcp_maze = {0x7E,0x07,0xA3,0x54,0x30,0x31,0x37,0x96,0xEF}; //T017请进行走迷宫游戏训练
|
|||
TS_SPEECH_AUDIO audio_tcp_different = {0x7E,0x07,0xA3,0x54,0x30,0x31,0x38,0x97,0xEF}; //T018请进行找不同游戏训练
|
|||
TS_SPEECH_AUDIO audio_tcp_shulte = {0x7E,0x07,0xA3,0x54,0x30,0x31,0x39,0x98,0xEF}; //T019请进行舒尔特方格游戏训练
|
|||
TS_SPEECH_AUDIO audio_tcp_complete = {0x7E,0x07,0xA3,0x54,0x30,0x32,0x30,0x90,0xEF}; //T020恭喜你,今天所有训练任务已完成
|
|||
TS_SPEECH_AUDIO audio_tcp_noplan = {0x7E,0x07,0xA3,0x54,0x30,0x32,0x31,0x91,0xEF}; //T021今天暂无训练任务,可以进行自由训练哦
|
|||
|
|||
TS_SPEECH_AUDIO audio_low_power = {0x7E,0x07,0xA3,0x54,0x30,0x32,0x32,0x92,0xEF}; //T022
|
|||
|
|||
|
|||
TS_SPEECH_VOLUME volume_control = {0x7E,0x04,0xAE,0x1E,0xD0,0xEF}; //音量控制
|
|||
|
|||
|
|||
void L2_WT2605B_init() |
|||
{ |
|||
D_stdIO_P0(BITN0); |
|||
D_stdIO_P0(BITN1); |
|||
//电源控制引脚
|
|||
D_HighI_P0(BITN5); |
|||
L2_WT2605B_PWRON(); |
|||
// 初始化音量
|
|||
L2_WT2605B_VolumeControl(G.volume); |
|||
} |
|||
|
|||
void L2_WT2605B_PWRON() |
|||
{ |
|||
D_P05_ON(); |
|||
} |
|||
void L2_WT2605B_PWROFF() |
|||
{ |
|||
D_P05_OFF(); |
|||
} |
|||
|
|||
void L2_WT2605B_Broadcast(TS_SPEECH_AUDIO *music) |
|||
{ |
|||
L0_uart3_sendArray((U8 *)music,9); |
|||
} |
|||
|
|||
void L2_WT2605B_Broadcast_TPC(U8* GameID) |
|||
{ |
|||
if (GameID[0] == 0x31 && GameID[1] == 0x52) |
|||
{ |
|||
L2_WT2605B_Broadcast(&audio_tcp_maze); |
|||
} |
|||
else if (GameID[0] == 0x31 && GameID[1] == 0x33) |
|||
{ |
|||
L2_WT2605B_Broadcast(&audio_tcp_different); |
|||
} |
|||
else if (GameID[0] == 0x31 && GameID[1] == 0x42) |
|||
{ |
|||
L2_WT2605B_Broadcast(&audio_tcp_shulte); |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
void L2_WT2605B_VolumeControl(U8 grade) |
|||
{ |
|||
volume_control.grade = grade; |
|||
volume_control.crc = volume_control.num + volume_control.cmd + volume_control.grade; |
|||
L0_uart3_sendArray((U8 *)&volume_control,6); |
|||
} |
|||
// 音量设置6个档位:0x15,0x17,0x19,0x1B,0x1D,0x1F
|
|||
void L2_WT2605B_VioceUp(void) |
|||
{ |
|||
if (volume_control.grade >= 0x15 && volume_control.grade < 0x1F) |
|||
{ |
|||
volume_control.grade = volume_control.grade + 2; |
|||
G.volume = volume_control.grade; |
|||
L0_Iap_Program_array(EEPROM_DATA_ADDR,(U8*)&G,sizeof(G)); |
|||
} |
|||
else |
|||
{ |
|||
volume_control.grade = volume_control.grade; |
|||
G.volume = volume_control.grade; |
|||
L0_Iap_Program_array(EEPROM_DATA_ADDR,(U8*)&G,sizeof(G)); |
|||
} |
|||
L2_WT2605B_VolumeControl(G.volume); |
|||
L2_WT2605B_Broadcast(&audio_volume_up); |
|||
} |
|||
|
|||
void L2_WT2605B_VioceDown(void) |
|||
{ |
|||
if (volume_control.grade > 0x15 && volume_control.grade <= 0x1F) |
|||
{ |
|||
volume_control.grade = volume_control.grade - 2; |
|||
G.volume = volume_control.grade; |
|||
L0_Iap_Program_array(EEPROM_DATA_ADDR,(U8*)&G,sizeof(G)); |
|||
} |
|||
else |
|||
{ |
|||
volume_control.grade = volume_control.grade; |
|||
G.volume = volume_control.grade; |
|||
L0_Iap_Program_array(EEPROM_DATA_ADDR,(U8*)&G,sizeof(G)); |
|||
} |
|||
L2_WT2605B_VolumeControl(G.volume); |
|||
L2_WT2605B_Broadcast(&audio_volume_down); |
|||
} |
|||
|
@ -0,0 +1,64 @@ |
|||
#ifndef BSP_WT2605B_H |
|||
#define BSP_WT2605B_H |
|||
|
|||
#include "bsp_config.h" |
|||
|
|||
// 播放指定音频
|
|||
typedef struct |
|||
{ |
|||
vU8 start; |
|||
vU8 num; |
|||
vU8 cmd; |
|||
vU8 file[4]; |
|||
vU8 crc; |
|||
vU8 end; |
|||
}TS_SPEECH_AUDIO; |
|||
|
|||
// 音量控制
|
|||
typedef struct |
|||
{ |
|||
vU8 start; |
|||
vU8 num; |
|||
vU8 cmd; |
|||
vU8 grade; |
|||
vU8 crc; |
|||
vU8 end; |
|||
}TS_SPEECH_VOLUME; |
|||
|
|||
extern TS_SPEECH_AUDIO audio_powerdown; |
|||
extern TS_SPEECH_AUDIO audio_poweron; |
|||
extern TS_SPEECH_AUDIO audio_wifi_connected; |
|||
extern TS_SPEECH_AUDIO audio_TCP_connected; |
|||
extern TS_SPEECH_AUDIO audio_config_mode; |
|||
extern TS_SPEECH_AUDIO audio_config_complete; |
|||
extern TS_SPEECH_AUDIO audio_config_phone; |
|||
extern TS_SPEECH_AUDIO audio_volume_up; |
|||
extern TS_SPEECH_AUDIO audio_volume_down; |
|||
|
|||
extern TS_SPEECH_AUDIO audio_game_maze; //迷宫
|
|||
extern TS_SPEECH_AUDIO audio_game_different; //找不同
|
|||
extern TS_SPEECH_AUDIO audio_game_shulte; //舒尔特方格
|
|||
extern TS_SPEECH_AUDIO audio_game_error; //错误
|
|||
extern TS_SPEECH_AUDIO audio_game_correct; //正确
|
|||
extern TS_SPEECH_AUDIO audio_game_overtime; //训练时间到
|
|||
extern TS_SPEECH_AUDIO audio_game_complete; //训练完成
|
|||
|
|||
extern TS_SPEECH_AUDIO audio_tcp_maze; |
|||
extern TS_SPEECH_AUDIO audio_tcp_different; |
|||
extern TS_SPEECH_AUDIO audio_tcp_shulte; |
|||
extern TS_SPEECH_AUDIO audio_tcp_complete; |
|||
extern TS_SPEECH_AUDIO audio_tcp_noplan; |
|||
|
|||
extern TS_SPEECH_AUDIO audio_low_power; |
|||
|
|||
extern TS_SPEECH_VOLUME volume_control; |
|||
|
|||
extern void L2_WT2605B_init(); |
|||
extern void L2_WT2605B_PWRON(); |
|||
extern void L2_WT2605B_PWROFF(); |
|||
extern void L2_WT2605B_Broadcast(TS_SPEECH_AUDIO *music); |
|||
extern void L2_WT2605B_Broadcast_TPC(U8* GameID); |
|||
extern void L2_WT2605B_VolumeControl(U8 grade); |
|||
extern void L2_WT2605B_VioceUp(); |
|||
extern void L2_WT2605B_VioceDown(); |
|||
#endif |
@ -0,0 +1,48 @@ |
|||
#include "bsp_key.h" |
|||
|
|||
void L2_key_init() |
|||
{ |
|||
D_stdIO_P3(BITN2); |
|||
D_stdIO_P3(BITN3);//准双向口
|
|||
D_stdIO_P0(BITN2); |
|||
//初始化为高电平
|
|||
Key1 = Key2 = Key3 = 1; |
|||
|
|||
} |
|||
|
|||
U8 L2_ReadKey1(void) |
|||
{ |
|||
Key1 = 1; |
|||
if (Key1 == 0) |
|||
{ |
|||
return Key_Down; |
|||
} |
|||
else |
|||
{ |
|||
return Key_Up; |
|||
} |
|||
} |
|||
U8 L2_ReadKey2(void) |
|||
{ |
|||
Key2 = 1; |
|||
if (Key2 == 0) |
|||
{ |
|||
return Key_Down; |
|||
} |
|||
else |
|||
{ |
|||
return Key_Up; |
|||
} |
|||
} |
|||
U8 L2_ReadKey3(void) |
|||
{ |
|||
Key3 = 1; |
|||
if (Key3 == 0) |
|||
{ |
|||
return Key_Down; |
|||
} |
|||
else |
|||
{ |
|||
return Key_Up; |
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
#ifndef BSP_KEY_H |
|||
#define BSP_KEY_H |
|||
|
|||
#include "bsp_config.h" |
|||
|
|||
//按键
|
|||
#define Key_Down 0 |
|||
#define Key_Up 1 |
|||
|
|||
#define Key1 P32 //音量增大
|
|||
#define Key2 P33 //音量减小
|
|||
#define Key3 P02 //开关机
|
|||
// #define Key (key1 && key2 && key3)
|
|||
|
|||
|
|||
extern void L2_key_init(); |
|||
extern U8 L2_ReadKey1(void); |
|||
extern U8 L2_ReadKey2(void); |
|||
extern U8 L2_ReadKey3(void); |
|||
|
|||
#endif |
@ -0,0 +1,29 @@ |
|||
#include "bsp_led.h" |
|||
|
|||
void L2_led_init() |
|||
{ |
|||
D_HighI_P1(BITN2); |
|||
D_HighI_P4(BITN7); |
|||
|
|||
GREEN_LED = LED_OFF; |
|||
RED_LED = LED_OFF; |
|||
|
|||
} |
|||
|
|||
void L2_GREEN_LED_ON(void) |
|||
{ |
|||
GREEN_LED = LED_ON; |
|||
RED_LED = LED_OFF; |
|||
} |
|||
|
|||
void L2_RED_LED_ON(void) |
|||
{ |
|||
GREEN_LED = LED_OFF; |
|||
RED_LED = LED_ON; |
|||
} |
|||
|
|||
void L2_LED_OFF(void) |
|||
{ |
|||
GREEN_LED = LED_OFF; |
|||
RED_LED = LED_OFF; |
|||
} |
@ -0,0 +1,19 @@ |
|||
#ifndef BSP_LED_H |
|||
#define BSP_LED_H |
|||
|
|||
#include "bsp_config.h" |
|||
|
|||
|
|||
#define RED_LED P12 //双色红灯
|
|||
#define GREEN_LED P47 //双色绿灯
|
|||
|
|||
#define LED_ON 0 |
|||
#define LED_OFF 1 |
|||
|
|||
|
|||
extern void L2_led_init(); |
|||
extern void L2_RED_LED_ON(); |
|||
extern void L2_GREEN_LED_ON(); |
|||
extern void L2_LED_OFF(); |
|||
|
|||
#endif |
@ -0,0 +1,183 @@ |
|||
#ifndef __OPTICALDATA__ |
|||
#define __OPTICALDATA__ |
|||
|
|||
#include "bsp_config.h" |
|||
#include "../app/app_config.h" |
|||
|
|||
/******************************************************************************************************
|
|||
配置参数 |
|||
*******************************************************************************************************/ |
|||
#define ROM009_HANDWRITE 0 |
|||
#define DATA_FORMAT_2 0 |
|||
#define OID_4C 0 |
|||
#define DEBOUNCE_FUNC 0 |
|||
#define LOG_REGISTER 0 |
|||
|
|||
#if DEBOUNCE_FUNC |
|||
#define DEBOUNCE_TIMES 3 // 连续三笔相同,才触发,debounce时,可设置。去抖动时间
|
|||
#define DEBOUNCE_RELESE_TIME 20 //5ms * 20 = 100ms,100ms无任何码,认为抬笔。
|
|||
#endif |
|||
/******************************************************************************************************
|
|||
2-wire GPIO |
|||
|
|||
#define D_stdIO_P5(n) BITN_0(P5M1,n);BITN_0(P5M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P5(n) BITN_0(P5M1,n);BITN_1(P5M0,n); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P5(n) BITN_1(P5M1,n);BITN_0(P5M0,n); /////////10 高阻
|
|||
#define D_OpenD_P5(n) BITN_1(P5M1,n);BITN_1(P5M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
*******************************************************************************************************/ |
|||
#define LD_oid_io_init() LD_Oid_SCK_INIT() |
|||
////#define LD_Oid_SCK_INIT() D_stdIO_P3(BITN4);
|
|||
|
|||
#define LD_Oid_SCK_LOW() D_P34_OFF(); |
|||
#define LD_Oid_SCK_HIGH() D_P34_ON(); |
|||
|
|||
#define LD_Oid_SCK_INIT(); D_HighI_P3(BITN4);LD_Oid_SCK_LOW(); |
|||
|
|||
|
|||
#define LD_Oid_SDIO_INIT() D_HighR_P5(BITN0) |
|||
#define LD_Oid_SDIO_LOW() D_P50_OFF() |
|||
#define LD_Oid_SDIO_HIGH() D_P50_ON() |
|||
#define LD_Oid_SDIO_IN() D_HighR_P5(BITN0)//高阻输入
|
|||
#define LD_Oid_SDIO_OUT() D_HighI_P5(BITN0)//推挽输出
|
|||
|
|||
#define LD_Oid_SDIO_AT() D_P50_AT() |
|||
|
|||
|
|||
#define LD_Oid_DIO_INIT(); LD_Oid_SCK_INIT();LD_Oid_SDIO_INIT(); |
|||
|
|||
|
|||
#define OID_DET P50 |
|||
|
|||
/******************************************************************************************************
|
|||
OID命令 |
|||
*******************************************************************************************************/ |
|||
|
|||
|
|||
////20211229依据53xx和54xx系列操作
|
|||
#define USERCMD_20FPS 0x24 |
|||
#define USERCMD_30FPS 0x25 |
|||
#define USERCMD_40FPS 0x26 |
|||
#define USERCMD_50FPS 0x27 |
|||
#define USERCMD_80FPS 0x3C |
|||
#define USERCMD_80FPS_EXIT 0x3B |
|||
#define USERCMD_DECODE_SHUT 0x4D |
|||
#define USERCMD_LIANCHUAN 0x40 |
|||
#define USERCMD_SUSPEND 0x57 |
|||
#define USERCMD_EN_ANGLE 0x10 |
|||
#define USERCMD_EN_POSITION 0x35 |
|||
#define USERCMD_SW_POSITION 0x43 |
|||
#define USERCMD_DATA_FORMAT_2 0x2C |
|||
#define USERCMD_LOU_GUANG 0xD7 |
|||
#define USERCMD_POWER_DOWN 0x56 |
|||
|
|||
#define OIDCMD_POWER_ON 0x0000FFF8 |
|||
#define OIDCMD_POWER_OFF 0x0000FFF7 |
|||
/******************************************************************************************************
|
|||
OID版本 |
|||
*******************************************************************************************************/ |
|||
#define OID_VER_D 0x1169 |
|||
#define OID_VER_REG 0x1670 |
|||
#define OID_VER_F 0x1168 |
|||
#define REG_READOID_SET 0xD40 |
|||
#define REG_EN_DECODE 0xD63 |
|||
#define REG_ROM008 0xDA5 |
|||
#define REG_ROM009 0xDA6 |
|||
#define ROM_009 0x09 |
|||
#define ROM_008 0x00 |
|||
/******************************************************************************************************
|
|||
Dataformat 2定义 |
|||
*******************************************************************************************************/ |
|||
#define CHECK_INVALID_DF2 0x40000000 |
|||
#define CHECK_OID_VERSION_DF2 0xFC000000 |
|||
#define OID_2_GENERAL_DF2 0x00000000 |
|||
#define OID_3_GENERAL_DF2 0x08000000 |
|||
#define OID_3_POSITION_DF2 0x04000000 |
|||
#define OID_3S_GENERAL_DF2 0x10000000 |
|||
#define OID_3S_POSITION_DF2 0x0C000000 |
|||
#define OID_35_GENERAL_DF2 0x14000000 |
|||
#define OID_4_GENERAL_DF2 0x1C000000 |
|||
#define OID_4_POSITION_DF2 0x18000000 |
|||
#define OID_4C_POSITION_DF2 0x20000000 |
|||
/******************************************************************************************************
|
|||
函数声明 |
|||
*******************************************************************************************************/ |
|||
typedef enum |
|||
{ |
|||
eHandWrite = 0, |
|||
ePointRead_2000A = 1, |
|||
ePointRead_3000A = 2, |
|||
ePointRead_LightGuide = 3, |
|||
eCar_LightGuide = 4, |
|||
}AppDevice; |
|||
extern AppDevice eAppDevice; |
|||
/*****************
|
|||
|
|||
void OidTaskLoop(void); |
|||
uint8_t L1_oid_TransCmd(uint8_t Cmd); |
|||
uint8_t WakeUpOID(void); |
|||
|
|||
|
|||
void L1_oid_RecvOptData(void); |
|||
|
|||
void LogRegister(void); |
|||
uint8_t L1_oid_CheckVersionAndInit(AppDevice eAppDevice); |
|||
|
|||
/*****************************/ |
|||
/**********************************************************
|
|||
Bit Indication |
|||
63–60 0110b |
|||
59–54 Reserved |
|||
53–45 Angle |
|||
44 Reserved |
|||
43–36 1111 0010b (Y decimal) |
|||
35–28 0111 0100b (X decimal) |
|||
27–14 00 0000 0000 0100b (Y integer) |
|||
13–0 00 0000 0000 0100b (X integer) 变量定义 |
|||
******************************************************/ |
|||
|
|||
|
|||
|
|||
typedef struct _ts_OID |
|||
{ |
|||
U_U64 rec; |
|||
|
|||
// Data format of OID
|
|||
U8 oid_type; //oid类型 :63–60 0110b
|
|||
U16 angle; //Angle :53–45
|
|||
U8 Ydec; //小数部分(Y decimal) :43–36 1111 0010b
|
|||
U8 Xdec; //小数部分(X decimal) :35–28 0111 0100b
|
|||
vU16 Yint; //整数部分(Y integer) :27–14 00 0000 0000 0100b
|
|||
vU16 Xint; //整数部分(X integer) :13–0 00 0000 0000 0100b
|
|||
|
|||
vU16 Y100,X100; ///放大100倍的输出
|
|||
vU32 gCode; //
|
|||
|
|||
vU32 time; |
|||
vU32 last_time; |
|||
|
|||
vU32 overtime; |
|||
|
|||
|
|||
float x,y;//cut
|
|||
vU16 pre_x,pre_y;//cut
|
|||
U8 oid_x; |
|||
U8 oid_p; |
|||
|
|||
|
|||
}Ts_OID_; |
|||
extern Ts_OID_ ts_oid; |
|||
///extern volatile uint32_t RecvData[3];
|
|||
|
|||
void L0_Oid_Init(void); |
|||
|
|||
uint8_t L1_oid_TransCmd(uint8_t Cmd); |
|||
void L1_print_rcv(char *str); |
|||
uint32_t L1_oidReadRegister (uint16_t Data1); |
|||
void L1_Oid_readoid(void); |
|||
uint8_t L1_OID_WakeUp(void); |
|||
void L2_oid_ParseF1(void); |
|||
void L0_oid_Recv64(void); |
|||
void L1_Oid_Rec_PRINT(void); |
|||
|
|||
#endif // __OPTICALDATA__
|
|||
|
@ -0,0 +1,903 @@ |
|||
#include "bsp_oid.h" |
|||
#include "intrins.h" |
|||
#include "../msp/uart0.h" |
|||
#include "../msp/uart3.h" |
|||
#include <stdio.h> |
|||
#include "../ctask/task.h" |
|||
#include "../ctask/tick.h" |
|||
#include "../app/app_task_speech.h" |
|||
#include "../bsp/bsp_WT2605B.h" |
|||
|
|||
|
|||
|
|||
/******************************************************************************************************
|
|||
变量定义 |
|||
*******************************************************************************************************/ |
|||
AppDevice eAppDevice = ePointRead_2000A; |
|||
///volatile uint32_t RecvData[3];
|
|||
Ts_OID_ ts_oid; |
|||
|
|||
uint8_t TransCmd[7]; |
|||
|
|||
///#define MAIN_Fosc 11059260L
|
|||
#if 0 |
|||
#define MAIN_Fosc (12459260L/4) |
|||
#define D_DELAY_10US 10 |
|||
#define D_DELAY_ROD_80US 80 |
|||
|
|||
|
|||
#else |
|||
#define MAIN_Fosc (12459260L/2) |
|||
#define D_DELAY_10US 20 |
|||
#define D_DELAY_ROD_80US 160 |
|||
|
|||
|
|||
#endif |
|||
|
|||
|
|||
//========================================================================
|
|||
// 函数: void delay_ms(uint8_t ms)
|
|||
// 描述: 延时函数。
|
|||
// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
|
|||
// 返回: none.
|
|||
// 版本: VER1.0
|
|||
// 日期: 2021-3-9
|
|||
// 备注:
|
|||
//========================================================================
|
|||
void delay_ms(uint8_t ms) |
|||
{ |
|||
uint16_t i; |
|||
do{ |
|||
i = MAIN_Fosc / 10000L; |
|||
while(--i); //10T per loop
|
|||
}while(--ms); |
|||
} |
|||
|
|||
void delay_us(uint8_t us) |
|||
{ |
|||
// uint16_t i;
|
|||
do{ |
|||
// i = MAIN_Fosc / 10000000L;
|
|||
// i = 1;///5 10 150u 1---50us
|
|||
/// while(--i); //10T per loop
|
|||
}while(--us); |
|||
} |
|||
|
|||
/******************************************************************************************************
|
|||
Function: |
|||
Input: |
|||
Output: |
|||
*******************************************************************************************************/ |
|||
void L0_oid_SendCmd(uint8_t Cmd) |
|||
{ |
|||
uint8_t i; |
|||
LD_Oid_SDIO_OUT(); |
|||
LD_Oid_SCK_HIGH(); |
|||
LD_Oid_SDIO_HIGH(); // Write control bit
|
|||
delay_us(D_DELAY_10US); |
|||
LD_Oid_SCK_LOW(); |
|||
delay_us(D_DELAY_10US); |
|||
|
|||
for(i=0;i<8;i++) |
|||
{ |
|||
LD_Oid_SCK_HIGH(); |
|||
if(Cmd & 0x80) |
|||
{ |
|||
LD_Oid_SDIO_HIGH(); |
|||
} |
|||
else |
|||
{ |
|||
LD_Oid_SDIO_LOW(); |
|||
} |
|||
delay_us(D_DELAY_10US); |
|||
LD_Oid_SCK_LOW(); |
|||
|
|||
#if 0 |
|||
if(i == 7) |
|||
{ |
|||
LD_Oid_SDIO_IN(); |
|||
} |
|||
#endif |
|||
delay_us(D_DELAY_10US); |
|||
Cmd <<= 1; |
|||
} |
|||
delay_us(D_DELAY_ROD_80US); |
|||
LD_Oid_SDIO_IN(); |
|||
} |
|||
|
|||
uint16_t L0_oid_RecvAck16(void) |
|||
{ |
|||
uint8_t i; |
|||
uint16_t AckValue; |
|||
AckValue = 0; |
|||
///
|
|||
LD_Oid_SDIO_OUT(); |
|||
delay_us(D_DELAY_10US); |
|||
LD_Oid_SCK_HIGH(); |
|||
LD_Oid_SDIO_LOW(); |
|||
delay_us(D_DELAY_10US); |
|||
LD_Oid_SCK_LOW(); |
|||
delay_us(D_DELAY_10US); |
|||
|
|||
for(i = 0; i < 16; i++) |
|||
{ |
|||
LD_Oid_SCK_HIGH(); |
|||
LD_Oid_SDIO_IN() |
|||
delay_us(D_DELAY_10US); |
|||
LD_Oid_SCK_LOW(); |
|||
if(OID_DET) |
|||
{ |
|||
AckValue +=1; |
|||
} |
|||
|
|||
if(i < 15) |
|||
{ |
|||
AckValue <<= 1; |
|||
} |
|||
|
|||
delay_us(D_DELAY_10US); |
|||
} |
|||
delay_us(D_DELAY_ROD_80US); |
|||
|
|||
return AckValue; |
|||
} |
|||
|
|||
|
|||
void L0_oid_Recv64(void) |
|||
{ |
|||
uint8_t i; |
|||
Lc_memset8bits(ts_oid.rec.d, 0, 8); |
|||
LD_Oid_SDIO_OUT(); |
|||
delay_us(D_DELAY_10US); |
|||
LD_Oid_SCK_HIGH(); |
|||
LD_Oid_SDIO_LOW(); |
|||
|
|||
delay_us(D_DELAY_10US); |
|||
LD_Oid_SCK_LOW(); |
|||
|
|||
delay_us(D_DELAY_10US); |
|||
LD_Oid_SDIO_IN() |
|||
|
|||
for(i = 0; i < 64; i++) |
|||
{ |
|||
LD_Oid_SCK_HIGH(); |
|||
delay_us(D_DELAY_10US); |
|||
LD_Oid_SCK_LOW(); |
|||
|
|||
ts_oid.rec.d[i/8] <<= 1; |
|||
|
|||
if(OID_DET) |
|||
{ |
|||
ts_oid.rec.d[i/8] |= 1; |
|||
} |
|||
else |
|||
{ |
|||
ts_oid.rec.d[i/8] &= 0xfe; |
|||
} |
|||
delay_us(D_DELAY_10US); |
|||
} |
|||
|
|||
ts_oid.time = D_sys_now; |
|||
delay_us(D_DELAY_ROD_80US); |
|||
|
|||
return; |
|||
} |
|||
|
|||
uint8_t L1_oid_TransCmd(uint8_t Cmd) |
|||
{ |
|||
uint8_t TxCmd;///,det_busy;
|
|||
uint32_t RxAckCnt = 0; |
|||
|
|||
// L0_uart0_sendstr("\r\n w cmd=");
|
|||
/// L0_uart0_uchex(Cmd);
|
|||
//
|
|||
while(!OID_DET) |
|||
{ |
|||
L0_oid_Recv64(); |
|||
L1_print_rcv("\r\n busy: RD="); |
|||
} |
|||
TxCmd = Cmd; |
|||
L0_oid_SendCmd(TxCmd); |
|||
LD_Oid_SCK_LOW(); |
|||
delay_us(10); |
|||
#define D_oid_waitrcv_delay 100000 |
|||
while(OID_DET) |
|||
{ |
|||
/// L1_oid_RecvOptData();
|
|||
RxAckCnt ++; |
|||
if(RxAckCnt > D_oid_waitrcv_delay) |
|||
{ |
|||
|
|||
L0_uart0_sendstr("\r\nno rec"); |
|||
L0_uart0_uchex(Cmd); |
|||
break; |
|||
} |
|||
} |
|||
|
|||
if(RxAckCnt <= D_oid_waitrcv_delay) |
|||
{ |
|||
TxCmd = (uint8_t)L0_oid_RecvAck16(); |
|||
TxCmd -= 1; |
|||
if(TxCmd == Cmd) |
|||
{ |
|||
|
|||
L0_uart0_sendstr("\r\nCmd="); |
|||
L0_uart0_uchex(Cmd);L0_uart0_uc('-'); |
|||
L0_uart0_uchex(TxCmd); |
|||
return 1; |
|||
} |
|||
} |
|||
} |
|||
|
|||
uint32_t L1_oidReadRegister (uint16_t Data1) |
|||
{ |
|||
uint8_t i,Ret; |
|||
uint32_t uxReturn; |
|||
|
|||
TransCmd[0] = 0x74; |
|||
TransCmd[1] = 3; |
|||
TransCmd[2] = Data1 >> 8; |
|||
TransCmd[3] = Data1 & 0x00FF; |
|||
TransCmd[4] = (TransCmd[1] + TransCmd[2] + TransCmd[3]) & 0xFF; |
|||
|
|||
for(i=0;i<5;i++) |
|||
{ |
|||
Ret = L1_oid_TransCmd(TransCmd[i]); |
|||
if(Ret == 0) |
|||
{ |
|||
return 0x5FFFFFFF; |
|||
} |
|||
} |
|||
|
|||
i = 0; |
|||
while(1) |
|||
{ |
|||
if(!OID_DET) |
|||
{ |
|||
L0_oid_Recv64(); |
|||
/// uxReturn = RecvData[1];
|
|||
uxReturn = ts_oid.rec.d32[1]; |
|||
uxReturn &= 0xFFFF; |
|||
return uxReturn; |
|||
} |
|||
|
|||
delay_us(100); |
|||
i += 1; |
|||
if(i >= 20) // check 100ms
|
|||
{ |
|||
return 0x2FFFFFFF; |
|||
} |
|||
} |
|||
} |
|||
|
|||
/******************************************************************************************************
|
|||
Function: |
|||
Input: |
|||
Output: |
|||
*******************************************************************************************************/ |
|||
uint8_t Write_Register(uint16_t Data1,uint16_t Data2) |
|||
{ |
|||
uint8_t Ret,i; |
|||
uint16_t j; |
|||
Ret = 1; |
|||
|
|||
TransCmd[0] = 0X73; |
|||
TransCmd[1] = 0x05; |
|||
j = Data1>>8; |
|||
TransCmd[2] = (uint8_t)j; |
|||
j = Data1; |
|||
TransCmd[3] = (uint8_t)j; |
|||
j = Data2>>8; |
|||
TransCmd[4] = (uint8_t)j; |
|||
j = Data2; |
|||
TransCmd[5] = (uint8_t)j; |
|||
TransCmd[6] = (TransCmd[1] + TransCmd[2] + TransCmd[3] + TransCmd[4] + TransCmd[5]); |
|||
|
|||
for(i=0;i<7;i++) |
|||
{ |
|||
Ret = L1_oid_TransCmd(TransCmd[i]); |
|||
if(Ret == 0) |
|||
{ |
|||
break; |
|||
} |
|||
} |
|||
return Ret; |
|||
} |
|||
|
|||
void L1_print_rcv(char *str) |
|||
{ |
|||
L0_uart0_sendstr(str); |
|||
/********
|
|||
// Lc_delay_ms(1);
|
|||
L0_uart0_ulhex(RecvData[0]); |
|||
// Lc_delay_ms(1);
|
|||
L0_uart0_uc(0x09); |
|||
L0_uart0_ulhex(RecvData[1]); |
|||
|
|||
L0_uart0_uc(0x09); |
|||
**********/ |
|||
|
|||
/// L0_uart0_ulhex(ts_oid.rec.d32[1]);L0_uart0_uc(0x09);
|
|||
///
|
|||
|
|||
// L0_uart0_sendArrayHex(ts_oid.rec.d,8);
|
|||
///L2_oid_ParseF1();
|
|||
|
|||
} |
|||
/******************************************************************************************************
|
|||
Function: |
|||
Input: |
|||
Output: |
|||
|
|||
BYTE0 BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7 |
|||
666655555555554444444444333333333322222222221111111111 |
|||
3210987654321098765432109876543210987654321098765432109876543210 |
|||
76543210 76543210 76543210 76543210 |
|||
76543210 76543210 76543210 76543210 |
|||
BYTE0 BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7 |
|||
|
|||
|
|||
U16[0] U16[1] U16[2] U16[3] |
|||
111111 111111 111111 111111 |
|||
5432109876543210543210987654321054321098765432105432109876543210 |
|||
666655555555554444444444333333333322222222221111111111 |
|||
3210987654321098765432109876543210987654321098765432109876543210 |
|||
|
|||
u32[0] u32[1] |
|||
3322222222221111111111 3322222222221111111111 |
|||
1098765432109876543210987654321010987654321098765432109876543210 |
|||
666655555555554444444444333333333322222222221111111111 |
|||
3210987654321098765432109876543210987654321098765432109876543210 |
|||
|
|||
U16 angle; // 53–45 Angle 53,52 51 50 49,48 47 46 45
|
|||
U8 Ydec; //小数部分43–36 1111 0010b (Y decimal)
|
|||
U8 Xdec; //小数部分35–28 0111 0100b (X decimal)
|
|||
U8 Yint; //整数部分 27–14 00 0000 0000 0100b (Y integer)
|
|||
U8 Xint; //整数部分 13–0 00 0000 0000 0100b (X integer)
|
|||
|
|||
*******************************************************************************************************/ |
|||
vU16 Lc_dec_us100(vU16 pint,u8 pdec) |
|||
{ |
|||
pint *= 100; |
|||
if(pdec&0x80)///负数
|
|||
{ |
|||
pdec &= 0x7f; |
|||
pint -= 100; |
|||
}else |
|||
{ |
|||
|
|||
} |
|||
pdec *= 100; |
|||
pdec /= 128; |
|||
pint += (vU16)pdec; |
|||
return pint; |
|||
|
|||
} |
|||
|
|||
void L2_oid_ParseF1(void) //解析
|
|||
{ |
|||
uint16_t u16i = 0; |
|||
uint32_t u32t[2] = 0; |
|||
// L1_print_rcv("\r\n F1=");
|
|||
ts_oid.oid_type = ts_oid.rec.d[0]; |
|||
|
|||
R.game.type = ts_oid.rec.d[6]; |
|||
R.game.dat = ts_oid.rec.d[7]; |
|||
|
|||
L0_uart0_sendstr("R.game.type = "); |
|||
L0_uart0_uchex(R.game.type); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("R.game.dat = "); |
|||
L0_uart0_uchex(R.game.dat); |
|||
L0_uart0_0d0a(); |
|||
|
|||
// R.oid.type = ts_oid.rec.d[6];
|
|||
// R.oid.dat = ts_oid.rec.d[7];
|
|||
L1_Oid_Rec_PRINT(); |
|||
|
|||
|
|||
if(ts_oid.rec.d[0] == 0x00) // 4
|
|||
{/// Bit43~Bit0:x,y 轴的坐标数据,x 坐标和 y 坐标都是由整数和小数部分
|
|||
///组成,整数部分 14bit,小数部分 8bit
|
|||
G.pen_t = 0; |
|||
ts_oid.last_time = s_nos_tick.t_1s; |
|||
ts_oid.Xint = ts_oid.rec.d16[3] & 0x3fff; |
|||
|
|||
#if 0 |
|||
// 测试oid,led,喇叭联动
|
|||
if(ts_oid.rec.d16[3] == 0x4E85) |
|||
{ |
|||
L0_uart3_sendArray((U8 *)&audio_SchulteGrid,9); |
|||
LED1 = ~LED1; |
|||
} |
|||
if(ts_oid.rec.d16[3] == 0x4E86) |
|||
{ |
|||
L0_uart3_sendArray((U8 *)&audio_up,9); |
|||
LED2 = ~LED2; |
|||
} |
|||
if(ts_oid.rec.d16[3] == 0x4E87) |
|||
{ |
|||
L0_uart3_sendArray((U8 *)&audio_down,9); |
|||
LED3 = ~LED3; |
|||
} |
|||
if(ts_oid.rec.d16[3] == 0x4E88) |
|||
{ |
|||
L0_uart3_sendArray((U8 *)&audio_zmg,9); |
|||
LED4 = ~LED4; |
|||
} |
|||
#endif |
|||
|
|||
|
|||
if(ts_oid.Xint < 300)///取决于图片 fixme: cc //0E87 --- 3719
|
|||
{ |
|||
ts_oid.oid_x = 1; |
|||
|
|||
u32t[0] = ts_oid.rec.d32[0]; |
|||
u32t[1] = ts_oid.rec.d32[1]; |
|||
|
|||
ts_oid.angle = (vU16)(u32t[0]>>13); //45-32= 13
|
|||
ts_oid.angle &= 0x01ff; //53-45+1=8
|
|||
///36-43
|
|||
ts_oid.Ydec = (ts_oid.rec.d[2]<<4) | (ts_oid.rec.d[3]>>4); |
|||
///28 35
|
|||
ts_oid.Xdec = (ts_oid.rec.d[3]<<4) | (ts_oid.rec.d[4]>>4); |
|||
#ifdef docsdfads |
|||
C0EC58E5 60 4D 24 23 A0 23 80 57 (12800.4500,142.5156) 105 |
|||
C0EC58E5 60 4C E4 54 C0 23 40 5A (12800.5900,141.5391) 103 |
|||
C0EC58E5 60 4D 44 B5 A0 23 00 5D (12800.7000,140.5859) 106 |
|||
C0EC58E5 60 4D 24 AF 30 22 C0 61 (12800.9000,139.5781) 105 |
|||
C0EC58E5 60 4D 24 B1 E0 22 80 64 (12800.2300,138.5859) 105 |
|||
|
|||
A0 23 80 57 (12800.4500,142.5156) 105 |
|||
A0 23 80 57 |
|||
C0 23 40 5A |
|||
A0 23 00 5D |
|||
30 22 C0 61 |
|||
E0 22 80 64 |
|||
1010 0000 0010 0011 1000 0000 0101 0111 |
|||
3322 2222 2222 1111 1111 11 |
|||
1098 7654 3210 9876 5432 1098 7654 3210 |
|||
|
|||
#endif |
|||
u32t[1] >>= 14; |
|||
ts_oid.Yint = (vU16)u32t[1]; |
|||
ts_oid.Yint &= 0x3fff; |
|||
|
|||
|
|||
|
|||
#if 0 |
|||
if(ts_oid.Xdec&0x80) |
|||
{ |
|||
ts_oid.x -= 1.0; |
|||
} |
|||
|
|||
|
|||
|
|||
ts_oid.Xdec&=0x7f; |
|||
ts_oid.x = (float)ts_oid.Xdec; |
|||
ts_oid.x /= 128.0; |
|||
if(ts_oid.Xdec&0x80) |
|||
{ |
|||
ts_oid.x -= 1.0; |
|||
} |
|||
ts_oid.x += ts_oid.Xint; |
|||
|
|||
ts_oid.Ydec&=0x7f; |
|||
ts_oid.y = (float)ts_oid.Ydec; |
|||
ts_oid.y /= 128.0; |
|||
if(ts_oid.Ydec&0x80) |
|||
{ |
|||
ts_oid.y -= 1.0; |
|||
} |
|||
ts_oid.y += ts_oid.Yint; |
|||
|
|||
#else |
|||
ts_oid.X100 = Lc_dec_us100(ts_oid.Xint,ts_oid.Xdec); |
|||
ts_oid.Y100 = Lc_dec_us100(ts_oid.Yint,ts_oid.Ydec); |
|||
|
|||
|
|||
#endif |
|||
|
|||
//数据存储到寄存器
|
|||
|
|||
printf(" %hd %hd %hd ", |
|||
ts_oid.X100,ts_oid.Y100, |
|||
ts_oid.angle); |
|||
} |
|||
else |
|||
{ |
|||
ts_oid.oid_type = 0; |
|||
L0_uart0_uc(';'); |
|||
} |
|||
} |
|||
else if(ts_oid.rec.d[0] == 0x40)///手写
|
|||
{ |
|||
//// 普通码(bit61=0)
|
|||
//// Bit60:码是否有效(1:无效码;0:有效码)
|
|||
//// Bit59~Bit28:保留
|
|||
/// Bit27~Bit0:有效数据
|
|||
/// G.oid_p = 1;
|
|||
ts_oid.oid_p = 1; |
|||
ts_oid.gCode = ts_oid.rec.d32[1]&0x0fFFffFF; |
|||
|
|||
/// R.oid3_order = (int)ts_oid.gCode *100;
|
|||
|
|||
printf(" %ld %x ",ts_oid.gCode,(int)ts_oid.gCode); |
|||
L0_uart0_ulhex(ts_oid.gCode); |
|||
} |
|||
else |
|||
{ |
|||
ts_oid.oid_type = 0; |
|||
L0_uart0_uc(','); |
|||
} |
|||
} |
|||
void L2_oid_status(void) |
|||
{ |
|||
if(G.oid_x) |
|||
{ |
|||
if(ts_oid.pre_x == 0 && ts_oid.pre_y == 0&& ts_oid.X100 != 0 &&ts_oid.Y100 != 0) |
|||
{ |
|||
G.pen_down = 1; |
|||
//L0_uart2_sendstr("123");
|
|||
} |
|||
else if(ts_oid.pre_x != 0 && ts_oid.pre_y != 0&& ts_oid.X100 != 0 &&ts_oid.Y100 != 0) |
|||
{ |
|||
G.pen_hold = 1; |
|||
//L0_uart2_sendstr("456");
|
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
uint8_t L1_OID_WakeUp(void) |
|||
{ |
|||
uint32_t i = 0; |
|||
LD_Oid_SCK_LOW(); |
|||
delay_ms(2); |
|||
LD_Oid_SCK_HIGH(); |
|||
delay_ms(30); |
|||
LD_Oid_SCK_LOW(); |
|||
|
|||
L0_uart0_sendstr(" 44 "); |
|||
|
|||
while(1) |
|||
{ |
|||
delay_ms(10); |
|||
i += 1; |
|||
if(i >= 400) // 400*5ms = 2s
|
|||
{ |
|||
L0_uart0_sendstr(" !!out!! "); |
|||
return 0; |
|||
} |
|||
if(!OID_DET) |
|||
{ |
|||
L0_oid_Recv64(); |
|||
L1_print_rcv("\r\n WakeUpOID get="); |
|||
if(ts_oid.rec.d[7] == 0xf8) |
|||
{ |
|||
///use
|
|||
L0_uart0_sendstr(" ok\r\n"); |
|||
return 1;//ucCheckVersionAndInit(eAppDevice);
|
|||
|
|||
} |
|||
else |
|||
{ |
|||
L0_uart0_sendstr("\r\nno?? OIDCMD_POWER_ON \r\n"); |
|||
return 0; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
/******************************************************************************************************
|
|||
Function: |
|||
Input: |
|||
Output: |
|||
*******************************************************************************************************/ |
|||
void L0_Oid_Init(void) |
|||
{ |
|||
LD_Oid_DIO_INIT(); |
|||
/******************************************************************************************************
|
|||
5430C2000A/3000A点读应用初始化设置 |
|||
顺序 命令设置 备注 |
|||
1 single command 0x4D 关闭解码 |
|||
2 REG(0xD40) = 0x00 设置仅读OID码,0X00仅读OID3/OID2,0X10仅读OID3S,0X20仅读OID4 |
|||
3 single command 0x36 关闭手写码侦测 |
|||
4 "REG(0x0DAD) = 4250 //设置AE Target |
|||
REG(0x0DB1) = 4000 //设置AE LOW
|
|||
REG(0x0DAF) = 4000 //设置AE LOW
|
|||
REG(0x0DB0) = 4500 //设置AE HIGH
|
|||
REG(0x0DAE) = 4500 //设置AE HIGH
|
|||
|
|||
REG(0x1641) = 0xA0 //设置dot filter
|
|||
REG(0x0D6A) = 0x3F //此项不要改动
|
|||
REG(0x0D2C) = 0x3F //此项不要改动" "初始化,可不下此部分命令,若笔头配合底码识别不佳,可以下此部分命令,设置不同参数尝试。
|
|||
|
|||
设置AE Range和dot filter。 |
|||
AE_LOW < AE_Target <AE_HIGH. |
|||
Dot filter,要设置整数倍,比如0x40,0x50,0x60……。" |
|||
5 …… 用户命令,用户根据产品应用决定需要下的命令。 |
|||
6 REG(0xD63) = 0x80 打开解码。此命令错误改为如下命令。 |
|||
6 "i = REG(0xD63) |
|||
i &= 0xFFFE |
|||
REG(0xD63) = i" 打开解码,方法是把寄存器0xD63中的数据的bit0清零,其它bit不可动。 |
|||
|
|||
*******************************************************************************************************/ |
|||
L0_uart0_sendstr("\r\nL1_OID_WakeUp3 "); |
|||
L1_OID_WakeUp(); |
|||
L0_uart0_sendstr("666666"); |
|||
/***
|
|||
|
|||
L1_oid_TransCmd(0x4D);//// 1 single command 0x4D 关闭解码
|
|||
|
|||
Write_Register(0x0D40,0x00); //// 2 REG(0xD40) = 0x00 设置仅读OID码,0X00仅读OID3/OID2,0X10仅读OID3S,0X20仅读OID4
|
|||
|
|||
L1_oid_TransCmd(0x36);///3 single command 0x36 关闭手写码侦测
|
|||
Write_Register(0x0DAD,4250); //设置 AE Target 4 "REG(0x0DAD) = 4250 //设置AE Target
|
|||
Write_Register(0x0DB1,4000); //设置 AE LOW
|
|||
Write_Register(0x0DAF,4000); //设置 AE LOW
|
|||
Write_Register(0x0DB0,4500); //设置 AE High
|
|||
Write_Register(0x0DAE,4500); //设置 AE High 0x1194
|
|||
Write_Register(0x1641,0xA0); //设置 dot filter
|
|||
Write_Register(0x0D6A,0x3F); //此项不要改动
|
|||
Write_Register(0x0D2C,0x3F); //此项不要改动" "初始化,可不下此部分命令,若笔头配合底码识别不佳,可以下此部分命令,设置不同参数尝试。
|
|||
******/ |
|||
|
|||
Write_Register(0x0D63,0x80); //cc 好像数据分辨率有区别 此项不要改动 6 REG(0xD63) = 0x80 打开解码。此命令错误改为如下命令。
|
|||
|
|||
///L1_oid_CheckVersionAndInit();///cc 仍然有读取错误的时候
|
|||
|
|||
// 6 "i = REG(0xD63)
|
|||
// i &= 0xFFFE
|
|||
// REG(0xD63) = i" 打开解码,方法是把寄存器0xD63中的数据的bit0清零,其它bit不可动。
|
|||
L1_oid_TransCmd(USERCMD_20FPS);//cc 必须添加
|
|||
L1_oid_TransCmd(USERCMD_EN_ANGLE);//cc 必须添加
|
|||
L1_oid_TransCmd(USERCMD_EN_POSITION);//cc 必须添加
|
|||
|
|||
|
|||
printf("\r\n L0_Oid_Init finish\r\n"); |
|||
|
|||
///while(9)
|
|||
{ |
|||
L1_Oid_readoid(); |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
void L1_Oid_readoid(void) |
|||
{ |
|||
if(!OID_DET) |
|||
{ |
|||
L2_WT2605B_Broadcast(&audio_game_correct); |
|||
ts_oid.pre_x = ts_oid.X100; |
|||
ts_oid.pre_y = ts_oid.Y100; |
|||
L0_oid_Recv64(); //ts_oid.rec.d[i/8] <<= 1;
|
|||
L2_oid_ParseF1(); |
|||
//L2_oid_status();
|
|||
L1_print_rcv("\r\n "); |
|||
L0_uart0_sendstr("ts_oid.Xint = "); |
|||
L0_uart0_ushex(ts_oid.Xint); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("ts_oid.Yint = "); |
|||
L0_uart0_ushex(ts_oid.Yint); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("ts_oid.Xdec = "); |
|||
L0_uart0_ushex(ts_oid.Xdec); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("ts_oid.Ydec = "); |
|||
L0_uart0_ushex(ts_oid.Ydec); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("oid_p"); |
|||
} |
|||
else if((s_nos_tick.t_1s - ts_oid.last_time >= 10)&& (G.pen_t == 0)) |
|||
{ |
|||
G.pen_up = 1; |
|||
G.pen_t =1; |
|||
L0_uart0_sendstr("789"); |
|||
} |
|||
/// delay_us(100);
|
|||
} |
|||
|
|||
void L1_Oid_Rec_PRINT(void) |
|||
{ |
|||
// d[7]
|
|||
L0_uart0_sendstr("ts_oid.rec.d[0] = "); |
|||
L0_uart0_uchex(ts_oid.rec.d[0]); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("ts_oid.rec.d[1] = "); |
|||
L0_uart0_uchex(ts_oid.rec.d[1]); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("ts_oid.rec.d[2] = "); |
|||
L0_uart0_uchex(ts_oid.rec.d[2]); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("ts_oid.rec.d[3] = "); |
|||
L0_uart0_uchex(ts_oid.rec.d[3]); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("ts_oid.rec.d[4] = "); |
|||
L0_uart0_uchex(ts_oid.rec.d[4]); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("ts_oid.rec.d[5] = "); |
|||
L0_uart0_uchex(ts_oid.rec.d[5]); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("ts_oid.rec.d[6] = "); |
|||
L0_uart0_uchex(ts_oid.rec.d[6]); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("ts_oid.rec.d[7] = "); |
|||
L0_uart0_uchex(ts_oid.rec.d[7]); |
|||
L0_uart0_0d0a(); |
|||
// // d16
|
|||
// L0_uart0_sendstr("ts_oid.rec.d16[0] = ");
|
|||
// L0_uart0_ushex(ts_oid.rec.d16[0]);
|
|||
// L0_uart0_0d0a();
|
|||
// L0_uart0_sendstr("ts_oid.rec.d16[1] = ");
|
|||
// L0_uart0_ushex(ts_oid.rec.d16[1]);
|
|||
// L0_uart0_0d0a();
|
|||
// L0_uart0_sendstr("ts_oid.rec.d16[2] = ");
|
|||
// L0_uart0_ushex(ts_oid.rec.d16[2]);
|
|||
// L0_uart0_0d0a();
|
|||
// L0_uart0_sendstr("ts_oid.rec.d16[3] = ");
|
|||
// L0_uart0_ushex(ts_oid.rec.d16[3]);
|
|||
// L0_uart0_0d0a();
|
|||
// // d32
|
|||
// L0_uart0_sendstr("ts_oid.rec.d32[0] = ");
|
|||
// L0_uart0_ulhex(ts_oid.rec.d32[0]);
|
|||
// L0_uart0_0d0a();
|
|||
// L0_uart0_sendstr("ts_oid.rec.d32[1] = ");
|
|||
// L0_uart0_ulhex(ts_oid.rec.d32[1]);
|
|||
// L0_uart0_0d0a();
|
|||
// // oid_type
|
|||
// L0_uart0_sendstr("ts_oid.oid_type = ");
|
|||
// L0_uart0_uchex(ts_oid.oid_type);
|
|||
// L0_uart0_0d0a();
|
|||
|
|||
} |
|||
|
|||
|
|||
#if 0 |
|||
|
|||
step1 |
|||
if(!OID_DET) |
|||
{ |
|||
L0_oid_Recv64(); |
|||
|
|||
step2 |
|||
|
|||
L2_oid_ParseF1(); |
|||
step 3 |
|||
状态 |
|||
|
|||
|
|||
|
|||
///#ifdef doc980808
|
|||
验证算法的正确性 |
|||
unsigned char s[64]= |
|||
{ |
|||
|
|||
1 , // 0
|
|||
1 , // 1
|
|||
1 , // 2
|
|||
1 , // 3
|
|||
1 , // 4
|
|||
1 , // 5
|
|||
1 , // 6
|
|||
1 , // 7 xxxx
|
|||
|
|||
1 , // 8
|
|||
1 , // 9
|
|||
1 , // 10
|
|||
1 , // 11
|
|||
1 , // 12
|
|||
1 , // 13
|
|||
1 , // 14
|
|||
1 , // 15 xxxx
|
|||
|
|||
1 , // 16
|
|||
1 , // 17
|
|||
1 , // 18
|
|||
1 , // 19
|
|||
1 , // 20
|
|||
1 , // 21
|
|||
1 , // 22
|
|||
1 , // 23 xxxx
|
|||
|
|||
1 , // 24
|
|||
1 , // 25
|
|||
1 , // 26
|
|||
1 , // 27
|
|||
1 , // 28
|
|||
1 , // 29
|
|||
1 , // 30
|
|||
1 , // 31 xxxx
|
|||
|
|||
1 , // 32
|
|||
1 , // 33
|
|||
1 , // 34
|
|||
1 , // 35
|
|||
1 , // 36
|
|||
1 , // 37
|
|||
1 , // 38
|
|||
1 , // 39 xxxx
|
|||
|
|||
1 , // 40
|
|||
1 , // 41
|
|||
1 , // 42
|
|||
1 , // 43
|
|||
1 , // 44
|
|||
1 , // 45
|
|||
1 , // 46
|
|||
1 , // 47 xxxx
|
|||
|
|||
1 , // 48
|
|||
1 , // 49
|
|||
1 , // 50
|
|||
1 , // 51
|
|||
1 , // 52
|
|||
1 , // 53
|
|||
1 , // 54
|
|||
1 , // 55 xxxx
|
|||
|
|||
1 , // 56
|
|||
1 , // 57
|
|||
1 , // 58
|
|||
1 , // 59
|
|||
1 , // 60
|
|||
1 , // 61
|
|||
1 , // 62
|
|||
1 // 63 xxxx
|
|||
|
|||
}; |
|||
int x =0; |
|||
int i; |
|||
|
|||
|
|||
void t(void) |
|||
{RecvData[0] = 0;RecvData[1] = 0; |
|||
for(i = 0; i < 64; i++) |
|||
{ |
|||
|
|||
|
|||
if(s[63-i]) |
|||
{ |
|||
if(i < 32) |
|||
{ |
|||
RecvData[0] += 1; |
|||
} |
|||
if(i>=32 && i<64) |
|||
{ |
|||
RecvData[1] += 1; |
|||
} |
|||
|
|||
} |
|||
if(i < 31) |
|||
{ |
|||
RecvData[0] <<= 1; |
|||
} |
|||
if( i >31 && i < 63) |
|||
{ |
|||
RecvData[1] <<= 1; |
|||
} |
|||
|
|||
|
|||
} |
|||
|
|||
for(i = 0; i < 64; i++) |
|||
{ |
|||
ts_oid.d[i/8] <<= 1; |
|||
if(s[63-i]) |
|||
{ |
|||
ts_oid.d[i/8] |= 1; |
|||
} |
|||
else |
|||
{ |
|||
ts_oid.d[i/8] &= 0xfe; |
|||
} |
|||
} |
|||
i =5; |
|||
|
|||
} |
|||
|
|||
|
|||
#endif |
|||
|
@ -0,0 +1,20 @@ |
|||
#include "../bsp/bsp_wifi.h" |
|||
|
|||
void L2_Wifi_init() |
|||
{ |
|||
D_stdIO_P1(BITN0); |
|||
D_stdIO_P1(BITN1); |
|||
D_stdIO_P5(BITN2); |
|||
L2_OID_WIFI_Open(); |
|||
} |
|||
|
|||
void L2_OID_WIFI_Open() |
|||
{ |
|||
D_P52_OFF(); |
|||
} |
|||
|
|||
void L2_OID_WIFI_Close() |
|||
{ |
|||
D_P52_ON(); |
|||
} |
|||
|
@ -0,0 +1,10 @@ |
|||
#ifndef BSP_WIFI_H |
|||
#define BSP_WIFI_H |
|||
|
|||
#include "bsp_config.h" |
|||
|
|||
extern void L2_Wifi_init(); |
|||
extern void L2_OID_WIFI_Close(); |
|||
extern void L2_OID_WIFI_Open(); |
|||
|
|||
#endif |
File diff suppressed because it is too large
@ -0,0 +1,228 @@ |
|||
#include "../msp/msp_adc.h" |
|||
#include "../msp/uart0.h" |
|||
#include <stdio.h> |
|||
|
|||
void L0_ADC_init(void) |
|||
{ |
|||
P0M0 = 0x00; |
|||
P0M1 = 0x10; //设置P0.4为ADC口
|
|||
|
|||
ADC_CONTR = 0; |
|||
D_ADC_POWER_ON(); //打开ADC电源
|
|||
// D_ADC_average();
|
|||
// D_EN_EREG();
|
|||
|
|||
///CSSETUP:ADC 通道选择时间控制 CSHOLD[1:0]:ADC 通道选择保持时间控制//22M
|
|||
///SMPDUTY[4:0]:ADC 模拟信号采样时间控制 Tduty(注意:SMPDUTY 一定不能设置小于 01010B)
|
|||
ADCTIM = B1010_0000|B0000_1111; |
|||
|
|||
ADCCFG = B0010_0000|4; //SPEED[3:0]:设置 ADC 工作时钟频率{FADC=SYSclk/2/(SPEED+1)}
|
|||
|
|||
Lc_delay_ms(1); //给MCU的内部ADC模块电源打开后,需等待约1ms,等MCU内部的ADC电源稳定后再让ADC工作
|
|||
D_ADC_CH(D_ADC_CH_12); //选择ADC12(P04)
|
|||
D_ADC_START(); |
|||
|
|||
L0_uart0_sendstr("\r\n L0_ADC_init on"); |
|||
} |
|||
|
|||
|
|||
U16 L1_ADC_Read(u8 CHA) |
|||
{ |
|||
vU16 adc_data; |
|||
vU32 overtimes; |
|||
int *BGV; //内部1.19V参考信号源值存放在idata中
|
|||
//idata的EFH地址存放高字节
|
|||
//idata的F0H地址存放低字节
|
|||
BGV = (int idata *)0xef; |
|||
//vcc = (int)(4096L * *BGV / res); //(12位ADC算法)计算VREF管脚电压,即电池电压
|
|||
//注意,此电压的单位为毫伏(mV)
|
|||
D_ADC_CH(CHA); |
|||
D_ADC_START(); |
|||
// NOP2();
|
|||
NOP(); |
|||
NOP(); |
|||
// BITN_S(ADCEXCFG,)
|
|||
// while(1 == D_ADC_OVER())
|
|||
// {
|
|||
// if(overtimes++ > 600000)////
|
|||
// {
|
|||
// // printf2("\r\n !3A%x W%x\t",(int)ADC_CONTR,(int)CHA);
|
|||
// L0_uart0_sendstr("ADC_CONTR = ");
|
|||
// L0_uart0_ushex(ADC_CONTR);
|
|||
// L0_uart0_0d0a();
|
|||
// L0_uart0_sendstr("CHA = ");
|
|||
// L0_uart0_ushex(CHA);
|
|||
// return 0;/// !3Ac7 W7 291
|
|||
// }
|
|||
// }
|
|||
D_ADC_CLEARFLAG(); |
|||
|
|||
adc_data = ADC_RES; |
|||
adc_data <<= 8; |
|||
adc_data |= ADC_RESL; |
|||
///adc_data >>= 3;
|
|||
///r = adc_data;
|
|||
return adc_data; |
|||
} |
|||
|
|||
//平均值滤波
|
|||
U16 ADC_Average_Filter(U8 N) |
|||
{ |
|||
U16 sum = 0; |
|||
U16 Aver = 0; |
|||
U8 i; |
|||
U16 arr[10] = 0; |
|||
FP32 Variance = 0; |
|||
// 平均值
|
|||
for(i = 0; i < N; i++) |
|||
{ |
|||
arr[i] = L1_ADC_Read(12); |
|||
sum += L1_ADC_Read(12); |
|||
} |
|||
Aver = sum/N; |
|||
|
|||
for (i = 0; i < N; i++) |
|||
{ |
|||
L0_uart0_ushex(arr[i]); |
|||
L0_uart0_0d0a(); |
|||
} |
|||
|
|||
// 方差
|
|||
for(i = 0; i < N; i++) |
|||
{ |
|||
Variance += (arr[i] - Aver) * (arr[i] - Aver); |
|||
} |
|||
Variance /= N; |
|||
// printf("%.7f", Variance);
|
|||
return Aver; |
|||
} |
|||
|
|||
#if 0 |
|||
|
|||
U16 L1_ADC_Read(u8 CHA) |
|||
{ |
|||
vU16 adc_data; |
|||
ADC_CONTR &=0xF8; |
|||
ADC_CONTR |=0x40;//启动AD转换
|
|||
//ADC_CONTR |= CHA;
|
|||
CHA &= 0x07; //选择ADC的8个接口中的一个(0000 0111 清0高5位)
|
|||
ADC_CONTR = (ADC_CONTR & 0xF0) | CHA; |
|||
NOP(); |
|||
NOP(); |
|||
while (!(ADC_CONTR & 0x20)); //查询ADC完成标志
|
|||
ADC_CONTR &= ~0x20; //清标志
|
|||
adc_data = ADC_RES; |
|||
adc_data <<= 8; |
|||
adc_data |= ADC_RESL; |
|||
//adc_data = adc_data<<2;
|
|||
//adc_data = ADC_RESL & 0X03;
|
|||
//adc_data = adc_data | adc_data;
|
|||
///L0_uart1_sendstr("ADC:");
|
|||
///L0_uart1_ushex(adc_data);
|
|||
///L0_uart1_0d0a();
|
|||
return (adc_data); //返回A/D转换结果(8位)
|
|||
|
|||
} |
|||
|
|||
///D_cmd_filter_adc L3_ADC_debug(D_cmd_filter_adc)
|
|||
|
|||
|
|||
void L3_ADC_debug(u8 filter) |
|||
{ |
|||
u8 i; |
|||
if(filter == Ts_debug.td->filter) |
|||
{///filter num d1 d2 d3 ....dn
|
|||
//// FD 08 11 22 33 44 55 66 77 88
|
|||
L1_uartD_uchexArray(Ts_debug.td,Ts_debug.td->R1); |
|||
if(0x10 == Ts_debug.td->ocr)///read 读,判断哪个adc读取
|
|||
{//fa 05 f1 33 10
|
|||
//NUM: 0 1 2 3 4
|
|||
// Fx R1 R2 R3 ocr
|
|||
// sla reg1 num
|
|||
/// f1 32 15 06 10
|
|||
//printf("\r\n ch(%d)=",(int)Ts_debug.td->R2);
|
|||
for(i = 0xf1;i <= 0xf8;i++) |
|||
{ |
|||
Ts_debug.au16 = L1_ADC_Read_PT(i); |
|||
printf(" %XH %d ",(int)Ts_debug.au16,(int)Ts_debug.au16); //adc1
|
|||
} |
|||
/*
|
|||
Ts_debug.au16 = L1_ADC_Read_PT(Ts_debug.td->R2 = 0xf2); |
|||
printf(" %XH %d ",(int)Ts_debug.au16,(int)Ts_debug.au16); //adc2
|
|||
|
|||
Ts_debug.au16 = L1_ADC_Read_PT(Ts_debug.td->R2 = 0xf3); |
|||
printf(" %XH %d ",(int)Ts_debug.au16,(int)Ts_debug.au16); //adc3
|
|||
|
|||
Ts_debug.au16 = L1_ADC_Read_PT(Ts_debug.td->R2 = 0xf4); |
|||
printf(" %XH %d ",(int)Ts_debug.au16,(int)Ts_debug.au16); //adc4
|
|||
|
|||
Ts_debug.au16 = L1_ADC_Read_PT(Ts_debug.td->R2 = 0xf5 ); |
|||
printf(" %XH %d ",(int)Ts_debug.au16,(int)Ts_debug.au16); //adc5
|
|||
Ts_debug.au16 = L1_ADC_Read_PT(Ts_debug.td->R2 = 0xf6); |
|||
printf(" %XH %d ",(int)Ts_debug.au16,(int)Ts_debug.au16); //adc6
|
|||
Ts_debug.au16 = L1_ADC_Read_PT(Ts_debug.td->R2 = 0xf7); |
|||
printf(" %XH %d ",(int)Ts_debug.au16,(int)Ts_debug.au16); //adc7
|
|||
Ts_debug.au16 = L1_ADC_Read_PT(Ts_debug.td->R2 = 0xf8); |
|||
printf(" %XH %d ",(int)Ts_debug.au16,(int)Ts_debug.au16); //adc8
|
|||
*/ |
|||
} |
|||
else if(0x11 == Ts_debug.td->ocr) |
|||
{ |
|||
//printf("\r\n ch(%d)=",(int)Ts_debug.td->R1);
|
|||
//Ts_debug.au16 = L1_ADC_Read_PT(Ts_debug.td->R1);
|
|||
} |
|||
else if(0x12 == Ts_debug.td->ocr) |
|||
{ |
|||
} |
|||
else |
|||
{ |
|||
//printf"(\r\n ch(%d)=",(int)Ts_debug.td->R1);
|
|||
//Ts_debug.au16 = L1_ADC_Read_PT(Ts_debug.td->R1);
|
|||
} |
|||
} |
|||
} |
|||
|
|||
U16 L1_ADC_Read_VBAT (unsigned char CHA)//CHA通道号
|
|||
{ |
|||
U16 adc_data; |
|||
#if 0 |
|||
U8 AD_FIN=0; //存储A/D转换标志
|
|||
//CHA &= 0x07; //选择ADC的8个接口中的一个(0000 0111 清0高5位)
|
|||
ADC_CONTR = 0x40; //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置
|
|||
Lc_delay_nop(1); |
|||
//ADC_CONTR |= CHA; //选择A/D当前通道
|
|||
//Lc_delay_nop(1);
|
|||
ADC_CONTR |= 0x80; //启动A/D电源
|
|||
Lc_delay_ms(1); //使输入电压达到稳定(1ms即可)
|
|||
ADC_CFG = 0x20; |
|||
Lc_delay_nop(1); |
|||
CHA &= 0x07; //选择ADC的8个接口中的一个(0000 0111 清0高5位)
|
|||
//ADC_CONTR |= CHA; //选择A/D当前通道
|
|||
ADC_CONTR = (ADC_CONTR & 0xF0) | CHA; |
|||
Lc_delay_nop(1); |
|||
ADC_CONTR |= 0x40; //启动AD转换
|
|||
NOP(); |
|||
NOP(); |
|||
while (!(ADC_CONTR & 0x20)); //查询ADC完成标志
|
|||
ADC_CONTR &= ~0x20; //清完成标志
|
|||
//P2 = ADC_RES; //读取ADC结果
|
|||
#endif |
|||
ADC_CONTR &=0xF8; |
|||
ADC_CONTR |=0x40;//启动AD转换
|
|||
//ADC_CONTR |= CHA;
|
|||
ADC_CONTR = (ADC_CONTR & 0xF0) | CHA; |
|||
NOP(); |
|||
NOP(); |
|||
while (!(ADC_CONTR & 0x20)); //查询ADC完成标志
|
|||
ADC_CONTR &= ~0x20; //清标志
|
|||
adc_data = ADC_RES; |
|||
adc_data <<= 8; |
|||
adc_data |= ADC_RESL; |
|||
//adc_data = adc_data<<2;
|
|||
//adc_data = ADC_RESL & 0X03;
|
|||
//adc_data = adc_data | adc_data;
|
|||
//L0_uart0_ushex(adc_data);
|
|||
//L0_uart0_0d0a();
|
|||
return (adc_data); //返回A/D转换结果(8位)
|
|||
} |
|||
#endif |
@ -0,0 +1,63 @@ |
|||
#ifndef _msp_adc_H_ |
|||
#define _msp_adc_H_ |
|||
|
|||
#include "../bsp/bsp_config.h" |
|||
#include "../msp/UART0.h" |
|||
#include "../cpu/STC_stc8h3k.H" |
|||
#include "../clib/bit.h" |
|||
|
|||
|
|||
|
|||
#define ADC_POWER BITN7 |
|||
#define ADC_START BITN6 |
|||
#define ADC_FLAG BITN5 |
|||
#define ADC_EPWMT BITN4 |
|||
|
|||
#define D_ADC_CHS_mask 0xF0 |
|||
|
|||
#define ADC_CHS3 BITN3 |
|||
#define ADC_CHS2 BITN2 |
|||
#define ADC_CHS1 BITN1 |
|||
#define ADC_CHS0 BITN0 |
|||
|
|||
#define ADC_RESFMT BITN5 |
|||
|
|||
#define ADC_SPEED3 BITN3 |
|||
#define ADC_SPEED2 BITN2 |
|||
#define ADC_SPEED1 BITN1 |
|||
#define ADC_SPEED0 BITN0 |
|||
|
|||
#define D_CVTIMESEL_mask 0xF8 |
|||
|
|||
#define D_CVTIMESEL_1 0 |
|||
#define D_CVTIMESEL_2 4 |
|||
#define D_CVTIMESEL_4 5 |
|||
#define D_CVTIMESEL_8 6 |
|||
#define D_CVTIMESEL_16 7 |
|||
|
|||
|
|||
#define D_ADC_average() D_EN_EREG(); BITN_S(ADCEXCFG,D_CVTIMESEL_16,D_CVTIMESEL_mask)////4 22M 1ms---
|
|||
|
|||
|
|||
#define D_ADC_POWER_ON() BITN_1(ADC_CONTR, ADC_POWER) |
|||
#define D_ADC_POWER_OFF() BITN_0(ADC_CONTR, ADC_POWER) |
|||
|
|||
#define D_ADC_START() BITN_1(ADC_CONTR, ADC_START) |
|||
#define D_ADC_STOP() BITN_0(ADC_CONTR, ADC_START) |
|||
|
|||
#define D_ADC_OVER() BITN_G(ADC_CONTR, ADC_FLAG) |
|||
#define D_ADC_CLEARFLAG() BITN_0(ADC_CONTR, ADC_FLAG) |
|||
|
|||
#define D_ADC_CH(X) BITN_S(ADC_CONTR,X,D_ADC_CHS_mask) |
|||
|
|||
#define D_ADC_CH_12 12 |
|||
|
|||
#define D_cmd_filter_adc 0xfa |
|||
|
|||
extern void L0_ADC_init (void); |
|||
extern U16 L1_ADC_Read(u8 CHA); |
|||
|
|||
#endif //#ifndef _msp_adc_H_
|
|||
|
|||
|
|||
|
Loading…
Reference in new issue