\ Copyright 2021 Bradley D. Nelson 
\ 
\ Licensed under the Apache License, Version 2.0 (the "License"); 
\ you may not use this file except in compliance with the License. 
\ You may obtain a copy of the License at 
\ 
\     http://www.apache.org/licenses/LICENSE-2.0 
\ 
\ Unless required by applicable law or agreed to in writing, software 
\ distributed under the License is distributed on an "AS IS" BASIS, 
\ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
\ See the License for the specific language governing permissions and 
\ limitations under the License. 
 
( Migrate various words to separate vocabularies, and constants ) 
 
vocabulary ESP   ESP definitions 
transfer ESP-builtins 
only forth definitions 
 
forth definitions 
 
vocabulary Wire   Wire definitions 
transfer wire-builtins 
forth definitions 
 
vocabulary WiFi   WiFi definitions 
transfer WiFi-builtins 
( WiFi Modes ) 
0 constant WIFI_MODE_NULL 
1 constant WIFI_MODE_STA 
2 constant WIFI_MODE_AP 
3 constant WIFI_MODE_APSTA 
forth definitions 
 
vocabulary SD   SD definitions 
transfer SD-builtins 
forth definitions 
 
vocabulary SD_MMC   SD_MMC definitions 
transfer SD_MMC-builtins 
forth definitions 
 
vocabulary spi_flash   spi_flash definitions 
transfer spi_flash-builtins 
DEFINED? spi_flash_init [IF] 
0 constant SPI_PARTITION_TYPE_APP 
1 constant SPI_PARTITION_TYPE_DATA 
$ff constant SPI_PARTITION_SUBTYPE_ANY 
 
also structures 
struct esp_partition_t 
  ( Work around changing struct layout ) 
  esp_partition_t_size 40 >= [IF] 
    ptr field p>gap 
  [THEN] 
  ptr field p>type 
  ptr field p>subtype 
  ptr field p>address 
  ptr field p>size 
  ptr field p>label 
 
: p. ( part -- ) 
  base @ >r >r decimal 
  ." TYPE: " r@ p>type @ . ." SUBTYPE: " r@ p>subtype @ . 
  ." ADDR: " r@ hex p>address @ .  ." SIZE: " r@ p>size @ . 
  ." LABEL: " r> p>label @ z>s type cr r> base ! ; 
: list-partition-type ( type -- ) 
  SPI_PARTITION_SUBTYPE_ANY 0 esp_partition_find 
  begin dup esp_partition_get p. esp_partition_next dup 0= until drop ; 
: list-partitions   SPI_PARTITION_TYPE_APP list-partition-type 
                    SPI_PARTITION_TYPE_DATA list-partition-type ; 
[THEN] 
only forth definitions 
 
vocabulary SPIFFS   SPIFFS definitions 
transfer SPIFFS-builtins 
forth definitions 
 
vocabulary ledc  ledc definitions 
transfer ledc-builtins 
forth definitions 
 
vocabulary Serial   Serial definitions 
transfer Serial-builtins 
forth definitions 
 
vocabulary sockets   sockets definitions 
transfer sockets-builtins 
1 constant SOCK_STREAM 
2 constant SOCK_DGRAM 
3 constant SOCK_RAW 
 
2 constant AF_INET 
16 constant sizeof(sockaddr_in) 
1 constant SOL_SOCKET 
2 constant SO_REUSEADDR 
 
: bs, ( n -- ) dup 8 rshift c, c, ; 
: s, ( n -- ) dup c, 8 rshift c, ; 
: l, ( n -- ) dup s, 16 rshift s, ; 
: sockaddr   create 16 c, AF_INET c, 0 bs, 0 l, 0 l, 0 l, ; 
: ->port@ ( a -- n ) 2 + >r r@ c@ 8 lshift r> 1+ c@ + ; 
: ->port! ( n a --  ) 2 + >r dup 8 rshift r@ c! r> 1+ c! ; 
: ->addr@ ( a -- n ) 4 + ul@ ; 
: ->addr! ( n a --  ) 4 + l! ; 
: ->h_addr ( hostent -- n ) 2 cells + 8 + @ @ ul@ ; 
: ip# ( n -- n ) dup 255 and n. [char] . emit 8 rshift ; 
: ip. ( n -- ) ip# ip# ip# 255 and n. ; 
forth definitions 
 
vocabulary interrupts   interrupts definitions 
transfer interrupts-builtins 
DEFINED? gpio_config [IF] 
0 constant ESP_INTR_FLAG_DEFAULT 
: ESP_INTR_FLAG_LEVELn ( n=1-6 -- n ) 1 swap lshift ; 
1 7 lshift constant ESP_INTR_FLAG_NMI 
1 8 lshift constant ESP_INTR_FLAG_SHARED 
1 9 lshift constant ESP_INTR_FLAG_EDGE 
1 10 lshift constant ESP_INTR_FLAG_IRAM 
1 11 lshift constant ESP_INTR_FLAG_INTRDISABLED 
( Prefix these with # because GPIO_INTR_DISABLE conflicts with a function. ) 
0 constant #GPIO_INTR_DISABLE 
1 constant #GPIO_INTR_POSEDGE 
2 constant #GPIO_INTR_NEGEDGE 
3 constant #GPIO_INTR_ANYEDGE 
4 constant #GPIO_INTR_LOW_LEVEL 
5 constant #GPIO_INTR_HIGH_LEVEL 
( Easy word to trigger on any change to a pin ) 
ESP_INTR_FLAG_DEFAULT gpio_install_isr_service drop 
: pinchange ( xt pin ) dup #GPIO_INTR_ANYEDGE gpio_set_intr_type throw 
                       swap 0 gpio_isr_handler_add throw ; 
[THEN] 
forth definitions 
 
vocabulary rmt   rmt definitions 
transfer rmt-builtins 
forth definitions 
 
vocabulary rtos   rtos definitions 
transfer rtos-builtins 
forth definitions 
 
vocabulary bluetooth   bluetooth definitions 
transfer bluetooth-builtins 
forth definitions 
 
vocabulary oled   oled definitions 
transfer oled-builtins 
DEFINED? OledNew [IF] 
128 constant WIDTH 
64 constant HEIGHT 
-1 constant OledReset 
0 constant BLACK 
1 constant WHITE 
1 constant SSD1306_EXTERNALVCC 
2 constant SSD1306_SWITCHCAPVCC 
: OledInit 
  OledAddr @ 0= if 
    WIDTH HEIGHT OledReset OledNew 
    SSD1306_SWITCHCAPVCC $3C OledBegin drop 
  then 
  OledCLS 
  2 OledTextsize  ( Draw 2x Scale Text ) 
  WHITE OledTextc  ( Draw white text ) 
  0 0 OledSetCursor  ( Start at top-left corner ) 
  z" *Esp32forth*" OledPrintln OledDisplay 
; 
[THEN] 
forth definitions 
 
internals definitions 
( Heap Capabilities ) 
binary 
0001 constant MALLOC_CAP_EXEC 
0010 constant MALLOC_CAP_32BIT 
0100 constant MALLOC_CAP_8BIT 
1000 constant MALLOC_CAP_DMA 
: MALLOC_CAP_PID ( n -- ) 10000 over 11 ( 3 ) - for 2* next ; 
000010000000000 constant MALLOC_CAP_SPIRAM 
000100000000000 constant MALLOC_CAP_INTERNAL 
001000000000000 constant MALLOC_CAP_DEFAULT 
010000000000000 constant MALLOC_CAP_IRAM_8BIT 
010000000000000 constant MALLOC_CAP_RETENTION 
decimal 
forth definitions 
 

Legal: site web personnel sans commerce / personal site without seling