?login_element?

Subversion Repositories NedoOS

Rev

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