void blinking_digits(char *tstr, unsigned char *oh, unsigned char *om, unsigned char *os, unsigned char *ot) { drawdigits(tstr,&MyWatchScr[HRSSTR],(int)hours, 10, 80); *oh=hours; WPrint(&MyWatchScr[SEP1STR], ":"); drawdigits(tstr,&MyWatchScr[MINSTR],(int)minutes, 80, 80); *om=minutes; if(mode!=1 && mode != 2) WPrint(&MyWatchScr[SEP2STR], ":"); if (mode!=2) { drawdigits(tstr,&MyWatchScr[SECSTR],(int)seconds, 150, 80); *os=seconds; } if (mode == 3) { tenths2digit(tstr, (int)tenths); LCD_SetTextColor(Black); LCD_SetBackColor(Black); LCD_DrawFullRect(208, 80, 35, 48); WPrint(&MyWatchScr[DOT], "."); WPrint(&MyWatchScr[TTSSTR], tstr); *ot=tenths; } }
void handling_digits(char *tstr) { if (mode == 2) { LCD_SetTextColor(Black); LCD_SetBackColor(Black); LCD_DrawFullRect(140, 80, 110, 56); } else { WPrint(&MyWatchScr[SEP1STR], ":"); WPrint(&MyWatchScr[SEP2STR], ":"); if (mode == 1 ) { LCD_SetTextColor(Black); LCD_SetBackColor(Black); LCD_DrawFullRect(210, 80, 40, 56); drawdigits(tstr,&MyWatchScr[SECSTR], 0, 150, 80); } if (mode == 3) { drawdigits(tstr,&MyWatchScr[SECSTR], 0, 150, 80); tenths2digit(tstr, 0); LCD_SetTextColor(Black); LCD_SetBackColor(Black); LCD_DrawFullRect(208, 80, 35, 48); WPrint(&MyWatchScr[DOT], "."); WPrint(&MyWatchScr[TTSSTR], tstr); } if (mode == 0) { LCD_SetTextColor(Black); LCD_SetBackColor(Black); LCD_DrawFullRect(210, 80, 40, 56); } } }
/* * MAIN TASK */ int main(void) { //GPIO_InitTypeDef GPIO_InitStructure; SystemInit(); /*Initializes Erika related stuffs*/ EE_system_init(); SWatch_state.errorStatus = errorSig; SWatch_state.ModelData.prevZCSigState = &ZCSig; SWatch_state.ModelData.dwork = &DWork; /* init state machine */ SWatch_initialize(&SWatch_state, &Bplus, &Bminus, &Btime, &Btimer, &Balarm, &Bswatch, &Bstart, &Bstop, &hours, &minutes, &seconds, &tenths, &mode, &alarm_signal, &timer_exp); /*Initialize systick */ EE_systick_set_period(MILLISECONDS_TO_TICKS(1, SystemCoreClock)); EE_systick_enable_int(); EE_systick_start(); /* Initializes LCD and touchscreen */ IOE_Config(); /* Initialize the LCD */ STM32f4_Discovery_LCD_Init(); // LCD_Clear(White); /* Set the LCD Text size */ // LCD_SetFont(&Font8x12); // Lcd_Touch_Calibration(); InitTouch(-0.102, 0.0656, -335, 10); /* Draw the background */ DrawInit(MyWatchScr); LCD_SetTextColor(Black); LCD_SetBackColor(Black); LCD_DrawFullRect(10, 80, 240, 56); WPrint(&MyWatchScr[SEP1STR], ":"); WPrint(&MyWatchScr[SEP2STR], ":"); /* Program cyclic alarms which will fire after an initial offset, * and after that periodically * */ SetRelAlarm(AlarmTaskLCD, 10, 50); SetRelAlarm(AlarmTaskClock, 10, 100); /* Forever loop: background activities (if any) should go here */ for (;;) { } }
void drawdigits(char *tstr,const Widget *ws, int digits, int x, int y) { strencode2digit(tstr, digits); LCD_SetTextColor(Black); LCD_SetBackColor(Black); LCD_DrawFullRect(x, y, 62, 48); WPrint(ws, tstr); }
/*Start main function */ int main(void) { /* Variables */ int error; /* Error check value for user name */ char one; /* First char of user name */ char two; /* Second char of user name */ char three; /* Third char of user name */ char four; /* Fourth char of user name */ char action; /* Stores withdraw/deposit action */ int amount; /* Amount for withdraw/deposit */ int mult; /* Checks that input is a multiple of 10 */ amount = 0; /* Initialize amount */ /* Prompt user */ printf("Enter the user name (4 characters): "); error = scanf("%c%c%c%c", &one, &two, &three, &four); if (isalpha(one) && isalpha(two) && isalpha(three) && isalpha(four)) { printf("Would you like to make a withdraw or deposit: "); scanf(" %c", &action); switch (action) { /* Start Switch */ /* Withdraw */ case 'w': case 'W': printf("Enter the amount you would like: "); scanf("%d", &amount); if (isalnum(amount)) { mult = amount % 10; if (amount == 0) { printf("You chose not to withdraw anything today\n"); } if (mult != 0) { printf("Invalid entry: needs to be a multiple of 10\n"); } else { WPrint(amount); } } else { printf("Invalid entry: needs to be numeric\n"); } break; /* Deposit */ case 'd': case 'D': printf("Enter the amount you would like to deposit: "); scanf("%d", &amount); if (isalnum(amount)) { mult = amount % 10; if (amount == 0) { printf("You chose not to deposit anything today\n"); } if (mult!= 0) { printf("Invalid entry: needs to be a multiple of 10\n"); } else { DPrint(amount); } } else { printf("Invalid entry: needs to be numeric\n"); } break; /* Non W or D char */ default: printf("Invalid option\n"); } } else { printf("Invalid user name\n"); } return(0); }
int DSF3017(Jq_Info info,char *InStr,char *OutStr,_LSData *LiuS,char *monit) { int i = 0; int j = 0; int p = 0; int nMsgLen = 0; int nRetLen = 0; int HostPort; int nSockFd; char xym[10]; char zh1[35],zh2[35], jyje[22], devno[20], TRCD[10],tmpstr1[1024],tmpstr2[1024],tmpstr3[1024],tmpstr4[1024],passwd[16]; char instr[2048]; char outstr[10240]; char HostAddr[30]; char MacBlock[2048],MAC[9]; char tpstr[20]; char msg[200]; char filename[255]; char tmpstr[1024], tmp[500],tmps[500],tmp1[500],JF[10]; int headlen=0,findflag=0; char zdh[20]; char lsh[20]; char xmlbw[2048]; char *sendxmlhead; char *recvxmldata; BITSTR sbitstr; BITSTR rbitstr; BITSTR *sendinfo = NULL; BITSTR *recvinfo = NULL; FILE *fp; memset(filename,0x00,sizeof(filename)); memset(zh1, 0, sizeof(zh1)); strcpy(zh1, "0000000000000000"); memset(zh2, 0, sizeof(zh2)); memset(jyje, 0, sizeof(jyje)); memset(devno, 0, sizeof(devno)); memset(TRCD, 0, sizeof(TRCD)); memset(instr, 0x00, sizeof (instr)); memset(outstr, 0x00, sizeof (outstr)); memset(HostAddr, 0x00, sizeof (HostAddr)); memset(MacBlock, 0, sizeof(MacBlock)); memset(MAC, 0, sizeof(MAC)); memset(msg, 0, sizeof(msg)); memset(filename, 0, sizeof(filename)); memset(tmpstr, 0, sizeof(tmpstr)); memset(tmp, 0, sizeof(tmp)); memset(xym, 0, sizeof(xym)); memset(JF, 0, sizeof(JF)); memset(&sbitstr, 0, sizeof(sbitstr)); memset(&rbitstr, 0, sizeof(rbitstr)); sendinfo = &sbitstr; recvinfo = &rbitstr; sendxmlhead=NULL; recvxmldata=NULL; for(i=0;i<MAXBIT;i++){ sendinfo->len[i] = 0; } //WPrint(0, "InStr,ret=[%s]\n",InStr); //注意:这个地方一定根据交易码重新填写,下面的程序均使用此字符串 strcpy(TRCD, "3017"); TRCD[4]=0; //xml报文 memset( xmlbw, 0x00, sizeof(xmlbw)); memset( tmpstr, 0x00, sizeof(tmpstr)); strcpy(xmlbw, "0051<?xml version=\"1.0\" encoding=\"UTF-8\" ?><Service><Service_Header>"); //need_request //Xml_strmodify("need_request", " ", tmpstr, sizeof(tmpstr)); //版本号 version_id Xml_strmodify("version_id", "1.0", tmpstr, sizeof(tmpstr)); //请求方服务时间+14位 <service_time> memset(tmp,0x00,sizeof(tmp)); pub_GetDateTimeStr(tmp, sizeof(tmp), "%Y%m%d%H%M%S"); pub_RemoveBlank(tmp, strlen(tmp)); Xml_strmodify("service_time", tmp, tmpstr, sizeof(tmpstr)); //渠道代码 channel_id Xml_strmodify("channel_id", "16", tmpstr, sizeof(tmpstr)); //机构号 branch_id memset(tmp,0x00,sizeof(tmp)); memcpy(tmp,info.organno,9); Xml_strmodify("branch_id", tmp, tmpstr, sizeof(tmpstr)); //发起系统代码 requester_id Xml_strmodify("requester_id", "0012", tmpstr, sizeof(tmpstr)); //保留-ESB用 service_id Xml_strmodify("service_id", "0051000000000000", tmpstr, sizeof(tmpstr)); //渠道流水 service_sn 20 1(1位)+地区编号(2位)+系统编码(4位) memset(tmp, 0x00, sizeof(tmp)); memset(tmp1, 0x00, sizeof(tmp1)); memcpy(tmp,"1560012000009",13); if ( strlen(LiuS->serverwater) > 6 ) { memcpy(tmp1,LiuS->serverwater+strlen(LiuS->serverwater)-6,6); } else { sprintf(tmp1,"%06d",atol(LiuS->serverwater)); } strcat(tmp,tmp1); Xml_strmodify("service_sn", tmp, tmpstr, sizeof(tmpstr)); strcat(xmlbw, tmpstr); strcat(xmlbw, "<need_request></need_request></Service_Header><Service_Body>"); //报文体 strcat(xmlbw, "<ext_attributes>"); memset(tmpstr,0x00,sizeof(tmpstr)); //<INM-BRANCH-ID> memset(tmp,0x00,sizeof(tmp)); memcpy(tmp,info.organno,9); Xml_strmodify("INM-BRANCH-ID", tmp, tmpstr, sizeof(tmpstr)); //终端序号 <INM-TERM-SRL> memset(tmp,0x00,sizeof(tmp)); memset(tmp1,0x00,sizeof(tmp1)); memcpy(tmp,info.organno,12); memcpy(tmp1,"0",1); memcpy(tmp1+1,tmp+9+1,2); Xml_strmodify("INM-TERM-SRL", tmp1, tmpstr, sizeof(tmpstr)); //网络号 <INM-LAN-ID> memset(tmp1,0x00,sizeof(tmp1)); memcpy(tmp1,tmp+9+1,2); Xml_strmodify("INM-LAN-ID", tmp1, tmpstr, sizeof(tmpstr)); //终端类型<INM-TERM-TYP> memset(tmp1,0x00,sizeof(tmp1)); memcpy(tmp1,tmp+9,1); Xml_strmodify("INM-TERM-TYP", tmp1, tmpstr, sizeof(tmpstr)); //柜员代号 <INM-TELLER-ID> Xml_strmodify("INM-TELLER-ID", tmp, tmpstr, sizeof(tmpstr)); strcat(xmlbw, tmpstr); strcat(xmlbw,"</ext_attributes><request>"); //缴费查询报文 memset(tmpstr,0x00,sizeof(tmpstr)); //终端代码 TermId strcpy(devno, info.devno); pub_RemoveBlank(devno, strlen(devno)); devno[8]=0; memset(tmp,0x00,sizeof(tmp)); memcpy(tmp,info.organno,9); Xml_strmodify("TermId", tmp, tmpstr, sizeof(tmpstr)); //终端类型 TermType A-自助终端 M-营业厅 Xml_strmodify("TermType", "A", tmpstr, sizeof(tmpstr)); //发卡次数 CardNum Xml_strmodify("CardNum", "FF", tmpstr, sizeof(tmpstr)); //联通手机号 UserNo memset(zh2,0x00,sizeof(zh2)); memcpy(zh2,InStr,20); pub_RemoveBlank(zh2, strlen(zh2)); Xml_strmodify("UserNo", zh2, tmpstr, sizeof(tmpstr)); //卡号 memset(zh1,0x00,sizeof(zh1)); memcpy(zh1,InStr+20,40); pub_RemoveBlank(zh1, strlen(zh1)); //PayMonth 账期数目 Xml_strmodify("PayMonth", "000000", tmpstr, sizeof(tmpstr)); //服务代码 ServiceCode Xml_strmodify("ServiceCode", "YTMB.00.YTMB006.1000", tmpstr, sizeof(tmpstr)); strcat(xmlbw, tmpstr); strcat(xmlbw,"</request></Service_Body></Service>"); nMsgLen=strlen(xmlbw); WPrint(0, "InStr,ret=[%s]\n",xmlbw); WPrint(0, "InStr,ret=[%d]\n",nMsgLen); if(MQ_CONN()) { BCM_Print(LOGFILE, "交易建立连接失败,ret=[%d]\n",nMsgLen); GetBcmSysMsg(9999,msg); sprintf(OutStr,"%03d%03d%s",1,strlen(msg),msg); strcpy(RETCODE, "9999"); FillStruct(&(LiuS->ls2dat),monit,TRCD,RETCODE,zh1,zh2,""); FillLSOther(&(LiuS->ls2dat),msg); FreeBitstr( sendinfo ); FreeBitstr( recvinfo ); return -99; //fprintf( stdout, "Connected to MQ FAILURE!\n") ; //return -1; } BCM_Print(LOGFILE, "MQ_GET_OPEN,ret=\n"); if(MQ_GET_OPEN()) { fprintf( stdout, "Open response queue FAILURE!\n") ; MQ_CLOSE(); MQ_DISC(); return -1; } BCM_Print(LOGFILE, "MQ_PUT_OPEN,ret=\n"); if(MQ_PUT_OPEN()) { fprintf( stdout, "Open request queue FAILURE!\n") ; MQ_CLOSE(); MQ_DISC(); return -1; } nRetLen = Write(xmlbw,nMsgLen,tmp); BCM_Print(LOGFILE, "交易发送数据,ret=[%d]\n",nRetLen); if (nRetLen != 0) { BCM_Print(LOGFILE, "交易发送数据失败,ret=[%d]\n",nMsgLen); GetBcmSysMsg(9999,msg); sprintf(OutStr,"%03d%03d%s",1,strlen(msg),msg); strcpy(RETCODE, "9999"); FillStruct(&(LiuS->ls2dat),monit,TRCD,RETCODE,zh1,zh2,""); FillLSOther(&(LiuS->ls2dat),msg); MQ_CLOSE(); MQ_DISC(); FreeBitstr( sendinfo ); FreeBitstr( recvinfo ); return -99; } nRetLen = Read(outstr,tmp); BCM_Print(LOGFILE, "交易接受数据包,ret=[%s=%d]\n",outstr,nRetLen); if(nRetLen != 0) { BCM_Print(LOGFILE, "交易接受数据失败,ret=[%d]\n",nMsgLen); GetBcmSysMsg(9999,msg); sprintf(OutStr,"%03d%03d%s",1,strlen(msg),msg); strcpy(RETCODE, "9999"); FillStruct(&(LiuS->ls2dat),monit,TRCD,RETCODE,zh1,zh2,""); FillLSOther(&(LiuS->ls2dat),msg); MQ_CLOSE(); MQ_DISC(); FreeBitstr( sendinfo ); FreeBitstr( recvinfo ); return -99; } MQ_CLOSE(); MQ_DISC(); /* GetHostAddr(HostAddr, &HostPort, "ZJYW"); BCM_Print(LOGFILE, "HostAddr=[%s]\n", HostAddr); BCM_Print(LOGFILE, "HostPort=[%d]\n", HostPort); nSockFd = BCM_tcp_conn(HostAddr, HostPort); if( nSockFd < 0) { BCM_Print(LOGFILE, "交易建立连接失败,ret=[%d]\n",nMsgLen); GetBcmSysMsg(9999,msg); sprintf(OutStr,"%03d%03d%s",1,strlen(msg),msg); strcpy(RETCODE, "9999"); FillStruct(&(LiuS->ls2dat),monit,TRCD,RETCODE,zh1,zh2,""); FillLSOther(&(LiuS->ls2dat),msg); FreeBitstr( sendinfo ); FreeBitstr( recvinfo ); return -99; } nMsgLen=strlen(xmlbw); nRetLen = BCM_tcp_send(nSockFd, xmlbw, nMsgLen, TIMEOUT); if (nRetLen != nMsgLen) { BCM_Print(LOGFILE, "交易发送数据失败,ret=[%d]\n",nMsgLen); GetBcmSysMsg(9999,msg); sprintf(OutStr,"%03d%03d%s",1,strlen(msg),msg); strcpy(RETCODE, "9999"); FillStruct(&(LiuS->ls2dat),monit,TRCD,RETCODE,zh1,zh2,""); FillLSOther(&(LiuS->ls2dat),msg); BCM_tcp_close(nSockFd, 1); FreeBitstr( sendinfo ); FreeBitstr( recvinfo ); return -99; } sleep(1); nRetLen = BCM_tcp_recv(nSockFd, outstr, 8, TIMEOUT); BCM_Print(LOGFILE, "交易接受数据包头,ret=[%s]\n",outstr); if(nRetLen < 0) { BCM_Print(LOGFILE, "交易接受数据包头失败,ret=[%d]\n",nMsgLen); GetBcmSysMsg(9999,msg); sprintf(OutStr,"%03d%03d%s",1,strlen(msg),msg); strcpy(RETCODE, "9999"); FillStruct(&(LiuS->ls2dat),monit,TRCD,RETCODE,zh1,zh2,""); FillLSOther(&(LiuS->ls2dat),msg); BCM_tcp_close(nSockFd, 1); FreeBitstr( sendinfo ); FreeBitstr( recvinfo ); return -99; } memset(outstr, 0x00, sizeof(outstr)); nMsgLen=1024; nRetLen = BCM_tcp_recv(nSockFd, outstr, nMsgLen, TIMEOUT); if(nRetLen < 0) { BCM_Print(LOGFILE, "交易接受数据 报文失败,ret=[%d]\n",nMsgLen); GetBcmSysMsg(9999,msg); sprintf(OutStr,"%03d%03d%s",1,strlen(msg),msg); strcpy(RETCODE, "9999"); FillStruct(&(LiuS->ls2dat),monit,"2104",RETCODE,zh1,zh2,""); FillLSOther(&(LiuS->ls2dat),msg); FreeBitstr( sendinfo ); FreeBitstr( recvinfo ); return -99; } BCM_tcp_close(nSockFd, 1); */ //BCM_Print(LOGFILE,"从JAVA接受数据outstr=[%s]\n",outstr); //返回码 memset( tmps, 0x00, sizeof(tmps)); findxmlnode(outstr, "<code>", tmps); BCM_Print(LOGFILE, "xmlnode返回码类型rettype=[%s]\n", tmps); if(strncmp(tmps,"000000",6)!=0 ) { memset(msg,0x00,sizeof(msg)); memset(tmpstr,0x00,sizeof(tmpstr)); findxmlnode(outstr, "<desc>", msg); inspur_code_convert("utf-8","gb2312",msg,strlen(msg),tmpstr,sizeof(tmpstr)); sprintf(OutStr,"%03d%03d%s",1,strlen(tmpstr),tmpstr); FillStruct(&(LiuS->ls2dat),monit,TRCD,tmps,zh1,zh2,""); FillLSRemark(&(LiuS->ls2dat), jyje, "", ""); FillLSOther(&(LiuS->ls2dat),msg); return(-99); } //返回处理 //Xml_free( sendxmlhead ); //Xml_free( recvxmldata ); memset( tmpstr, 0x00, sizeof(tmpstr)); //ContractNo 合同号 0.30 memset( tmps, 0x00, sizeof(tmps)); memset( tmpstr1, 0x00, sizeof(tmpstr1)); findxmlnode(outstr, "<ContractNo>", tmps); inspur_code_convert("utf-8","gb2312",tmps,strlen(tmps),tmpstr1,sizeof(tmpstr1)); sprintf(tmpstr, "%-30s", tmpstr1); //UserName 用户名称 30.120 memset( tmpstr1, 0x00, sizeof(tmpstr1)); memset( tmps, 0x00, sizeof(tmps)); findxmlnode(outstr, "<UserName>", tmps); inspur_code_convert("utf-8","gb2312",tmps,strlen(tmps),tmpstr1,sizeof(tmpstr1)); sprintf(tmpstr+30, "%-120s", tmpstr1); //DBH 代表号 150.20 memset( tmps, 0x00, sizeof(tmps)); memset( tmpstr1, 0x00, sizeof(tmpstr1)); findxmlnode(outstr, "<DBH>", tmps); inspur_code_convert("utf-8","gb2312",tmps,strlen(tmps),tmpstr1,sizeof(tmpstr1)); sprintf(tmpstr+150, "%-20s", tmpstr1); //DQQF 当前欠费 170.20 memset( tmps, 0x00, sizeof(tmps)); memset( tmpstr1, 0x00, sizeof(tmpstr1)); findxmlnode(outstr, "<DQQF>", tmps); inspur_code_convert("utf-8","gb2312",tmps,strlen(tmps),tmpstr1,sizeof(tmpstr1)); sprintf(tmpstr+170, "%-20s", tmpstr1); // 用于显示当前欠费,负金额变成正金额,正金额编程负金额 memset( tmpstr2, 0x00, sizeof(tmpstr2)); sprintf(tmpstr2, "%-20.2f", -atof(tmpstr1)); //当前欠费为负数的时候,说明有余额,那么存金额大于0就可以 自定义JF用于鉴别 -----00 输入金额大于0 //当前欠费为正数的时候,说明欠费,那么存金额大于当前欠费就可以 -----01 输入金额大于DQQF memset( JF, 0x00, sizeof(JF)); if(atof(tmpstr1)<=0) strcpy(JF,"00"); else strcpy(JF,"01"); //strcpy(JF,"00"); //测试用,看跳转是否正确 //JYJFE 建议缴费额 190.20 memset( tmps, 0x00, sizeof(tmps)); memset( tmpstr1, 0x00, sizeof(tmpstr1)); findxmlnode(outstr, "<JYJFE>", tmps); inspur_code_convert("utf-8","gb2312",tmps,strlen(tmps),tmpstr1,sizeof(tmpstr1)); sprintf(tmpstr+190, "%-20s", tmpstr1); //JF 根据DQQF自定义JF用于鉴别输入金额 210.10 sprintf(tmpstr+210, "%-10s", JF); sprintf(tmpstr+220, "%-20s", tmpstr2); sprintf(OutStr, "%03d%03d%s", 1, strlen(tmpstr), tmpstr); BCM_Print(LOGFILE, "OutStr=[%s]\n", OutStr); FillStruct(&(LiuS->ls2dat), monit, TRCD, "0000", zh1, zh2, jyje); FillLSRemark(&(LiuS->ls2dat), jyje, "",""); //BCM_Print(LOGFILE, "OutStr=[%s]\n", OutStr); Xml_free( sendxmlhead ); Xml_free( recvxmldata ); return 0; }