Browse Source

2022-03-16 / ct_chen

Actions:
1. Webservice fix bug of OcppReceiptrURL for DC series;
2. add forcing charging and remote stop for DO series

Files:
1. EVSE/Modularization/WebService.c
   EVSE/rootfs/var/www/set_backend.php
2. EVSE/Modularization/WebService.c
   EVSE/rootfs/var/www/set_pcabinet_action.php
ct_chen 3 years ago
parent
commit
2d6f1979f2

+ 146 - 4
EVSE/Modularization/WebService.c

@@ -29,7 +29,9 @@
 #include	<math.h>
 #include	"define.h"
 #include	"json.h"
-
+#ifdef DO360
+#include	"../Projects/DO360/Apps/Config.h"
+#endif
 
 #define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
 #define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
@@ -50,7 +52,10 @@ struct GBTData				*ShmGBTData;
 struct CcsData				*ShmCcsData;
 struct PsuData 				*ShmPsuData;
 struct PrimaryMcuData		*ShmPrimaryMcuData;
-
+#ifdef DO360
+ChargerInfoData                 *ShmChargerInfo;
+struct ChargingInfoData 		*_chargingData[4];
+#endif
 void trim(char *s);
 int mystrcmp(char *p1, char *p2);
 void substr(char *dest, const char* src, unsigned int start, unsigned int cnt);
@@ -299,7 +304,25 @@ int InitShareMemory() {
 		result = FAIL;
 	} else {
 	}
-
+#ifdef DO360
+	//creat ShmChargerInfo
+    if ((MeterSMId = shmget(SM_ChargerInfoKey, sizeof(ChargerInfoData), IPC_CREAT | 0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+        DEBUG_ERROR("[main]CreatShareMemory:shmget ChargerInfoData NG");
+        #endif
+        return 0;
+    }
+    else if ((ShmChargerInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1)
+    {
+        #ifdef SystemLogMessage
+        DEBUG_ERROR("[WebService]CreatShareMemory:shmat ChargerInfoData NG");
+        #endif
+        return 0;
+	} else {
+    }
+//    memset(ShmChargerInfo, 0, sizeof(ChargerInfoData));
+#endif
 	return result;
 }
 
@@ -1351,6 +1374,121 @@ int main(int argc, char *argv[]) {
 		printf("%s\n", json_object_to_json_string(jobj));
 
 	}
+
+#ifdef DO360
+	//set power cabinet
+	if ((strcmp(argv[1], "PowerCabinet") == 0)) {
+		char *IsDO[3];
+		substr((char *)IsDO,(const char *)ShmSysConfigAndInfo->SysConfig.ModelName,0,2);
+		if(strcmp(IsDO, "DO") == 0 || strcmp(IsDO, "DK") == 0 || strcmp(IsDO, "DB") == 0){
+			struct json_object *jobj2;
+			jobj2=json_object_new_object();
+			//force charging
+			if (strcmp(argv[2], "1") == 0) {
+				json_object_object_add(jobj2,"Cmd",json_object_new_string("1"));
+				int FTargetVoltage = 0;
+				int FTargetCurrent = 0;
+				if(strlen(argv[3]) >0){
+					struct json_object *jobj = json_tokener_parse(argv[3]);
+					json_object *val_obj = NULL;
+					if( json_object_object_get_ex(jobj, "FTargetVoltage", &val_obj) ) {
+						FTargetVoltage = json_object_get_int(val_obj);
+						ShmChargerInfo->Control.FCharging[0].FTargetVoltage = FTargetVoltage * 10;
+						json_object_object_add(jobj2,"FTargetVoltage0",json_object_new_int(FTargetVoltage));
+						ShmChargerInfo->Control.FCharging[1].FTargetVoltage = FTargetVoltage * 10;
+						json_object_object_add(jobj2,"FTargetVoltage1",json_object_new_int(FTargetVoltage));
+						ShmChargerInfo->Control.FCharging[2].FTargetVoltage = FTargetVoltage * 10;
+						json_object_object_add(jobj2,"FTargetVoltage2",json_object_new_int(FTargetVoltage));
+						ShmChargerInfo->Control.FCharging[3].FTargetVoltage = FTargetVoltage * 10;
+						json_object_object_add(jobj2,"FTargetVoltage3",json_object_new_int(FTargetVoltage));
+					}
+					if( json_object_object_get_ex(jobj, "FTargetCurrent", &val_obj) ) {
+						FTargetCurrent = json_object_get_int(val_obj);
+						ShmChargerInfo->Control.FCharging[0].FTargetCurrent = FTargetCurrent * 10;
+						json_object_object_add(jobj2,"FTargetCurrent0",json_object_new_int(FTargetCurrent));
+						ShmChargerInfo->Control.FCharging[1].FTargetCurrent = FTargetCurrent * 10;
+						json_object_object_add(jobj2,"FTargetCurrent1",json_object_new_int(FTargetCurrent));
+						ShmChargerInfo->Control.FCharging[2].FTargetCurrent = FTargetCurrent * 10;
+						json_object_object_add(jobj2,"FTargetCurrent2",json_object_new_int(FTargetCurrent));
+						ShmChargerInfo->Control.FCharging[3].FTargetCurrent = FTargetCurrent * 10;
+						json_object_object_add(jobj2,"FTargetCurrent3",json_object_new_int(FTargetCurrent));
+					}
+				}
+				ShmChargerInfo->Control.FCharging[0].FCtrl.bits.EnableForceCharging=1;
+				ShmChargerInfo->Control.FCharging[0].FCtrl.bits.StartForceCharging=1;
+				ShmChargerInfo->Control.FCharging[1].FCtrl.bits.EnableForceCharging=1;
+				ShmChargerInfo->Control.FCharging[1].FCtrl.bits.StartForceCharging=1;
+				ShmChargerInfo->Control.FCharging[2].FCtrl.bits.EnableForceCharging=1;
+				ShmChargerInfo->Control.FCharging[2].FCtrl.bits.StartForceCharging=1;
+				ShmChargerInfo->Control.FCharging[3].FCtrl.bits.EnableForceCharging=1;
+				ShmChargerInfo->Control.FCharging[3].FCtrl.bits.StartForceCharging=1;
+				printf("%s\n", json_object_to_json_string(jobj2));
+			}
+			//remote stop
+			if (strcmp(argv[2], "2") == 0) {
+				json_object_object_add(jobj2,"Cmd",json_object_new_string("2"));
+//				_chargingData[0]->ChargingStopFlag.bits.ManualStop = true;
+				ShmSysConfigAndInfo->SysInfo.ConnectorInfo[0].GeneralChargingData.ChargingStopFlag.bits.ManualStop=1;
+				ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.ChargingStopFlag.bits.ManualStop=1;
+				ShmSysConfigAndInfo->SysInfo.ConnectorInfo[2].GeneralChargingData.ChargingStopFlag.bits.ManualStop=1;
+				ShmSysConfigAndInfo->SysInfo.ConnectorInfo[3].GeneralChargingData.ChargingStopFlag.bits.ManualStop=1;
+				printf("%s\n", json_object_to_json_string(jobj2));
+			}
+			if (strcmp(argv[2], "0") == 0) {
+				struct json_object *jobj;
+				jobj=json_object_new_object();
+				struct json_object *FTargetVoltage;
+				struct json_object *FTargetCurrent;
+				struct json_object *EnableForceCharging;
+				struct json_object *StartForceCharging;
+				struct json_object *ManualStop;
+				FTargetVoltage = json_object_new_int(ShmChargerInfo->Control.FCharging[0].FTargetVoltage);
+				FTargetCurrent = json_object_new_int(ShmChargerInfo->Control.FCharging[0].FTargetCurrent);
+				EnableForceCharging = json_object_new_int(ShmChargerInfo->Control.FCharging[0].FCtrl.bits.EnableForceCharging);
+				StartForceCharging = json_object_new_int(ShmChargerInfo->Control.FCharging[0].FCtrl.bits.StartForceCharging);
+				ManualStop = json_object_new_int(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[0].GeneralChargingData.ChargingStopFlag.bits.ManualStop);
+				json_object_object_add(jobj,"FTargetVoltage0",FTargetVoltage);
+				json_object_object_add(jobj,"FTargetCurrent0",FTargetCurrent);
+				json_object_object_add(jobj,"EnableForceCharging0",EnableForceCharging);
+				json_object_object_add(jobj,"StartForceCharging0",StartForceCharging);
+				json_object_object_add(jobj,"ManualStop0",ManualStop);
+				FTargetVoltage = json_object_new_int(ShmChargerInfo->Control.FCharging[1].FTargetVoltage);
+				FTargetCurrent = json_object_new_int(ShmChargerInfo->Control.FCharging[1].FTargetCurrent);
+				EnableForceCharging = json_object_new_int(ShmChargerInfo->Control.FCharging[1].FCtrl.bits.EnableForceCharging);
+				StartForceCharging = json_object_new_int(ShmChargerInfo->Control.FCharging[1].FCtrl.bits.StartForceCharging);
+				ManualStop = json_object_new_int(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.ChargingStopFlag.bits.ManualStop);
+				json_object_object_add(jobj,"FTargetVoltage1",FTargetVoltage);
+				json_object_object_add(jobj,"FTargetCurrent1",FTargetCurrent);
+				json_object_object_add(jobj,"EnableForceCharging1",EnableForceCharging);
+				json_object_object_add(jobj,"StartForceCharging1",StartForceCharging);
+				json_object_object_add(jobj,"ManualStop1",ManualStop);
+				FTargetVoltage = json_object_new_int(ShmChargerInfo->Control.FCharging[2].FTargetVoltage);
+				FTargetCurrent = json_object_new_int(ShmChargerInfo->Control.FCharging[2].FTargetCurrent);
+				EnableForceCharging = json_object_new_int(ShmChargerInfo->Control.FCharging[2].FCtrl.bits.EnableForceCharging);
+				StartForceCharging = json_object_new_int(ShmChargerInfo->Control.FCharging[2].FCtrl.bits.StartForceCharging);
+				ManualStop = json_object_new_int(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[2].GeneralChargingData.ChargingStopFlag.bits.ManualStop);
+				json_object_object_add(jobj,"FTargetVoltage2",FTargetVoltage);
+				json_object_object_add(jobj,"FTargetCurrent2",FTargetCurrent);
+				json_object_object_add(jobj,"EnableForceCharging2",EnableForceCharging);
+				json_object_object_add(jobj,"StartForceCharging2",StartForceCharging);
+				json_object_object_add(jobj,"ManualStop2",ManualStop);
+				FTargetVoltage = json_object_new_int(ShmChargerInfo->Control.FCharging[3].FTargetVoltage);
+				FTargetCurrent = json_object_new_int(ShmChargerInfo->Control.FCharging[3].FTargetCurrent);
+				EnableForceCharging = json_object_new_int(ShmChargerInfo->Control.FCharging[3].FCtrl.bits.EnableForceCharging);
+				StartForceCharging = json_object_new_int(ShmChargerInfo->Control.FCharging[3].FCtrl.bits.StartForceCharging);
+				ManualStop = json_object_new_int(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[3].GeneralChargingData.ChargingStopFlag.bits.ManualStop);
+				json_object_object_add(jobj,"FTargetVoltage3",FTargetVoltage);
+				json_object_object_add(jobj,"FTargetCurrent3",FTargetCurrent);
+				json_object_object_add(jobj,"EnableForceCharging3",EnableForceCharging);
+				json_object_object_add(jobj,"StartForceCharging3",StartForceCharging);
+				json_object_object_add(jobj,"ManualStop3",ManualStop);
+				printf("%s\n", json_object_to_json_string(jobj));
+				json_object_put(jobj);
+			}
+		}
+	}
+#endif
+
 	//web page query all
 	if ((argc == 2) & (strcmp(argv[1], "query") == 0)) {
 		char *IsAcDc[2];
@@ -2361,8 +2499,10 @@ int main(int argc, char *argv[]) {
 		MaintainServerSecurityPassword = json_object_new_string((char *)&ShmSysConfigAndInfo->SysConfig.MaintainServerSecurityPassword);
 		chargePointVendor = json_object_new_string((char *)&ShmSysConfigAndInfo->SysConfig.chargePointVendor);
 		MaintainServerURL = json_object_new_string((char *)&ShmSysConfigAndInfo->SysConfig.MaintainServerURL);
-		if(strcmp(IsDO, "AX") == 0){
+		if(strcmp(IsDO, "AX") == 0 ){
 			isEnableLocalPowerSharging = json_object_new_int(ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharging);
+		}
+		if(strcmp(IsDO, "AX") == 0|| strcmp(IsAcDc, "D") == 0){
 			OcppReceiptrURL = json_object_new_string((char *)&ShmSysConfigAndInfo->SysConfig.OcppReceiptrURL);
 		}
 		/*for TTIA*/
@@ -2790,6 +2930,8 @@ int main(int argc, char *argv[]) {
 		json_object_object_add(jobj4,"MaintainServerURL",MaintainServerURL);
 		if(strcmp(IsDO, "AX") == 0){
 			json_object_object_add(jobj4,"isEnableLocalPowerSharging",isEnableLocalPowerSharging);
+		}
+		if(strcmp(IsDO, "AX") == 0 || strcmp(IsAcDc, "D") == 0){
 			json_object_object_add(jobj4,"OcppReceiptrURL",OcppReceiptrURL);
 		}
 		/*for TTIA*/

+ 3 - 2
EVSE/rootfs/var/www/set_backend.php

@@ -392,8 +392,9 @@ CORE STYLES ABOVE - NO TOUCHY
 						"&MaintainServerSecurityProfile=" + document.getElementById("MaintainServerSecurityProfile").value+
 						"&MaintainServerSecurityPassword=" + escape(document.getElementById("MaintainServerSecurityPassword").value);
 <?php if(substr($ModelName,0,2)=="AX"){?>
-				data += "&isEnableLocalPowerSharging=" + document.getElementById("isEnableLocalPowerSharging").value+
-						"&OcppReceiptrURL=" + document.getElementById("OcppReceiptrURL").value;
+				data += "&isEnableLocalPowerSharging=" + document.getElementById("isEnableLocalPowerSharging").value;
+<?php } if(substr($ModelName,0,2)=="AX" || substr($ModelName,0,1)=="D"){?>
+				data += "&OcppReceiptrURL=" + document.getElementById("OcppReceiptrURL").value;
 <?php } ?>
 <?php if(substr($ModelName,0,1)=="D" && substr($ModelName,3,1)=="C"){?>
 				data += "&isEnableTTIA=" + (document.getElementById("isEnableTTIA").checked?"1":"0")+

+ 121 - 0
EVSE/rootfs/var/www/set_pcabinet_action.php

@@ -0,0 +1,121 @@
+<?php
+	// 設置資料類型 json,編碼格式 utf-8
+	header('Content-Type: application/json; charset=UTF-8');
+	
+	// 判斷如果是 GET 請求,則進行搜尋;如果是 POST 請求,則進行新建
+	// $_SERVER['REQUEST_METHOD'] 返回訪問頁面使用的請求方法
+	if ($_SERVER['REQUEST_METHOD'] == "GET") {
+		create();
+	} else if ($_SERVER['REQUEST_METHOD'] == "POST") {
+		create();
+	}
+
+	// 新建員工
+	function create() {
+		//Cmd 1: force charging  2: remote stop
+		//1: force charging
+		//EnableForceCharging
+		//StartForceCharging
+		//FTargetVoltage
+		//FTargetCurrent
+		//2: remote stop
+		
+
+		checkValue('Cmd');
+		if($_REQUEST['Cmd']==1){
+			if(isset($_REQUEST['FTargetVoltage'])){
+				isNumeric("FTargetVoltage",65535);
+				$json['FTargetVoltage']				= (int)$_REQUEST['FTargetVoltage'];
+			}
+			else{
+				$jsone['result'] = "Fail";
+				$jsone['message'] = "You should enter a value of FTargetVoltage";
+				echo json_encode($jsone);
+				exit;
+			}
+			if(isset($_REQUEST['FTargetCurrent'])){
+				isNumeric("FTargetCurrent",65535);
+				$json['FTargetCurrent']				= (int)$_REQUEST['FTargetCurrent'];
+			}
+			else{
+				$jsone['result'] = "Fail";
+				$jsone['message'] = "You should enter a value of FTargetCurrent";
+				echo json_encode($jsone);
+				exit;
+			}
+		}
+
+//		ob_start();
+		
+		shell_exec('sync;sync;sync');
+		chdir("/root");
+		$str_json=json_encode($json);//var_dump($str_json);
+		if($_REQUEST['Cmd']=="1"){
+			exec("'./WebService' 'PowerCabinet' '1' '".$str_json."'",$output,$return_var);
+		}
+		if($_REQUEST['Cmd']=="2"){
+			exec("'./WebService' 'PowerCabinet' '2' '".$str_json."'",$output,$return_var);
+		}
+		 if(count($output)!=0){
+			 $jsone['result'] = "Success";
+			 $jsone['message'] = $json;
+			 echo json_encode($jsone);
+			 exit;
+		 }
+		 else{
+			 $jsone['result'] = "Error";
+			 $jsone['message'] = "Something went wrong on machine";
+			 echo json_encode($jsone);
+			 return false;
+			 exit;
+		 }
+//		ob_end_clean();	
+	}
+
+	function checkValue($id){
+		if($_REQUEST[$id] != ""){
+			if($_REQUEST[$id]!=1 && $_REQUEST[$id]!=2){
+				$jsone['result'] = "Fail";
+				$jsone['message'] = "You have entered a wrong value on " . $id . ", it should be 1 or 2";
+				echo json_encode($jsone);
+				exit;
+			}
+/*			if(strlen($_REQUEST[$id])!=1){
+					$jsone['result'] = "Fail";
+					$jsone['message'] = "You have entered a wrong value on " . $id . ", it should be numeric";
+					echo json_encode($jsone);
+					exit;
+			}
+			if(!is_numeric($_REQUEST[$id])){
+					$jsone['result'] = "Fail";
+					$jsone['message'] = "You have entered a wrong value on " . $id . ", it should be numeric";
+					echo json_encode($jsone);
+					exit;
+			}*/
+		}
+	}
+	function checkLength($id,$value){
+		if(strlen($_REQUEST[$id])>$value){
+				$jsone['result'] = "Fail";
+				$jsone['message'] = "Length of " . $id . " should be less than ".$value+"(Chinese 5 words)";
+				echo json_encode($jsone);
+				exit;
+		}
+	}
+	function isNumeric($id,$value){
+		if($_REQUEST[$id] != ""){
+			if(!is_numeric($_REQUEST[$id])){
+					$jsone['result'] = "Fail";
+					$jsone['message'] = "You have entered a wrong value on " . $id . ", it should be numeric";
+					echo json_encode($jsone);
+					exit;
+			}
+			if($_REQUEST[$id]>$value){
+					$jsone['result'] = "Fail";
+					$jsone['message'] = "Value of " . $id . " should be less than ".$value;
+					echo json_encode($jsone);
+					exit;
+			}
+		}
+	}
+?>

+ 0 - 1
board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/lib/.crc7.ko.cmd

@@ -1 +0,0 @@
-cmd_lib/crc7.ko := /opt/ti-processor-sdk-linux-am335x-evm-04.02.00.09/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/arm-linux-gnueabihf-ld -EL -r  -T ./scripts/module-common.lds --build-id  -o lib/crc7.ko lib/crc7.o lib/crc7.mod.o ;  true

+ 0 - 46
board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/lib/.gen_crc32table.cmd

@@ -1,46 +0,0 @@
-cmd_lib/gen_crc32table := gcc -Wp,-MD,lib/.gen_crc32table.d -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89     -o lib/gen_crc32table lib/gen_crc32table.c  
-
-source_lib/gen_crc32table := lib/gen_crc32table.c
-
-deps_lib/gen_crc32table := \
-  /usr/include/stdc-predef.h \
-  /usr/include/stdio.h \
-  /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
-  /usr/include/features.h \
-  /usr/include/x86_64-linux-gnu/sys/cdefs.h \
-  /usr/include/x86_64-linux-gnu/bits/wordsize.h \
-  /usr/include/x86_64-linux-gnu/bits/long-double.h \
-  /usr/include/x86_64-linux-gnu/gnu/stubs.h \
-  /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
-  /usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h \
-  /usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h \
-  /usr/include/x86_64-linux-gnu/bits/types.h \
-  /usr/include/x86_64-linux-gnu/bits/timesize.h \
-  /usr/include/x86_64-linux-gnu/bits/typesizes.h \
-  /usr/include/x86_64-linux-gnu/bits/time64.h \
-  /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
-  /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
-  /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
-  /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
-  /usr/include/x86_64-linux-gnu/bits/types/FILE.h \
-  /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
-  /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
-  /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
-  /usr/include/x86_64-linux-gnu/bits/stdio.h \
-  /usr/include/x86_64-linux-gnu/bits/stdio2.h \
-  lib/crc32defs.h \
-    $(wildcard include/config/crc32/sliceby8.h) \
-    $(wildcard include/config/crc32/sliceby4.h) \
-    $(wildcard include/config/crc32/sarwate.h) \
-    $(wildcard include/config/crc32/bit.h) \
-    $(wildcard include/config/64bit.h) \
-  /usr/include/inttypes.h \
-  /usr/lib/gcc/x86_64-linux-gnu/9/include/stdint.h \
-  /usr/include/stdint.h \
-  /usr/include/x86_64-linux-gnu/bits/wchar.h \
-  /usr/include/x86_64-linux-gnu/bits/stdint-intn.h \
-  /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \
-
-lib/gen_crc32table: $(deps_lib/gen_crc32table)
-
-$(deps_lib/gen_crc32table):