Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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;
}
Exemplo n.º 3
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
        }
    }
}
Exemplo n.º 4
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 == 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
    }
  }
}
Exemplo n.º 5
0
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;		
	}
}