#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "C:/Compiler/INCLUDE/8000lib.h"
#include "C:/Compiler/INCLUDE/8xTcpip.h"
#include "C:/Compiler/INCLUDE/UCOS.H"
//*** 時間參數 ***-
#define DT_LongMonthTime 1
#define DT_LongDate 2
//*** 音效和背光設定 ***//
#define SND_None 0 // 不播放音效
#define SND_Error 1 // 錯誤
#define SND_Succ 2 // 作業成功
#define BlackLight 1 //背光
// ????
#define SND_Scan 4 // 掃描條碼
#define SND_Save 3 // 儲存
#define SND_Warn 5 // 警告
//*** 本專案所需變數 ***//
int g_checkFd;
int g_inFd; // 儲位資料表
int g_inventFd; // 盤點資料表
int g_pickFd; // 撿貨資料表
int g_outFd; // 出貨資料表
int g_carryInFd; // 設備攜入
int g_carryOutFd; // 設備攜出
#define WorkID_Max 20 // 單次下載資料內可用的單號最大數量
#define WorkID_Len 16 // 工單
#define BoxNO_Len 16 // 箱號
#define PosNO_Len 12 // 儲位編號
#define VenNO_Len 1 // 廠商編號(Vendor)
#define Flag_Len 1 // 狀態
#define DT_Len 19 // 日期與時間
#define DevNO_Len 12 // 設備(Device)財編
int iBlack; //表s_black的地址
int iHead; //表head的地址
int iOperation; //表 Operation的地址
int iUpload; //表UPload的地址
// 資料庫欄位長度
#define Check_Len (WorkID_Len + 1 + BoxNO_Len + 1 + PosNO_Len + 1 + DT_Len + 1 + DT_Len + 1 + Flag_Len) // 進貨 : 驗貨 + 入庫資料表 : 88 Byte
// 驗貨時間 入庫時間 箱號是否不存在
#define In_Len (WorkID_Len + 1 + BoxNO_Len + 1 + PosNO_Len + 1 + DT_Len) // 儲位資料表 : 63
#define Pick_Len (WorkID_Len + 1 + BoxNO_Len + 1 + DT_Len + 1 + DT_Len + 1 + Flag_Len) // 出貨 : 撿貨 + 出貨資料表 : 75
// 撿貨時間 出貨時間 箱號是否不存在
#define Out_Len (WorkID_Len + 1 + BoxNO_Len + 1 + VenNO_Len + 1 + DT_Len) // 儲位資料表 : 55
#define Invent_Len (PosNO_Len + 1 + BoxNO_Len + 1 + DT_Len + 1 + PosNO_Len + 1 + Flag_Len) // 盤點資料表 : 64
//儲位 箱號 盤點日期 新儲位 # : 移轉 ; * : 新增不存在
// 設備攜入/出
#define Carry_Len (PosNO_Len + 1 + DevNO_Len + 1 + DT_Len)
// 其他
#define Buffer_Max_Size 256
#define Config_File "Config"
//****************************************************
// 名稱 : _StrRight
// 功能 : 重字符串中重右邊開始獲取几位信息
// 參數 : [in/out] dst : 轉換地
// [in] src : 源地
// [in] len : 獲取長度
//****************************************************
void _StrRight(char* dst, char *src, int len)
{
int offset = strlen(src) - len;
if(strlen(src)<len)
return;
memset(dst, '/0', strlen(dst));
memcpy(dst, &src[offset], len);
}
//****************************************************
// 名稱 : _StrNo
// 功能 : 重字符串中重左邊開始獲取几位信息
// 參數 : [in/out] dst : 轉換地
// [in] src : 源地
// [in] len : 獲取長度
//****************************************************
void _StrLeftLen(char* dst, char *src, int offset,int len)
{
int maxLen = offset+ len;
if(strlen(src)<maxLen)
return;
memset(dst, '/0', strlen(dst));
memcpy(dst, &src[offset], len);
}
//****************************************************
// 名稱 : _StrNo
// 功能 : 重字符串中重右邊開始獲取几位信息
// 參數 : [in/out] dst : 轉換地
// [in] src : 源地
// [in] offset: 偏移量
// [in] len : 獲取長度
//****************************************************
void _StrRightLen(char* dst, char *src, int offset,int len)
{
int maxLen =strlen(src)-offset;
if(strlen(src)<len&&strlen(src)<offset&&strlen(src)<maxLen+len)
return;
memset(dst, '/0', strlen(dst));
memcpy(dst, &src[maxLen], len);
}
//*******************************************************************************************
// [名稱] _FlashScreen
// [用途] 閃爍畫面
//*******************************************************************************************
void _FlashScreen()
{
int i ;
clr_scr() ;
clr_rect(0,0,100,64);
SetCursor(0) ;
for(i = 0 ; i <= 15 ; i += 5)
{
fill_rect(0,0+i,128,5) ; //填滿矩形區域
fill_rect(0,57-i,128,5) ;
fill_rect(0,62,128,2) ;
OSTimeDly(10) ;
}
}
//*******************************************************************************************
// [名稱] _PlaySound
// [用途] 播放聲音
// [參數] sndType [in]: 聲音種類
//*******************************************************************************************
void _PlaySound(int sndType)
{
int sndError[14] = { 5, 10, 10, 10, 15, 10, 20, 10, 25, 10, 30, 10, 0, 0};
int sndWarn[12] = {35, 10, 30, 10, 35, 10, 35, 5, 35, 5, 0, 0};
int sndSuccess[12] = {30, 20, 30, 20, 25, 20, 20, 15, 15, 15, 0, 0};
int sndSave[4] = {16, 5, 0, 0};
int sndScan[4] = {30, 10, 0, 0};
switch(sndType)
{
case SND_None : break;
case SND_Error: on_beeper(sndError); break;
case SND_Succ : on_beeper(sndSuccess); break;
case SND_Save : on_beeper(sndSave); break; // SND_Save
case SND_Scan : on_beeper(sndScan); break;
case SND_Warn : on_beeper(sndWarn); break;
}
}
//******************************************************************
// 名稱 : _AddOneChar
// 功能 : 在來源字串最後填入一各字
// 參數 : [in/out] data : 字串
// [in] len : 字串陣列長度
// [in] key : 填入字元
//******************************************************************
void _AddOneChar(char *data, int dataLen, char key)
{
int len = strlen(data);
if(len < dataLen)
data[len] = key;
}
//******************************************************************
// 名稱 : _BackOneChar
// 功能 : 消除字串最後一各字
// 參數 : [in/out] data) : 字串
//******************************************************************
void _BackOneChar(char *data)
{
int len = strlen(data);
if(len > 0)
data[len - 1] = '/0';
}
//******************************************************************
// 名稱 : _GetDateTime
// 功能 : 取得日期字串
// 參數 : [in] style : 指定日期格式
// [in/out] pDateTime : 回傳日期
//******************************************************************
void _GetDateTime(int style, char *pDateTime)
{
char currTime[16];
get_time(currTime);
if(style == DT_LongMonthTime) // 08.11 17:27:30
{
memmove(pDateTime, currTime + 4, 2); // MM
pDateTime[2] = '.';
memmove(pDateTime + 3, currTime + 6, 2); // DD
pDateTime[5] = ' ';
memmove(pDateTime + 6, currTime + 8, 2); // HH
pDateTime[8] = ':';
memmove(pDateTime + 9, currTime + 10, 2); // MM
pDateTime[11] = ':';
memmove(pDateTime + 12, currTime + 12, 2); // SS
pDateTime[14] = '/0';
}
else if(style == DT_LongDate) // 2006/08/11
{
memcpy(pDateTime, currTime, 4);
pDateTime[4] = '/';
memcpy(pDateTime + 5, currTime + 4, 2);
pDateTime[7] = '/';
memcpy(pDateTime + 8, currTime + 6, 2);
pDateTime[10] = '/0';
}
else if(style == 5) //格式: YYYY/MM/DD hh:mm:ss
{
memcpy(pDateTime, currTime, 4);
pDateTime[4] = '/';
memcpy(pDateTime + 5, currTime + 4, 2);
pDateTime[7] = '/';
memcpy(pDateTime + 8, currTime + 6, 2);
pDateTime[10] = ' ';
memcpy(pDateTime + 11, currTime + 8, 2);
pDateTime[13] = ':';
memcpy(pDateTime + 14, currTime + 10, 2);
pDateTime[16] = ':';
memcpy(pDateTime + 17, currTime + 12, 2);
pDateTime[19] = '/0';
}
}
//******************************************************************
// 名稱 : _ShowSingleMsg
// 功能 : 顯示單行訊息
// 參數 : [in] x : X軸座標
// [in] y : Y軸座標
// [in] clearScr : 0 - 不清除螢幕 ; 1 - 清除螢幕
// [in] delayTime : 延遲時間
// [in] sndType : 音效種類, 0 - 不撥放音效
// [in] msg : 顯示內容
//******************************************************************
void _ShowSingleMsg(int x, int y, int clearScr, int delayTime, int sndType, char *msg)
{
SetCursor(0);
if(clearScr == 1)
clr_scr();
gotoxy(x, y);
puts(msg);
_PlaySound(sndType);
if(delayTime > 0)
OSTimeDly(delayTime);
}
//******************************************************************
// 名稱 : _GetMnuIdx
// 功能 : 取得選單第幾項,one base
// 參數 : [in] mnuNo : 選單數量
// [in] mnuIdx : 選單目前點選項目
// [in] key : 輸入字元,KEY_UP、KEY_DOWN、'1'、'9'
// 回傳 : 按下數字或上下鍵後的項目數字
//******************************************************************
int _GetMnuIdx(int mnuNo, int mnuIdx, char key)
{
char keyStr[2];
int keyNo;
keyStr[0] = key;
keyStr[1] = '/0';
if(key == KEY_UP)
{
if(mnuIdx == 1)
return mnuNo;
else
return --mnuIdx;
}
else if(key == KEY_DOWN)
{
if(mnuIdx == mnuNo)
return 1;
else
return ++mnuIdx;
}
keyNo = atoi(keyStr);
return keyNo;
}
int _Inquire(char * title1, char * title2, char * select1, char *select2)
{
char key;
SetVideoMode(VIDEO_NORMAL);
SetFont(FONT_6X12);
SetCursor(0);
clr_scr();
gotoxy(0, 0);
puts(title1);
gotoxy(0, 1);
puts(title2);
gotoxy(0, 2);
puts(select1);
gotoxy(0, 3);
puts(select2);
_PlaySound(SND_Warn);
while(1)
{
key = getchar();
if(key == '1')
return 1;
if(key == '2')
return 2;
}
}
//******************************************************************
// 名稱 : _StrPad
// 功能 : 將字符指定位置加上指定字符
// 參數 : [in/out] data : 目的地字串陣列
// [in] int : 指定偏移位置
// [in] int : 指定轉換長度
// [in] dstLen : 指定要轉換的字符
//******************************************************************
void _StrPad(char* data, int offset, int len, char key)
{
int upperBound = len - 2;
for( ; offset <= upperBound ; offset++)
data[offset] = key;
data[len - 1] = '/0';
}
//******************************************************************
// 名稱 : _GetScanData
// 功能 : 取得掃瞄器讀取的字串
// 參數 : [in/out] dstData : 目的地字串陣列
// [in] dstLen : 字串陣列長度
//******************************************************************
void _GetScanData(char *data, int dataLen)
{
memset(data, '/0', dataLen);
memcpy(data, CodeBuf, dataLen); // 避免拷貝到 CodeBuf '/0'之後的字元
_StrPad(data, strlen(data), dataLen, '/0');
_PlaySound(SND_Scan);
}
//******************************************************************
// 名稱 : _IntToStr
// 功能 : 將int型轉換成string型
// 參數 : [in] value : 目的地字串陣列
// [in/out] strValue : 字符的地址
//******************************************************************
void _IntToStr(long value, char *strValue)
{
int a = 0; // 萬位
int b = 0; // 千位
int c = 0; // 百位
int d = 0; // 十位
int e = 0; // 個位
int index = 0;
if(value > 9999)
{
a = value / 10000;
b = (value - 10000 * a) / 1000;
c = (value - (10000 * a + 1000 * b))/ 100;
d = (value - (10000 * a + 1000 * b + 100 * c))/ 10;
e = (value - (10000 * a + 1000 * b + 100 * c + 10 * d))/ 1;
}
else if(value > 999)
{
b = value / 1000;
c = (value - (10000 * a + 1000 * b))/ 100;
d = (value - (10000 * a + 1000 * b + 100 * c))/ 10;
e = (value - (10000 * a + 1000 * b + 100 * c + 10 * d))/ 1;
}
else if(value > 99)
{
c = value / 100;
d = (value - (10000 * a + 1000 * b + 100 * c))/ 10;
e = (value - (10000 * a + 1000 * b + 100 * c + 10 * d))/ 1;
}
else if(value > 9)
{
d = value / 10;
e = (value - (10000 * a + 1000 * b + 100 * c + 10 * d))/ 1;
}
else
e = value;
if(a > 0)
{
strValue[index] = 48 + a;
index++;
}
if(b >0)
{
strValue[index] = 48 + b;
index++;
}
if(b==0&&a>0)
{
strValue[index] = 48 + b;
index++;
}
if(c > 0)
{
strValue[index] = 48 + c;
index++;
}
if(c==0&&(b>0||a>0))
{
strValue[index] = 48 + c;
index++;
}
if(d > 0)
{
strValue[index] = 48 + d;
index++;
}
if(d==0&&(b>0||a>0||c>0))
{
strValue[index] = 48 + d;
index++;
}
if(e >= 0)
{
strValue[index] = 48 + e;
index++;
}
strValue[index] = '/0';
}
//******************************************************************
// 名稱 : _IntToStr
// 功能 : 將int型轉換成string型
// 參數 : [in] value : 目的地字串陣列
// [in/out] strValue : 字符的地址
//******************************************************************
void _IntToFormatStr(long value, char *strValue)
{
int b = 0; // 千位
int c = 0; // 百位
int d = 0; // 十位
int e = 0; // 個位
b = (value ) / 1000;
c = (value - (1000 * b))/ 100;
d = (value - (1000 * b + 100 * c))/ 10;
e = (value - (1000 * b + 100 * c + 10 * d))/ 1;
strValue[0] = 48 + b;
strValue[1] = 48 + c;
strValue[2] = 48 + d;
strValue[3] = 48 + e;
}
void _CreateMaterialTable_black(int flag)
{
// 建立物料資料表,一共有4個
close_DBF(iBlack);
if(flag == 1)
remove("BLACK");
if(access("BLACK") == 0)
{
iBlack = create_DBF("BLACK",30);
create_index(iBlack, 1, 0,30);
}
else
{
iBlack = open_DBF("BLACK");
}
}
void _CreateMaterialTable_Head(int flag)
{
// 建立物料資料表,一共有4個
close_DBF(iHead);
if(flag == 1)
remove("Head");
if(access("Head") == 0)
{
iHead = create_DBF("Head",19);
create_index(iHead, 1,0, 11);
}
else
{
iHead = open_DBF("Head");
}
}
void _CreateMaterialTable_Operation(int flag)
{
// 建立物料資料表,一共有4個
close_DBF(iOperation);
if(flag == 1)
remove("Operation");
if(access("Operation") == 0)
{
iOperation = create_DBF("Operation",21);
create_index(iOperation, 1, 0, 11);
}
else
{
iOperation = open_DBF("Operation");
}
}
void _CreateMaterialTable_Upload(int flag)
{
// 建立物料資料表,一共有4個
close_DBF(iUpload);
if(flag == 1)
remove("Upload");
if(access("Upload") == 0)
{
iUpload = create_DBF("Upload",49);
create_index(iUpload, 1, 0, 30);
}
else
{
iUpload = open_DBF("Upload");
}
}
void DeleteDatabase()
{
_CreateMaterialTable_black(1);
_CreateMaterialTable_Head(1);
_CreateMaterialTable_Operation(1);
_CreateMaterialTable_Upload(1);
}
void CreateDatabase()
{
_CreateMaterialTable_black(2);
_CreateMaterialTable_Head(2);
_CreateMaterialTable_Operation(2);
_CreateMaterialTable_Upload(2);
}
int _ReadCom(char *buff, char firstChar)
{
char ch;
char key;
int index = 1;
memset(buff, '/0', 256);
buff[0] = firstChar;
while(read_com(1, &ch) == 1)
{
key = getchar();
if(key == KEY_ESC)
return 0;
buff[index] = ch;
index++;
}
clr_scr();
gotoxy(0, 1);
puts(buff);
//OSTimeDly(50);
return 1;
}
//
//
//
/*** 專案專屬函式 ***/
void Upload()
{
char ch;
int dateCount;
int progress = 0;
int indexUpload= 0;
int indexHead=0;
int indexOperation=0;
int count;
int countUpload;
int countHead;
int countOperation;
int retval;
char buff[256];
char tmpStr[256];
char key;
char strValue[7];
close_com(1);
clear_com(1);
SetCommType(1, 2);
open_com(1, BAUD_115200 | DATA_BIT8 | PARITY_NONE | HANDSHAKE_NONE);
_ShowSingleMsg(0, 2, 1, 0, SND_None, (char *)"wait..");
// 資料筆數
countUpload = member_in_DBF(iUpload);
countHead =member_in_DBF(iHead);
countOperation =member_in_DBF(iOperation);
if(countUpload == 0)
{
_ShowSingleMsg(0, 2, 1, 300, SND_Error, (char *)"no data Upload");
return;
}
while(1)
{
key = getchar();
if(key == KEY_ESC)
{
_ShowSingleMsg(0, 2, 1, 300, SND_Error, (char *)" worry");
while (!com_eot(1)); /* wait till prior transmission completed */
write_com(1, "break/r");
break;
}
gotoxy(0, 1);
if(progress == 0)
puts("wait..");
else if(progress == 1)
puts("wait....");
else if(progress == 2)
puts("wait......");
else if(progress == 3)
puts("wait........");
OSTimeDly(10);
clr_scr();
progress++;
if(progress > 3)
progress = 0;
// receive
if(read_com(1, &ch) == 0)
continue;
else if(_ReadCom(buff, ch) == 0)
{
_ShowSingleMsg(0, 2, 1, 300, SND_Error, (char *)"worry");
while (!com_eot(1)); /* wait till prior transmission completed */
write_com(1, "break/r");
break;
}
memset(tmpStr, '/0', 256);
memcpy(tmpStr, buff, 5);
if(strcmp(tmpStr, "start") == 0)
{
memset(tmpStr, '/0', 256);
memset(strValue, '/0', 7);
dateCount=countUpload+countHead+countOperation;
_IntToStr(dateCount, strValue);
strcpy(tmpStr, "UpLoad");
strcat(tmpStr, strValue);
strcat(tmpStr, " 筆紀錄");
_ShowSingleMsg(0, 2, 1, 100, SND_None, tmpStr);
while (!com_eot(1)); /* wait till prior transmission completed */
memset(tmpStr, '/0', 256);
strcpy(tmpStr, "rec!!");
strcat(tmpStr, strValue);
strcat(tmpStr, (char *)"/r"); // 2006/09/01 測試 IrLib.dll ReadIrCom() 需要 /r 當結束字元
write_com(1, tmpStr);
}
else if(strcmp(tmpStr, "next!") == 0)
{
if(indexUpload>=countUpload)
{
while (!com_eot(1)); /* wait till prior transmission completed */
write_com(1, "end!!/r"); // 2006/09/01 測試 IrLib.dll ReadIrCom() 需要 /r 當結束字元
_ShowSingleMsg(2, 2, 1, 300, SND_Succ, (char *)"UpLoad is over");
break;
}
else if(indexOperation<countOperation)
{
if (indexOperation==0)
lseek_DBF(iOperation,1,0,1);
else
lseek_DBF(iOperation,1,1,0);
get_member(iOperation,1,buff);
indexOperation++;
strcpy(tmpStr,"data!1");
}
else if(indexHead<countHead)
{
if (indexHead==0)
lseek_DBF(iHead,1,0,1);
else
lseek_DBF(iHead,1,1,0);
get_member(iHead,1,buff);
indexHead++;
strcpy(tmpStr,"data!2");
}
else if(indexUpload<countUpload)
{
if (indexUpload==0)
lseek_DBF(iUpload,1,0,1);
else
lseek_DBF(iUpload,1,1,0);
get_member(iUpload,1,buff);
indexUpload++;
strcpy(tmpStr,"data!3");
}
while (!com_eot(1)); /* wait till prior transmission completed */
strcat (tmpStr,buff);
strcat(tmpStr, (char *)"/r"); // 2006/09/01 測試 IrLib.dll ReadIrCom() 需要 /r 當結束字元
write_com(1, tmpStr);
filelength(iUpload);
}
}
close_com(1);
}
//******************************************************************
// 名稱 : _VerifyLowBound
// 功能 : 檢驗欄位字串是否為零
// 參數 : [in] data : 字串
// [in] fieldName : 欄位名稱
// 回傳 : 0 - 字串長度為零 ; 1 - 字串長度大於1
//******************************************************************
int _VerifyLowBound(char *data, char * fieldName)
{
char msg[17];
memset(msg, '/0', 17);
strcpy(msg, fieldName);
strcat(msg, "長度為零");
if(strlen(data) == 0)
{
_ShowSingleMsg(0, 3, 1, 200, SND_Error, msg);
return 0;
}
else
return 1;
}
//
// Add the Data to DataBase
//
void _AddInsertData(char* tmpStr)
{
char dst[31];
int len =30;
memset(dst,'/0',31);
if(strlen(tmpStr)<30||strlen(tmpStr)>250)
{
return;
}
if(strlen(tmpStr)>=30)
{
memcpy(dst, tmpStr, len);
add_member(iBlack, dst);
}
if(strlen(tmpStr)>=60)
{
memcpy(dst,tmpStr+30, len);
add_member(iBlack, dst);
}
if(strlen(tmpStr)>=90)
{
memcpy(dst,tmpStr+60, len);
add_member(iBlack, dst);
}
if(strlen(tmpStr)>=120)
{
memcpy(dst,tmpStr+90, len);
add_member(iBlack, dst);
}
if(strlen(tmpStr)>=150)
{
memcpy(dst,tmpStr+120, len);
add_member(iBlack, dst);
}
if(strlen(tmpStr)>=180)
{
memcpy(dst,tmpStr+150, len);
add_member(iBlack, dst);
}
if(strlen(tmpStr)>=210)
{
memcpy(dst,tmpStr+180, len);
add_member(iBlack, dst);
}
if(strlen(tmpStr)>=220)
{
memcpy(dst,tmpStr+210, len);
add_member(iBlack, dst);
}
}
//
// get the data into diffrent table
//
void _GetDataToTable(char* strTemp,char* strTableNo)
{
if(strcmp(strTableNo,"data!1")==0)
{
_AddInsertData(strTemp);
}
if(strcmp(strTableNo,"data!2")==0)
{
add_member(iHead, strTemp);
}
if(strcmp(strTableNo,"data!3")==0)
{
add_member(iOperation, strTemp);
}
}
///
void Download()
{
char ch;
int progress = 0;
int index = 0;
int count = 10;
char buff[256];
char tmpStr[256];
char key;
int retval;
char table_no;
int dataCount=0;
char strCount[5];
char strTableNo[256];
retval = _Inquire((char *)"old data will delete", (char *)"", (char *)"1.NO AND OUT",(char *)"2.YES");
if(retval == 1)
return;
else
DeleteDatabase();
close_com(1);
clear_com(1);
SetCommType(1, 2);
open_com(1, BAUD_115200 | DATA_BIT8 | PARITY_NONE | HANDSHAKE_NONE);
_ShowSingleMsg(0, 2, 1, 0, SND_None, (char *)"wait data..");
while(1)
{
key = getchar();
if(key == KEY_ESC)
{
_ShowSingleMsg(0, 2, 1, 300, SND_Error, (char *)"worry");
while (!com_eot(1)); /* wait till prior transmission completed */
write_com(1, "break/n");
break;
}
gotoxy(0, 1);
if(progress == 0)
puts("wait..");
else if(progress == 1)
puts("wait....");
else if(progress == 2)
puts("wait......");
else if(progress == 3)
puts("wait........");
OSTimeDly(10);
clr_scr();
progress++;
if(progress > 3)
progress = 0;
// receive
if(read_com(1, &ch) == 0)
continue;
else if(_ReadCom(buff, ch) == 0)
{
_ShowSingleMsg(0, 2, 1, 300, SND_Error, (char *)"worry");
while (!com_eot(1)); /* wait till prior transmission completed */
write_com(1, "break/r");
break;
}
memset(tmpStr, '/0', 256);
memcpy(strTableNo,buff,6);
memcpy(tmpStr, buff, 5);
if(strcmp(tmpStr, "start") == 0)
{
memset(tmpStr, '/0', 256);
memcpy(tmpStr, buff + 5, strlen(buff) - 5); // 資料筆數
count = atoi(tmpStr);
strcat(tmpStr, "bit data");
_ShowSingleMsg(0, 2, 1, 100, SND_None, tmpStr);
while (!com_eot(1)); /* wait till prior transmission completed */
write_com(1, "next!/r");
}
else if(strcmp(tmpStr, "data!") == 0)
{
_StrRight(tmpStr, buff, strlen(buff) - 6);
table_no=tmpStr[0];
_GetDataToTable(tmpStr,strTableNo);
dataCount=member_in_DBF(iBlack);
_IntToStr(dataCount,strCount);
//_ShowSingleMsg(0, 2, 1, 10, SND_None, tmpStr);
_ShowSingleMsg(0, 2, 1, 40, SND_None, strCount);
while (!com_eot(1)); /* wait till prior transmission completed */
write_com(1, "next!/r");
}
else if(strcmp(tmpStr, "end!!") == 0)
{
dataCount=member_in_DBF(iOperation);
_IntToStr(dataCount,strCount);
_ShowSingleMsg(2, 2, 1, 500, SND_Succ, strCount);
break;
}
}
close_com(1);
}
//
//
//
void main_Draw(int mnuIdx)
{
char *mnuItems[6] = {"1Collect",
"2DownLoad",
"3UpLoad",
"4BlackLight",
"5UserSetDate",
"6UserSetTime"};
SetVideoMode(VIDEO_NORMAL);
SetFont(FONT_6X8);
SetCursor(0);
clr_scr();
if(mnuIdx <= 10)
{
gotoxy(0, 0);
puts(mnuItems[0]);
gotoxy(0, 1);
puts(mnuItems[1]);
gotoxy(0, 2);
puts(mnuItems[2]);
gotoxy(0, 3);
puts(mnuItems[3]);
gotoxy(0, 4);
puts(mnuItems[4]);
gotoxy(0, 5);
puts(mnuItems[5]);
//gotoxy(0, 1);
//puts(mnuItems[6]);
}
SetVideoMode(VIDEO_REVERSE);
if((mnuIdx == 1))
gotoxy(0, 0);
else if((mnuIdx == 2) || (mnuIdx == 7))
gotoxy(0, 1);
else if((mnuIdx == 3) || (mnuIdx == 8))
gotoxy(0, 2);
else if((mnuIdx == 4) || (mnuIdx == 9))
gotoxy(0, 3);
else if((mnuIdx == 5) || (mnuIdx == 10))
gotoxy(0, 4);
else if((mnuIdx == 6))
gotoxy(0, 5);
puts(mnuItems[mnuIdx - 1]);
SetVideoMode(VIDEO_NORMAL);
}
//
//
//
void _CheckDataDraw(char* machSn,char* machPlaceNo,int mnuIdx)
{
char *mnuItems[3] = {"Items:",
"R/Q:",
"R/C:"};
char tempMachPlaceNo[20];
char tempStr[31];
char machQty[5];
char machThisQty[5];
clr_scr();
memset(tempMachPlaceNo,'/0',20);
memset(tempStr, '/0',31);
memset(machQty,'/0',5);
if(has_member(iHead,1,machPlaceNo))
{
get_member(iHead,1,tempMachPlaceNo);
_StrLeftLen(machThisQty,tempMachPlaceNo,11,4);
gotoxy(5,6);
puts(tempMachPlaceNo+15);
gotoxy(10,6);
puts(machThisQty);
}
get_member(iOperation,1,tempStr);
_StrLeftLen(machQty,tempStr,13,4);
SetVideoMode(VIDEO_NORMAL);
SetFont(FONT_6X8);
SetCursor(0);
gotoxy(0, 0);
puts(mnuItems[0]);
gotoxy(0, 1);
puts(machSn);
gotoxy(0,6);
puts(mnuItems[1]);
gotoxy(9,6);
puts("/");
gotoxy(0,7);
puts(mnuItems[2]);
gotoxy(5,7);
puts(tempStr+17);
gotoxy(9,7);
puts("/");
gotoxy(10,7);
puts(machQty);
SetCursor(1);
if(strlen(machSn)>16)
gotoxy(strlen(machSn),1);
else
gotoxy(strlen(machSn)-16,2);
}
//
//
//
void _CheckDataIsRight(char* machSn,char* tempMachPlaceNo)
{
int mnuIdx = 2;
int intMachNumber; //機台要求數量
int machQtyNumber; //機台實際數
int len=30;
char key;
char machNo[7]; //物品類號
char machPlace[6]; //機台產地
char machNumber[5]; //機台數量
char tempMachSn[31]; //臨時物品序號
char tempStr[31];
char machQty[5]; //機台實際數字符型
char sysDate[15]; //獲取系統時間
char tempSnAddDate[45];//將序號和時間向加
char machPlaceNo[12];
char machLength[3];
char tempOperation[22];
char tempLength[3];
InitScanner1();
memset(machNo, '/0', 7);
memset(machPlace, '/0', 6);
memset(machNumber, '/0', 5);
memset(tempMachSn,'/0',31);
memset(tempStr, '/0', 31);
memset(machQty, '/0', 5);
memset(sysDate,'/0',15);
memset(tempSnAddDate,'/0',45);
memset(machPlaceNo,'/0',12);
memset(machLength,'/0',3);
memset(tempOperation,'/0',22);
memset(tempLength,'/0',3);
//_StrRightLen(machNo,machSn,8,6);
if(strlen(machSn)<31&&strlen(machSn)>18)
{
_IntToStr(strlen(machSn),tempLength);
get_member(iOperation,1,tempOperation);
memcpy(machLength,tempOperation+11,2);
_StrRightLen(machNo,machSn,8,6);
_StrLeftLen(machPlace,machSn,2,5);
memcpy(machPlaceNo,machPlace,5);
memcpy(machPlaceNo+5,machNo,6);
memcpy(tempMachSn,machSn,strlen(machSn));
_StrPad(tempMachSn,strlen(tempMachSn),31,32);
}
if(strlen(machSn)<19)
{
_ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "Length < 19");
}
else if(strlen(machSn)>30)
{
_ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "Length > 30");
}
else if(strcmp(tempLength,machLength))
{
_ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "Length worry");
}
else if(has_member(iUpload,1,tempMachSn))
{
_ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "has been check");
}
else if(has_member (iBlack, 1,tempMachSn))
{
_ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) " in blackname");
}
else if(!has_member(iHead, 1,machPlaceNo))
{
_ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "don't has this thing");
}
else if(has_member(iHead, 1, machPlaceNo))
{
get_member(iHead, 1, tempStr);
_StrRight(machNumber,tempStr,4);
_StrLeftLen(machQty,tempStr,11,4);
machQtyNumber=atoi(machQty);
intMachNumber=atoi(machNumber);
if(machQtyNumber<=intMachNumber)
{
_ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "thing has full");
}
else
{
intMachNumber+= 1;
_IntToFormatStr(intMachNumber,machNumber);
memcpy(tempStr+15,machNumber,4);
update_member(iHead,1,tempStr);
get_member(iOperation,1,tempStr);
_StrRight(machQty,tempStr, 4);
_StrLeftLen(machNumber,tempStr,13,4);
machQtyNumber=atoi(machQty);
intMachNumber=atoi(machNumber);
if(intMachNumber>machQtyNumber)
{
machQtyNumber+= 1;
_IntToFormatStr(machQtyNumber,machQty);
memcpy(tempStr+17,machQty,4);
update_member(iOperation,1,tempStr);
get_time(sysDate);
memcpy(tempSnAddDate,tempMachSn,strlen(tempMachSn));
memcpy(tempSnAddDate+30,sysDate,14);
add_member(iUpload,tempSnAddDate);
_ShowSingleMsg(2, 2, 1, 200, SND_Succ,(char *) "Add Success");
}
else
{
_ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "count has full");
}
}
}
memcpy(tempMachPlaceNo,machPlaceNo,11);
_CheckDataDraw(machSn,machPlaceNo,mnuIdx);
}
//************************************************
// GetKeyData() : User set time.
//************************************************
void UserSetDate()
{
int pos,xpos,ypos,iday,ibeep[4] = {20,10, 0, 0};
int jump[2]={5,8};
char sbuf[15],stime[15],date[8],timeTemp[11],key;
pos=0;
xpos=1;
ypos=2;
clr_scr();
dis_alpha();
memset(timeTemp,'/0',11);
memset(stime,'/0',15);
get_time(stime);
memcpy(timeTemp,stime,4);
memset(timeTemp+4,'-',1);
memcpy(timeTemp+5,stime+4,2);
memset(timeTemp+7,'-',1);
memcpy(timeTemp+8,stime+6,2);
sbuf[0] = 0;
SetCursor (1);
gotoxy (xpos, ypos);
puts(timeTemp);
gotoxy(1,2);
while(1)
{
key = getchar();
if((key >= '0') && (key <= '9'))
{
gotoxy (xpos, ypos);
putchar (key);
sbuf[pos]=key;
xpos++;
pos++;
if(xpos==5||xpos==8)
{
xpos++;
}
gotoxy(xpos,ypos);
if (pos >= 8)
{
memcpy(stime,sbuf,8);
if(set_time(stime))
{
on_beeper(ibeep);
clr_scr();
return;
}
else
{
_ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "SetDate Err");
return;
}
}
}
if(key==KEY_ESC)
{
return;
}
}
}
//******************************************************************
// 設置系統時間
//******************************************************************
void UserSetTime()
{
int pos,xpos,ypos,iday,ibeep[4] = {20,10, 0, 0};
int jump[2]={5,8};
char sbuf[6],stime[15],date[8],timeTemp[6],key;
pos=0;
xpos=1;
ypos=2;
clr_scr();
dis_alpha();
memset(sbuf,'/0',6);
memset(timeTemp,'/0',6);
memset(stime,'/0',15);
get_time(stime);
memcpy(timeTemp,stime+8,2);
memset(timeTemp+2,':',1);
memcpy(timeTemp+3,stime+10,2);
sbuf[0] = 0;
SetCursor (1);
gotoxy (xpos, ypos);
puts(timeTemp);
gotoxy(1,2);
while(1)
{
key = getchar();
if((key >= '0') && (key <= '9'))
{
gotoxy (xpos, ypos);
putchar (key);
sbuf[pos]=key;
xpos++;
pos++;
if(xpos==3)
{
xpos++;
}
gotoxy(xpos,ypos);
if (pos >= 4)
{
memcpy(stime+8,sbuf,4);
if(set_time(stime))
{
on_beeper(ibeep);
clr_scr();
return;
}
else
{
_ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "SetTime Err");
return;
}
}
}
if(key==KEY_ESC)
{
return;
}
}
}
//-------------------------------------------------------------------------//
//******************************************************************
// 設置背靜燈光
//******************************************************************
void BlackLight()
{
int retval=1;
retval = _Inquire((char *)"Black Light", (char *)"", (char *)"1.NO",(char *)"2.OFF");
if(retval == 1)
lcd_backlit (1);
else
lcd_backlit (0);
return;
}
//******************************************************************
// 核查
//******************************************************************
void CheckData()
{
int mnuNo = 1;
int mnuIdx = 2;
char key;
int len=30;
char machSn[31]; // 物品序號
char machPlaceNo[12]; //物品地址和種類
char tempMachPlaceNo[12];
char saveKey;
InitScanner1();
memset(machSn, '/0',31);
memset(machPlaceNo,'/0',12);
memset(tempMachPlaceNo,'/0',12);
_CheckDataDraw(machSn,tempMachPlaceNo,mnuIdx);
while(1)
{
key=getchar();
if(Decode())
{
_GetScanData(machSn, len);
_CheckDataIsRight(machSn,tempMachPlaceNo);
}
else if(key == KEY_ESC)
{
HaltScanner1();
return;
}
else if(key == KEY_ALPHA)
{
en_alpha(8000);
}
else if(key == KEY_CR)
{
_CheckDataIsRight(machSn,tempMachPlaceNo);
}
else if(key >= '#' && key <= 'z')
{
_AddOneChar(machSn, len, key);
_CheckDataDraw(machSn,tempMachPlaceNo, mnuIdx);
}
else if(key == KEY_BS)
{
_BackOneChar(machSn);
_CheckDataDraw(machSn,tempMachPlaceNo,mnuIdx);
}
}
}
//******************************************************************
// 程式進入點
//******************************************************************
void main(void)
{
int mnuNo = 6;
int mnuIdx = 1;
char key;
CreateDatabase();
main_Draw(mnuIdx);
while(1)
{
key = getchar();
if((key == KEY_UP) || (key == KEY_DOWN) || ((key >= '1') && (key <= '6')))
{
mnuIdx = _GetMnuIdx(mnuNo, mnuIdx, key);
main_Draw(mnuIdx);
}
else if(key == KEY_CR)
{
switch(mnuIdx)
{
case 1 : CheckData(); break; //
case 2 : Download(); break; //
case 3 : Upload(); break; //
case 4 : BlackLight(); break; //
case 5 : UserSetDate(); break; //
case 6 : UserSetTime(); break; //
}
main_Draw(mnuIdx);
}
}
}