int BCEChangeEncryptionProduct(byte *sys_params_path, int *adds, int n_adds, int *rems, int n_rems) { global_broadcast_params_t gbs; broadcast_system_t sys; if (sys_params_path == NULL) return 1; if (adds == NULL && rems == NULL) return 2; LoadParams((char *) sys_params_path, &gbs, &sys); if (n_adds > gbs->num_users) return 3; if (n_rems > gbs->num_users) return 5; Change_encr_prod_indicies(gbs, sys, adds, n_adds, rems, n_rems); StoreParams((char *) sys_params_path, gbs, sys); FreeBCS(sys); pbc_free(sys); FreeGBP(gbs); pbc_free(gbs); return 0; }
int BCESetup(byte *curve_file_name, int num_user, byte *sys_params_path, byte * global_params_path, byte *sys_priv_key_out) { global_broadcast_params_t gbs; broadcast_system_t sys; //char recip[num_user / NUM_USER_DIVISOR]; char *recip; element_t sys_priv_key; if (curve_file_name == NULL) return 1; if (num_user % NUM_USER_DIVISOR != 0) return 2; if (sys_params_path == NULL) return 3; if (global_params_path == NULL) return 4; if (sys_priv_key_out == NULL) return 5; Setup_global_broadcast_params(&gbs, num_user, (char *) curve_file_name); Gen_broadcast_system(gbs, &sys); recip = (char *) malloc(num_user / NUM_USER_DIVISOR); memset(recip, BIT_VECTOR_UNIT_VALUE, num_user / NUM_USER_DIVISOR); Gen_encr_prod_from_bitvec(gbs, sys, recip); StoreParams((char *) sys_params_path, gbs, sys); StoreGlobalParams((char *) global_params_path, gbs); element_init_Zr(sys_priv_key, gbs->pairing); element_set(sys_priv_key, sys->priv_key); element_to_bytes(sys_priv_key_out, sys_priv_key); memset(recip, BIT_VECTOR_CLEAR_UNIT_VALUE, num_user / NUM_USER_DIVISOR); free(recip); element_random(sys_priv_key); element_clear(sys_priv_key); FreeBCS(sys); pbc_free(sys); FreeGBP(gbs); pbc_free(gbs); return 0; }
void checkDefaultParam() { bool bNeedUpdateFlash = false; //if new version add parameters, we should set them to default u16 curVer = eeprom_buffer.params.firmware_ver; //v1.0.5 Released: 2015-6-15 if(curVer < 5 || curVer == 0xFFFF) { bNeedUpdateFlash = true; eeprom_buffer.params.Atti_mp_posX = 180; eeprom_buffer.params.Atti_mp_posY = 133; eeprom_buffer.params.Atti_mp_scale_real = 1; eeprom_buffer.params.Atti_mp_scale_frac = 0; eeprom_buffer.params.Atti_3D_posX = 180; eeprom_buffer.params.Atti_3D_posY = 133; eeprom_buffer.params.Atti_3D_scale_real = 1; eeprom_buffer.params.Atti_3D_scale_frac = 0; eeprom_buffer.params.Atti_3D_map_radius = 40; eeprom_buffer.params.osd_offsetY = 0; eeprom_buffer.params.osd_offsetX = 0; } if (eeprom_buffer.params.osd_offsetX > 20) { eeprom_buffer.params.osd_offsetX = 20; bNeedUpdateFlash = true; } if (eeprom_buffer.params.osd_offsetX <-20) { eeprom_buffer.params.osd_offsetX = -20; bNeedUpdateFlash = true; } if (eeprom_buffer.params.osd_offsetY > 20) { eeprom_buffer.params.osd_offsetY = 20; bNeedUpdateFlash = true; } if (eeprom_buffer.params.osd_offsetY <-20) { eeprom_buffer.params.osd_offsetY = -20; bNeedUpdateFlash = true; } if (eeprom_buffer.params.firmware_ver < 6) { eeprom_buffer.params.firmware_ver = 6; bNeedUpdateFlash = true; } if (eeprom_buffer.params.firmware_ver < 7) { eeprom_buffer.params.firmware_ver = 7; eeprom_buffer.params.Speed_scale_posY = 133; eeprom_buffer.params.Alt_Scale_posY = 133; eeprom_buffer.params.BattConsumed_en = 1; eeprom_buffer.params.BattConsumed_panel = 1; eeprom_buffer.params.BattConsumed_posX = 350; eeprom_buffer.params.BattConsumed_posY = 34; eeprom_buffer.params.BattConsumed_fontsize = 0; eeprom_buffer.params.BattConsumed_align = 2; eeprom_buffer.params.TotalTripDist_en = 1; eeprom_buffer.params.TotalTripDist_panel = 1; eeprom_buffer.params.TotalTripDist_posX = 350; eeprom_buffer.params.TotalTripDist_posY = 210; eeprom_buffer.params.TotalTripDist_fontsize = 0; eeprom_buffer.params.TotalTripDist_align = 2; bNeedUpdateFlash = true; } if (eeprom_buffer.params.firmware_ver < 8) { eeprom_buffer.params.firmware_ver = 8; eeprom_buffer.params.Max_panels = 3; eeprom_buffer.params.RSSI_type = 0; eeprom_buffer.params.Map_en = 1; eeprom_buffer.params.Map_panel = 4; eeprom_buffer.params.Map_radius = 120; eeprom_buffer.params.Map_fontsize = 1; eeprom_buffer.params.Map_H_align = 0; eeprom_buffer.params.Map_V_align = 0; bNeedUpdateFlash = true; } bool ret = false; if(bNeedUpdateFlash) { ret = StoreParams(); if(!ret) { //TODO - handle flash write error here } } }
void checkDefaultParam() { bool bNeedUpdateFlash = false; //if new version add parameters, we should set them to default u16 curVer = eeprom_buffer.params.firmware_ver; //v1.0.5 Released: 2015-6-15 if (curVer < 5 || curVer == 0xFFFF) { bNeedUpdateFlash = true; eeprom_buffer.params.Atti_mp_posX = 180; eeprom_buffer.params.Atti_mp_posY = 133; eeprom_buffer.params.Atti_mp_scale_real = 1; eeprom_buffer.params.Atti_mp_scale_frac = 0; eeprom_buffer.params.Atti_3D_posX = 180; eeprom_buffer.params.Atti_3D_posY = 133; eeprom_buffer.params.Atti_3D_scale_real = 1; eeprom_buffer.params.Atti_3D_scale_frac = 0; eeprom_buffer.params.Atti_3D_map_radius = 40; eeprom_buffer.params.osd_offsetY = 0; eeprom_buffer.params.osd_offsetX = 0; } if (eeprom_buffer.params.osd_offsetX > 20) { eeprom_buffer.params.osd_offsetX = 20; bNeedUpdateFlash = true; } if (eeprom_buffer.params.osd_offsetX == 0xFFFF) { eeprom_buffer.params.osd_offsetX = 0; bNeedUpdateFlash = true; } if (eeprom_buffer.params.osd_offsetY > 20) { eeprom_buffer.params.osd_offsetY = 20; bNeedUpdateFlash = true; } if (eeprom_buffer.params.osd_offsetY == 0xFFFF) { eeprom_buffer.params.osd_offsetY = 0; bNeedUpdateFlash = true; } if (eeprom_buffer.params.firmware_ver < 6) { eeprom_buffer.params.firmware_ver = 6; bNeedUpdateFlash = true; } if (eeprom_buffer.params.firmware_ver < 7) { eeprom_buffer.params.firmware_ver = 7; eeprom_buffer.params.Speed_scale_posY = 133; eeprom_buffer.params.Alt_Scale_posY = 133; eeprom_buffer.params.BattConsumed_en = 1; eeprom_buffer.params.BattConsumed_panel = 1; eeprom_buffer.params.BattConsumed_posX = 350; eeprom_buffer.params.BattConsumed_posY = 34; eeprom_buffer.params.BattConsumed_fontsize = 0; eeprom_buffer.params.BattConsumed_align = 2; eeprom_buffer.params.TotalTripDist_en = 1; eeprom_buffer.params.TotalTripDist_panel = 1; eeprom_buffer.params.TotalTripDist_posX = 350; eeprom_buffer.params.TotalTripDist_posY = 210; eeprom_buffer.params.TotalTripDist_fontsize = 0; eeprom_buffer.params.TotalTripDist_align = 2; bNeedUpdateFlash = true; } if (eeprom_buffer.params.firmware_ver < 8) { eeprom_buffer.params.firmware_ver = 8; eeprom_buffer.params.Max_panels = 3; eeprom_buffer.params.RSSI_type = 0; eeprom_buffer.params.Map_en = 1; eeprom_buffer.params.Map_panel = 4; eeprom_buffer.params.Map_radius = 120; eeprom_buffer.params.Map_fontsize = 1; eeprom_buffer.params.Map_H_align = 0; eeprom_buffer.params.Map_V_align = 0; bNeedUpdateFlash = true; } if (eeprom_buffer.params.firmware_ver < 9) { eeprom_buffer.params.firmware_ver = 9; eeprom_buffer.params.Relative_ALT_en = 1; eeprom_buffer.params.Relative_ALT_panel = 2; eeprom_buffer.params.Relative_ALT_posX = 5; eeprom_buffer.params.Relative_ALT_posY = 25; eeprom_buffer.params.Relative_ALT_fontsize = 0; eeprom_buffer.params.Relative_ALT_align = 0; eeprom_buffer.params.Alt_Scale_type = 1; eeprom_buffer.params.Air_Speed_en = 1; eeprom_buffer.params.Air_Speed_panel = 2; eeprom_buffer.params.Air_Speed_posX = 5; eeprom_buffer.params.Air_Speed_posY = 55; eeprom_buffer.params.Air_Speed_fontsize = 0; eeprom_buffer.params.Air_Speed_align = 0; eeprom_buffer.params.Spd_Scale_type = 0; bNeedUpdateFlash = true; } if (eeprom_buffer.params.firmware_ver < 10) { eeprom_buffer.params.firmware_ver = 10; eeprom_buffer.params.osd_offsetX_sign = 1; eeprom_buffer.params.LinkQuality_chan = 0; bNeedUpdateFlash = true; } if (eeprom_buffer.params.firmware_ver < 11) { eeprom_buffer.params.firmware_ver = 11; eeprom_buffer.params.version_splash_milliseconds_to_show = 5000; bNeedUpdateFlash = true; } if (eeprom_buffer.params.firmware_ver < 12) { eeprom_buffer.params.firmware_ver = 12; eeprom_buffer.params.error_alert_milliseconds_to_show = 1000; bNeedUpdateFlash = true; } if (eeprom_buffer.params.firmware_ver < 13) { eeprom_buffer.params.firmware_ver = 13; eeprom_buffer.params.RC_Channels_en = 0; eeprom_buffer.params.RC_Channels_panel = 2; eeprom_buffer.params.RC_Channels_posx = 55; eeprom_buffer.params.RC_Channels_posy = 40; bNeedUpdateFlash = true; } if (eeprom_buffer.params.firmware_ver < 14) { eeprom_buffer.params.firmware_ver = 14; eeprom_buffer.params.HomeDirectionDebugInfo_enabled = 0; eeprom_buffer.params.HomeDirectionDebugInfo_panel = 2; eeprom_buffer.params.HomeDirectionDebugInfo_posX = 65; eeprom_buffer.params.HomeDirectionDebugInfo_posY = 70; bNeedUpdateFlash = true; } bool ret = false; if (bNeedUpdateFlash) { ret = StoreParams(); if (!ret) { //TODO - handle flash write error here } } }
void vTaskVCP(void *pvParameters) { static u32 address = 0; static uint8_t usb_inited = 0; uint8_t c; int arg; uint8_t tmpbuf[EERROM_SIZE]; for(;;) { //Give the change to the OS scheduling. It is really a fool idea. Change me! //TODO - should use semaphore vTaskDelay( 1 / portTICK_RATE_MS ); // xSemaphoreTake(onVCPSemaphore, portMAX_DELAY); if(usb_inited == 0) { GPIO_InitTypeDef gpio; //This is a trick to perform a USB re-enumerate gpio.GPIO_Pin = GPIO_Pin_12; gpio.GPIO_Speed = GPIO_Speed_100MHz; gpio.GPIO_Mode = GPIO_Mode_OUT; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOB, &gpio); GPIO_SetBits(GPIOB, GPIO_Pin_12 ); vTaskDelay(500 / portTICK_RATE_MS); GPIO_ResetBits(GPIOB, GPIO_Pin_12 ); // Initialize USB VCP. Do it ASAP USBD_Init(&USB_OTG_dev, USB_OTG_FS_CORE_ID, &USR_desc, &USBD_CDC_cb, &USR_cb); usb_inited = 1; } if (VCP_get_char(&c)) { switch(c) { case PROTO_GET_SYNC: if (cin_wait(usb_vcp_timeout) != PROTO_EOC) goto cmd_bad; break; case PROTO_GET_DEVICE: arg = cin_wait(usb_vcp_timeout); if (arg < 0) goto cmd_bad; if (cin_wait(usb_vcp_timeout) != PROTO_EOC) goto cmd_bad; switch (arg) { case PROTO_DEVICE_BL_REV: VCP_send_str((uint8_t*)&bl_proto_rev); break; default: goto cmd_bad; } break; case PROTO_START_TRANS: if (cin_wait(usb_vcp_timeout) != PROTO_EOC) goto cmd_bad; address = 0; memset(tmpbuf,0,EERROM_SIZE); break; case PROTO_SET_PARAMS: arg = cin_wait(usb_vcp_timeout); if (arg < 0) goto cmd_bad; // sanity-check arguments if (arg % 4) goto cmd_bad; if ((address + arg) > EERROM_SIZE) goto cmd_bad; for (int i = 0; i < arg; i++) { c = cin_wait(usb_vcp_timeout); if (c < 0) goto cmd_bad; tmpbuf[address++] = c; } break; case PROTO_END_TRANS: if (cin_wait(usb_vcp_timeout) != PROTO_EOC) goto cmd_bad; //ensure we receive right size if(address == EERROM_SIZE) { memcpy(eeprom_buffer.c,tmpbuf,EERROM_SIZE); // bool ret = StoreParams(); // if(!ret) // { // //TODO - handle flash write error here // } } break; case PROTO_SAVE_TO_FLASH: if (cin_wait(usb_vcp_timeout) != PROTO_EOC) goto cmd_bad; //ensure we receive right size if(address == EERROM_SIZE) { bool ret = StoreParams(); if(!ret) { //TODO - handle flash write error here } } break; case PROTO_GET_PARAMS: if (cin_wait(usb_vcp_timeout) != PROTO_EOC) goto cmd_bad; for (int i = 0; i < EERROM_SIZE; i++) { VCP_put_char(eeprom_buffer.c[i]); //TM_USB_VCP_Putc(testbuf[i]); //vTaskDelay( 1 / portTICK_RATE_MS ); } break; case PROTO_BL_UPLOAD: if (cin_wait(usb_vcp_timeout) != PROTO_EOC) goto cmd_bad; sync_response(); vTaskDelay( 200 / portTICK_RATE_MS ); GPIO_SetBits(GPIOB,GPIO_Pin_12); vTaskDelay( 500 / portTICK_RATE_MS ); GPIO_ResetBits(GPIOB,GPIO_Pin_12); __DSB(); /* Ensure all outstanding memory accesses included buffered write are completed before reset */ SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ __DSB(); /* Ensure completion of memory access */ while(1); break; default: continue; } // send the sync response for this command sync_response(); continue; } vTaskDelay( 10 / portTICK_RATE_MS ); continue; cmd_bad: // send an 'invalid' response but don't kill the timeout - could be garbage invalid_response(); continue; cmd_fail: // send a 'command failed' response but don't kill the timeout - could be garbage failure_response(); continue; } }