diff --git a/fhem/FHEM/10_FRM.pm b/fhem/FHEM/10_FRM.pm index 799f172e3..6b37a06b6 100755 --- a/fhem/FHEM/10_FRM.pm +++ b/fhem/FHEM/10_FRM.pm @@ -199,10 +199,29 @@ sub FRM_DoInit($) { $main::defs{$name}{output_pins} = join(",", sort{$a<=>$b}(@$outputpins)); my $analogpins = $device->{metadata}{analog_pins}; $main::defs{$name}{analog_pins} = join(",", sort{$a<=>$b}(@$analogpins)); + my $pwmpins = $device->{metadata}{pwm_pins}; + $main::defs{$name}{pwm_pins} = join(",", sort{$a<=>$b}(@$pwmpins)); + my $servopins = $device->{metadata}{servo_pins}; + $main::defs{$name}{servo_pins} = join(",", sort{$a<=>$b}(@$servopins)); my $i2cpins = $device->{metadata}{i2c_pins}; $main::defs{$name}{i2c_pins} = join(",", sort{$a<=>$b}(@$i2cpins)); my $onewirepins = $device->{metadata}{onewire_pins}; $main::defs{$name}{onewire_pins} = join(",", sort{$a<=>$b}(@$onewirepins)); + my @analog_resolutions; + foreach my $pin (sort{$a<=>$b}(keys $device->{metadata}{analog_resolutions})) { + push @analog_resolutions,$pin.":".$device->{metadata}{analog_resolutions}{$pin}; + } + $main::defs{$name}{analog_resolutions} = join(",",@analog_resolutions); + my @pwm_resolutions; + foreach my $pin (sort{$a<=>$b}(keys $device->{metadata}{pwm_resolutions})) { + push @pwm_resolutions,$pin.":".$device->{metadata}{pwm_resolutions}{$pin}; + } + $main::defs{$name}{pwm_resolutions} = join(",",@pwm_resolutions); + my @servo_resolutions; + foreach my $pin (sort{$a<=>$b}(keys $device->{metadata}{servo_resolutions})) { + push @servo_resolutions,$pin.":".$device->{metadata}{servo_resolutions}{$pin}; + } + $main::defs{$name}{servo_resolutions} = join(",",@servo_resolutions); $found = 1; last; } @@ -248,11 +267,17 @@ FRM_Init_Client($$) { } sub -FRM_Init_Pin_Client($$) { - my ($hash,$args) = @_; +FRM_Init_Pin_Client($$$) { + my ($hash,$args,$mode) = @_; my $u = "wrong syntax: define FRM_XXX pin"; return $u if(int(@$args) < 3); - $hash->{PIN} = @$args[2]; + my $pin = @$args[2]; + $hash->{PIN} = $pin; + if (defined $hash->{IODev} and defined $hash->{IODev}->{FirmataDevice}) { + $hash->{IODev}->{FirmataDevice}->pin_mode($pin,$mode); + return 1; + } + return undef; } sub @@ -356,23 +381,21 @@ sub FRM_OWX_Init($$) { my ($hash,$args) = @_; - FRM_Init_Pin_Client($hash,$args); - $hash->{INTERFACE} = "firmata"; - if (defined $hash->{IODev}) { + if (FRM_Init_Pin_Client($hash,$args,PIN_ONEWIRE)) { + $hash->{INTERFACE} = "firmata"; my $firmata = $hash->{IODev}->{FirmataDevice}; - if (defined $firmata and defined $hash->{PIN}) { - my $pin = $hash->{PIN}; - $firmata->observe_onewire($pin,\&FRM_OWX_observer,$hash); - $firmata->pin_mode($pin,PIN_ONEWIRE); - $hash->{FRM_OWX_REPLIES} = {}; - $hash->{DEVS} = []; - if ( main::AttrVal($hash->{NAME},"buspower","") eq "parasitic" ) { - $firmata->onewire_config($pin,1); - } - main::readingsSingleUpdate($hash,"state","Initialized",1); - $firmata->onewire_search($pin); + my $pin = $hash->{PIN}; + $firmata->observe_onewire($pin,\&FRM_OWX_observer,$hash); + $hash->{FRM_OWX_REPLIES} = {}; + $hash->{DEVS} = []; + if ( main::AttrVal($hash->{NAME},"buspower","") eq "parasitic" ) { + $firmata->onewire_config($pin,1); } + main::readingsSingleUpdate($hash,"state","Initialized",1); + $firmata->onewire_search($pin); + return undef; } + return 1; } sub FRM_OWX_observer diff --git a/fhem/FHEM/20_FRM_AD.pm b/fhem/FHEM/20_FRM_AD.pm index 80e0f5518..9ea9be56a 100755 --- a/fhem/FHEM/20_FRM_AD.pm +++ b/fhem/FHEM/20_FRM_AD.pm @@ -16,7 +16,6 @@ FRM_AD_Initialize($) $hash->{DefFn} = "FRM_Client_Define"; $hash->{InitFn} = "FRM_AD_Init"; $hash->{UndefFn} = "FRM_AD_Undef"; - $hash->{AttrFn} = "FRM_Attr"; $hash->{AttrList} = "IODev loglevel:0,1,2,3,4,5 $main::readingFnAttributes"; } @@ -25,15 +24,12 @@ sub FRM_AD_Init($$) { my ($hash,$args) = @_; - FRM_Init_Pin_Client($hash,$args); - if (defined $hash->{IODev}) { + if (FRM_Init_Pin_Client($hash,$args,PIN_ANALOG)) { my $firmata = $hash->{IODev}->{FirmataDevice}; - if (defined $firmata and defined $hash->{PIN}) { - $firmata->pin_mode($hash->{PIN},PIN_ANALOG); - $firmata->observe_analog($hash->{PIN},\&FRM_AD_observer,$hash); - main::readingsSingleUpdate($hash,"state","initialized",1); - return undef; - } + $firmata->observe_analog($hash->{PIN},\&FRM_AD_observer,$hash); + $main::defs{$hash->{NAME}}{resolution}=$firmata->{metadata}{analog_resolutions}{$hash->{PIN}} if (defined $firmata->{metadata}{analog_resolutions}); + main::readingsSingleUpdate($hash,"state","Initialized",1); + return undef; } return 1; } @@ -49,15 +45,21 @@ FRM_AD_observer sub FRM_AD_Get($) { - my ($hash) = @_; + my ($hash,@a) = @_; my $iodev = $hash->{IODev}; - if (defined $iodev and defined $iodev->{FirmataDevice} and defined $iodev->{FD}) { - my $ret = $iodev->{FirmataDevice}->analog_read($hash->{PIN}); - return $ret; - } else { - return $hash->{NAME}." no IODev assigned" if (!defined $iodev); - return $hash->{NAME}.", ".$iodev->{NAME}." is not connected"; + my $name = shift @a; + return $name." no IODev assigned" if (!defined $iodev); + return $name.", ".$iodev->{NAME}." is not connected" if (!(defined $iodev->{FirmataDevice} and defined $iodev->{FD})); + my $cmd = shift @a; + my $ret; + ARGUMENT_HANDLER: { + $cmd eq "reading" and do { + $ret = $iodev->{FirmataDevice}->analog_read($hash->{PIN}); + last; + }; + $ret = "unknown command ".$cmd; } + return $ret; } sub @@ -76,14 +78,14 @@ FRM_AD_Undef($$) - Get
+ Get
Attributes
diff --git a/fhem/FHEM/20_FRM_OUT.pm b/fhem/FHEM/20_FRM_OUT.pm index 260807133..146ef4e19 100755 --- a/fhem/FHEM/20_FRM_OUT.pm +++ b/fhem/FHEM/20_FRM_OUT.pm @@ -17,7 +17,6 @@ FRM_OUT_Initialize($) $hash->{DefFn} = "FRM_Client_Define"; $hash->{InitFn} = "FRM_OUT_Init"; $hash->{UndefFn} = "FRM_OUT_Undef"; - $hash->{AttrFn} = "FRM_Attr"; $hash->{AttrList} = "IODev loglevel:0,1,2,3,4,5 $main::readingFnAttributes"; } @@ -26,14 +25,11 @@ sub FRM_OUT_Init($$) { my ($hash,$args) = @_; - FRM_Init_Pin_Client($hash,$args); - if (defined $hash->{IODev}) { - my $firmata = $hash->{IODev}->{FirmataDevice}; - if (defined $firmata and defined $hash->{PIN}) { - $firmata->pin_mode($hash->{PIN},PIN_OUTPUT); - main::readingsSingleUpdate($hash,"state","initialized",1); - } + if (FRM_Init_Pin_Client($hash,$args,PIN_OUTPUT)) { + main::readingsSingleUpdate($hash,"state","Initialized",1); + return undef; } + return 1; } sub @@ -85,7 +81,7 @@ FRM_OUT_Undef($$) Define
diff --git a/fhem/FHEM/20_FRM_PWM.pm b/fhem/FHEM/20_FRM_PWM.pm index bd29f820a..0617240f6 100755 --- a/fhem/FHEM/20_FRM_PWM.pm +++ b/fhem/FHEM/20_FRM_PWM.pm @@ -16,7 +16,6 @@ FRM_PWM_Initialize($) $hash->{DefFn} = "FRM_Client_Define"; $hash->{InitFn} = "FRM_PWM_Init"; $hash->{UndefFn} = "FRM_PWM_Undef"; - $hash->{AttrFn} = "FIR_Attr"; $hash->{AttrList} = "IODev loglevel:0,1,2,3,4,5 $main::readingFnAttributes"; } @@ -25,14 +24,13 @@ sub FRM_PWM_Init($$) { my ($hash,$args) = @_; - FRM_Init_Pin_Client($hash,$args); - if (defined $hash->{IODev}) { + if (FRM_Init_Pin_Client($hash,$args,PIN_PWM)) { my $firmata = $hash->{IODev}->{FirmataDevice}; - if (defined $firmata and defined $hash->{PIN}) { - $firmata->pin_mode($hash->{PIN},PIN_PWM); - main::readingsSingleUpdate($hash,"state","initialized",1); - } + $main::defs{$hash->{NAME}}{resolution}=$firmata->{metadata}{pwm_resolutions}{$hash->{PIN}} if (defined $firmata->{metadata}{pwm_resolutions}); + main::readingsSingleUpdate($hash,"state","Initialized",1); + return undef; } + return 1; } sub @@ -74,14 +72,16 @@ FRM_PWM_Undef($$) Define
Set
Get
diff --git a/fhem/FHEM/20_FRM_SERVO.pm b/fhem/FHEM/20_FRM_SERVO.pm new file mode 100755 index 000000000..6d3372881 --- /dev/null +++ b/fhem/FHEM/20_FRM_SERVO.pm @@ -0,0 +1,130 @@ +############################################# +package main; + +use strict; +use warnings; +use Device::Firmata; +use Device::Firmata::Constants qw/ :all /; + +##################################### +sub +FRM_SERVO_Initialize($) +{ + my ($hash) = @_; + + $hash->{SetFn} = "FRM_SERVO_Set"; + $hash->{DefFn} = "FRM_Client_Define"; + $hash->{InitFn} = "FRM_SERVO_Init"; + $hash->{UndefFn} = "FRM_SERVO_Undef"; + $hash->{AttrFn} = "FRM_SERVO_Attr"; + + $hash->{AttrList} = "min-pulse max-pulse IODev loglevel:0,1,2,3,4,5 $main::readingFnAttributes"; +} + +sub +FRM_SERVO_Init($$) +{ + my ($hash,$args) = @_; + if (FRM_Init_Pin_Client($hash,$args,PIN_SERVO)) { + my $firmata = $hash->{IODev}->{FirmataDevice}; + $main::defs{$hash->{NAME}}{resolution}=$firmata->{metadata}{servo_resolutions}{$hash->{PIN}} if (defined $firmata->{metadata}{servo_resolutions}); + FRM_SERVO_apply_attribute($hash,"max-pulse"); #sets min-pulse as well + main::readingsSingleUpdate($hash,"state","Initialized",1); + return undef; + } + return 1; +} + +sub FRM_SERVO_Attr(@) { + my ($command,$name,$attribute,$value) = @_; + if ($command eq "set") { + $main::attr{$name}{$attribute}=$value; + if ( $attribute eq "min-pulse" || $attribute eq "max-pulse" ) { + FRM_SERVO_apply_attribute($main::defs{$name},$attribute); + } + } +} + +sub FRM_SERVO_apply_attribute { + my ($hash,$attribute) = @_; + return unless (defined $hash->{IODev} and defined $hash->{IODev}->{FirmataDevice}); + my $firmata = $hash->{IODev}->{FirmataDevice}; + my $name = $hash->{NAME}; + if ( $attribute eq "min-pulse" || $attribute eq "max-pulse" ) { + # defaults are taken from: http://arduino.cc/en/Reference/ServoAttach + $firmata->servo_config($hash->{PIN},{min_pulse => main::AttrVal($name,"min-pulse",544), max_pulse => main::AttrVal($name,"max-pulse",2400)}); + } +} + +sub +FRM_SERVO_Set($@) +{ + my ($hash, @a) = @_; + my $value = $a[1]; + my $iodev = $hash->{IODev}; + if (defined $iodev and defined $iodev->{FirmataDevice} and defined $iodev->{FD}) { + $iodev->{FirmataDevice}->servo_write($hash->{PIN},$value); + main::readingsSingleUpdate($hash,"state",$a[1], 1); + } else { + return $hash->{NAME}." no IODev assigned" if (!defined $iodev); + return $hash->{NAME}.", ".$iodev->{NAME}." is not connected"; + } + return undef; +} + +sub +FRM_SERVO_Undef($$) +{ + my ($hash, $name) = @_; +} + +1; + +=pod +=begin html + + +

FRM_SERVO

+ +
+ +=end html +=cut diff --git a/fhem/FHEM/lib/Device/Firmata/Constants.pm b/fhem/FHEM/lib/Device/Firmata/Constants.pm index 8e9732776..35b6284b3 100644 --- a/fhem/FHEM/lib/Device/Firmata/Constants.pm +++ b/fhem/FHEM/lib/Device/Firmata/Constants.pm @@ -220,16 +220,14 @@ use constant ( EXTENDED_ANALOG => 0x6F, # analog write (PWM, Servo, etc) to any pin SERVO_CONFIG => 0x70, # set max angle, minPulse, maxPulse, freq STRING_DATA => 0x71, # a string message with 14-bits per char - ONEWIRE_REQUEST => 0x73, # send an OneWire read/write/reset/select/skip/search request - ONEWIRE_REPLY => 0x7D, # reply to a OneWire read/search request + ONEWIRE_DATA => 0x73, # OneWire read/write/reset/select/skip/search request + read/search reply SHIFT_DATA => 0x75, # shiftOut config/data message (34 bits) I2C_REQUEST => 0x76, # send an I2C read/write request I2C_REPLY => 0x77, # a reply to an I2C read request I2C_CONFIG => 0x78, # config I2C settings such as delay times and power pins REPORT_FIRMWARE => 0x79, # report name and version of the firmware SAMPLING_INTERVAL => 0x7A, # set the poll rate of the main loop - SCHEDULER_REQUEST => 0x7B, # send a createtask/deletetask/addtotask/schedule/querytasks/querytask request to the scheduler - SCHEDULER_REPLY => 0x7C, # a reply to a querytasks/querytask-request from the scheduler + SCHEDULER_DATA => 0x7B, # createtask/deletetask/addtotask/schedule/querytasks/querytask request and querytasks/querytask reply SYSEX_NON_REALTIME => 0x7E, # MIDI Reserved for non-realtime messages SYSEX_REALTIME => 0x7F, # MIDI Reserved for realtime messages diff --git a/fhem/FHEM/lib/Device/Firmata/Platform.pm b/fhem/FHEM/lib/Device/Firmata/Platform.pm index 016a8a727..d66c20c57 100644 --- a/fhem/FHEM/lib/Device/Firmata/Platform.pm +++ b/fhem/FHEM/lib/Device/Firmata/Platform.pm @@ -26,6 +26,9 @@ use Device::Firmata::Base # To track internal status analog_pins => [], + analog_resolutions => {}, + pwm_resolutions => {}, + servo_resolutions => {}, ports => [], pins => {}, pin_modes => {}, @@ -167,7 +170,7 @@ sub messages_handle { # Handle analog pin messages $command eq 'ANALOG_MESSAGE' and do { my $pin_number = $message->{command} & 0x0f; - my $pin_value = ( $data->[0] | ( $data->[1] << 7 ) ) / 1023; + my $pin_value = ( $data->[0] | ( $data->[1] << 7 ) ); if (defined $self->{metadata}{analog_mappings}) { $pin_number = $self->{metadata}{analog_mappings}{$pin_number}; } @@ -247,6 +250,9 @@ sub sysex_handle { my @analogpins; my @inputpins; my @outputpins; + my @pwmpins; + my @servopins; + my @shiftpins; my @i2cpins; my @onewirepins; foreach my $pin (keys %$capabilities) { @@ -259,6 +265,18 @@ sub sysex_handle { } if ($capabilities->{$pin}->{PIN_ANALOG+0}) { push @analogpins, $pin; + $self->{metadata}{analog_resolutions}{$pin} = $capabilities->{$pin}->{PIN_ANALOG+0}->{resolution}; + } + if ($capabilities->{$pin}->{PIN_PWM+0}) { + push @pwmpins, $pin; + $self->{metadata}{pwm_resolutions}{$pin} = $capabilities->{$pin}->{PIN_PWM+0}->{resolution}; + } + if ($capabilities->{$pin}->{PIN_SERVO+0}) { + push @analogpins, $pin; + $self->{metadata}{servo_resolutions}{$pin} = $capabilities->{$pin}->{PIN_SERVO+0}->{resolution}; + } + if ($capabilities->{$pin}->{PIN_SHIFT+0}) { + push @shiftpins, $pin; } if ($capabilities->{$pin}->{PIN_I2C+0}) { push @i2cpins, $pin; @@ -271,6 +289,9 @@ sub sysex_handle { $self->{metadata}{input_pins} = \@inputpins; $self->{metadata}{output_pins} = \@outputpins; $self->{metadata}{analog_pins} = \@analogpins; + $self->{metadata}{pwm_pins} = \@pwmpins; + $self->{metadata}{servo_pins} = \@servopins; + $self->{metadata}{shift_pins} = \@shiftpins; $self->{metadata}{i2c_pins} = \@i2cpins; $self->{metadata}{onewire_pins} = \@onewirepins; last; @@ -300,7 +321,7 @@ sub sysex_handle { last; }; - $sysex_message->{command_str} eq 'ONEWIRE_REPLY' and do { + $sysex_message->{command_str} eq 'ONEWIRE_DATA' and do { my $pin = $data->{pin}; my $observer = $self->{onewire_observer}[$pin]; if (defined $observer) { @@ -309,7 +330,7 @@ sub sysex_handle { last; }; - $sysex_message->{command_str} eq 'SCHEDULER_REPLY' and do { + $sysex_message->{command_str} eq 'SCHEDULER_DATA' and do { my $observer = $self->{scheduler_observer}; if (defined $observer) { $observer->{method}( $data, $observer->{context} ); @@ -572,6 +593,18 @@ sub i2c_config { return $self->{io}->data_write($self->{protocol}->packet_i2c_config($delay,@data)); } +sub servo_write { + my ( $self, $pin, $value ) = @_; + return undef unless $self->is_configured_mode($pin,PIN_SERVO); + return analog_write( $self, $pin, $value ); +} + +sub servo_config { + my ( $self, $pin, $args ) = @_; + return undef unless $self->is_configured_mode($pin,PIN_SERVO); + return $self->{io}->data_write($self->{protocol}->packet_servo_config_request($pin,$args)); +} + sub scheduler_create_task { my $self = shift; my $id=-1; diff --git a/fhem/FHEM/lib/Device/Firmata/Protocol.pm b/fhem/FHEM/lib/Device/Firmata/Protocol.pm index 21638a132..6baadd1d6 100644 --- a/fhem/FHEM/lib/Device/Firmata/Protocol.pm +++ b/fhem/FHEM/lib/Device/Firmata/Protocol.pm @@ -296,13 +296,13 @@ sub sysex_parse { last; }; - $command == $protocol_commands->{ONEWIRE_REPLY} and do { + $command == $protocol_commands->{ONEWIRE_DATA} and do { $return_data = $self->handle_onewire_reply($sysex_data); last; }; - $command == $protocol_commands->{SCHEDULER_REPLY} and do { - $return_data = $self->handle_scheduler_reply($sysex_data); + $command == $protocol_commands->{SCHEDULER_DATA} and do { + $return_data = $self->handle_scheduler_response($sysex_data); last; }; @@ -657,15 +657,15 @@ sub packet_i2c_config { # * 7 END_SYSEX (0xF7) # */ -sub packet_servo_config { +sub packet_servo_config_request { - my ( $self, $data ) = @_; + my ( $self, $pin, $data ) = @_; my $min_pulse = $data->{min_pulse}; my $max_pulse = $data->{max_pulse}; return $self->packet_sysex_command( SERVO_CONFIG, - $data->{pin} & 0x7f, + $pin & 0x7f, $min_pulse & 0x7f, $min_pulse >> 7, $max_pulse & 0x7f, @@ -693,17 +693,17 @@ sub packet_servo_config { sub packet_onewire_search_request { my ( $self, $pin ) = @_; - return $self->packet_sysex_command( ONEWIRE_REQUEST,$ONE_WIRE_COMMANDS->{SEARCH_REQUEST},$pin); + return $self->packet_sysex_command( ONEWIRE_DATA,$ONE_WIRE_COMMANDS->{SEARCH_REQUEST},$pin); }; sub packet_onewire_search_alarms_request { my ( $self, $pin ) = @_; - return $self->packet_sysex_command( ONEWIRE_REQUEST,$ONE_WIRE_COMMANDS->{SEARCH_ALARMS_REQUEST},$pin); + return $self->packet_sysex_command( ONEWIRE_DATA,$ONE_WIRE_COMMANDS->{SEARCH_ALARMS_REQUEST},$pin); }; sub packet_onewire_config_request { my ( $self, $pin, $power ) = @_; - return $self->packet_sysex_command( ONEWIRE_REQUEST, $ONE_WIRE_COMMANDS->{CONFIG_REQUEST},$pin, + return $self->packet_sysex_command( ONEWIRE_DATA, $ONE_WIRE_COMMANDS->{CONFIG_REQUEST},$pin, ( defined $power ) ? $power : 1 ); }; @@ -748,7 +748,7 @@ sub packet_onewire_request { my $writeBytes=$args->{write}; push @data,@$writeBytes; } - return $self->packet_sysex_command( ONEWIRE_REQUEST, $subcommand, $pin, pack_as_7bit(@data)); + return $self->packet_sysex_command( ONEWIRE_DATA, $subcommand, $pin, pack_as_7bit(@data)); }; sub handle_onewire_reply { @@ -797,49 +797,49 @@ sub handle_onewire_reply { sub packet_create_task { my ($self,$id,$len) = @_; - my $packet = $self->packet_sysex_command('SCHEDULER_REQUEST', $SCHEDULER_COMMANDS->{CREATE_FIRMATA_TASK}, $id, $len & 0x7F, $len>>7); + my $packet = $self->packet_sysex_command('SCHEDULER_DATA', $SCHEDULER_COMMANDS->{CREATE_FIRMATA_TASK}, $id, $len & 0x7F, $len>>7); return $packet; } sub packet_delete_task { my ($self,$id) = @_; - return $self->packet_sysex_command('SCHEDULER_REQUEST', $SCHEDULER_COMMANDS->{DELETE_FIRMATA_TASK}, $id); + return $self->packet_sysex_command('SCHEDULER_DATA', $SCHEDULER_COMMANDS->{DELETE_FIRMATA_TASK}, $id); } sub packet_add_to_task { my ($self,$id,@data) = @_; - my $packet = $self->packet_sysex_command('SCHEDULER_REQUEST', $SCHEDULER_COMMANDS->{ADD_TO_FIRMATA_TASK}, $id, pack_as_7bit(@data)); + my $packet = $self->packet_sysex_command('SCHEDULER_DATA', $SCHEDULER_COMMANDS->{ADD_TO_FIRMATA_TASK}, $id, pack_as_7bit(@data)); return $packet; } sub packet_delay_task { my ($self,$time_ms) = @_; - my $packet = $self->packet_sysex_command('SCHEDULER_REQUEST', $SCHEDULER_COMMANDS->{DELAY_FIRMATA_TASK}, pack_as_7bit($time_ms & 0xFF, ($time_ms & 0xFF00)>>8, ($time_ms & 0xFF0000)>>16,($time_ms & 0xFF000000)>>24)); + my $packet = $self->packet_sysex_command('SCHEDULER_DATA', $SCHEDULER_COMMANDS->{DELAY_FIRMATA_TASK}, pack_as_7bit($time_ms & 0xFF, ($time_ms & 0xFF00)>>8, ($time_ms & 0xFF0000)>>16,($time_ms & 0xFF000000)>>24)); return $packet; } sub packet_schedule_task { my ($self,$id,$time_ms) = @_; - my $packet = $self->packet_sysex_command('SCHEDULER_REQUEST', $SCHEDULER_COMMANDS->{SCHEDULE_FIRMATA_TASK}, $id, pack_as_7bit($time_ms & 0xFF, ($time_ms & 0xFF00)>>8, ($time_ms & 0xFF0000)>>16,($time_ms & 0xFF000000)>>24)); + my $packet = $self->packet_sysex_command('SCHEDULER_DATA', $SCHEDULER_COMMANDS->{SCHEDULE_FIRMATA_TASK}, $id, pack_as_7bit($time_ms & 0xFF, ($time_ms & 0xFF00)>>8, ($time_ms & 0xFF0000)>>16,($time_ms & 0xFF000000)>>24)); return $packet; } sub packet_query_all_tasks { my $self = shift; - return $self->packet_sysex_command('SCHEDULER_REQUEST', $SCHEDULER_COMMANDS->{QUERY_ALL_FIRMATA_TASKS}); + return $self->packet_sysex_command('SCHEDULER_DATA', $SCHEDULER_COMMANDS->{QUERY_ALL_FIRMATA_TASKS}); } sub packet_query_task { my ($self,$id) = @_; - return $self->packet_sysex_command('SCHEDULER_REQUEST', $SCHEDULER_COMMANDS->{QUERY_FIRMATA_TASK},$id); + return $self->packet_sysex_command('SCHEDULER_DATA', $SCHEDULER_COMMANDS->{QUERY_FIRMATA_TASK},$id); } sub packet_reset_scheduler { my $self = shift; - return $self->packet_sysex_command('SCHEDULER_REQUEST', $SCHEDULER_COMMANDS->{RESET_FIRMATA_TASKS}); + return $self->packet_sysex_command('SCHEDULER_DATA', $SCHEDULER_COMMANDS->{RESET_FIRMATA_TASKS}); } -sub handle_scheduler_reply { +sub handle_scheduler_response { my ( $self, $sysex_data ) = @_; my $command = shift @$sysex_data;