diff --git a/Ethernet/E-1608.c b/Ethernet/E-1608.c index cb1745e..5a8ead4 100644 --- a/Ethernet/E-1608.c +++ b/Ethernet/E-1608.c @@ -1559,6 +1559,50 @@ bool SettingsMemoryR_E1608(DeviceInfo_E1608 *device_info, uint16_t address, uint } return result; } + +bool SetNetworkW_E1608(DeviceInfo_E1608 *device_info, uint8_t *data, uint16_t count){ + + if (SettingsMemoryW_E1608(device_info, 0, count, data)){ + + int timeout = device_info->timeout; + unsigned char buffer[7]; + unsigned char replyBuffer[7]; + buffer[MSG_INDEX_START] = MSG_START; + buffer[MSG_INDEX_COMMAND] = CMD_RESET; + buffer[MSG_INDEX_FRAME] = device_info->device.frameID++; + buffer[MSG_INDEX_STATUS] = 0; + buffer[MSG_INDEX_COUNT_LOW] = 0; + buffer[MSG_INDEX_COUNT_HIGH] = 0; + buffer[MSG_INDEX_DATA] = (unsigned char) 0xff - calcChecksum(buffer, MSG_INDEX_DATA); + + if(send(device_info->device.sock, buffer, 7, 0) <= 0){ + printf("Error setting network config! (Sending)\n"); + }else{ + receiveMessage(device_info->device.sock, replyBuffer, MSG_HEADER_SIZE+MSG_CHECKSUM_SIZE, timeout); + if(replyBuffer[MSG_INDEX_COMMAND] == (buffer[MSG_INDEX_COMMAND] | MSG_REPLY) && replyBuffer[MSG_INDEX_FRAME] == buffer[2]){ + + close(device_info->device.sock); + close(device_info->device.scan_sock); + + usleep(5000000); // device boot time + + device_info->device.connectCode = 0x0; // default connect code + device_info->device.frameID = 0; // zero out the frameID + device_info->queue[0] = 0; // set count in gain queue to zero + + discoverDevice(&device_info->device, E1608_PID); + device_info->device.sock = openDevice(inet_addr(inet_ntoa(device_info->device.Address.sin_addr)), device_info->device.connectCode); + + return true; + } + } + return false; + } + else{ + printf("Error setting network config!\n"); + return false; + } +} bool SettingsMemoryW_E1608(DeviceInfo_E1608 *device_info, uint16_t address, uint16_t count, uint8_t *data) { diff --git a/Ethernet/E-1608.h b/Ethernet/E-1608.h index b9417f1..a3abcc4 100644 --- a/Ethernet/E-1608.h +++ b/Ethernet/E-1608.h @@ -125,6 +125,7 @@ bool BlinkLED_E1608(DeviceInfo_E1608 *device_info, unsigned char count); bool Reset_E1608(DeviceInfo_E1608 *device_info); bool Status_E1608(DeviceInfo_E1608 *device_info, uint16_t *status); bool NetworkConfig_E1608(DeviceInfo_E1608 *device_info, struct in_addr newtork[3]); +bool SetNetworkW_E1608(DeviceInfo_E1608 *device_info, uint8_t *data, uint16_t count); bool FirmwareUpgrade_E1608(DeviceInfo_E1608 *device_info); bool CalMemoryR_E1608(DeviceInfo_E1608 *device_info, uint16_t address, uint16_t count, uint8_t *data); bool CalMemoryW_E1608(DeviceInfo_E1608 *device_info, uint16_t address, uint16_t count, uint8_t *data); diff --git a/Ethernet/test-E-1608.c b/Ethernet/test-E-1608.c index 673f2ba..99e2e5b 100644 --- a/Ethernet/test-E-1608.c +++ b/Ethernet/test-E-1608.c @@ -66,6 +66,9 @@ int main(int argc, char**argv) uint8_t range; uint8_t nchan; int temp; + char ip[16]; + char subnetmask[16]; + char gateway[16]; device_info.device.connectCode = 0x0; // default connect code device_info.device.frameID = 0; // zero out the frameID @@ -119,6 +122,7 @@ int main(int argc, char**argv) printf("Hit 'o' to test Analog Output.\n"); printf("Hit 'r' to reset the device\n"); printf("Hit 'n' to get networking information\n"); + printf("Hit 'N' to set networking information\n"); printf("Hit 's' to get Status\n"); printf("Hit 'e' to exit\n"); @@ -267,6 +271,43 @@ int main(int argc, char**argv) printf(" subnet mask = %s\n", inet_ntoa(network[1])); printf(" gateway = %s\n", inet_ntoa(network[2])); break; + + case 'N': + printf("Set network configuration values [xxx.xxx.xxx.xxx]: \n"); + uint8_t setIPData[22] = {0}; + + setIPData[1] = 0; + + printf(" DHCP[0,1]: "); + scanf("%d", &setIPData[0]); + if(setIPData[0]){ + setIPData[0] = 0; // index 0 = dhcp on; index 3 = static; + }else{ + + setIPData[0] = 3; + printf(" IP address: "); + scanf("%s",ip); + sscanf(ip, "%d.%d.%d.%d", &setIPData[2], &setIPData[3], &setIPData[4], &setIPData[5]); + + printf(" subnet mask: "); + scanf("%s",subnetmask); + sscanf(subnetmask, "%d.%d.%d.%d", &setIPData[6], &setIPData[7], &setIPData[8], &setIPData[9]); + + printf(" gateway: "); + scanf("%s",gateway); + sscanf(gateway, "%d.%d.%d.%d", &setIPData[10], &setIPData[11], &setIPData[12], &setIPData[13]); + } + + + + if(!SetNetworkW_E1608(&device_info, setIPData, sizeof(setIPData)/sizeof(setIPData[0]))){ + printf("Error during setting...!\n"); + }else{ + + printf("\n"); + } + + break; } } }