Commit f4759fda authored by Andrey Filippov's avatar Andrey Filippov

implemented broadcas options - setting same value/array to multiple sesnosr ports

parent 9ca3b91f
...@@ -735,14 +735,15 @@ PHP_FUNCTION(elphel_get_P_arr) ...@@ -735,14 +735,15 @@ PHP_FUNCTION(elphel_get_P_arr)
/** /**
* @brief common part of elphel_set_P_value() and elphel_compressor_*() * @brief common part of elphel_set_P_value() and elphel_compressor_*()
* @param addr register address (with possible flags) * @param addr register address (with possible flags)
* @param data data to write * @param data data to write
* @param frame frame to write (-1 - use current + FRAME_DEAFAULT_AHEAD, < -1: use ASAP * @param frame frame to write (-1 - use current + FRAME_DEAFAULT_AHEAD, < -1: use ASAP
* @param flags additional flags (0) - none * @param flags additional flags (0) - none
* @param broadcast port mask to simultaneously send same data
* @return <0 - -errno ( error), otherwise frame used * @return <0 - -errno ( error), otherwise frame used
*/ */
long elphel_set_P_value_common(long port, long addr, long data, long frame, long flags) { long elphel_set_P_value_common(long port, long addr, long data, long frame, long flags, long broadcast) {
unsigned long write_data[4]; unsigned long write_data[4];
unsigned long uframe; unsigned long uframe;
long maddr; long maddr;
...@@ -765,7 +766,7 @@ long elphel_set_P_value_common(long port, long addr, long data, long frame, long ...@@ -765,7 +766,7 @@ long elphel_set_P_value_common(long port, long addr, long data, long frame, long
if ((addr<0) ||((maddr >= (sizeof (struct framepars_t) >>2)) && ( (addr & 0xff00) != 0xff00 ) )) { if ((addr<0) ||((maddr >= (sizeof (struct framepars_t) >>2)) && ( (addr & 0xff00) != 0xff00 ) )) {
return -1; return -1;
} }
write_data[0]=FRAMEPARS_SETFRAME; write_data[0]=FRAMEPARS_SETFRAME | ((broadcast << 4) & 0xf0);
write_data[1]=uframe; write_data[1]=uframe;
write_data[2]= addr | flags; write_data[2]= addr | flags;
write_data[3]= data; write_data[3]= data;
...@@ -787,11 +788,12 @@ PHP_FUNCTION(elphel_set_P_value) ...@@ -787,11 +788,12 @@ PHP_FUNCTION(elphel_set_P_value)
long addr; long addr;
long data; long data;
long frame=-1; long frame=-1;
long broadcast = 0;
unsigned long flags=0; unsigned long flags=0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll|ll", &port, &addr,&data,&frame,&flags) == FAILURE) { if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll|lll", &port, &addr,&data,&frame,&flags, &broadcast) == FAILURE) {
RETURN_NULL(); RETURN_NULL();
} }
if (((frame=elphel_set_P_value_common (port, addr, data, frame, flags))) <0) { if (((frame=elphel_set_P_value_common (port, addr, data, frame, flags, broadcast))) <0) {
RETURN_NULL(); RETURN_NULL();
} }
RETURN_LONG(frame); RETURN_LONG(frame);
...@@ -803,11 +805,12 @@ PHP_FUNCTION(elphel_compressor_reset) ...@@ -803,11 +805,12 @@ PHP_FUNCTION(elphel_compressor_reset)
long port; long port;
long frame=-1; long frame=-1;
unsigned long flags=-1; unsigned long flags=-1;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|ll", &port, &frame,&flags) == FAILURE) { long broadcast = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|lll", &port, &frame,&flags,&broadcast) == FAILURE) {
RETURN_NULL(); RETURN_NULL();
} }
if (flags<0) flags=FRAMEPAIR_FORCE_NEWPROC; if (flags<0) flags=FRAMEPAIR_FORCE_NEWPROC;
if (((frame=elphel_set_P_value_common (port, P_COMPRESSOR_RUN, COMPRESSOR_RUN_STOP, frame, flags)))<0) { if (((frame=elphel_set_P_value_common (port, P_COMPRESSOR_RUN, COMPRESSOR_RUN_STOP, frame, flags, broadcast)))<0) {
RETURN_NULL(); RETURN_NULL();
} }
RETURN_LONG(frame); RETURN_LONG(frame);
...@@ -819,11 +822,12 @@ PHP_FUNCTION(elphel_compressor_run) ...@@ -819,11 +822,12 @@ PHP_FUNCTION(elphel_compressor_run)
long port; long port;
long frame=-1; long frame=-1;
unsigned long flags=-1; unsigned long flags=-1;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|ll", &port, &frame,&flags) == FAILURE) { long broardcast = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|lll", &port, &frame, &flags, &broardcast) == FAILURE) {
RETURN_NULL(); RETURN_NULL();
} }
if (flags<0) flags=FRAMEPAIR_FORCE_NEWPROC; if (flags<0) flags=FRAMEPAIR_FORCE_NEWPROC;
if (((frame=elphel_set_P_value_common (port, P_COMPRESSOR_RUN, COMPRESSOR_RUN_CONT, frame, flags)))<0) { if (((frame=elphel_set_P_value_common (port, P_COMPRESSOR_RUN, COMPRESSOR_RUN_CONT, frame, flags, broardcast)))<0) {
RETURN_NULL(); RETURN_NULL();
} }
RETURN_LONG(frame); RETURN_LONG(frame);
...@@ -836,11 +840,12 @@ PHP_FUNCTION(elphel_compressor_stop) ...@@ -836,11 +840,12 @@ PHP_FUNCTION(elphel_compressor_stop)
long port; long port;
long frame=-1; long frame=-1;
unsigned long flags=-1; unsigned long flags=-1;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|ll", &port, &frame,&flags) == FAILURE) { long broardcast=0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|lll", &port, &frame, &flags, &broardcast) == FAILURE) {
RETURN_NULL(); RETURN_NULL();
} }
if (flags<0) flags=FRAMEPAIR_FORCE_NEWPROC; if (flags<0) flags=FRAMEPAIR_FORCE_NEWPROC;
if (((frame=elphel_set_P_value_common (port, P_COMPRESSOR_RUN, COMPRESSOR_RUN_STOP, frame, flags)))<0) { if (((frame=elphel_set_P_value_common (port, P_COMPRESSOR_RUN, COMPRESSOR_RUN_STOP, frame, flags, broardcast)))<0) {
RETURN_NULL(); RETURN_NULL();
} }
RETURN_LONG(frame); RETURN_LONG(frame);
...@@ -852,11 +857,12 @@ PHP_FUNCTION(elphel_compressor_frame) ...@@ -852,11 +857,12 @@ PHP_FUNCTION(elphel_compressor_frame)
long port; long port;
long frame=-1; long frame=-1;
unsigned long flags=-1; unsigned long flags=-1;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|ll", &port, &frame,&flags) == FAILURE) { long broardcast=0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|lll", &port, &frame,&flags, &broardcast) == FAILURE) {
RETURN_NULL(); RETURN_NULL();
} }
if (flags<0) flags=FRAMEPAIR_JUST_THIS; if (flags<0) flags=FRAMEPAIR_JUST_THIS;
if (((frame=elphel_set_P_value_common (port, P_COMPRESSOR_RUN, COMPRESSOR_RUN_SINGLE, frame, flags)))<0) { if (((frame=elphel_set_P_value_common (port, P_COMPRESSOR_RUN, COMPRESSOR_RUN_SINGLE, frame, flags, broardcast)))<0) {
RETURN_NULL(); RETURN_NULL();
} }
RETURN_LONG(frame); RETURN_LONG(frame);
...@@ -864,11 +870,12 @@ PHP_FUNCTION(elphel_compressor_frame) ...@@ -864,11 +870,12 @@ PHP_FUNCTION(elphel_compressor_frame)
//!reset sensor, and re-initialize it //!reset sensor, and re-initialize it
PHP_FUNCTION(elphel_reset_sensor) { PHP_FUNCTION(elphel_reset_sensor) {
long port; long port;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &port) == FAILURE) { long broardcast=0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &port,&broardcast) == FAILURE) {
RETURN_NULL(); RETURN_NULL();
} }
lseek((int) ELPHEL_G(fd_fparmsall[port]), LSEEK_FRAMEPARS_INIT, SEEK_END ); /// reset all framepars and globalPars lseek((int) ELPHEL_G(fd_fparmsall[port]), LSEEK_FRAMEPARS_INIT, SEEK_END ); /// reset all framepars and globalPars
elphel_set_P_value_common (port, P_SENSOR, 0, 0, -1); elphel_set_P_value_common (port, P_SENSOR, 0, 0, -1, broardcast);
RETURN_NULL(); RETURN_NULL();
} }
...@@ -896,7 +903,9 @@ PHP_FUNCTION(elphel_set_P_arr) ...@@ -896,7 +903,9 @@ PHP_FUNCTION(elphel_set_P_arr)
int num_mmap_written=0; int num_mmap_written=0;
int reg_addr, reg_data, constAddNumber; int reg_addr, reg_data, constAddNumber;
long multiMod; long multiMod;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la|ll", &port, &arr,&frame,&flags) == FAILURE) { long broadcast=0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la|lll", &port, &arr, &frame, &flags, &broadcast) == FAILURE) {
RETURN_LONG(num_written); RETURN_LONG(num_written);
} }
if ((port <0) || (port >= SENSOR_PORTS)) if ((port <0) || (port >= SENSOR_PORTS))
...@@ -913,7 +922,8 @@ PHP_FUNCTION(elphel_set_P_arr) ...@@ -913,7 +922,8 @@ PHP_FUNCTION(elphel_set_P_arr)
write_data=(unsigned long *) emalloc ((array_count+1)<<3); write_data=(unsigned long *) emalloc ((array_count+1)<<3);
if (!write_data) RETURN_NULL(); /// emalloc failed if (!write_data) RETURN_NULL(); /// emalloc failed
write_data[0]=FRAMEPARS_SETFRAME; write_data[0]=FRAMEPARS_SETFRAME | ((broadcast << 4) & 0xf0);
write_data[1]=frame; write_data[1]=frame;
for(zend_hash_internal_pointer_reset_ex(arr_hash, &pointer); for(zend_hash_internal_pointer_reset_ex(arr_hash, &pointer);
zend_hash_get_current_data_ex(arr_hash, (void**) &data, &pointer) == SUCCESS; zend_hash_get_current_data_ex(arr_hash, (void**) &data, &pointer) == SUCCESS;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment