?login_element?

Subversion Repositories NedoOS

Rev

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