?login_element?

Subversion Repositories NedoOS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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