// transferServiceExe.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "transferServiceExe.h" #include "json/json.h" int _tmain(int argc, CHAR* argv[]) { printf("start transferServiceExe\n"); if (argc <= 1) { printf("exit \n"); return 1; } for (int i = 0; i < argc; i++){ printf("%s ", argv[i]); } printf("\n"); if (strcmp(argv[1], "readWeight") == 0){ readWeight(argv[2], atoi(argv[3]), atoi(argv[4]), atoi(argv[5]), atoi(argv[6])); } else if (strcmp(argv[1], "manualTrigger") == 0) { manualTrigger(argv[2], atoi(argv[3])); } else if (strcmp(argv[1], "captureImageV2") == 0) { captureImageV2(argv[2], argv[3], atoi(argv[4]), argv[5], argv[6]); } else if (strcmp(argv[1], "displayInfoV2") == 0) { displayInfoV2(argv[2], atoi(argv[3]), argv[4], argv[5], argv[6], atoi(argv[7])); } else if (strcmp(argv[1], "openDoorV1") == 0){ openDoorV1(argv[2], atoi(argv[3]), atoi(argv[4])); } else if (strcmp(argv[1], "playVoiceV3") == 0) { playVoiceV3(argv[2], argv[3], atoi(argv[4]),atoi(argv[5])); } return 0; } double readWeight(char * pPort, unsigned long BaudRate, unsigned char ByteSize, unsigned char Parity, unsigned char StopBits) { HANDLE hCom; BOOL bRet = FALSE; double dRet = 0.0; hCom = CreateFile(pPort, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); if (hCom == (HANDLE)-1) { printf("failure %s\n", pPort); return dRet; } printf("open %s\n", pPort); struct _DCB m_dcb; GetCommState(hCom, &m_dcb); m_dcb.BaudRate = BaudRate; m_dcb.ByteSize = ByteSize; m_dcb.Parity = Parity; m_dcb.StopBits = ONESTOPBIT; bRet = SetCommState(hCom, &m_dcb); COMMTIMEOUTS comTimeOut; comTimeOut.ReadIntervalTimeout = 10; comTimeOut.ReadTotalTimeoutMultiplier = 10; comTimeOut.ReadTotalTimeoutConstant = 8; comTimeOut.WriteTotalTimeoutMultiplier = 0; comTimeOut.WriteTotalTimeoutConstant = 0; SetCommTimeouts(hCom, &comTimeOut); char str[12] = { '\0' }; unsigned long wCount; int i = 0; int j = 0; int t = 0; int weight = 0; int w1 = 0; int w2 = 0; int w3 = 0; int w4 = 0; int w5 = 0; int w6 = 0; int w7 = 0; int decimalSize = 0; int lastWeitht = 0; bRet = false; Sleep(16); // i don't know why, without Sleep(16), PurgeComm function below // can't work. maybe it's a timing problem. and "16" is the minimum // value that make it works. // discards all characters in the input buffer if (!PurgeComm(hCom, PURGE_RXCLEAR)) { printf("clear serial buffer error"); } int k = 0; bool bFlag = false; while (true){ if (j >= 100){ break; } memset(str, 0, 12); bRet = ReadFile(hCom, str, 12, &wCount, NULL); if (wCount == 12){ if (bFlag == false) { bFlag = true; j = 0; } //printf("i=%d,j=%d,port=%s\n", i, j, pPort); //for (int k = 0; k < 12; k++){ // printf("%02X", str[k]); //} //printf("\n"); w1 = (str[2] - '0') * 100000; w2 = (str[3] - '0') * 10000; w3 = (str[4] - '0') * 1000; w4 = (str[5] - '0') * 100; w5 = (str[6] - '0') * 10; w6 = (str[7] - '0'); w7 = (str[8] - '0'); decimalSize = 1; for (int l = 0; l < w7; l++){ decimalSize *= 10; } weight = w1 + w2 + w3 + w4 + w5 + w6; printf("weight=%d,lastWeitht=%d,i=%d,j=%d,port=%s\n", weight, lastWeitht, i,j,pPort); if (weight != lastWeitht){ i = 0; if (weight > 0) { lastWeitht = weight; } } else{ if (weight > 0) { i++; } if (i >= 20){ break; } } // if (weight == 0){ if (t >= 50){ break; } t++; } if (decimalSize != 0){ dRet = lastWeitht / decimalSize; } else{ dRet = lastWeitht; } } SYSTEMTIME st; GetLocalTime(&st); printf("%d-%d-%d %d:%d:%d:%d,port=%s\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, pPort); Sleep(200); fflush(stdout); j++; } printf("weight:%lf\n", dRet); CloseHandle(hCom); return dRet; } //void initIntegrated(char * ip) { //#ifdef _QI_LI // printf("openDoorV4 start\n"); // // E_ReturnCode eCode = DC_NO_ERROR; // Net_Init(); // // DCHANDLE handle = Net_AddCamera(ip); // // if (handle == -1) { // printf("init camera error\n"); // // return; // } // eCode = Net_ConnCamera(handle, 30000, 5); // int nConn = 0; // if (eCode != DC_NO_ERROR) { // printf("connect camera error,error code %d\n", eCode); // while (nConn < 3) { // // } // Net_DelCamera(handle); // Net_UNinit(); // // return; // } // // T_ControlGate ControlGate; // memset(&ControlGate, 0, sizeof(ControlGate)); // ControlGate.ucState = 1; // // eCode = Net_GateSetup(handle, &ControlGate); // if (eCode != DC_NO_ERROR) { // for (int i = 0; i < 3; i++) { // // } // printf("open door error,error code %d\n", eCode); // } // // Net_DisConnCamera(handle); // Net_DelCamera(handle); // // Net_UNinit(); // // printf("openDoorV4 end\n"); //#endif //} //海康摄像机 bool captureImageV2(char *ip, char *fileName, unsigned short pPort, char *userName, char *password) { #ifdef _HK_CAMERA NET_DVR_Init(); //Init SDK //NET_DVR_SetLogToFile(3, "d:\\capture", 0); DWORD err = GetLastError(); NET_DVR_DEVICEINFO_V30 DeviceInfoTmp; memset(&DeviceInfoTmp, 0, sizeof(NET_DVR_DEVICEINFO_V30)); LONG lLoginID = NET_DVR_Login_V30(ip, pPort, userName, password, &DeviceInfoTmp); printf("%s,%d,%s,%s\n", ip, pPort, userName, password); if (lLoginID == -1) { err = GetLastError(); printf("NET_DVR_Login_V30 error %d,%s\n", err, ip); return false; } else{ printf("%s\n", ip); } NET_DVR_CLIENTINFO ClientInfo; ClientInfo.hPlayWnd = NULL; ClientInfo.lChannel = 1; ClientInfo.lLinkMode = 0; ClientInfo.sMultiCastIP = NULL; //TRACE("Channel number:%d\n", ClientInfo.lChannel); long m_lPlayHandle = NET_DVR_RealPlay_V30(lLoginID, &ClientInfo, NULL, NULL, TRUE); if (-1 == m_lPlayHandle) { DWORD err = NET_DVR_GetLastError(); //CString m_csErr; //MessageBox(m_csErr); printf("NET_DVR_RealPlay_V30 error %d\n", err); return false; } NET_DVR_JPEGPARA JpgPara = { 0 }; JpgPara.wPicSize = 0xff; JpgPara.wPicQuality = 0; LONG iCurChan = 1; if (!NET_DVR_CaptureJPEGPicture(lLoginID, iCurChan, &JpgPara, fileName)) { DWORD err = NET_DVR_GetLastError(); printf("NET_DVR_CaptureJPEGPicture error %d,%s\n", err, ip); return false; } NET_DVR_StopRealPlay(lLoginID); NET_DVR_Logout_V30(lLoginID); NET_DVR_Cleanup(); printf("captureImage:success"); #endif return true; } //先科网络音柱 void playVoiceV3(char * ip, char *json, int port,int maxVol) { CNetSocket socket; string strBody; char *buffer = new char [MAX_CMD_SIZE]; int size = strlen(json); size = base64_decode_gbk((uint8*)json, size, buffer); buffer[size] = 0; printf("%s\n", buffer); char *ipVoiceBoxParam = new char[MAX_CMD_SIZE]; //弘盛发专用 //sprintf(ipVoiceBoxParam,"{\"loop\":{\"gap\":2,\"times\":2},\"prompt\":false,\"queue\":false,\"rcn\":\"0\",\"rdn\":\"0\",\"reg\":0,\"speed\":50,\"sync\":false,\"text\":\"%s\",\"vcn\":\"xiaoyan\",\"volume\":100}", json); sprintf(ipVoiceBoxParam, "{\"loop\":{\"gap\":2,\"times\":2},\"prompt\":false,\"queue\":false,\"rcn\":\"0\",\"rdn\":\"0\",\"reg\":0,\"speed\":50,\"sync\":false,\"text\":\"%s\",\"vcn\":\"xiaoyan\",\"volume\":%d}", buffer, maxVol); //printf("json=%s\n", json); //string decodeJson = json; string decodeJson((char *)ipVoiceBoxParam); //printf("%s", decodeJson.c_str()); socket.PostJson(ip, port, "/v1/speech", decodeJson, strBody); printf("voice dev return %s\n", strBody.c_str()); delete[] ipVoiceBoxParam; delete[] buffer; } void manualTrigger(char * ip, int port){ CNetSocket socket; string retData; char cmd[] = "{\n" \ "\"cmd\":\"trigger\"\n" \ "}"; socket.sendCmd(ip, port, cmd, retData); printf("manual trigger dev return %s\n", retData.c_str()); } //多奥通设备 void resetDevTimeV2(char * ip, int port,int rs485Port){ CNetSocket socket; string retData; char *cmd = new char[MAX_CMD_SIZE]; char *szTime = new char[MAX_CMD_SIZE]; SYSTEMTIME st; //set display time createDateTimeData(cmd, rs485Port); socket.sendCmd(ip, port, cmd, retData); GetLocalTime(&st); sprintf(szTime, "%d-%d-%d %d:%d:%d", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); //set All-in-one machine time ZeroMemory(cmd, MAX_CMD_SIZE); sprintf(cmd, "{\n" \ "\"cmd\" : \"set_time\",\n" \ "\"id\" : \"132156\",\n" \ "\"timestring\" : \"%s\"\n" \ "}", szTime); retData = ""; socket.sendCmd(ip, port, cmd, retData); sprintf(cmd, "{\n" \ "\"cmd\": \"get_device_timestamp\",\n" \ "\"id\" : \"999999\"\n" \ "}"); retData = ""; socket.sendCmd(ip, port, cmd, retData); delete[] szTime; delete[] cmd; } //多奥通设备 void openDoorV1(char * ip, int port,int ioPort){ CNetSocket socket; string retData; char *cmd = new char[MAX_CMD_SIZE]; sprintf(cmd, "{" \ "\"cmd\" : \"ioctl_resp\"," \ "\"id\" : \"1111\"," \ "\"io\" : %d," \ "\"value\" : 2," \ "\"delay\" : 1500" \ "}",ioPort); socket.sendCmd(ip, port, cmd, retData); printf("dev return %s\n", retData.c_str()); delete[] cmd; } //多奥通设备 void displayInfoV2(char * ip, int port, char * szCarPlate, char * szWeight, char * szAmount, int rs485Port) { CNetSocket socket; string retData; int nCarPlate = 0; int nWeight = 0; int nAmount = 0; char *cmd = new char[MAX_CMD_SIZE]; printf("displayInfo start\n"); if (szCarPlate != NULL) { nCarPlate = strlen(szCarPlate); //printf("nCarPlate is %d\n", nCarPlate); } if (szWeight != NULL) { nWeight = strlen(szWeight); //printf("nWeight is %d\n", nWeight); } if (szAmount != NULL) { nAmount = strlen(szAmount); //printf("nAmount is %d\n", nAmount); } //printf("create displayInfo info\n"); // char buff[256] = { 0 }; if (nCarPlate > 0) { createDisplayData(szCarPlate, nCarPlate, 1, cmd, rs485Port); //printf("cmd is %s\n", cmd); socket.sendCmd(ip, port, cmd, retData); } // if (nWeight > 0) { createDisplayData(szWeight, nWeight, 2, cmd, rs485Port); //printf("cmd is %s\n", cmd); socket.sendCmd(ip, port, cmd, retData); } // if (nAmount > 0) { createDisplayData(szAmount, nAmount, 3, cmd, rs485Port); //printf("cmd is %s\n", cmd); socket.sendCmd(ip, port, cmd, retData); } printf("display dev return %s\n", retData.c_str()); delete[]cmd; } void createDisplayData(char * text, int textLen, int line,char * cmd, int rs485Port){ char* packet = NULL; try { byte header[] = { 0xA5, 0x01, 0x01, 0x3D, 0x3D, 0, 0, 0x3A }; byte data[] = { 0x00, 0x01, 0x00, 0x30, 0x40, 0x40, 0x0F, 0x64, 0x03, 0x0A, 0x01, 0x02, 0x02, 0x00 }; int headerLen = sizeof(header); int dataLen = sizeof(data); memset(cmd, MAX_BUF_SIZE, 0); uint8_t* packet = new uint8_t[headerLen + dataLen + textLen + 2]; data[0] = (byte)line; switch (line){ case 1: data[2] = 0x00; data[3] = 0x30; data[4] = 0x40; data[5] = 0x40; break; case 2: data[2] = 0x00; data[3] = 0x20; data[4] = 0x40; data[5] = 0x30; break; case 3: data[2] = 0x00; data[3] = 0x10; data[4] = 0x40; data[5] = 0x20; break; } header[5] = (byte)(dataLen + 2 + textLen); header[6] = (byte)(dataLen + 2 + textLen); data[1] = (byte)line; byte len = 4; for (int i = 0; i < headerLen; i++) { packet[i] = header[i]; } for (int i = 0; i < dataLen; i++) { packet[headerLen + i] = data[i]; } packet[headerLen + dataLen] = (byte)textLen; for (int i = 0; i < textLen; i++) { packet[headerLen + dataLen + i + 1] = text[i]; } packet[headerLen + dataLen + textLen + 1] = (byte)0xC1; string strBase64 = ""; uint8 buffer[1024] = {0}; base64Encode(packet, headerLen + dataLen + textLen + 2,buffer); memset(cmd, 0, MAX_CMD_SIZE); sprintf(cmd, "{\n" \ "\"cmd\":\"ttransmission\",\n" \ "\"id\":\"100001\",\n" \ "\"subcmd\":\"send\",\n" \ "\"datalen\":%d,\n" \ "\"data\":\"%s\",\n" \ "\"comm\":\"rs485-%d\"\n" \ "}", (headerLen + dataLen + textLen + 2), buffer, rs485Port); if (packet != NULL){ delete[]packet; } } catch(...){ if (packet != NULL){ delete[]packet; } //e.printStackTrace(); } } void createVoiceData(char * text, int textLen, char * cmd,int rs485Port) { printf("text is %s\n", text); printf("textLen is %d\n", textLen); char* packet = NULL; try { byte header[] = { 0xA5, 0x01, 0x01, 0x3D, 0x3D, 0, 0, 0x30 ,0x01 }; int headerLen = sizeof(header); memset(cmd, MAX_BUF_SIZE, 0); uint8_t* packet = new uint8_t[headerLen + textLen + 2]; byte len = 4; header[5] = (byte)(4 + textLen); header[6] = (byte)(4 + textLen); for (int i = 0; i < headerLen; i++) { packet[i] = header[i]; } packet[headerLen] = (byte)textLen; for (int i = 0; i < textLen; i++) { packet[headerLen + i + 1] = text[i]; } packet[headerLen + textLen + 1] = (byte)0xC1; for (int i = 0; i < headerLen + textLen + 2;i++) { printf("%02X", packet[i]); } printf("\n"); string strBase64 = ""; uint8 buffer[1024] = { 0 }; int size = base64_encode(packet, headerLen + textLen + 2, buffer); memset(cmd, 0, MAX_CMD_SIZE); sprintf(cmd, "{\n" \ "\"cmd\":\"ttransmission\",\n" \ "\"id\":\"100001\",\n" \ "\"subcmd\":\"send\",\n" \ "\"datalen\":%d,\n" \ "\"data\":\"%s\",\n" \ "\"comm\":\"rs485-%d\"\n" \ "}", (headerLen + textLen + 2), buffer, rs485Port); if (packet != NULL) { delete[]packet; } } catch (...) { if (packet != NULL) { delete[]packet; } //e.printStackTrace(); } } void createDateTimeData(char * cmd,int rs485Port) { try { byte header[] = { 0xA5, 0x01, 0x01, 0x3D, 0x3D, 0, 0, 0x05 }; byte data[] = { 0x00, 0x01, 0x00, 0x30, 0x40, 0x40, 0x0F, 0x64 }; int headerLen = sizeof(header); int dataLen = sizeof(data); uint8_t* packet = new uint8_t[headerLen + dataLen + 1]; time_t t = time(NULL); struct tm *local_time = localtime(&t); int nYear = local_time->tm_year + 1900; uint8_t * bYear = new uint8_t[2]; for (int i = 0; i < 2; i++) { bYear[2 - i - 1] = (byte)((nYear >> 8 * i) & 0xff); } int nMonth = local_time->tm_mon + 1; byte bMonth = (byte)nMonth; int nDay = local_time->tm_mday; byte bDay = (byte)nDay; int nHour = local_time->tm_hour; byte bHour = (byte)nHour; int nMinute = local_time->tm_min; byte bMinute = (byte)nMinute; int nSecond = local_time->tm_sec; byte bSecond = (byte)nSecond; byte bWeek = local_time->tm_wday; data[0] = bYear[1]; data[1] = bYear[0]; data[2] = bMonth; data[3] = bDay; data[4] = bHour; data[5] = bMinute; data[6] = bSecond; data[7] = bWeek; header[5] = (byte)(dataLen + 2); header[6] = (byte)(dataLen + 2); for (int i = 0; i < headerLen; i++) { packet[i] = header[i]; } for (int i = 0; i < dataLen; i++) { packet[headerLen + i] = data[i]; } packet[headerLen + dataLen] = (byte)0xC1; uint8 *buffer = new uint8[MAX_CMD_SIZE]; int size = base64_encode(packet, headerLen + dataLen + 1, buffer); for (int i = 0; i < headerLen + dataLen; i++) { printf("%02X", packet[i]); } printf("\n"); sprintf(cmd, "{\n" \ "\"cmd\":\"ttransmission\",\n" \ "\"id\":\"100001\",\n" \ "\"subcmd\":\"send\",\n" \ "\"datalen\":%d,\n" \ "\"data\":\"%s\",\n" \ "\"comm\":\"rs485-%d\"\n" \ "}", (headerLen + dataLen + 2), buffer, rs485Port); delete[]buffer; delete[]bYear; delete[]packet; } catch (...) { } } void saveBase64ToFile(char * fileName,string retData) { FILE *fp = fopen(fileName, "wb"); if (fp == NULL) { printf("Error! Could not open file\n"); return; } uint8 *buffer = new uint8[10 * MAX_CMD_SIZE * MAX_CMD_SIZE]; int size = strlen(retData.c_str()); printf("size is %d\n", size); int newsize = base64_decode((uint8*)retData.c_str(), size, buffer); printf("size is %d\n", newsize); fwrite(buffer, newsize, 1, fp); // 关闭文件 fclose(fp); delete[]buffer; }