void routing_master_from_pc(const char *data, const uint16_t length, const ComType com) { uint32_t uid = ((MessageHeader*)data)->uid; // Broadcast if(uid == 0) { for(uint8_t i = 1; i <= com_info.last_stack_address; i++) { uint32_t options = i; send_blocking_with_timeout_options(data, length, COM_SPI_STACK, &options); } if(com_info.ext_type[0] == COM_TYPE_MASTER) { send_blocking_with_timeout(data, length, com_info.ext[0]); } if(com_info.ext_type[1] == COM_TYPE_MASTER) { send_blocking_with_timeout(data, length, com_info.ext[1]); } // Message for brickd } else if(uid == 1) { if(com == COM_ETHERNET || com == COM_WIFI) { MessageHeader *header = (MessageHeader*)data; switch(header->fid) { case BRICKD_FID_GET_AUTHENTICATION_NONCE: { brickd_get_authentication_nonce(com, (GetAuthenticationNonce*)data); break; } case BRICKD_FID_AUTHENTICATE: { brickd_authenticate(com, (Authenticate*)data); break; } } } // Discover Route } else { const RouteTo route_to = routing_route_to(uid); if(route_to.to == ROUTING_STACK) { uint32_t options = route_to.option; send_blocking_with_timeout_options(data, length, COM_SPI_STACK, &options); } else if(master_mode & MASTER_MODE_MASTER) { if(route_to.to == ROUTING_EXTENSION_1) { if(com_info.ext_type[0] == COM_TYPE_MASTER) { send_blocking_with_timeout(data, length, com_info.ext[0]); } } else if(route_to.to == ROUTING_EXTENSION_2) { if(com_info.ext_type[1] == COM_TYPE_MASTER) { send_blocking_with_timeout(data, length, com_info.ext[1]); } } else { if(com_info.ext_type[0] == COM_TYPE_MASTER) { send_blocking_with_timeout(data, length, com_info.ext[0]); } if(com_info.ext_type[1] == COM_TYPE_MASTER) { send_blocking_with_timeout(data, length, com_info.ext[1]); } } } } }
bool ICACHE_FLASH_ATTR com_handle_message(const uint8_t *data, const uint8_t length, const int8_t cid) { const MessageHeader *header = (const MessageHeader*)data; if(!brickd_check_auth(header, cid)) { return true; } if(header->uid == 1) { switch(header->fid) { case BRICKD_FID_GET_AUTHENTICATION_NONCE: brickd_get_authentication_nonce(cid, (GetAuthenticationNonce*)data); return true; case BRICKD_FID_AUTHENTICATE: brickd_authenticate(cid, (Authenticate*)data); return true; } } switch(header->fid) { case FID_SET_WIFI2_AUTHENTICATION_SECRET: set_wifi2_authentication_secret(cid, (SetWifi2AuthenticationSecret*)data); return true; case FID_GET_WIFI2_AUTHENTICATION_SECRET: get_wifi2_authentication_secret(cid, (GetWifi2AuthenticationSecret*)data); return true; case FID_SET_WIFI2_CONFIGURATION: set_wifi2_configuration(cid, (SetWifi2Configuration*)data); return true; case FID_GET_WIFI2_CONFIGURATION: get_wifi2_configuration(cid, (GetWifi2Configuration*)data); return true; case FID_GET_WIFI2_STATUS: get_wifi2_status(cid, (GetWifi2Status*)data); return true; case FID_SET_WIFI2_CLIENT_CONFIGURATION: set_wifi2_client_configuration(cid, (SetWifi2ClientConfiguration*)data); return true; case FID_GET_WIFI2_CLIENT_CONFIGURATION: get_wifi2_client_configuration(cid, (GetWifi2ClientConfiguration*)data); return true; case FID_SET_WIFI2_CLIENT_HOSTNAME: set_wifi2_client_hostname(cid, (SetWifi2ClientHostname*)data); return true; case FID_GET_WIFI2_CLIENT_HOSTNAME: get_wifi2_client_hostname(cid, (GetWifi2ClientHostname*)data); return true; case FID_SET_WIFI2_CLIENT_PASSWORD: set_wifi2_client_password(cid, (SetWifi2ClientPassword*)data); return true; case FID_GET_WIFI2_CLIENT_PASSWORD: get_wifi2_client_password(cid, (GetWifi2ClientPassword*)data); return true; case FID_SET_WIFI2_AP_CONFIGURATION: set_wifi2_ap_configuration(cid, (SetWifi2APConfiguration*)data); return true; case FID_GET_WIFI2_AP_CONFIGURATION: get_wifi2_ap_configuration(cid, (GetWifi2APConfiguration*)data); return true; case FID_SET_WIFI2_AP_PASSWORD: set_wifi2_ap_password(cid, (SetWifi2APPassword*)data); return true; case FID_GET_WIFI2_AP_PASSWORD: get_wifi2_ap_password(cid, (GetWifi2APPassword*)data); return true; case FID_SAVE_WIFI2_CONFIGURATION: save_wifi2_configuration(cid, (SaveWifi2Configuration*)data); return true; case FID_GET_WIFI2_FIRMWARE_VERSION: get_wifi2_firmware_version(cid, (GetWifi2FirmwareVersion*)data); return true; case FID_ENABLE_WIFI2_STATUS_LED: enable_wifi2_status_led(cid, (EnableWifi2StatusLED*)data); return true; case FID_DISABLE_WIFI2_STATUS_LED: disable_wifi2_status_led(cid, (DisableWifi2StatusLED*)data); return true; case FID_IS_WIFI2_STATUS_LED_ENABLED: is_wifi2_status_led_enabled(cid, (IsWifi2StatusLEDEnabled*)data); return true; case FID_SET_WIFI2_MESH_CONFIGURATION: set_wifi2_mesh_configuration(cid, (SetWifi2MeshConfiguration*)data); return true; case FID_GET_WIFI2_MESH_CONFIGURATION: get_wifi2_mesh_configuration(cid, (GetWifi2MeshConfiguration*)data); return true; case FID_SET_WIFI2_MESH_ROUTER_SSID: set_wifi2_mesh_router_ssid(cid, (SetWifi2MeshRouterSSID*)data); return true; case FID_GET_WIFI2_MESH_ROUTER_SSID: get_wifi2_mesh_router_ssid(cid, (GetWifi2MeshRouterSSID*)data); return true; case FID_SET_WIFI2_MESH_ROUTER_PASSWORD: set_wifi2_mesh_router_password(cid, (SetWifi2MeshRouterPassword*)data); return true; case FID_GET_WIFI2_MESH_ROUTER_PASSWORD: get_wifi2_mesh_router_password(cid, (GetWifi2MeshRouterPassword*)data); return true; case FID_GET_WIFI2_MESH_COMMON_STATUS: get_wifi2_mesh_common_status(cid, (GetWifi2MeshCommonStatus*)data); return true; case FID_GET_WIFI2_MESH_STATION_STATUS: get_wifi2_mesh_station_status(cid, (GetWifi2MeshStationStatus*)data); return true; case FID_GET_WIFI2_MESH_AP_STATUS: get_wifi2_mesh_ap_status(cid, (GetWifi2MeshAPStatus*)data); return true; } return false; }