// // Created by xemon on 8/23/22. // #include #include #include #include #include #include #include #include #include #include "ArrayPrint.h" void SystemDelayMs() { } void parseTest(uint8_t *data, size_t data_size) { EgtsWorkerEnvironment egtsWorkerEnv; egtsWorkerEnv.workingBufferLength = data_size; egtsWorkerEnv.workingBuffer = data; if (EgtsIsTransportComplete(&egtsWorkerEnv)) { EgtsParseHeader(&egtsWorkerEnv); EgtsParseFrameData(&egtsWorkerEnv); EgtsParseSrvRecord(&egtsWorkerEnv); if (egtsWorkerEnv.header.type == EGTS_PT_RESPONSE) { printf(" - EGTS_PT_RESPONSE\n"); } else if (egtsWorkerEnv.header.type == EGTS_PT_APPDATA) { printf(" - EGTS_PT_APPDATA\n"); } else { printf(" - unknown %i\n", egtsWorkerEnv.header.type); } if (egtsWorkerEnv.srCommand) { ///sms switch (egtsWorkerEnv.srCommand->cmd) { case EGTS_ECALL_MSD_REQ: printf("Запрос МНД"); return; case EGTS_ECALL_REQ: printf("Запрос эксренного вызова"); return; case EGTS_ECALL_TEST_NUMBER: printf("Запрос на установку номера для тестового вызова"); return; case EGTS_ECALL_SMS_FALLBACK_NUMBER: printf("Запрос на установку номера для SMS"); return; } } } } uint8_t sendTcp(char *ip, uint16_t port, uint8_t *data, size_t size) { int sockfd = 0, n = 0; char recvBuff[1024]; struct sockaddr_in serv_addr; printf("\n Usage: %s \n", ip); memset(recvBuff, '0', sizeof(recvBuff)); if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("\n Error : Could not create socket \n"); return 1; } memset(&serv_addr, '0', sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(port); if (inet_pton(AF_INET, ip, &serv_addr.sin_addr) <= 0) { printf("\n inet_pton error occured\n"); return 1; } if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { printf("\n Error : Connect Failed \n"); return 1; } // while ( (n = read(sockfd, recvBuff, sizeof(recvBuff)-1)) > 0) // { // recvBuff[n] = 0; // if(fputs(recvBuff, stdout) == EOF) // { // printf("\n Error : Fputs error\n"); // } // } write(sockfd, data, size); if (n < 0) { printf("\n Read error \n"); } return 0; } void testResponse() { uint8_t data[1024]; size_t len = vEgtsPackEgtsResponse( 111, data, 0b000, 333, 444, 0 ); ///============================= // uint16_t Address = 1; // uint8_t Size = 0b0001; // uint8_t Action = 0b0010; // uint16_t CommandCode = EGTS_TEST_MODE; // uint32_t Data = 0; // size_t len = vEgtsPackSrCmdConfirmation( // data, // 2, // CT_COMCONF, // CC_OK, // 44, // 0, // 0, // 0, // Address, // Size, // Action, // CommandCode, // Data // ); ///============================= // uint8_t imei[] = "356133310612543"; // size_t len = vEgtsPackTermIdentityTransport( // 1, // data, // imei, // sizeof(imei) - 1, // 1233, // 0 // ); // size_t len = vEgtsPackMsdTransport( // 555, // data, // imei, // sizeof(imei) - 1, // 0 // ); ArrayPrint_Hex(data, len); sendTcp("127.0.0.1", 5020, data, len); } #define BIN(DATA, LEN, HEX_STRING) \ uint8_t DATA[(sizeof(HEX_STRING)-1)/2]; \ size_t LEN = iAsciiStringParseHexBytes(DATA, HEX_STRING, sizeof(HEX_STRING) - 1); void send_test() { // char hexData[] = "0100000B001E00080001BD13000800010800000004043310005F08000000A90100000001000012010044C8"; // char hexData[] = "0100010B0018000000012E0D0001000400C5C2B40404330A000101000000A9010000002DB0"; // char hexData[] = "0100010B0018000000012E0D0001000400C5C2B40404330A000105000000A901000000C22C"; // char hexData[] = "0100000B001E000300012513000300010300000004043310005003000000A9010000000100001201003DEF"; /// set sms number // BIN_FROM_HEX(binData,binDataLen,"0100000B0028000A00013D1D000A00010A0000000404331A00500A000000A9010000000100420D0237393410102010101010101010"); // BIN_FROM_HEX(binData, binDataLen, "0100020B001D004800019916004900000404331300507347061B00000000000C00000000EBAEBAEB1C01"); // BIN_FROM_HEX(binData, binDataLen, "0100020B001D00020001B516000300000404331300507347061B00000000000C00000000EBAEBAEBC589"); // BIN_FROM_HEX(binData, binDataLen, "0100020B001C0007000109150008000004043312005080E5061B00000000000A000000004C44932560"); // BIN_FROM_HEX(binData, binDataLen, "0100010B001400070000DD07000006000100041F16B1830404000300080000020A"); // BIN_FROM_HEX(binData, binDataLen, "0100020B001C00030001201500040000040433120050E2F3061B00000000000A00000000B5EB2DAB72"); // BIN_FROM_HEX(binData, binDataLen, "0100010B00110003000109060001000426732E19040400030004000065C5"); // BIN_FROM_HEX(binData, binDataLen, "0100020B001D00020001B51600030000040433130050C276111B00000000000A0000000074657374DAA0"); // BIN_FROM_HEX(binData, binDataLen, "0100010B001D000200016E120001000400C5C2B40404330F0010C276111B00000000000A000000009198"); // // 01 00 03 0B 00 1000 3800 00 3C 3800 00 06003900000202000300010000DD22 BIN_FROM_HEX(binData, binDataLen, "0100000B0019000200013812000200800404330F0010020000009F010000000100120100B347"); parseTest(binData, binDataLen); sendTcp("127.0.0.1", 5020, binData, binDataLen); // testResponse(); printf("\n"); } void parse_test() { //запрос на скорость // BIN_FROM_HEX(binData, binDataLen, "0100020B001D004800019916004900000404331300507347061B00000000000C00000000EBAEBAEB1C01"); BIN_FROM_HEX(binData, binDataLen, "0100020B001D00020001B516000300000404331300507347061B00000000000C00000000EBAEBAEBC589"); parseTest(binData, binDataLen); } void test_sensors() { uint8_t data[1024]; tEgtsSensorsDataArgs sensors = { .analogInPresent = SENSOR_1 | SENSOR_2, .digitalInPresent = SENSOR_1 | SENSOR_5, .digitalOutPresent = SENSOR_NO, .digitalIn = {SENSOR_1 | SENSOR_5, SENSOR_8 | SENSOR_7}, .analogIn = {200,500} }; size_t len = vEgtsPackSensorsTransport( 111, data, 0b000, &sensors ); sendTcp("127.0.0.1", 5020, data, len); } int main() { // send_test(); // parse_test(); test_sensors(); }