Andrey, Oleg, Yes I have an older version of 359.bit because in some newer versions the combining mode didn't work. I haven't tried the latest version. In my version reg_write.php is called with the values 835 and 02 and does switch the sensor. fpcf does not. I still don't understand why. Anyway, I will update and try the commands mentioned below. Should the combining/alternating modes work in the current version?
Andrey, nor fpcf or reg_write.php follow the safety procedure you mentioned in your last mail, do they? If I understand you right then placing i²c commands through the sequencer is the safer option. How can I do that from c? Can you tell me a starting point for further code investigation? Andreas Oleg K Dzhimiev schrieb: > Adreas, > > Sorry, I didn't tell you - I changed reg addresses in 10359 a while > ago (in Jan-Feb) - you can find new addresses here: > http://wiki.elphel.com/index.php?title=Talk:10359 > I will update this page today-tomorrow - there're small updates - as > for direct channel switching the info is correct: > > fpcf -i2cw16 806 1 > > fpcf -i2cw16 806 2 > > fpcf -i2cw16 806 3 > > > Best regards, > Oleg > > On 6 September 2010 04:59, Andreas Bean <off...@beanbox.com > <mailto:off...@beanbox.com>> wrote: > > Hi Andrey, > > Thank you for your answer. See the code snippets below. Both open > the device /dev/xi2c16. > reg_write.php is called with the parameters 0x835 0x2 to switch to > channel 2. > Why doesn't the command > > fpcf -i2cw16 0x835 0x02 > > do the same? Both write to /dev/xi2c16 > I prefer to set the values from c, directly. Thank you for the > info about the possibility of an inconsistency on driver level. > But I don't think that this is the problem here. > > Do you know why the two code snippets don't do the same? > > Andreas > > ---------------------------- fpcf.c ------------------------------- > shft=-1; > if (strcasecmp(argv[1], "-i2cw8") ==0) shft=0; > if (strcasecmp(argv[1], "-i2cw16") ==0) shft=1; > if (shft>=0) { // write i2c bus0 > if (argc<3) {printf("Need I2C address (hex) to write: > register address + 256* (slave address>>1)\r\n");return -1;} > if (argc<4) {printf("Need data (hex) to write to i2c bus > 0\r\n");return -1;} > sa= strtol (argv[2],&cp,16); > uld=strtol (argv[3],&cp,16); > if (shft==1) { > if ((devfd = open("/dev/xi2c16", O_RDWR))<0) > {printf("error opening /dev/xi2c16\r\n"); return -1;} > uld= ((uld >>8) & 0xff) | ((uld <<8) & 0xff00); > } else { > if ((devfd = open("/dev/xi2c8", O_RDWR))<0) > {printf("error opening /dev/xi2c8\r\n"); return -1;} > } > if ((res=lseek(devfd,sa<<shft,0))<0) { > printf("lseek failed, returned %d\n",res); > close (devfd); > return -1; > } > if ((res=write(devfd,&uld,1<<shft))<(1<<shft)) { > printf("write failed, returned %d, expected - %d\n",res, > (1<<shft)); > close (devfd); > return -1; > } > close (devfd); > return 0; > } > ---------------------------- reg_write.php ------------------------- > function send_i2c_4($a,$d) { > $i2c = fopen('/dev/xi2c16', 'w'); > fseek ($i2c, 2*$a) ; > if ($w==1) $res=fwrite($i2c, chr ($d)); > else { > $res=fwrite($i2c, chr (floor($d/(256*256*256))).chr (($d - > 256*256*256*floor($d/(256*256*256)))/(256*256)).chr (($d - > 256*256*floor($d/(256*256)))/256).chr ($d - 256*floor($d/(256))) ); > printf("v1=%d\n",floor($d/(256*256*256))); > printf("v2=%d\n",($d - > 256*256*256*floor($d/(256*256*256)))/(256*256)); > printf("v3=%d\n",($d - 256*256*floor($d/(256*256)))/256); > printf("v4=%d\n",$d - 256*floor($d/(256))); > > } > > fclose($i2c); > return $res; > } > > > _______________________________________________ > Support-list mailing list > Support-list@support.elphel.com > <mailto:Support-list@support.elphel.com> > http://support.elphel.com/mailman/listinfo/support-list_support.elphel.com > >
<<attachment: office.vcf>>
_______________________________________________ Support-list mailing list Support-list@support.elphel.com http://support.elphel.com/mailman/listinfo/support-list_support.elphel.com