📄 app_test.c
字号:
#include <ucos_ii.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "uart_std.h"
#include "keys.h"
#include "ppp.h"
#include "cdrs_op.h"
OS_STK App_TaskTestStk[APP_TASK_TEST_STK_SIZE];
char MenuStart(void);
void App_test(void *parg)
{
// CDRS_SetPower(0);
// OSTimeDlyHMSM(0,0,1,0);
// CDRS_SetPower(1);
CDRS_Reset();
OSTimeDlyHMSM(0,0,1,0);
CDRS_Open();
MenuStart();
// while (1) {
// depo(&Depo, 1);
// OSTimeDlyHMSM(0, 0, 1, 0);
// }
}
#include "tasks.h"
#include "GUI.h"
#include "LCD_ConfDefaults.h" /* valid LCD configuration */
#include "stm32f10x_lib.h"
#define DEBUG_L 1
#if DEBUG_L
#define DEBUG_PRINTF(X...) printf(##X);
#else
#define DEBUG_PRINTF(X...)
#endif
/*
* 天漠服务器
* http://203.86.7.136/
*/
/* 服务器IP */
#define SIP1 203
#define SIP2 86
#define SIP3 7
#define SIP4 136
/* 服务器端口号 */
#define SPORT 80
#define CDMA_STATE 1
#define PRICE 2
#define CARD_INFO 3
#define LEFT_W 100
#define RIGHT_W 135
#define CENTER_W (LCD_XSIZE-LEFT_W-RIGHT_W)
union _depo_t{
struct {
unsigned int cno;
unsigned int bala;
unsigned int con;
unsigned int tim;
} _depo;
unsigned int tmp[4];
};
static int gCon = 100;
static unsigned short gStreamNo = 0;
static unsigned int gOfflamt = 0;
static union _depo_t Depo;
int GetLinkState(void);
static int proc_key(void);
static void _Draw_Back(void);
static void _Update_Show(int i);
static int depo(union _depo_t *pCard, int con);
static int SendDepo(void);
int Rfid_Demo(void)
{
_Draw_Back();
_Update_Show(PRICE);
PWR_BackupAccessCmd(ENABLE);
DEBUG_PRINTF("\r\nStarting Dail task...");
if (Run_Task(&user_tasks[2]) < 0) {
printf("\r\nErr : Create Task.");
return -1;
}
gStreamNo = BKP_ReadBackupRegister(BKP_DR2);
while (!proc_key()) {
_Update_Show(CDMA_STATE);
if (depo(&Depo, gCon) > 0) {
++gStreamNo;
BKP_WriteBackupRegister(BKP_DR2, gStreamNo);
_Update_Show(CARD_INFO);
if (GetLinkState() == 0 && SendDepo()>=0) { //发送数据到服务器
gOfflamt = 0;
} else
gOfflamt += gCon;
gCon++;
_Update_Show(PRICE);
}
OSTimeDlyHMSM(0, 0, 0, 10);
}
DEBUG_PRINTF("\r\nKill Dail process...");
OSTaskDelReq(user_tasks[2].prio);
return 0;
}
#define PHYID 1985
#define RATE 11
#define DBVER 19
#define ASPFILE "gdemo.asp"
#define ASPFMAT "?strmnr=%d&logicid=%d&carno=%d&amount=%d.%d&offlamt=%d.%d&rate=%d&dbver=%d"
#define ASPPARA gStreamNo,PHYID,Depo._depo.cno, (Depo._depo.con/100), (Depo._depo.con%100), gOfflamt/100, gOfflamt%100, RATE, DBVER
//static char * pSformat = "GET /"ASPFILE"?strmnr=%d&amount=%d&money=%d HTTP/1.1\r\n"
// "Host: www.timll.com\r\n\r\n";
static char *pSformat = "GET /"ASPFILE ASPFMAT" HTTP/1.1\r\nHost: www.timll.com\r\n\r\n";
char prBuf[512];
char * mystrstr(const char *str1, const char *str2);
static int SendDepo(void)
{
int sock;
struct sockaddr_in saddr, oaddr;
struct ip_addr sip;
unsigned int timo = 3000;
int len, ret = 0;
sock = socket(AF_INET, SOCK_STREAM, 0);
DEBUG_PRINTF("\r\nSock : %d", sock);
if (sock < 0) {
ret = -1;
return ret;
}
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &timo, 4);
oaddr.sin_family = AF_INET;
oaddr.sin_addr.s_addr = INADDR_ANY;
oaddr.sin_port = 0;
if (0 != bind(sock, (struct sockaddr *)&oaddr, sizeof (struct sockaddr_in))) {
DEBUG_PRINTF("\r\n Err : bind");
ret = -2;
goto out;
}
saddr.sin_family = AF_INET;
/* 服务器IP地址 */
IP4_ADDR(&sip, SIP1, SIP2, SIP3, SIP4);
saddr.sin_addr.s_addr = sip.addr;
saddr.sin_port = htons(SPORT);
if (0 != connect(sock, (struct sockaddr *)&saddr, sizeof (struct sockaddr_in))) {
DEBUG_PRINTF("\r\n Err : connect.");
ret = -3;
goto out;
}
sprintf(prBuf, pSformat, ASPPARA);
printf("\r\nSEnd : %s", prBuf);
len = send(sock, prBuf, strlen(prBuf), 0);
if (len < 0) {
DEBUG_PRINTF("\r\n Err : Send ");
ret = -4;
goto out;
}
len = recv(sock, prBuf, 512, 0);
if (len < 0) {
DEBUG_PRINTF("\r\n Err : Recv ");
ret = -5;
goto out;
}
prBuf[len] = 0;
if (!mystrstr(prBuf, "OK")) {
ret = -6;
goto out;
}
#if DEBUG_L
{
int i;
printf("\r\nRecv : %d\r\n", len);
for (i=0; i<len; i++)
printf("%c", prBuf[i]);
}
#endif
out:
close(sock);
return ret;
}
static GUI_RECT SRects[] = {
{ 0, 0, LCD_XSIZE-1, 60-1}, //标题
{ 0, 60, LCD_XSIZE-1, 100-1},
{ 0, 100, LCD_XSIZE-1, 140-1},
{ 0, 140, LCD_XSIZE-1, 180-1},
{ 0, 180, LCD_XSIZE-1, 220-1},
{ 0, 220, LCD_XSIZE-1, 260-1},
{ 0, 260, LCD_XSIZE-1, 300-1},
};
static void _Update_Show(int i)
{
char buf[16];
switch(i) {
case CDMA_STATE:
{
static char *linkinfo[] = {
"Link On ",
"Dialing...",
"Task Exit ",
"Link Off ",
};
int link = -GetLinkState();
if (link>2)
return;
if (link < 0)
link = 3;
SRects[CDMA_STATE].x0 += LEFT_W + CENTER_W;
GUI_DispStringInRect(linkinfo[link], &SRects[CDMA_STATE], GUI_TA_LEFT|GUI_TA_BOTTOM);
SRects[CDMA_STATE].x0 -= LEFT_W + CENTER_W;
}
break;
case PRICE:
{
sprintf(buf, "%-15d", gCon);
SRects[PRICE].x0 += LEFT_W + CENTER_W;
GUI_DispStringInRect(buf, &SRects[PRICE], GUI_TA_LEFT|GUI_TA_BOTTOM);
SRects[PRICE].x0 -= LEFT_W + CENTER_W;
}
break;
case CARD_INFO:
{
int i;
for (i=0; i<4; i++) {
if (i != 3)
sprintf(buf, "%-15d", Depo.tmp[i]);
else {
struct tm *t = localtime((time_t *)&Depo.tmp[i]);
if (t == NULL)
break;
sprintf(buf, "%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec);
}
SRects[CARD_INFO+i].x0 += LEFT_W + CENTER_W;
GUI_DispStringInRect(buf, &SRects[CARD_INFO+i], GUI_TA_LEFT|GUI_TA_BOTTOM);
SRects[CARD_INFO+i].x0 -= LEFT_W + CENTER_W;
}
}
break;
}
}
static void _Draw_Back(void)
{
int i, cnt;
static char *info[] = {
"CDMA:",
"Price:",
"Card Id:",
"Balance:",
"Consume:",
"Time:"
};
GUI_SetBkColor(GUI_WHITE);
GUI_SetColor(GUI_BLACK);
GUI_Clear();
GUI_SetFont(&GUI_FontComic24B_ASCII);
cnt = sizeof SRects / sizeof SRects[0];
for (i=0; i<cnt; i++) {
GUI_DrawHLine(SRects[i].y1+1, 0, LCD_YSIZE-1);
}
GUI_DispStringInRect("Wireless Pos", &SRects[0], GUI_TA_HCENTER|GUI_TA_BOTTOM);
for (i=1; i<cnt; i++) {
SRects[i].x1 -= CENTER_W+RIGHT_W;
GUI_DispStringInRect(info[i-1], &SRects[i], GUI_TA_RIGHT|GUI_TA_BOTTOM);
SRects[i].x1 += CENTER_W+RIGHT_W;
}
}
static int proc_key(void)
{
int key;
key = key_accept();
switch (key) {
case KEY_USER:
return 1; //退出
case KEY_DOWN:
gCon > 1 ? gCon-- : 0;
_Update_Show(PRICE);
break;
case KEY_UP:
++gCon;
_Update_Show(PRICE);
default:
break;
}
return 0;
}
char key[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
char _buf[16];
#include "mifare.h"
static int depo(union _depo_t *pCard, int con)
{
static char cid[5], lid[5];
unsigned short sum;
// printf("\r\n depo...");
if (mifare_id(NULL) != FM1702_OK){
memset(lid, 0, 5);
memset(cid, 0, 5);
return 0;
}
mifare_id(cid);
if (!memcmp(cid, lid, 5))
return 0;
memcpy(lid, cid, 5);
printf("\r\nCheck card !\r\n");
printf("\r\n Read blk [%d]...", 40);
if (16 != mifare_read(40, _buf, key)) {
printf("\r\nRead card err blk [%d] !", 40);
return -1; // 读卡错
} else
printf("Ok");
pCard->_depo.cno = _buf[2]<<16 | _buf[9]<<8 | _buf[0];
printf("\r\ncno = [%d]", pCard->_depo.cno);
printf("\r\n Read blk [%d]...", 44);
if (16 != mifare_read(44, _buf, key)) {
printf("\r\nRead card err blk %d[] !", 44);
return -1; //读卡错
} else
printf("Ok");
pCard->_depo.bala = _buf[0]<<16 | _buf[1]<<8 | _buf[2];
printf("\r\n余额:[%d]", pCard->_depo.bala);
printf("\r\n消费:[%d]", con);
if (pCard->_depo.bala < con)
return 1; //余额不足
pCard->_depo.bala -= con;
_buf[2] = pCard->_depo.bala &0xff;
_buf[1] = (pCard->_depo.bala>>8) &0xff;
_buf[0] = (pCard->_depo.bala>>16) &0xff;
sum = checksum_8bit((unsigned char *)_buf, 14);
_buf[14] = sum>>8 & 0xff;
_buf[15] = sum & 0xff;
if (FM1702_OK != mifare_write(44, _buf, key)) {
printf("\r\n Write card Err [44]");
return -2;
}
pCard->_depo.con = gCon;
pCard->_depo.tim = time(NULL);
printf("\r\nExit");
return 2;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -