Welcome to the Pycom forum Forum
    • \[\[global:header.categories\]\]
    • \[\[global:header.recent\]\]
    • \[\[global:header.tags\]\]
    • \[\[global:header.popular\]\]
    • Login

    Explore Pybytes | Official Documentation | Report a Firmware Bug/Issue | GitHub

    Downgrade SiPy firmware

    Scheduled Pinned Locked Moved SiPy
    sipysipy firmwaresipy downgrade
    6 Posts 3 Posters 2.1k Views 3 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S Offline
      sriboli
      last edited by

      Re: Downgrading firmware (advanced users)

      Hello all.

      I want to do a downgrade to the previous version my SiPy module, but
      on the forum I can find only LoPy and WiPy old firmware.
      Where can I find the SiPy old firmware?

      Thankyou.

      Best Regards.

      robert-hhR L 2 Replies Last reply Reply Quote 0
      • robert-hhR Offline
        robert-hh @sriboli
        last edited by

        @sriboli Just use for downloading the images URL which are properly written, like:
        https://software.pycom.io/downloads/SiPy-1.6.0.b1.tar.gz
        Change the version number accordingly and just give it a try,

        1 Reply Last reply Reply Quote 0
        • L Offline
          livius @sriboli
          last edited by

          @sriboli
          will be good to know what is the reason?

          think about people first, then computers

          S 1 Reply Last reply Reply Quote 0
          • S Offline
            sriboli @livius
            last edited by

            @livius

            My usage is a sort of "proxy http server".
            Substantially my module waits for socket connections on the port 80 (up to 6 parallel
            sockets to download the web page elements simultaneously).
            Any data sent by the client to the module is forwarded through the UART port, and then
            all replies from the serial port are forwarded to the client.

            The problem is that my project works only with the previous version. With the lastest version, the client can't load all elements of the web page (some images and javascript are not loaded correctly or are not loaded at all).

            Thankyou.

            Regards.

            p.s. (just downgraded the firmware and all it works ok again)

            L 1 Reply Last reply Reply Quote 0
            • L Offline
              livius @sriboli
              last edited by

              @sriboli
              As previus do you mean 1.6.9?

              And any chance to see sample code to reproduce problem?

              think about people first, then computers

              S 1 Reply Last reply Reply Quote 0
              • S Offline
                sriboli @livius
                last edited by

                @livius

                As previous I intend SiPy-1.6.7.b1.tar

                I can post you the entire code, but this could be used only with our device connected to the UART serial port.
                Anyway, I post you the code used to handle sockets, because I suspect that the issue could be
                related to this task:

                import _thread
                import tracingfunction
                import time
                import socket
                import pycom
                
                
                # Global array for rx data from serial port
                SerialRxPacketsLock = _thread.allocate_lock()
                
                # this value define the max number of parallel socket!
                # Don't configure a value grather than the maximum allowable connections 
                # on uart device!! (see the define MAX_SOCK_NUM in the uart device project)
                MaxNumActiveSockets = 6
                
                # this arry is used by the task serialport to request a close on the relative socket
                KillRequestSocketList = bytearray(MaxNumActiveSockets)
                
                # this mutex is used to avoid thread conflicts in th access of the list of packets and socket
                SocketListLock = _thread.allocate_lock()
                
                # list of packets that must be sent on a particular socket
                rxPacketsFromSerialPortList = []
                
                # list of enabled sockets
                socketList = []
                
                # list of id related to the socket!
                socketUniqueIdList = bytearray(MaxNumActiveSockets)
                
                pycom.heartbeat(False)
                currentRGBLed = 0x007f00
                
                
                # this function return the number of current active sockets
                def GetNumOfActiveSocketList():
                    
                    global SocketListLock
                    global socketList
                    global MaxNumActiveSockets
                    
                    idx=0
                    totalActiveSocket=0
                    
                    SocketListLock.acquire()
                    
                    while(idx<MaxNumActiveSockets):
                        if(socketList[idx]!=None):
                            totalActiveSocket=totalActiveSocket + 1
                        idx = idx + 1
                    
                    SocketListLock.release()
                    
                    return totalActiveSocket
                
                # this function return the position of the first free socket slot
                def ObtainSocketListPosition():
                    
                    global SocketListLock
                    global MaxNumActiveSockets
                    
                    idx=0
                    
                    SocketListLock.acquire()
                    
                    while(idx<MaxNumActiveSockets):
                        if(socketList[idx]==None):
                            break
                        idx = idx + 1
                    
                    if(idx==MaxNumActiveSockets):
                        idx=-1
                    
                    SocketListLock.release()
                    
                    return idx
                    
                
                def toggleRGBLed():
                    
                    global currentRGBLed
                    
                    if(currentRGBLed==0x007f00):
                        currentRGBLed=0
                    else:
                        currentRGBLed=0x007f00
                
                    pycom.rgbled(currentRGBLed)
                
                # socketThread
                # This task is responsible to handle data from/to the socket
                # ------------------------------------------------------------------------------------------------------------------------------------------------------------------
                # ------------------------------------------------------------------------------------------------------------------------------------------------------------------
                # ------------------------------------------------------------------------------------------------------------------------------------------------------------------
                def socketThread(voidPar):
                    
                    import stuffingfunctions
                    global socketList
                    global SerialRxPacketsLock
                    global rxPacketsFromSerialPortList
                    global KillRequestSocketList
                    
                    # we print on the terminal that the thread started 
                    print ("socketThread Started")
                    
                    # set counters and ids to zero
                    idxSocketToCheck = 0
                    aliveCounter = 0
                    
                    pycom.rgbled(0x00007f)
                    
                    # infinite loop!
                    while True:
                    
                        # increase the alive counter
                        aliveCounter = aliveCounter + 1
                        
                        # if the alive counter reachs 15000, print on the
                        # terminal that this thread is alive
                        if(aliveCounter>15000):
                            aliveCounter = 0
                            print("socketThread alive!!")
                    
                        # assign the thread socket position
                        threadIdPos = idxSocketToCheck
                        
                        # if there is a kill request, the buffer is empty and the socket is valid, close the socket
                        if(KillRequestSocketList[threadIdPos]==1) and (socketList[threadIdPos]!=None) and (rxPacketsFromSerialPortList[threadIdPos]==None):
                            socketList[threadIdPos].close()
                            socketList[threadIdPos]=None
                            KillRequestSocketList[threadIdPos]=0
                            print("Socket " + str(threadIdPos) + " killed!")
                        
                        # acquire the mutex
                        SerialRxPacketsLock.acquire()
                        
                        if (socketList[threadIdPos]!=None):
                            # if the current socket is alive
                            
                            if(rxPacketsFromSerialPortList[threadIdPos]==None):
                                # if there is no data to send, do nothing
                                pass
                            else:
                                # if there is data to send, try to send it
                                try:
                                    print("Writing data into socket " + str(threadIdPos))
                                    socketList[threadIdPos].send(rxPacketsFromSerialPortList[threadIdPos])
                                    print("Write data ok")
                                    rxPacketsFromSerialPortList[threadIdPos]=None
                                    
                                    toggleRGBLed()
                                    # pycom.rgbled(0x007f00) 
                                    
                                except:
                                    
                                    # in case of exception, trace on file and close the socket
                                    
                                    print("Exception sending data " + str(threadIdPos))
                                    tracingfunction.TraceLine("Exception sending data to the socket!")
                                    
                                    socketList[threadIdPos].close()
                                    socketList[threadIdPos]=None
                                    stuffingfunctions.WriteStuffingSerialPort(None, 0,threadIdPos, 1, socketUniqueIdList[threadIdPos])
                                    rxPacketsFromSerialPortList[threadIdPos]=None
                                    
                            
                        else:
                            # if the current socket is not alive, drop the data...
                            rxPacketsFromSerialPortList[threadIdPos]=None
                        
                        # release the mutex
                        SerialRxPacketsLock.release()
                        
                        
                        if (socketList[threadIdPos]!=None):
                            # if the current socket is alive
                            
                            # set partialData to None
                            partialData=None
                            
                            while True:
                            
                                try:
                                    data=None
                
                                    #Receiving from client
                                    data = socketList[threadIdPos].recv(1460)
                                    if not data:
                                        # if we have not received anitying
                                        if (partialData!=None):
                                            # in this case, if we have partial data != none, the data is only in the partialData array
                                            data=partialData
                                            print("Received data from socket " + str(threadIdPos) + " Len: " + str(len(data)))
                                            stuffingfunctions.WriteStuffingSerialPort(data, len(data),threadIdPos, 0 , socketUniqueIdList[threadIdPos])
                                            
                                            toggleRGBLed()
                                            # pycom.rgbled(0x00007f)
                                            
                                        break
                
                                    else:
                                        
                                        if(len(data)>0):
                                            # if we have received something
                                            
                                            if(len(data)==1024):
                                                # in this case, there are probably many bytes to read (python slices packets greather than 1024 in multiple packets)
                                                # we save this data in the partialData and we issue a new read request...
                                                partialData=data
                                                time.sleep(0.002)
                                                continue
                                                
                                            else:
                                                
                                                if (partialData!=None):
                                                    # in this case, if we have partial data != none, we compose the full packet
                                                    partialData = partialData + data
                                                    data = partialData
                                                else:
                                                    # in this case, the data is only in the data array
                                                    pass
                                                
                                                # we pass the packet to the serial port!
                                                print("Received data from socket " + str(threadIdPos) + " Len: " + str(len(data)))
                                                stuffingfunctions.WriteStuffingSerialPort(data, len(data),threadIdPos, 0 , socketUniqueIdList[threadIdPos])
                                                
                                                toggleRGBLed()
                                                # pycom.rgbled(0x00007f)
                                                
                                                break
                                        
                                        break
                                            
                                except socket.timeout:
                                    if data:
                                        if(len(data)>0):
                                            
                                            # added 30/03/2017 10.17 ----->
                                            if (partialData!=None):
                                                # in this case, if we have partial data != none, we compose the full packet
                                                partialData = partialData + data
                                                data = partialData
                                            else:
                                                # in this case, the data is only in the data array
                                                pass
                                            # added 30/03/2017 10.17 <-----
                                            
                                            print("Received data from socket " + str(threadIdPos))
                                            stuffingfunctions.WriteStuffingSerialPort(data, len(data),threadIdPos, 0 , socketUniqueIdList[threadIdPos])
                                            
                                            toggleRGBLed()
                                            
                                    break
                                    
                                except socket.error:
                                    # in case of error exception, we close the socket
                                    print("Closing socket thread " + str(threadIdPos))
                                    if(socketList[threadIdPos]!=None):
                                        socketList[threadIdPos].close()
                                        socketList[threadIdPos]=None
                                        stuffingfunctions.WriteStuffingSerialPort(None, 0,threadIdPos, 1 , socketUniqueIdList[threadIdPos])
                                        
                                    break
                        
                        # we increase the socket idx
                        idxSocketToCheck = idxSocketToCheck + 1
                        
                        # eache time we parse all sockets, we do a pause of 2 ms
                        if idxSocketToCheck==MaxNumActiveSockets:
                            idxSocketToCheck = 0
                            time.sleep(0.002)
                        
                    # we should never reach this point
                    print ("ThreadRx " + str(threadIdPos) + " terminated!")
                
                
                1 Reply Last reply Reply Quote 0

                Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                With your input, this post could be even better 💗

                Register Login
                • 1 / 1
                • First post
                  Last post

                Pycom on Twitter

                Pycom