/*********************************************************************/ /* macro.h: Head file for Flexem studio Macro */ /*********************************************************************/ /* This file is part of the Flexem Studio tools. */ /* Copyright (c) 2010-2015 Flexem technology. All rights reserved. */ /* This software may only be used under the terms of a valid, current, */ /* end user licence from Flexem for a compatible version of Flexem studio software */ /* Nothing else gives you the right to use this software. */ /**********************************************************************/ #include #include #include #include /* Time structures for select() */ #include #include #include /*文件控制定义*/ #ifndef WIN32 #include typedef long long V_INT64; #else typedef __int64 V_INT64; #endif #define MAX_BYTES (64000) #define DIR char typedef int(*MacroOper)(const char* cmd, void *param, int* errno); typedef enum { FALSE = 0, TRUE = !FALSE } bool; #define MacroMain() _macro_main(MacroOper macroOper) int g_Errno; // Function to get error code int GetError(void) { return g_Errno; } enum DataType { DATA_INT16 = 1, DATA_INT32 = 2, DATA_FLOAT = 3, DATA_DOUBLE = 4, DATA_INT64 = 5, }; #define ByteOrder(data, macId, addrID, offset, nBytes, dataType) _ByteOrder(data, macId, addrID, offset, nBytes, dataType, macroOper) int _ByteOrder(void *pDat, const char* macId, const char* addrID, unsigned int offset, unsigned int nBytes, int dataType, MacroOper macroOper) { int param[] = { (int)pDat, (int)macId, (int)addrID, (int)offset, (int)nBytes, (int)dataType }; return macroOper("ByteOrder", param, &g_Errno); } /* return: 1--success(TRUE) 0--other error(FALSE, include timeout,comerror,undone,byte order failed) (-4)--bypass (add list failed)*/ #define GetMemEx(data, macId, addrID, offset, nBytes, dataType) _GetMemEX(data, macId, addrID, offset, nBytes, dataType, macroOper) int _GetMemEX(void *pDat, const char* macId, const char* addrID, unsigned int offset, unsigned int nBytes, int dataType, MacroOper macroOper) { int ret = _GetMem(pDat, macId, addrID, offset, nBytes, macroOper); if(TRUE != (ret)) { return ret; } else { return (_ByteOrder(pDat, macId, addrID, offset, nBytes, dataType, macroOper)); } } /* return: 1--success(TRUE) 0--other error(FALSE, include timeout,comerror,undone) (-4)--bypass (add list failed)*/ #define GetMem(data, macId, addrID, offset, nBytes) _GetMem(data, macId, addrID, offset, nBytes, macroOper) int _GetMem(void *pDat, const char* macId, const char* addrID, unsigned int offset, unsigned int nBytes, MacroOper macroOper) { if (nBytes > MAX_BYTES) { int regInfs[8] = { 0 }; int infPrm[8] = { (int)regInfs, (int)macId, (int)addrID }; macroOper("LoadRegInfo", infPrm, &g_Errno); int ret = TRUE; int iBytes = 0; while (iBytes < nBytes) { int leftBytes = nBytes - iBytes; if (leftBytes > MAX_BYTES) { leftBytes = MAX_BYTES; } int param[] = { (int)pDat + iBytes, (int)macId, (int)addrID, (int)offset + iBytes / regInfs[0], (int)leftBytes }; if (!macroOper("GetMem", param, &g_Errno)) { if(g_Errno == 4) ret = (-g_Errno); else ret = FALSE; break; } iBytes += leftBytes; } return ret; } int param[] = { (int)pDat, (int)macId, (int)addrID, (int)offset, (int)nBytes }; if (!macroOper("GetMem", param, &g_Errno)) { if(g_Errno == 4) return (-g_Errno); else return FALSE; } return TRUE; } #define GetBit(macroID, addrID, offset) _GetBit(macroID, addrID, offset, macroOper) bool _GetBit(const char* macroID, const char* addrID, unsigned int offset, MacroOper macroOper) { int bDat = 0; GetMem(&bDat, macroID, addrID, offset, 1); return !!(bDat & 0xff); } #define GetWord(macroID, addrID, offset) _GetWord(macroID, addrID, offset, macroOper) unsigned short _GetWord(const char* macroID, const char * addrID, unsigned int offset, MacroOper macroOper) { unsigned short wDat = 0; GetMem(&wDat, macroID, addrID, offset, sizeof(wDat)); ByteOrder(&wDat, macroID, addrID, offset, sizeof(wDat), DATA_INT16); return wDat; } #define GetDWord(macroID, addrID, offset) _GetDWord(macroID, addrID, offset, macroOper) unsigned int _GetDWord(const char* macroID, const char * addrID, unsigned int offset, MacroOper macroOper) { unsigned int dwDat = 0; GetMem(&dwDat, macroID, addrID, offset, sizeof(dwDat)); ByteOrder(&dwDat, macroID, addrID, offset, sizeof(dwDat), DATA_INT32); return dwDat; } #define GetQWord(macroID, addrID, offset) _GetQWord(macroID, addrID, offset, macroOper) V_INT64 _GetQWord(const char* macroID, const char * addrID, unsigned int offset, MacroOper macroOper) { V_INT64 qwDat = 0; GetMem(&qwDat, macroID, addrID, offset, sizeof(qwDat)); ByteOrder(&qwDat, macroID, addrID, offset, sizeof(qwDat), DATA_INT64); return qwDat; } #define GetFloat(macroID, addrID, offset) _GetFloat(macroID, addrID, offset, macroOper) float _GetFloat(const char* macroID, const char * addrID, unsigned int offset, MacroOper macroOper) { float fDat = 0; GetMem(&fDat, macroID, addrID, offset, sizeof(fDat)); ByteOrder(&fDat, macroID, addrID, offset, sizeof(fDat), DATA_FLOAT); return fDat; } #define GetDouble(macroID, addrID, offset) _GetDouble(macroID, addrID, offset, macroOper) double _GetDouble(const char* macroID, const char * addrID, unsigned int offset, MacroOper macroOper) { double dDat = 0; GetMem(&dDat, macroID, addrID, offset, sizeof(dDat)); ByteOrder(&dDat, macroID, addrID, offset, sizeof(dDat), DATA_DOUBLE); return dDat; } #include #define UTF8 0 #define UNICODE 1 #define GB2312 2 // va_arg(start, int); // va_list start; // va_start(start, macroOper); // printf("hello!!!!!!!!!!!\n\r"); // _SetMem(str, macroID, addrID, offset, str_length, macroOper); #define SetString(macroID, addrID, offset, format, str, ...) _SetString(macroID, addrID, offset, format, str, macroOper, ##__VA_ARGS__) int _SetString(const char* macroID, const char * addrID, unsigned int offset, unsigned char format, char * str, MacroOper macroOper, ...) { va_list start; va_start(start, macroOper); char* str_temp = str; unsigned char des[MAX_BYTES] = {0}; unsigned short test[MAX_BYTES/2] = {0}; int des_length = 0, temp = 0, i = 0, j = 0; //%d %x int des_int = 0, des_int_length = 0; //%f double des_float = 0.0, temp_float = 0; int des_float_length = 0, temp_float2int = 0; //%c unsigned char des_char = 0; //%s unsigned char *des_str = NULL, *temp_str = NULL; int des_str_length = 0; while(*str_temp) { //"adadada%daa%d", 99,100 if(*(str_temp) == '%') { switch(*(str_temp + 1)) { case 'd': { des_int = va_arg(start, int); if(des_int >= 0) { temp = des_int; for(des_int_length = 0; temp !=0; des_int_length++) //获取数据的长度 temp = temp/10; if(des_int == 0) //数值为0时长度取1 des_int_length = 1; temp = des_int; for(i = des_int_length; i > 0; i--) //获取每一位对应的ASCII码 { des[des_length + i - 1] = temp%10 + '0'; temp = temp/10; } des_length = des_length + des_int_length; //获取当前字符串的字节长度 str_temp = str_temp + 2; //将读取位置放到%d的下一位 } else { temp = -des_int; for(des_int_length = 0; temp !=0; des_int_length++) //获取数据的长度 temp = temp/10; temp = -des_int; for(i = des_int_length + 1; i > 1; i--) //获取每一位对应的ASCII码.需要保留'-'的位置 { des[des_length + i - 1] = temp%10 + '0'; temp = temp/10; } des[des_length] = '-'; //补个负号 des_length = des_length + des_int_length + 1; //获取当前字符串的字节长度 str_temp = str_temp + 2; //将读取位置放到%d的下一位 } } break; case 'x': { des_int = va_arg(start, int); if(des_int >= 0) { temp = des_int; for(des_int_length = 0; temp !=0; des_int_length++) //获取数据的长度 temp = temp/16; if(des_int == 0) //数值为0时长度取1 des_int_length = 1; temp = des_int; for(i = des_int_length; i > 0; i--) //获取每一位对应的ASCII码 { des[des_length + i - 1] = ( temp%16 >= 10)?(temp%16 + 'A' - 10):(temp%16 + '0'); temp = temp/16; } des_length = des_length + des_int_length; //获取当前字符串的字节长度 str_temp = str_temp + 2; //将读取位置放到%d的下一位 } else { temp = -des_int; for(des_int_length = 0; temp !=0; des_int_length++) //获取数据的长度 temp = temp/16; temp = -des_int; for(i = des_int_length + 1; i > 1; i--) //获取每一位对应的ASCII码.需要保留'-'的位置 { des[des_length + i - 1] = ( temp%16 >= 10)?(temp%16 + 'A' - 10):(temp%16 + '0'); temp = temp/16; } des[des_length] = '-'; //补个负号 des_length = des_length + des_int_length + 1; //获取当前字符串的字节长度 str_temp = str_temp + 2; //将读取位置放到%d的下一位 } } break; case 'f': { des_float = va_arg(start, double); //12.34 if(des_float >= 0) { temp_float = des_float; temp_float2int = (int)(temp_float*100); //保留小数点后两位小数的数据 for(des_float_length = 0; temp_float2int != 0; des_float_length++) //获取数据的长度 temp_float2int = temp_float2int/10; if((des_float == 0) || (des_float_length<3)) //数值为0时长度取3 0.00->000 整数部分为0时则至少0xx长度取3 des_float_length = 3; temp_float2int = (int)(temp_float*100); //保留小数点后两位小数的数据 for(i = des_float_length + 1; i > 0; i--) //获取每一位对应的ASCII码.注意'.'的位置 { if(i == des_float_length - 1) //保留两位小数.des_float_length + 1 - 2 des[des_length + i - 1] = '.'; else { des[des_length + i - 1] = temp_float2int%10 + '0'; temp_float2int = temp_float2int/10; } } des_length = des_length + des_float_length + 1; //获取当前字符串的字节长度 str_temp = str_temp + 2; //将读取位置放到%f的下一位 } else { temp_float = -des_float; temp_float2int = (int)(temp_float*100); //保留小数点后两位小数的数据 for(des_float_length = 0; temp_float2int != 0; des_float_length++) //获取数据的长度 temp_float2int = temp_float2int/10; if(des_float_length<3) //数值为0时长度取3 0.00->000 整数部分为0时则至少0xx长度取3 des_float_length = 3; temp_float2int = (int)(temp_float*100); //保留小数点后两位小数的数据 for(i = des_float_length + 2; i > 1; i--) //获取每一位对应的ASCII码.注意'.'的位置 { if(i == des_float_length) //保留两位小数.des_float_length + 2 - 2 des[des_length + i - 1] = '.'; else { des[des_length + i - 1] = temp_float2int%10 + '0'; temp_float2int = temp_float2int/10; } } des[des_length] = '-'; //补个负号 des_length = des_length + des_float_length + 2; //获取当前字符串的字节长度 str_temp = str_temp + 2; //将读取位置放到%f的下一位 } } break; case 'c': { des_char = va_arg(start, int); // 'A' des[des_length++] = des_char; str_temp = str_temp + 2; //将读取位置放到%c的下一位 } break; case 's': { //"" des_str = va_arg(start, char*); temp_str = des_str; temp = des_length; // 'ABCDEFGH' while(*(temp_str)) { des[temp++] = *(temp_str++); des_str_length++; } des_length = des_length + des_str_length; //获取当前字符串的字节长度 str_temp = str_temp + 2; //将读取位置放到%s的下一位 } break; case '%': { des_char = '%'; // 'A' des[des_length++] = des_char; str_temp = str_temp + 2; //将读取位置放到%c的下一位 } break; default: return -4; break; } } else des[des_length++] = *(str_temp++); } des[des_length] = *(str_temp); temp = 0; switch(format) //选择HMI显示所用的编码方式 { case UTF8: _SetMem(des, macroID, addrID, offset, des_length, macroOper); va_end(start); return 1; break; case UNICODE: { _Utf8Str2Utf16Str(des, test, macroOper); while(test[temp++]); _SetMem(test, macroID, addrID, offset, (temp -1)*2, macroOper); va_end(start); return 1; } break; case GB2312: { _Utf8Str2Utf16Str(des, test, macroOper); _Utf16Str2GbStr(test, des, macroOper); while(des[temp++]); _SetMem(des, macroID, addrID, offset, temp - 1, macroOper); va_end(start); return 1; } break; default: return 0; break; } va_end(start); return 0; } #define SetMemEx(data, macId, addrID, offset, nBytes, dataType) _SetMemEX(data, macId, addrID, offset, nBytes, dataType, macroOper) int _SetMemEX(void *pDat, const char* macId, const char* addrID, unsigned int offset, unsigned int nBytes, int dataType, MacroOper macroOper) { if(1 != (_ByteOrder(pDat, macId, addrID, offset, nBytes, dataType, macroOper))) return 0; else return (_SetMem(pDat, macId, addrID, offset, nBytes, macroOper)); } #define SetMem(data, macId, addrID, offset, nBytes) _SetMem(data, macId, addrID, offset, nBytes, macroOper) int _SetMem(void* pDat, const char* macId, const char* addrID, int offset, unsigned int nBytes, MacroOper macroOper) { if (nBytes > MAX_BYTES) { int regInfs[8] = { 0 }; int infPrm[8] = { (int)regInfs, (int)macId, (int)addrID }; macroOper("LoadRegInfo", infPrm, &g_Errno); int ret = TRUE; int iBytes = 0; while (iBytes < nBytes) { int leftBytes = nBytes - iBytes; if (leftBytes > MAX_BYTES) { leftBytes = MAX_BYTES; } int param[] = { (int)pDat + iBytes, (int)macId, (int)addrID, (int)offset + iBytes / regInfs[0], (int)leftBytes }; if (!macroOper("SetMem", param, &g_Errno)) { if(g_Errno == 4) ret = (-g_Errno); else ret = FALSE; break; } iBytes += leftBytes; } return ret; } int param[] = { (int)pDat, (int)macId, (int)addrID, (int)offset, (int)nBytes }; if (!macroOper("SetMem", param, &g_Errno)) { if(g_Errno == 4) return (-g_Errno); else return FALSE; } return TRUE; } #define SetBit(macroID, addrID, offset,value) _SetBit(macroID, addrID, offset, value, macroOper) int _SetBit(const char* macroID, const char* addrID, unsigned int offset, bool value, MacroOper macroOper) { return SetMem(&value, macroID, addrID, offset, 1); } #define SetWord(macroID, addrID, offset,value) _SetWord(macroID, addrID, offset,value, macroOper) int _SetWord(const char* macroID, const char * addrID, unsigned int offset, short value, MacroOper macroOper) { ByteOrder(&value, macroID, addrID, offset, sizeof(short), DATA_INT16); return SetMem(&value, macroID, addrID, offset, sizeof(short)); } #define SetDWord(macroID, addrID, offset, value) _SetDWord(macroID, addrID, offset,value, macroOper) int _SetDWord(const char* macroID, const char * addrID, unsigned int offset, int value, MacroOper macroOper) { ByteOrder(&value, macroID, addrID, offset, sizeof(int), DATA_INT32); return SetMem(&value, macroID, addrID, offset, sizeof(int)); } #define SetQWord(macroID, addrID, offset, value) _SetQWord(macroID, addrID, offset,value, macroOper) int _SetQWord(const char* macroID, const char * addrID, unsigned int offset, V_INT64 value, MacroOper macroOper) { ByteOrder(&value, macroID, addrID, offset, sizeof(V_INT64), DATA_INT64); return SetMem(&value, macroID, addrID, offset, sizeof(V_INT64)); } #define SetFloat(macroID, addrID, offset, value) _SetFloat(macroID, addrID, offset,value, macroOper) int _SetFloat(const char* macroID, const char * addrID, unsigned int offset, float value, MacroOper macroOper) { ByteOrder(&value, macroID, addrID, offset, sizeof(float), DATA_FLOAT); return SetMem(&value, macroID, addrID, offset, sizeof(float)); } #define SetDouble(macroID, addrID, offset, value) _SetDouble(macroID, addrID, offset,value, macroOper) int _SetDouble(const char* macroID, const char * addrID, unsigned int offset, double value, MacroOper macroOper) { ByteOrder(&value, macroID, addrID, offset, sizeof(double), DATA_DOUBLE); return SetMem(&value, macroID, addrID, offset, sizeof(double)); } #define CallMacro(macroID) _CallMacro(macroID, macroOper) int _CallMacro(const char * macroID, MacroOper macroOper) { int param[] = { (int)macroID }; return macroOper("CallMacro", param, &g_Errno); } #define Delay(mS) _Delay(mS,macroOper) void _Delay(unsigned int mS, MacroOper macroOper) { int param[] = { (int)mS }; macroOper("Delay", param, &g_Errno); return; } #define Outport(Port, buff, data_count) _Outport(Port, buff, data_count, macroOper) int _Outport(unsigned int Port, void * buff, unsigned int data_count, MacroOper macroOper) { int param[] = { (int)Port, (int)buff, (int)data_count }; return macroOper("Outport", param, &g_Errno); } #define Inport(Port, buff, data_count, waitMs) _Inport(Port, buff, data_count, waitMs, macroOper) int _Inport(unsigned int Port, void * buff, unsigned int data_count, unsigned int waitMs, MacroOper macroOper) { int param[] = { (int)Port, (int)buff, (int)data_count, (int)waitMs }; return macroOper("Inport", param, &g_Errno); } #define InportAuto(Port, buff, data_count, timeout,waitMs) _InportAuto(Port, buff, data_count,timeout, waitMs, macroOper) int _InportAuto(unsigned int Port, void * buff, unsigned int data_count,int timeout, unsigned int waitMs, MacroOper macroOper) { int param[] = { (int)Port, (int)buff, (int)data_count, (int) timeout,(int)waitMs }; return macroOper("InportAuto", param, &g_Errno); } #define OpenSocket(dstIp, dstPort, flag) _OpenSocket(dstIp, dstPort, flag, macroOper) int _OpenSocket(const char* dstIp, unsigned int dstPort, unsigned int flag, MacroOper macroOper) { int param[]={(int)dstIp, (int)dstPort, (int)flag}; return macroOper("OpenSocket",param,&g_Errno); } #define Listen_TCP(dstPort) _OpenSocket("TCP", dstPort, 0x3, macroOper) #define Listen_UDP(dstPort) _OpenSocket("UDP", dstPort, 2, macroOper) #define AcceptSocket(listenRet) _AcceptSocket(listenRet, macroOper) int _AcceptSocket(int listenRet, MacroOper macroOper) { int param[]={(int) listenRet }; return macroOper("AcceptSocket",param,&g_Errno); } #define SendSocket(sockNo, buff, data_count) _SendSocket(sockNo, buff, data_count, macroOper) int _SendSocket(int sockNo, void * buff, unsigned int data_count, MacroOper macroOper) { int param[]={(int)sockNo, (int)buff, (int)data_count}; return macroOper("SendSocket",param,&g_Errno); } #define RecvSocket(sockNo, buff, data_count, waitMs) _RecvSocket(sockNo, buff, data_count, waitMs, macroOper) int _RecvSocket(int sockNo, void * buff, unsigned int data_count, unsigned int waitMs, MacroOper macroOper) { int param[]={(int)sockNo, (int)buff, (int)data_count, (int)waitMs}; return macroOper("RecvSocket",param,&g_Errno); } #define CloseSocket(sockNo) _CloseSocket(sockNo, macroOper) int _CloseSocket(int sockNo, MacroOper macroOper) { int param[]={(int)sockNo}; return macroOper("CloseSocket",param,&g_Errno); } #define SetComParam(Port, baudRate, dataBits, stopBits, parity, workMode) _SetComParam(Port, baudRate, dataBits, stopBits, parity, workMode, macroOper) int _SetComParam(unsigned int Port, int baudRate, int dataBits, int stopBits, int parity, int workMode, MacroOper macroOper) { int param[] = { (int)Port, (int)baudRate, (int)dataBits, (int)stopBits, (int)parity, (int)workMode }; return macroOper("SetComParam", param, &g_Errno); } #define Debug(Port, format, arg...) do{char debugBuf[4096] = {0};\ sprintf(debugBuf, format, ##arg);\ _Debug(Port, debugBuf, strlen(debugBuf), macroOper);}while(0) int _Debug(unsigned int Port, void * buff, unsigned int data_count, MacroOper macroOper) { int param[] = { (int)Port, (int)buff, (int)data_count }; return macroOper("Debug", param, &g_Errno); } #define SqlCmdEx(dbFile, cmd) _SqlCmdEx(dbFile, cmd, macroOper) int _SqlCmdEx(char* dbFile, const char* cmd, MacroOper macroOper) { int param[] = { (int)dbFile, (int)cmd }; macroOper("SqlCmdEx", param, &g_Errno); return g_Errno; } #define SqlSelectEx(dbFile, cmd, pRet, nRow, nCol) _SqlSelectEx(dbFile, cmd, &pRet, &nRow, &nCol, macroOper) int _SqlSelectEx(char* dbFile, const char* cmd, char ***pResult, int *nRow, int *nCol, MacroOper macroOper) { int param[] = { (int)dbFile, (int)cmd, (int)pResult, (int)nRow, (int)nCol }; macroOper("SqlSelectEx", param, &g_Errno); return g_Errno; } #define SqlCmd(dataNo, cmd) _SqlCmd(dataNo, cmd, macroOper) int _SqlCmd(int dataNo, const char* cmd, MacroOper macroOper) { int param[] = { (int)dataNo, (int)cmd }; macroOper("SqlCmd", param, &g_Errno); return g_Errno; } #define SqlSelect(dataNo, cmd, pRet, nRow, nCol) _SqlSelect(dataNo, cmd, &pRet, &nRow, &nCol, macroOper) int _SqlSelect(int dataNo, const char* cmd, char ***pResult, int *nRow, int *nCol, MacroOper macroOper) { int param[] = { (int)dataNo, (int)cmd, (int)pResult, (int)nRow, (int)nCol }; macroOper("SqlSelect", param, &g_Errno); return g_Errno; } #define SqlFree(pRet) _SqlFree((const char**)pRet, macroOper) int _SqlFree(const char** pRet, MacroOper macroOper) { int param[] = { (int)pRet }; macroOper("SqlFree", param, &g_Errno); return g_Errno; } #define Utf16Strlen(utf16Str) _Utf16Strlen(utf16Str, macroOper) int _Utf16Strlen(const unsigned short * utf16Str, MacroOper macroOper) { int param[] = { (int)utf16Str }; return macroOper("Utf16Strlen", param, &g_Errno); } #define Utf8Str2Utf16Str(srcUtf8Str, dstUtf16Str) _Utf8Str2Utf16Str(srcUtf8Str, dstUtf16Str, macroOper) int _Utf8Str2Utf16Str(const char* srcUtf8Str, unsigned short * dstUtf16Str, MacroOper macroOper) { int param[] = { (int)srcUtf8Str, (int)dstUtf16Str }; return macroOper("Utf8-Utf16", param, &g_Errno); } #define Utf16Str2Utf8Str(srcUtf16Str, dstUtf8Str) _Utf16Str2Utf8Str(srcUtf16Str, dstUtf8Str, macroOper) int _Utf16Str2Utf8Str(const unsigned short * srcUtf16Str, char* dstUtf8Str, MacroOper macroOper) { int param[] = { (int)srcUtf16Str, (int)dstUtf8Str }; return macroOper("Utf16-Utf8", param, &g_Errno); } #define Utf16Str2GbStr(srcUtf16Str, dstGb2312Str) _Utf16Str2GbStr(srcUtf16Str, dstGb2312Str, macroOper) int _Utf16Str2GbStr(const unsigned short * srcUtf16Str, char* dstGb2312Str, MacroOper macroOper) { int param[] = { (int)srcUtf16Str, (int)dstGb2312Str }; return macroOper("Utf16-Gb", param, &g_Errno); } #define GbStr2Utf16Str(srcGb2312Str, dstUtf16Str) _GbStr2Utf16Str(srcGb2312Str, dstUtf16Str, macroOper) int _GbStr2Utf16Str(const char* srcGb2312Str, unsigned short * dstUtf16Str, MacroOper macroOper) { int param[] = { (int)srcGb2312Str, (int)dstUtf16Str }; return macroOper("Gb-Utf16", param, &g_Errno); } unsigned short CRC16(unsigned char *Data, unsigned int len) { unsigned short crc = 0xFFFF; unsigned char j, Tmp = 0; unsigned int i; unsigned int nLength = len; unsigned char buf[8] = { 0 }; for (i = 0; i> 1; if (Tmp)crc = (crc ^ 0xA001); } } return crc; } typedef struct { short angle1; short angle2; }FArc; typedef struct { short x; short y; }FPoint; typedef struct { short x1; short y1; short x2; short y2; }FRect; typedef struct { unsigned short flag; //bit0~7(����)-(0-������,1-ʵ��,2-����,...) unsigned short width; //��� unsigned int color; }FPen; typedef struct { unsigned int flag; //bit0~3(������)-(0-�����,1-ͼ�����,2-�������,3-�Զ���ͼ��) //bit8~15(������)-(0-������,1-��ˢ��ɫ���,...) unsigned int colors[2]; }FBrush; #define HmiColorBits _HmiColorBits(macroOper) int _HmiColorBits(MacroOper macroOper) { int inf[16] = { 0 }; int param[] = { (int)inf }; macroOper("LoadSysInfo", param, &g_Errno); return inf[2]; } #define FRgb(r, g, b) _FRgb(r, g, b, macroOper) unsigned int _FRgb(unsigned char r, unsigned char g, unsigned char b, MacroOper macroOper) { int inf[16] = { 0 }; int param[] = { (int)inf }; macroOper("LoadSysInfo", param, &g_Errno); unsigned int ret = 0; if (inf[3] == 16) { if (inf[0] & 0x1) { ret = ((b & 0xf8) << 8) | ((g & 0xfc) << 3) | ((r >> 3) & 0x1f); } else { ret = ((r & 0xf8) << 8) | ((g & 0xfc) << 3) | ((b >> 3) & 0x1f); } } else { if (inf[0] & 0x1) { ret = (b << 16) | (g << 8) | r; } else { ret = (r << 16) | (g << 8) | b; } } return ret; } #define CreateCanvas(w, h) _CreateCanvas(w, h, macroOper) int _CreateCanvas(int w, int h, MacroOper macroOper) { int param[] = { (int)w, (int)h }; return macroOper("CreateCanvas", param, &g_Errno); } #define FreeCanvas(canvasNo) _FreeCanvas(canvasNo, macroOper) int _FreeCanvas(int canvasNo, MacroOper macroOper) { int param[] = { (int)canvasNo }; return macroOper("FreeCanvas", param, &g_Errno); } #define DrawLines(pts, n, pen, canvasNo) _DrawLines(pts, n, &pen, canvasNo, macroOper) int _DrawLines(const FPoint pts[], int n, const FPen *pPen, int canvasNo, MacroOper macroOper) { int param[] = { (int)pts, (int)n, (int)pPen, (int)canvasNo }; return macroOper("DrawLine", param, &g_Errno); } #define DrawPolygon(pts, n, brush, canvasNo) _DrawPolygon(pts, n, &brush, canvasNo, macroOper) int _DrawPolygon(const FPoint pts[], int n, const FBrush*pBrush, int canvasNo, MacroOper macroOper) { int param[] = { (int)pts, (int)n, (int)pBrush, (int)canvasNo }; return macroOper("DrawPolygon", param, &g_Errno); } #define LoadArcPt(rt, arc, pts, ccw) _LoadArcPt(&rt, &arc, pts, ccw, macroOper) int _LoadArcPt(const FRect *rt, const FArc *arc, FPoint pts[], int ccw, MacroOper macroOper) { int param[] = { (int)rt, (int)arc, (int)pts, (int)ccw }; return macroOper("LoadArcPt", param, &g_Errno); } #define MergePdf(dstPdf, srcPdfs, n) _MergePdf(dstPdf, srcPdfs, n, macroOper) int _MergePdf(const char* dstPdf, const char* srcPdfs[], int n, MacroOper macroOper) { int param[] = { (int)dstPdf, (int)srcPdfs, n }; return macroOper("MergePdf", param, &g_Errno); } #define DrawCycle(rt, pPen, pBrush, canvasNo) _DrawCycle(&rt, pPen, pBrush, canvasNo, macroOper) int _DrawCycle(const FRect *rt, const FPen *pPen, const FBrush*pBrush, int canvasNo, MacroOper macroOper) { int ret = FALSE; FPoint pts[8192]; FArc arc = {0, 360}; int n = LoadArcPt(*rt, arc, pts, 0); if (pBrush) { ret = DrawPolygon(pts, n, *pBrush, canvasNo); } if (pPen) { pts[n] = pts[0]; ++n; ret = DrawLines(pts, n, *pPen, canvasNo); } return ret; } #define RenderCanvas(canvasNo, winNo, x, y) _RenderCanvas(canvasNo, winNo, x, y, macroOper) int _RenderCanvas(int canvasNo, int winNo, int x, int y, MacroOper macroOper) { int param[] = { (int)canvasNo, (int)winNo, (int)x, (int)y }; return macroOper("Render", param, &g_Errno); } //scale-扇环内外径比例,范围0~99,0表示扇形 #define DrawPie(rt, arc, scale, pPen, pBrush, canvasNo) _DrawPie(&rt, &arc, scale, pPen, pBrush, canvasNo, macroOper) int _DrawPie(const FRect *rt, const FArc *arc, int scale, const FPen *pPen, const FBrush*pBrush, int canvasNo, MacroOper macroOper) { int param[] = { (int)rt, (int)arc, (int)scale, (int)pPen, (int)pBrush, (int)canvasNo }; return macroOper("DrawPie", param, &g_Errno); } #define DrawArc(rt, arc, pen, canvasNo) _DrawArc(&rt, &arc, &pen, canvasNo, macroOper) int _DrawArc(const FRect *rt, const FArc *arc, const FPen *pPen, int canvasNo, MacroOper macroOper) { FPoint pts[8192*4]; int n = LoadArcPt(*rt, *arc, pts, 0); return DrawLines(pts, n, *pPen, canvasNo); } #define SetCanParam(baudRate, workMode) _SetCanParam(baudRate, workMode) int _SetCanParam(int baudRate, unsigned int workMode) { char ch[100]; if(workMode>0) { sprintf(ch,"/bin/cantools/ip link set can0 type can bitrate %d triple-sampling on",baudRate); system(ch); system("/bin/cantools/ip link set can0 up "); system("/bin/cantools/candump2 can0 "); // printf("setcan \n"); } else { system("/bin/cantools/ip link set can0 down "); } return 0; } void Uint8_to_HexString(char InputData, char *OutputString) { char TmpData = 0; TmpData = InputData / 16; if(TmpData < 10) OutputString[0] = '0' + TmpData; else if(TmpData < 16) OutputString[0] = 'A' + (TmpData - 10); TmpData = InputData % 16; if(TmpData < 10) OutputString[1] = '0' + TmpData; else if(TmpData < 16) OutputString[1] = 'A' + (TmpData - 10); return; } #define CanSend(id,buff,data_count,flag) _CanSend(id, buff,data_count,flag) int _CanSend(unsigned int id, char * buff, unsigned int data_count, unsigned int flag) { int i; char str[100]; char ch[50]; char ptr=0; memset(str,0,100); if(flag>0) { sprintf(str,"/bin/cantools/cansend2 can0 %08x#",id); } else { sprintf(str,"/bin/cantools/cansend2 can0 %03x#",id); } printf("cansend can0 %s \n",str); for(i=0;i100)||(beep_delay<20)||(beep_delay>5000)) { close(fd); return 0; } beepioctl.times=times; beepioctl.beep_delay=beep_delay; #ifndef WIN32 ioctl(fd, IOCTL_FE_MISC_Beep, &beepioctl); #endif close(fd); return 1; }