Re: PHP extension writing
| From: | Christoph M. Becker | Date: | Sat, 24 Sep 2016 16:51:40 +0000 |
| Subject: | Re: PHP extension writing | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-325744@lists.php.net to get a copy of this message | ||
Hi Torsten!
On 24.09.2016 at 18:31, Torsten Rosenberger wrote:
> Am Samstag, den 24.09.2016, 17:46 +0200 schrieb Christoph M. Becker:
>
>> On 24.09.2016 at 16:29, Torsten Rosenberger wrote:
>>
>>> PHP_FUNCTION(i2c_read_value)
>>> {
>>> int arg_len;
>>> unsigned char reg;
>>> unsigned short res;
>>>
>>> if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", ®,
>>> &arg_len) == FAILURE){
>>
>> That looks wrong.
reg should be declared as
>> char *.
>
> i have seen “s”: string, expects char* and int.
Indeed[1]. But all output parameters of zend_parse_parameters() have to
passed as pointers (cf. &arg_len).
>
> but reg should be int it is a hex number for the i2c bus.
Then you should parse for "l", and handle out-of-range values by
throwing an error. Otherwise the API is pretty fragile at best; for
instance, calling i2c_read_value('') might result in arbitrary behavior.
>> There might be a permission or working directory issue.
>
> you are right! apache2 was not able to access /dev/i2c-1 so I add the
> apache2 user to the i2c group but also had to change the acces mod to
> the file.
>
> now it works
> Thanks's a lot!
Fine. You're welcome.
[1] <http://php.net/manual/en/internals2.funcs.php>
--
Christoph M. Becker