@@ -633,6 +633,24 @@ STATIC mp_obj_t esp_flash_size(void) {
633
633
}
634
634
STATIC MP_DEFINE_CONST_FUN_OBJ_0 (esp_flash_size_obj , esp_flash_size );
635
635
636
+ STATIC mp_obj_t esp_check_fw (void ) {
637
+ MD5_CTX ctx ;
638
+ uint32_t * sz_p = (uint32_t * )0x40208ffc ;
639
+ printf ("size: %d\n" , * sz_p );
640
+ MD5Init (& ctx );
641
+ MD5Update (& ctx , (char * )0x40200004 , * sz_p - 4 );
642
+ unsigned char digest [16 ];
643
+ MD5Final (digest , & ctx );
644
+ printf ("md5: " );
645
+ for (int i = 0 ; i < 16 ; i ++ ) {
646
+ printf ("%02x" , digest [i ]);
647
+ }
648
+ printf ("\n" );
649
+ return mp_obj_new_bool (memcmp (digest , (void * )(0x40200000 + * sz_p ), sizeof (digest )) == 0 );
650
+ }
651
+ STATIC MP_DEFINE_CONST_FUN_OBJ_0 (esp_check_fw_obj , esp_check_fw );
652
+
653
+
636
654
STATIC mp_obj_t esp_neopixel_write_ (mp_obj_t pin , mp_obj_t buf , mp_obj_t is800k ) {
637
655
mp_buffer_info_t bufinfo ;
638
656
mp_get_buffer_raise (buf , & bufinfo , MP_BUFFER_READ );
@@ -703,6 +721,7 @@ STATIC const mp_map_elem_t esp_module_globals_table[] = {
703
721
{ MP_OBJ_NEW_QSTR (MP_QSTR_dht_readinto ), (mp_obj_t )& dht_readinto_obj },
704
722
{ MP_OBJ_NEW_QSTR (MP_QSTR_freemem ), (mp_obj_t )& esp_freemem_obj },
705
723
{ MP_OBJ_NEW_QSTR (MP_QSTR_meminfo ), (mp_obj_t )& esp_meminfo_obj },
724
+ { MP_OBJ_NEW_QSTR (MP_QSTR_check_fw ), (mp_obj_t )& esp_check_fw_obj },
706
725
{ MP_OBJ_NEW_QSTR (MP_QSTR_info ), (mp_obj_t )& pyb_info_obj }, // TODO delete/rename/move elsewhere
707
726
{ MP_OBJ_NEW_QSTR (MP_QSTR_malloc ), (mp_obj_t )& esp_malloc_obj },
708
727
{ MP_OBJ_NEW_QSTR (MP_QSTR_free ), (mp_obj_t )& esp_free_obj },
0 commit comments