Downgrade SiPy firmware
-
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.
-
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!")
-
@sriboli
As previus do you mean 1.6.9?And any chance to see sample code to reproduce problem?
-
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)
-
@sriboli
will be good to know what is the reason?
-
@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,