diff options
Diffstat (limited to 'src/lib.rs')
| -rw-r--r-- | src/lib.rs | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/src/lib.rs b/src/lib.rs index 8c235b174..e42bae687 100644 --- a/src/lib.rs +++ b/src/lib.rs | |||
| @@ -11,6 +11,7 @@ mod events; | |||
| 11 | mod structs; | 11 | mod structs; |
| 12 | 12 | ||
| 13 | use core::cell::Cell; | 13 | use core::cell::Cell; |
| 14 | use core::cmp::{max, min}; | ||
| 14 | use core::slice; | 15 | use core::slice; |
| 15 | use core::sync::atomic::Ordering; | 16 | use core::sync::atomic::Ordering; |
| 16 | use core::task::Waker; | 17 | use core::task::Waker; |
| @@ -272,17 +273,12 @@ impl<'a> Control<'a> { | |||
| 272 | 273 | ||
| 273 | self.set_iovar_u32("bus:txglom", 0).await; | 274 | self.set_iovar_u32("bus:txglom", 0).await; |
| 274 | self.set_iovar_u32("apsta", 1).await; | 275 | self.set_iovar_u32("apsta", 1).await; |
| 275 | //self.set_iovar("cur_etheraddr", &[02, 03, 04, 05, 06, 07]).await; | ||
| 276 | 276 | ||
| 277 | // read MAC addr. | 277 | // read MAC addr. |
| 278 | let mut mac_addr = [0; 6]; | 278 | let mut mac_addr = [0; 6]; |
| 279 | assert_eq!(self.get_iovar("cur_etheraddr", &mut mac_addr).await, 6); | 279 | assert_eq!(self.get_iovar("cur_etheraddr", &mut mac_addr).await, 6); |
| 280 | info!("mac addr: {:02x}", mac_addr); | 280 | info!("mac addr: {:02x}", mac_addr); |
| 281 | 281 | ||
| 282 | // TODO get_iovar is broken, it returns all zeros. | ||
| 283 | // Harcdode our own MAC for now. | ||
| 284 | let mac_addr = [0x28, 0xCD, 0xC1, 0x00, 0x3F, 0x05]; | ||
| 285 | |||
| 286 | let country = countries::WORLD_WIDE_XX; | 282 | let country = countries::WORLD_WIDE_XX; |
| 287 | let country_info = CountryInfo { | 283 | let country_info = CountryInfo { |
| 288 | country_abbrev: [country.code[0], country.code[1], 0, 0], | 284 | country_abbrev: [country.code[0], country.code[1], 0, 0], |
| @@ -439,10 +435,12 @@ impl<'a> Control<'a> { | |||
| 439 | buf[..name.len()].copy_from_slice(name.as_bytes()); | 435 | buf[..name.len()].copy_from_slice(name.as_bytes()); |
| 440 | buf[name.len()] = 0; | 436 | buf[name.len()] = 0; |
| 441 | 437 | ||
| 442 | let total_len = name.len() + 1 + res.len(); | 438 | let total_len = max(name.len() + 1, res.len()); |
| 443 | let res_len = self.ioctl(0, 262, 0, &mut buf[..total_len]).await - name.len() - 1; | 439 | let res_len = self.ioctl(0, 262, 0, &mut buf[..total_len]).await; |
| 444 | res[..res_len].copy_from_slice(&buf[name.len() + 1..][..res_len]); | 440 | |
| 445 | res_len | 441 | let out_len = min(res.len(), res_len); |
| 442 | res[..out_len].copy_from_slice(&buf[..out_len]); | ||
| 443 | out_len | ||
| 446 | } | 444 | } |
| 447 | 445 | ||
| 448 | async fn ioctl_set_u32(&mut self, cmd: u32, iface: u32, val: u32) { | 446 | async fn ioctl_set_u32(&mut self, cmd: u32, iface: u32, val: u32) { |
| @@ -712,7 +710,7 @@ where | |||
| 712 | .await | 710 | .await |
| 713 | .unwrap(); | 711 | .unwrap(); |
| 714 | 712 | ||
| 715 | trace!("rx {:02x}", &buf[..(len as usize).min(48)]); | 713 | trace!("rx {:02x}", &slice8_mut(&mut buf)[..(len as usize).min(48)]); |
| 716 | 714 | ||
| 717 | self.rx(&slice8_mut(&mut buf)[..len as usize]); | 715 | self.rx(&slice8_mut(&mut buf)[..len as usize]); |
| 718 | } | 716 | } |
