@@ -131,7 +131,7 @@ int resolve_isr(int pin) {
131
131
// Primitives
132
132
133
133
#define NUM_PRIMITIVES 0
134
- #define NUM_PRIMITIVES_ARDUINO 37
134
+ #define NUM_PRIMITIVES_ARDUINO 38
135
135
136
136
#define ALL_PRIMITIVES (NUM_PRIMITIVES + NUM_PRIMITIVES_ARDUINO)
137
137
@@ -519,6 +519,14 @@ def_prim(chip_analog_read, oneToOneI32) {
519
519
return true ;
520
520
}
521
521
522
+ def_prim (chip_analog_write, twoToNoneU32) {
523
+ uint8_t pin = arg1.uint32 ;
524
+ uint8_t brightness = arg0.uint32 ;
525
+ pop_args (2 );
526
+ analogWrite (pin, brightness);
527
+ return true ;
528
+ }
529
+
522
530
// warning: undefined symbol: write_spi_byte
523
531
def_prim (write_spi_byte, oneToNoneU32) {
524
532
write_spi_byte (arg0.uint32 );
@@ -568,7 +576,7 @@ def_prim(clear_pixels, NoneToNoneU32) {
568
576
569
577
// LED Control primitives
570
578
571
- def_prim (chip_analog_write , threeToNoneU32) {
579
+ def_prim (chip_ledc_set_duty , threeToNoneU32) {
572
580
uint8_t channel = arg2.uint32 ;
573
581
uint32_t value = arg1.uint32 ;
574
582
uint32_t maxValue = arg0.uint32 ;
@@ -608,6 +616,8 @@ def_prim(subscribe_interrupt, threeToNoneU32) {
608
616
uint8_t tidx = arg1.uint32 ; // Table Idx pointing to Callback function
609
617
uint8_t mode = arg0.uint32 ;
610
618
619
+ printf (" subscribe_interrupt(%i, %i, %i)\n " , pin, tidx, mode);
620
+
611
621
int index = resolve_isr (pin);
612
622
if (index < 0 ) {
613
623
dbg_info (" subscribe_interrupt: no ISR found for pin %i\n " , pin);
@@ -619,6 +629,11 @@ def_prim(subscribe_interrupt, threeToNoneU32) {
619
629
return false ;
620
630
}
621
631
632
+ if (tidx < 0 || m->table .size < tidx) {
633
+ dbg_info (" subscribe_interrupt: out of range table index %i\n " , tidx);
634
+ return false ;
635
+ }
636
+
622
637
attachInterrupt (digitalPinToInterrupt (pin), ISRs[index].ISR_callback , mode);
623
638
624
639
String callback_id = INTERRUPT_TOPIC_PREFIX;
@@ -978,6 +993,7 @@ void install_primitives() {
978
993
install_primitive (chip_analog_write);
979
994
install_primitive (chip_ledc_setup);
980
995
install_primitive (chip_ledc_attach_pin);
996
+ install_primitive (chip_ledc_set_duty);
981
997
982
998
dbg_info (" INSTALLING ISRs\n " );
983
999
install_isrs ();
0 commit comments