400 lines
6.5 KiB
C
400 lines
6.5 KiB
C
#include "mywin_inc.h"
|
|
#include "lcd_pwm.h"
|
|
#include "dac.h"
|
|
#include "mywin_demo.h"
|
|
#include "ff.h"
|
|
#include "flash_manager.h"
|
|
#include "system_file.h"
|
|
#include "system_updata.h"
|
|
#include "avi.h"
|
|
#include "mp3play.h"
|
|
#include "mylua.h"
|
|
|
|
|
|
#include "mywin_user_stat.h"
|
|
#include "mywin_user_home.h"
|
|
#include "mywin_user_status_bar.h"
|
|
|
|
#include "date.h"
|
|
|
|
#include "arm_math.h"
|
|
|
|
#include "fft2d.h"
|
|
|
|
#include "mywin_user_lock.h"
|
|
|
|
#include "mywin_user_animation.h"
|
|
|
|
|
|
|
|
|
|
/*
|
|
*
|
|
* 自定义窗口示例文件
|
|
*
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void baseWin_callback (WIN_WindowStruct *win,WIN_MsgStruct *msg);
|
|
|
|
|
|
//状态显示的回调函数
|
|
void stat_callback (void *t);
|
|
|
|
|
|
|
|
|
|
void mywin_demo_test (void *t)
|
|
{
|
|
WIN_Init();
|
|
int lcd_xsize=WIN_GetWinStruct()->lcd->getLcdSizeX();
|
|
int lcd_ysize=WIN_GetWinStruct()->lcd->getLcdSizeY();
|
|
ui_setScreenBackLightPower(1);
|
|
|
|
// mylua_test();
|
|
|
|
//状态显示
|
|
WIN_StatusBarStruct *statubar=0;
|
|
statubar=WIN_CreatStatusBar (0,0,0,0,lcd_xsize,20);
|
|
WIN_ShowWindow((WIN_WindowStruct*)statubar);
|
|
|
|
//主页
|
|
WIN_HomeStruct *home=0;
|
|
home=WIN_CreatHome (0,0,0,20,lcd_xsize,lcd_ysize-20);
|
|
WIN_SetBackPicPath ((WIN_WindowStruct*)home,"0:/JPG/妹子1.jpg");
|
|
WIN_SetWinTitle((WIN_WindowStruct*)home,"home");
|
|
WIN_ShowWindow((WIN_WindowStruct*)home);
|
|
|
|
|
|
//设置回调函数
|
|
WIN_SetMsgLoopCallBack (0,baseWin_callback);
|
|
|
|
while (1)
|
|
{
|
|
WIN_Delay(20);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//截图函数
|
|
void prtSc (void)
|
|
{
|
|
int lcd_xsize=WIN_GetWinStruct()->lcd->getLcdSizeX();
|
|
int lcd_ysize=WIN_GetWinStruct()->lcd->getLcdSizeY();
|
|
int buff_size=lcd_xsize*lcd_ysize*2+8;
|
|
u8 *buff=mymalloc (buff_size);
|
|
u8 scan=0x00;
|
|
u8 gray=0x10;
|
|
u16 w=lcd_xsize;
|
|
u16 h=lcd_ysize;
|
|
u8 is565=0x01;
|
|
u8 rgb=0x1b;
|
|
|
|
buff[0]=scan;
|
|
buff[1]=gray;
|
|
buff[2]=w;
|
|
buff[3]=w>>8;
|
|
buff[4]=h;
|
|
buff[5]=h>>8;
|
|
buff[6]=is565;
|
|
buff[7]=rgb;
|
|
|
|
static int num=1;
|
|
FIL *file=mymalloc (sizeof (FIL));
|
|
char *file_name=mymalloc (256);
|
|
FRESULT ret=FR_OK;
|
|
sprintf (file_name,"0:/PIC/%d.pic",num);
|
|
num++;
|
|
ret=f_open (file,file_name,FA_CREATE_NEW|FA_WRITE);
|
|
if (ret==FR_OK)
|
|
{
|
|
u16 *imag=(u16 *)(buff+8);
|
|
UINT real=0;
|
|
WIN_GetWinStruct()->lcd->getColors (imag,0,0,w,h);
|
|
ret=f_write (file,buff,buff_size,&real);
|
|
if (ret!=FR_OK)
|
|
while (1);
|
|
else MSGBOX_TipsTime (0,"截图已保存",file_name ,"确定",5000);
|
|
}
|
|
else MSGBOX_TipsTime (0,"文件已存在",file_name ,"确定",5000);
|
|
f_close (file);
|
|
myfree(file);
|
|
myfree(file_name);
|
|
myfree(buff);
|
|
}
|
|
|
|
|
|
|
|
|
|
static const char *g_powerOffItem[]={
|
|
"重启",
|
|
"重启到BootLoader"
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
static void creat_lock(void *ptr)
|
|
{
|
|
WIN_WindowStruct *win=WIN_GetCurrentWindow();
|
|
LOCK_EnterLock("0:/PIC/3.pic");
|
|
}
|
|
|
|
|
|
|
|
//基本窗口的消息处理回调,用于处理一些全局消息
|
|
/*
|
|
全局响应的按键:
|
|
短按背光键:
|
|
长按开关机键:
|
|
长按销毁键:
|
|
*/
|
|
void baseWin_callback (WIN_WindowStruct *win,WIN_MsgStruct *msg)
|
|
{
|
|
WIN_KeyStruct *k=0;
|
|
static int light=1;
|
|
switch (msg->msg)
|
|
{
|
|
case WIN_MSG_INIT:
|
|
break;
|
|
case WIN_MSG_KEY:
|
|
k=msg->data.p;
|
|
if (k->shortPress&KEY_VALUE_LIGHT)
|
|
{
|
|
//短按背光键
|
|
light=!light;
|
|
ui_setScreenBackLightPower (light);
|
|
}
|
|
else if(k->shortPress&KEY_VALUE_DES)
|
|
{
|
|
// 通知窗口线程调用函数
|
|
WIN_RunInWindow("home",creat_lock,0);
|
|
}
|
|
if (k->longPress&KEY_VALUE_HOME)
|
|
{
|
|
//长按关机键
|
|
int index=MSGBOX_Select ((WIN_WindowStruct *)0,"选择关机选项",(char **)g_powerOffItem,
|
|
2,"确定","取消");
|
|
if (index==0)
|
|
{
|
|
SysFile_SaveSetFile();
|
|
NVIC_SystemReset ();
|
|
}
|
|
else if (index==1)
|
|
{
|
|
SysFile_SaveSetFile();
|
|
//重启到iap并且升级 user.app 文件
|
|
(*(u32 *)0x20000000)=0xff000003;
|
|
NVIC_SystemReset ();
|
|
}
|
|
}//if (k->longPress&KEY_VALUE_HOME)
|
|
else if (k->longPress&KEY_VALUE_DES)
|
|
{
|
|
//长按销毁键
|
|
prtSc();
|
|
}
|
|
break;
|
|
case WIN_MSG_CHID:
|
|
break;
|
|
case WIN_MSG_EXTMSG:
|
|
break;
|
|
default:
|
|
WIN_DefaultMsgLoop (win,msg);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//状态显示的回调函数
|
|
void stat_callback (void *t)
|
|
{
|
|
WIN_StatStruct *stat=(WIN_StatStruct *)t;
|
|
sprintf (stat->txt,"%.1f,%.1f",mem_perused()/100.0,exmem_perused()/100.0);
|
|
WIN_SetInvalid ((WIN_WindowStruct *)stat);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//傅里叶变换测试
|
|
|
|
|
|
|
|
void FFT_Test (WIN_PicStruct *pic_,int t)
|
|
{
|
|
static float32_t *img=0;
|
|
static int xsize=0;
|
|
static int ysize=0;
|
|
static int ttt=0;
|
|
if (ttt<256) ttt++; else ttt=0;
|
|
//if (img) return;
|
|
if (img==0)
|
|
{
|
|
//复制一份图像
|
|
img=mymalloc(pic_->xsize*pic_->ysize*sizeof (float32_t));
|
|
xsize=pic_->xsize;
|
|
ysize=pic_->ysize;
|
|
for (int i=0;i<xsize*ysize;i++)
|
|
{
|
|
img[i]=RGB2GRAY (pic_->data[i]);
|
|
}
|
|
}
|
|
FFT2D_Struct fft2d={0};
|
|
if (FFT2D_Init(&fft2d,512)==0)
|
|
{
|
|
|
|
FFT2D_Rfft (&fft2d,img,xsize,ysize);
|
|
|
|
for (int i=0;i<512;i++)
|
|
{
|
|
for (int j=0;j<512;j++)
|
|
{
|
|
if (((i>ttt)&&(i<512-ttt))||((j>ttt)&&(j<512-ttt)))
|
|
{
|
|
if (!(((i>ttt)&&(i<512-ttt))&&((j>ttt)&&(j<512-ttt))))
|
|
fft2d.imgBuff[i*512+j]=0;
|
|
}
|
|
}
|
|
}
|
|
|
|
FFT2D_Rifft (&fft2d,0);
|
|
|
|
//复制到输出
|
|
for (int i=0;i<ysize;i++)
|
|
{
|
|
for (int j=0;j<xsize;j++)
|
|
{
|
|
pic_->data[i*xsize+j]=fft2d.imgBuff[i*512+j];
|
|
pic_->data[i*xsize+j]=GRAY2RGB (pic_->data[i*xsize+j]);
|
|
}
|
|
}
|
|
}
|
|
FFT2D_Delete (&fft2d);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//测试用代码
|
|
static void Delete_code (void )
|
|
{
|
|
//LCD_PWMinit(100);
|
|
|
|
|
|
|
|
|
|
// DAC_UserStruct dac={0};
|
|
//
|
|
// dac.buff1=mymalloc (256*4);
|
|
// dac.buff2=mymalloc (256*4);
|
|
// for (int i=0;i<64;i++) dac.buff1[i]=i*4*4;
|
|
// for (int i=0;i<64;i++) dac.buff2[i]=1024-i*4*4;
|
|
// dac.buff_size=64*4;
|
|
// dac.rate=RATE48000;
|
|
//
|
|
// DAC_NormalInit (&dac);
|
|
|
|
|
|
|
|
// FIL *mp3f=mymalloc (sizeof (FIL));
|
|
// FILINFO *mp3f_info=malloc (sizeof (FILINFO));
|
|
// f_stat ("0:/这条街.mp3",mp3f_info);
|
|
// u8 *mp3_data=mymalloc (mp3f_info->fsize);
|
|
// UINT datasize=0;
|
|
// f_open (mp3f,"0:/这条街.mp3",FA_READ);
|
|
// f_read (mp3f,mp3_data,mp3f_info->fsize,&datasize);
|
|
|
|
// mp3_play_song (mp3_data,datasize);
|
|
|
|
|
|
//char txt[50]={0};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//显示开机动画
|
|
//ANIMATION_ShowGifTime (0,"0:/GIF/12.gif",10000);
|
|
//显示开机图片
|
|
//loading ();
|
|
|
|
|
|
//状态栏
|
|
// WIN_StatusBarStruct *statubar=0;
|
|
// statubar=WIN_CreatStatusBar (0,0,0,0,LCD_GetLcdSizeX(),20);
|
|
// STATUSBAR_SetRes (statubar,&res);
|
|
// if (ret==0)
|
|
// { STATUSBAR_SetBackPic(statubar,&pic);
|
|
// pic.data+=pic.xsize*20;//重设图片位置
|
|
// }
|
|
// WIN_ShowWindow((WIN_WindowStruct*)statubar);
|
|
|
|
|
|
|
|
// stat=WIN_CreatStat (0,0,0,LCD_GetLcdSizeY()/2-30,20,60);//左边
|
|
// STAT_SetImg (stat,(u8*)gImage_stat_nfc);
|
|
// stat=WIN_CreatStat (0,0,LCD_GetLcdSizeX()-20,LCD_GetLcdSizeY()/2-30,20,60);//右边
|
|
// STAT_SetImg (stat,(u8*)gImage_stat_bluetooth);
|
|
// stat=WIN_CreatStat (0,0,LCD_GetLcdSizeX()/2-30,0,60,20);//上边
|
|
// stat->TimerCallBack=stat_bet_callback;
|
|
// stat->timerId=WIN_CreatTimer ((WIN_WindowStruct *)stat,1000);
|
|
// STAT_SetTxt (stat,"示例文字");
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|