?login_element?

Subversion Repositories NedoOS

Rev

Rev 2099 | Blame | Compare with Previous | Last modification | View Log | Download

  1.     MODULE Wifi
  2. bytes_avail dw 0
  3. buffer_pointer dw 0
  4. closed db 1
  5. ; Initialize Wifi chip to work
  6. init:
  7.    
  8.     ld hl, .uartIniting : call TextMode.printZ
  9.     call Uart.init
  10.     ld hl, .chipIniting : call TextMode.printZ
  11.    
  12.     EspCmdOkErr "ATE0"
  13.     jp c, .initError
  14.  
  15. ; Reading auth.pwd and send it to ESP
  16.     ld hl, creds, b, Dos.FMODE_READ : call Dos.fopen
  17.     push af
  18.     ld hl,outputBuffer2, bc, 255 : call Dos.fread
  19.     pop af
  20.     call Dos.fclose
  21.    
  22.     ld hl, .doneInit1 : call TextMode.printZ
  23.    
  24.     ld hl,outputBuffer2
  25.     call espSendT
  26.     ld a, 13 : call Uart.write
  27.     ld a, 10 : call Uart.write
  28.     call checkOkErr
  29.     jp c, .initError    
  30. ;    
  31.         EspCmdOkErr "AT+CIPSERVER=0"
  32.     EspCmdOkErr "AT+CIPCLOSE" ; Close if there some connection was. Don't care about result
  33.     EspCmdOkErr "AT+CIPMUX=0" ; Single connection mode
  34.     jp c, .initError
  35.    
  36.     EspCmdOkErr "AT+CIPDINFO=0" ; Disable additional info
  37.     jp c, .initError
  38.  
  39.     ld hl, .doneInit : call TextMode.printZ
  40.    
  41.     or a
  42.     ret
  43. .initError
  44.     ld hl, .errMsg : call DialogBox.msgBox
  45.     scf
  46.     ret
  47. .errMsg      db "WiFi chip init failed!", CRLF, 0
  48. .uartIniting db "Uart initing...", CRLF, 0
  49. .chipIniting db "Chip initing...", CRLF, 0
  50. .doneInit    db "Done!",CRLF, 0
  51. .doneInit1   db "Sending auth.pwd to ESP",CRLF, 0
  52.     IFNDEF PROXY  
  53. ; HL - host pointer in gopher row
  54. ; DE - port pointer in gopher row
  55. openTCP:
  56.     push de
  57.     push hl
  58.     EspCmdOkErr "AT+CIPCLOSE" ; Don't care about result. Just close if it didn't happens before
  59.     EspSend 'AT+CIPSTART="TCP","'
  60.     pop hl
  61.     call espSendT
  62.     EspSend '",'
  63.     pop hl
  64.     call espSendT
  65.     ld a, 13 : call Uart.write
  66.     ld a, 10 : call Uart.write
  67.     xor a : ld (closed), a
  68.     jp checkOkErr
  69.     ENDIF
  70.  
  71.  
  72.  
  73. checkOkErr:
  74.     call Uart.read
  75.     cp 'O' : jp z, .okStart ; OK
  76.     cp 'E' : jp z, .errStart ; ERROR
  77.     cp 'F' : jp z, .failStart ; FAIL
  78.     jp checkOkErr
  79. .okStart
  80.     call Uart.read : cp 'K' : jp nz, checkOkErr
  81.     call Uart.read : cp 13  : jp nz, checkOkErr
  82.     call .flushToLF
  83.     or a
  84.     ret
  85. .errStart
  86.     call Uart.read : cp 'R' : jp nz, checkOkErr
  87.     call Uart.read : cp 'R' : jp nz, checkOkErr
  88.     call Uart.read : cp 'O' : jp nz, checkOkErr
  89.     call Uart.read : cp 'R' : jp nz, checkOkErr
  90.     call .flushToLF
  91.     scf
  92.     ret
  93. .failStart
  94.     call Uart.read : cp 'A' : jp nz, checkOkErr
  95.     call Uart.read : cp 'I' : jp nz, checkOkErr
  96.     call Uart.read : cp 'L' : jp nz, checkOkErr
  97.     call .flushToLF
  98.     scf
  99.     ret
  100. .flushToLF
  101.     call Uart.read
  102.     cp 10 : jp nz, .flushToLF
  103.     ret
  104.  
  105. ; Send buffer to UART
  106. ; HL - buff
  107. ; E - count
  108. espSend:
  109.     ld a, (hl) : call Uart.write
  110.     inc hl
  111.     dec e
  112.     jp nz, espSend
  113.     ret
  114.  
  115. ; HL - string that ends with one of the terminator(CR/LF/TAB/NULL)
  116. espSendT:
  117.     ld a, (hl)
  118.  
  119.     and a : ret z
  120.     cp 9 : ret z
  121.     cp 13 : ret z
  122.     cp 10 : ret z
  123.    
  124.     call Uart.write
  125.     inc hl
  126.     jp espSendT
  127.  
  128. ; HL - stringZ to send
  129. ; Adds CR LF
  130. tcpSendZ:
  131.     push hl
  132.     EspSend "AT+CIPSEND="
  133.     pop de : push de
  134.     call strLen
  135.     inc hl : inc hl ; +CRLF
  136.     call hlToNumEsp
  137.     ld a, 13 : call Uart.write
  138.     ld a, 10 : call Uart.write
  139.     call checkOkErr : ret c
  140. .wait
  141.     call Uart.read : cp '>' : jp nz, .wait
  142.     pop hl
  143. .loop
  144.     ld a, (hl) : and a : jp z, .exit
  145.     call Uart.write
  146.     inc hl
  147.     jp .loop
  148. .exit
  149.     ld a, 13 : call Uart.write
  150.     ld a, 10 : call Uart.write
  151.     jp checkOkErr
  152.  
  153. getPacket:
  154.     call Uart.read
  155.     cp '+' : jp z, .ipdBegun    ; "+IPD," packet
  156.     cp 'O' : jp z, .closedBegun ; It enough to check "OSED\n" :-)
  157.     jp getPacket
  158. .closedBegun
  159.     call Uart.read; : cp 'S' : jp nz, .closedBegun
  160.     call Uart.read; : cp 'E' : jp nz, .closedBegun
  161.     call Uart.read; : cp 'D' : jp nz, .closedBegun
  162.     call Uart.read; : cp 13 : jp nz, .closedBegun
  163.     ld a, 1
  164.     ld (closed), a
  165.     ret
  166. .ipdBegun
  167.     call Uart.read; : cp 'I' : jp nz, .ipdBegun
  168.     call Uart.read; : cp 'P' : jp nz, .ipdBegun
  169.     call Uart.read; : cp 'D' : jp nz, .ipdBegun
  170.     call Uart.read  ;','
  171.     call .count_ipd_lenght
  172.     ld (bytes_avail), hl
  173.     ;ld de, hl
  174.     ex de,hl
  175.     ld hl, (buffer_pointer)
  176. .readp
  177.     ld a, h
  178.     inc a
  179.     jp z, .skipbuff
  180.     call Uart.read
  181.     ld (hl), a
  182.     dec de
  183.     inc hl
  184.     ld a, d
  185.     or e
  186.     jp nz, .readp
  187.     ld (buffer_pointer), hl
  188.     ret
  189. .skipbuff
  190.     call Uart.read
  191.     dec de
  192.     ld a, d
  193.     or e
  194.     jp nz, .skipbuff
  195.    
  196.         call flushToLF1
  197.    
  198.     ld a,1
  199.         ld (closed),a
  200.         xor a
  201.         ld (bytes_avail),a
  202.     ld hl, .errMem : call DialogBox.msgBox
  203.     ret
  204. .errMem:
  205.         db "Out of memory. Page loading error.",0
  206. .count_ipd_lenght
  207.                 ld hl,0                 ; count lenght
  208. .cil1   call Uart.read
  209.         cp ':'
  210.         ret z
  211.                 sub 0x30
  212.         ld c,l
  213.         ld b,h
  214.         add hl,hl
  215.         add hl,hl
  216.         add hl,bc
  217.         add hl,hl
  218.         ld c,a
  219.         ld b,0
  220.         add hl,bc
  221.                 jp .cil1
  222.  
  223. ; Based on: https://wikiti.brandonw.net/index.php?title=Z80_Routines:Other:DispHL
  224. ; HL - number
  225. ; It will be written to UART
  226. hlToNumEsp:
  227.         ld      bc,-10000
  228.         call    .n1
  229.         ld      bc,-1000
  230.         call    .n1
  231.         ld      bc,-100
  232.         call    .n1
  233.         ld      c,-10
  234.         call    .n1
  235.         ld      c,-1
  236. .n1     ld      a,'0'-1
  237. .n2     inc     a
  238.         add     hl,bc
  239.         jp      c, .n2
  240.         sbc     hl,bc
  241.     push bc
  242.         call Uart.write
  243.     pop bc
  244.     ret
  245. flushToLF1
  246.     call Uart.read
  247.     cp 10 : jp nz, flushToLF1
  248.     ret
  249.     ENDMODULE