Commit Graph

1019 Commits

Author SHA1 Message Date
Andrew Tridgell b09fcfc20e HAL_Linux: cope with systems without I2C_RDRW_IOCTL_MAX_MSGS
such as my ubuntu 14.04 laptop :-)
2015-05-05 21:42:46 +10:00
Lucas De Marchi d640bc8345 AP_HAL_Linux: use kernel's limit of msgs per I2C transaction
Instead of hardcoding 8 as the limit for I2C msgs, use whatever the
kernel exported to us.  In upstream this is 42 so it means we can group
together 21 addr/data pair instead of only 8.
2015-05-05 09:56:44 +10:00
Andrew Tridgell 179e47c618 HAL_Linux: prevent time from going backwards in Replay 2015-04-20 15:12:51 +10:00
Staroselskii Georgii dff430e136 AP_HAL_Linux: added UART port for second GPS 2015-04-14 15:59:34 +10:00
Staroselskii Georgii da6316ed4c AP_HAL_Linux: fixed TCP client connection in LinuxUARTDriver 2015-04-14 15:59:33 +10:00
Staroselskii Georgii 716fd56c62 AP_HAL_Linux: added support for dynamic speed configration in LinuxSPIUARTDriver 2015-04-14 10:45:49 +10:00
Staroselskii Georgii baf2b4da4e AP_HAL_Linux: renamed AnalogIn_Navio 2015-04-14 10:16:26 +10:00
Staroselskii Georgii 930aeaf556 AP_HAL_Linux: add RPi version runtime detection 2015-04-14 10:16:25 +10:00
Mikhail Avkhimenia c11304ba7a AP_HAL_Linux: change GPIO register address for Raspberry Pi 2 2015-04-14 10:16:25 +10:00
Staroselskii Georgii 641fa05028 AP_HAL_Linux: added buffering in RCOutput_Navio 2015-04-14 10:16:25 +10:00
Staroselskii Georgii e6c2977da2 AP_HAL_Linux: fixed style in RCOutput_Navio 2015-04-14 10:16:25 +10:00
Staroselskii Georgii 024825f95a AP_HAL_Linux: fixed PCA9685 initialization for RCOutput_Navio 2015-04-14 10:16:25 +10:00
Staroselskii Georgii 2a137b6ea9 AP_HAL_Linux: fixed RCInput initialization on NavIO 2015-04-14 10:16:24 +10:00
Andrew Tridgell 7f7d92913e HAL_Linux: allow running as non-root
this is needed for Replay, plus is very useful for debugging
2015-04-14 09:25:35 +10:00
Lucas De Marchi f049c8e4c5 AP_HAL_Linux: remove needless call to mlockall()
All threads share the same address space and have the same pages locked
into memory so it's not necessary to call mlockall() for each of them.

Grepping /proc/<tid>/status gives the same VmLck for all of them, even
when only the main thread locks the memory:

    # for i in `seq 477 482`; do \
	name=$(cat /proc/$i/comm); \
	vm=$(cat /proc/$i/status |grep VmLck); \
        echo -e "$name\t$vm"; \
    done
    ArduCopter.elf  VmLck:     57868 kB
    sched-timer     VmLck:     57868 kB
    sched-uart      VmLck:     57868 kB
    sched-rcin      VmLck:     57868 kB
    sched-tonealarm VmLck:     57868 kB
    sched-io        VmLck:     57868 kB
2015-04-14 09:17:21 +10:00
Lucas De Marchi b7355dc62b AP_HAL_Linux: set thread name for ease debug
Use pthread_setname_np() to set thread name so it's easier to debug
what't going on with each of them. This is the example output of the
relevant par of "ps -Leo class,rtprio,wchan,comm":

FF      12 futex_ ArduCopter.elf
FF      15 usleep sched-timer
FF      14 hrtime sched-uart
FF      13 poll_s sched-rcin
FF      11 hrtime sched-tonealarm
FF      10 hrtime sched-io
2015-04-14 09:17:21 +10:00
Lucas De Marchi 2c48434110 AP_HAL_Linux: use a table to initialize threads
Refactor function calls into a table and pass in the name so it can be
used in error message.
2015-04-14 09:17:21 +10:00
Lucas De Marchi e3d78b8960 AP_HAL_Linux: fix passing callback to member function
It's undefined behavior to pass the callback to pthread to a class
member like we were doing. Refactor the code so the callbacks are static
members.

This fixes the following warnings:

libraries/AP_HAL_Linux/Scheduler.cpp: In member function 'virtual void Linux::LinuxScheduler::init(void*)':
/home/lucas/p/dronecode/ardupilot/libraries/AP_HAL_Linux/Scheduler.cpp:61:76: warning: converting from 'void* (Linux::LinuxScheduler::*)()' to 'Linux::LinuxScheduler::pthread_startroutine_t {aka void* (*)(void*)}' [-Wpmf-conversions]
                            (pthread_startroutine_t)&Linux::LinuxScheduler::_timer_thread);
                                                                            ^
libraries/AP_HAL_Linux/Scheduler.cpp:65:76: warning: converting from 'void* (Linux::LinuxScheduler::*)()' to 'Linux::LinuxScheduler::pthread_startroutine_t {aka void* (*)(void*)}' [-Wpmf-conversions]
                            (pthread_startroutine_t)&Linux::LinuxScheduler::_uart_thread);
                                                                            ^
libraries/AP_HAL_Linux/Scheduler.cpp:69:76: warning: converting from 'void* (Linux::LinuxScheduler::*)()' to 'Linux::LinuxScheduler::pthread_startroutine_t {aka void* (*)(void*)}' [-Wpmf-conversions]
                            (pthread_startroutine_t)&Linux::LinuxScheduler::_rcin_thread);
                                                                            ^
libraries/AP_HAL_Linux/Scheduler.cpp:73:76: warning: converting from 'void* (Linux::LinuxScheduler::*)()' to 'Linux::LinuxScheduler::pthread_startroutine_t {aka void* (*)(void*)}' [-Wpmf-conversions]
                            (pthread_startroutine_t)&Linux::LinuxScheduler::_tonealarm_thread);
                                                                            ^
libraries/AP_HAL_Linux/Scheduler.cpp:77:76: warning: converting from 'void* (Linux::LinuxScheduler::*)()' to 'Linux::LinuxScheduler::pthread_startroutine_t {aka void* (*)(void*)}' [-Wpmf-conversions]
                            (pthread_startroutine_t)&Linux::LinuxScheduler::_io_thread);
2015-04-14 09:17:20 +10:00
Lucas De Marchi 62c2f737d5 AP_HAL_Linux: fix setting RT priorities
LinuxScheduler::init() was not really working as it should. This was the
result of "ps -Leo class,rtprio,wchan,comm | grep ArduCopter":

FF      12 futex_ ArduCopter.elf
FF      12 usleep ArduCopter.elf
FF      12 hrtime ArduCopter.elf
FF      12 poll_s ArduCopter.elf
FF      12 hrtime ArduCopter.elf
FF      12 hrtime ArduCopter.elf

As can be seen all the threads run with the same priority, the one of the main
thread. There were basically 2 mistakes:

	1) pthread_attr_setschedpolicy() needs to be called before
	   pthread_attr_setschedparam(). Otherwise the latter will just return
	   an error and not set the priority

	2) pthread_create() defaults to ignore the priority and inherit the
	   it from the parent thread. pthread_attr_setinheritsched() needs to
	   be called to change the behavior to PTHREAD_EXPLICIT_SCHED. See
	   pthread_attr_setinheritsched(3) for an example program to test the
	   behaviors.

Also, it's undefined behavior to call pthread_attr_init() several times on the
same pthread_attr_t. Although we could reutilize the same attribute without
calling  pthread_attr_init() again, lets refactor the code a little bit, so all
the pthread calls are in a single place. Then also call pthread_attr_destroy()
when we are done.
2015-04-14 09:17:20 +10:00
Lucas De Marchi 29b667efdf AP_HAL_Linux: remove useless mlock of stack
In Linux the default stack size is always greater than 32k, either 2MB
or 8MB depending on the architecture. There's no point in creating a
function to lock 32k.
2015-04-14 09:17:20 +10:00
mirkix 445f358839 AP_HAL_Linux: Fix compiler warning of MAX_PWMS redefinition (previously defined) 2015-04-06 15:34:50 -07:00
mirkix d4d42599b0 AP_HAL_Linux: Add RcInput and RcOutput with only one PRU when using a BBB. BBBMINI use the RC AIO PRU firmware already 2015-03-16 09:33:54 +11:00
mirkix a6b018eab9 AP_HAL_Linux: BBBMINI use kernel CS now 2015-03-16 09:15:06 +11:00
Staroselskii Georgii 75cd41a7c1 AP_HAL_Linux: added NavioAnalogIn 2015-02-12 12:57:45 +11:00
Staroselskii Georgii 195aa5fc6b AP_HAL_Linux: take the semaphore in SPIUARTDriver for shorter periods of time 2015-02-12 12:52:56 +11:00
Staroselskii Georgii 64da7f0360 AP_HAL_Linux: fix macro that defines number of I/O callbacks 2015-02-12 12:52:56 +11:00
Staroselskii Georgii 5b21bd2f1d AP_HAL_Linux: make Ublox transactions shorter 2015-02-12 12:52:56 +11:00
Staroselskii Georgii 4034004194 AP_HAL_Linux: switch NavIO to kernel CS handling 2015-02-12 12:52:56 +11:00
Andrew Tridgell 33a3254d8b HAL_Linux: accept a smaller sync pulse width 2015-02-08 21:47:28 +11:00
Andrew Tridgell 61be4ce2d2 HAL_Linux: fixed #if for linux builds 2015-01-22 15:58:20 +11:00
Víctor Mayoral Vilches 2b74d018fe HAL_Linux: Adjust set_system_clock
Do nothing for HAL_BOARD_SUBTYPE_NONE.
2015-01-22 15:43:16 +11:00
Víctor Mayoral Vilches 974f243c7e HAL_Linux: Add set_system_clock 2015-01-22 15:43:16 +11:00
mirkix c58a022111 AP_HAL_Linux: add support for BBBMINI, simple ArduPilot DIY Cape for the BeagleBone Black 2015-01-12 21:36:40 +13:00
Mikhail Avkhimenia 954b0795d4 HAL_Linux: Enable PCA9685 output after its setup 2015-01-09 06:38:21 +11:00
Andrew Tridgell 4da0a24887 HAL_Linux: use common RingBuffer.h 2015-01-07 08:41:14 +11:00
Staroselskii Georgii e4a21f291d AP_HAL_Linux: added LinuxSPIUARTDriver that can handle SPI-driven Ublox 2015-01-07 08:41:12 +11:00
Staroselskii Georgii 2b589d4604 AP_HAL_Linux: enable output for PCA9685 PWM in NavioRCOuput 2015-01-07 08:41:12 +11:00
Andrew Tridgell 193bda068c HAL_Linux: run IO processes when we do a stop_clock()
this has the effect of allowing logging to progress in Replay where we
are running at much more than realtime speeds
2014-12-08 11:24:39 +11:00
John Williams d0e467aea0 AP_HAL_Linux: Bypass manual CS assertion for SPI_CS_KERNEL mode
Missed from initial patch series

Signed-off-by: John Williams <john@whelanwilliams.net>
2014-11-27 15:57:12 +11:00
Mikhail Avkhimenia 955753f3f0 HAL_Linux: Optimize bandwidth for RCOutput_Navio
40% less bytes in I2C transactions for PCA9685.
2014-11-26 11:14:44 +11:00
Mikhail Avkhimenia 50459bdca0 HAL_Linux: Enable external clk for RCOutput_Navio
That should fix PWM value drifts.
2014-11-26 11:14:44 +11:00
Andrew Tridgell 22cb1c8525 HAL_Linux: tidy up SPI debugging a bit 2014-11-26 10:16:39 +11:00
John Williams 0fe3959d7e AP_HAL_Linux: Add support for in-kernel SPI CS handling
Add support for /dev/spidev<bus>.<cs> in-kernel SPI CS handling, and convert
existing SPI devices over.

 * Add a new member _subdev to the LinuxSPIDeviceDriver class, and initialiser
   in LinuxSPIDevice constructor.  Use subdev 0 for GPIO-managed CS
 * Extend the _cs_pin to signed 16 bits and define SPI_CS_KERNEL (-1) for
   kernel-managed CS
 * Move to per-device file descriptors (required for in-kernel CS)
 * Extend spidev filenames to include bus and subdevice numbers, possibly
   longer than 1 digit each
 * Allow support for platforms enumerating /dev/spidevNNN from non-zero bases
 * Convert existing users over to the new API

Signed-off-by: John Williams <john@whelanwilliams.net>
2014-11-26 09:55:09 +11:00
Andrew Tridgell 7497b4dfb1 HAL_Linux: fixed Replay with new AP_InertialSensor library 2014-11-16 12:30:50 +11:00
bugobliterator 9d39c0407e HAL_Linux: added ToneAlarmDriver.h 2014-11-15 21:25:55 +11:00
bugobliterator 329c1f5190 HAL_Linux:create ToneAlarmDriver as a separate class
ToneAlarm is now declared as a separate class instance of which is added as a private member of LinuxUtil
Some minor fixes in this patch include changing return type of tonealarm_init() to bool and use dprintf
2014-11-15 16:59:06 +11:00
bugobliterator f058131140 HAL_Linux Scheduler: reduce the delay inside tonealarm thread
Since the tonealarm is now passthrough the delay inside the thread needs to be reduced for precise tune generation
2014-11-15 16:59:06 +11:00
bugobliterator 3b94cb3072 HAL_Linux: make tonealarm generation a passthrough operation
get rid of all delays and while loops(that may turn into infinite loop)
2014-11-15 16:59:06 +11:00
bugobliterator e254b406d0 HAL_Linux: make rtttl tune and tune repeat flag list static members
instead of initialising them inside constructor
2014-11-15 16:59:06 +11:00
Andrew Tridgell c8c822422a HAL_Linux: give error msg on failure to start toneAlarm 2014-11-15 16:58:58 +11:00
John Williams 57d2fc1dd5 HAL_Linux: RCInput support for Zynq 2014-11-14 14:10:35 +11:00
Staroselskii Georgii a55db1c25d AP_HAL_Linux: fixed LinuxGPIO_RPI::read() 2014-11-14 10:28:34 +11:00
Mikhail Avkhimenia 49d3035ee5 HAL_Linux: fix types, remove printfs in GPIO_RPI 2014-11-14 10:28:34 +11:00
Mikhail Avkhimenia 6f993fe64a HAL_Linux: add prototype RCInput code for Navio 2014-11-14 10:28:34 +11:00
Staroselskii Georgii ef420a2544 AP_HAL_Linux: changed SPI mode for MPU9250 2014-11-14 10:28:34 +11:00
Staroselskii Georgii bf860ee41f AP_HAL_Linux: Ublox SPI stub 2014-11-14 10:28:34 +11:00
Víctor Mayoral Vilches ce4c4c43dc AP_HAL_Linux: Scheduler reboot fix
exit from the autpilot when reboot is commanded.
The software assumes that the code is being
launched in an infinite loop thereby an exit
will make it reboot.
2014-11-14 10:27:19 +11:00
John Williams ae87399919 HAL_Linux: Basic Zynq Linux platform support
Preliminary support for Zynq/Linux on the 'ZyboPilot' HW platform.

see https://github.com/trjw/ZyboPilot-bsp for the PetaLinux / Vivado project
files.

At this stage CPPM/Pulse in and PWM out work, and in CLI mode the passthru
test works correctly.

The platform has passed minimal smoke testing in HIL mode.

ZYNQ IS NOT FLIGHT TESTED YET!  FLY THIS PLATFORM AT YOUR OWN RISK!

Signed-off-by: John Williams <john@whelanwilliams.net>
2014-11-14 10:21:04 +11:00
Andrew Tridgell 00526359b0 HAL_Linux: use dprintf() instead of sprintf and write 2014-11-10 06:51:53 +11:00
bugobliterator af203760bd HAL_Linux: change the return type of AP_HAL::Util::tonealarm_init() to signed int8_t.
This is a part of a set of fixes for the bugs and typos tridge discovered and shared inside earlier commits for setting up tonealarm.
2014-11-10 06:27:48 +11:00
bugobliterator 298b27444a HAL_Linux: Add ToneAlarm Driver to Linux_HAL
ToneAlarm is setup for Beaglebone Black using pwm, toneAlarm thread runs on second last priority.
2014-11-10 06:27:48 +11:00
Andrew Tridgell 02581f4c05 HAL_Linux: re-fix dirty mask bug in Storage
when conversion to a single parent class was done it re-introduced a
bug that was fixed a while ago

See commit d238ff7c5d
2014-11-08 11:55:55 +11:00
Andrew Tridgell 330dab2fe3 HAL_Linux: fixed some warnings 2014-11-08 11:49:09 +11:00
bugobliterator 4908e335d2 HAL_Linux: Add Storage.cpp containing common storage class member definitions 2014-11-08 11:36:12 +11:00
bugobliterator dd6d520385 HAL_Linux:Create subclass to handle FRAM Storage under main Storage Class 2014-11-08 11:36:09 +11:00
Andrew Tridgell 14a6878bcd HAL_Linux: fixed termios settings on BBB initial boot
this should fix the problem of losing the GPS in flight
2014-11-07 22:15:28 +11:00
Andrew Tridgell 8506e8b5fb HAL_Linux: fixed linux build 2014-10-30 17:47:18 +11:00
John Williams b9f0310b82 hal_ap_linux: Make PRU constants private to reduce #define namespace pollution.
Forthcoming Zynq port AP_HAL_Linux uses similar constants with different
values - move these as private member constants to avoid collisions.

Signed-off-by: John Williams <john@whelanwilliams.net>
2014-10-30 13:51:41 +11:00
Mikhail Avkhimenia 81de994fef HAL_Linux: separate RCInput for PRU and Navio 2014-10-30 13:30:07 +11:00
Mikhail Avkhimenia e05151f0e0 HAL_Linux: Initialize i2c before rcoutput (required by i2c pwm chips for initialization) 2014-10-30 13:30:07 +11:00
Mikhail Avkhimenia 2f0900b0a8 HAL_Linux: add GPIO driver for Raspberry Pi 2014-10-30 13:30:07 +11:00
Mikhail Avkhimenia 07ed93cea0 HAL_Linux: add PCA9685 based RCOutput for Navio 2014-10-30 13:30:07 +11:00
Alexander Mergel 14c401c0f4 AP_HAL_Linux: [Bugfix] prevent memory acces violation in process_dsm_pulse
When a S.Bus signal is fed into the rcin-Pin AruPlane on the BBB get's a
Segmentation fault. This patch prevents the memory acces to dsm_state.bytes[16] outside
of the array bounds. The patch should be reviewed by sombody who knows the DSM protocol,
as i don't.
2014-10-30 11:57:35 +11:00
Andrew Tridgell 39fadad7d6 HAL_Linux: fixed build warnings 2014-10-09 16:49:23 +11:00
Andrew Tridgell c834589daa HAL_Linux: reduce the number of times we split up UART reads 2014-10-09 12:29:25 +11:00
Andrew Tridgell 076bb1294e HAL_Linux: improved UDP packetisation and add flow control reporting
report we have flow control on UDP and TCP
2014-10-09 12:29:25 +11:00
Andrew Tridgell cebfef3ead HAL_Linux: don't accept less than 5 input channels 2014-10-09 09:19:35 +11:00
Andrew Tridgell a3fee16604 HAL_Linux: added DSM/Spektrum RCInput support
this decodes DSM using the RCIN pulses from the PRU
2014-10-08 12:50:50 +11:00
Andrew Tridgell 3e3f87188b HAL_Linux: enable DSM power pin 2014-10-08 12:50:50 +11:00
Andrew Tridgell 50e5ae6f7a HAL_Linux: added low level DSM decoder
based on dsm.c from PX4 project
2014-10-08 12:50:50 +11:00
Andrew Tridgell 9b207d029d HAL_Linux: change ring buffer to 300 entries 2014-10-07 14:57:34 +11:00
Andrew Tridgell b1845ed00d HAL_Linux: initial support for parallel SBUS and PPM-SUM decoding 2014-10-07 14:57:34 +11:00
Andrew Tridgell 42e9dc3c31 HAL_Linux: added SBUS decoder from PX4 project
thanks Lorenz!
2014-10-07 14:57:34 +11:00
Andrew Tridgell e0e534628b HAL_Linux: support direct UDP output from UART drivers
this allows safe operation over WiFi links without MAVProxy
2014-10-06 15:13:03 +11:00
Andrew Tridgell d238ff7c5d HAL_Linux: fixed storage bug in Linux too 2014-09-11 18:58:54 +10:00
Andrew Tridgell 46ac52bccc HAL_Linux: removed retry loop on UART open
this was there for HAL_PX4 only, and makes no sense on Linux
2014-08-27 18:31:38 +10:00
Andrew Tridgell 024d3b71e7 HAL_Linux: use a semaphore in suspend_timer_procs()
this is the start of multi-core aware code
2014-08-22 21:13:11 +10:00
Andrew Tridgell ead82ee581 HAL_Linux: implement millis64() and micros64() 2014-08-20 08:00:21 +10:00
Andrew Tridgell b9dc2335ee HAL_Linux: run timer thread at average 1kHz without drift
this avoids drift in the 1kHz timer, to avoid bias in the IMU
filtering
2014-08-19 20:03:34 +10:00
Andrew Tridgell 8f280d212b HAL_Linux: don't use usleep() in suspend_timer_procs()
usleep can cause a large delay with PREEMPT kernel
2014-08-19 20:03:33 +10:00
Andrew Tridgell 94e14f5dcb HAL_Linux: split off RCOutput class to be specific to PXF and ERLE
this fixes the Replay tool
2014-08-19 20:03:33 +10:00
Andrew Tridgell 2ce219aeb8 HAL_Linux: split RCInput class into generic and PRU implementations
this will make it easier for other boards (such as NAVIO) to implement
their own RCInput mechanism
2014-08-19 20:03:33 +10:00
Andrew Tridgell b4be93113c HAL_Linux: prevent read past end of buffer 2014-08-19 10:08:17 +10:00
Andrew Tridgell b40bd479c4 HAL_Linux: moved FRAM vs FS choice into HAL_Linux headers 2014-08-19 10:08:17 +10:00
Andrew Tridgell 9fccb5f5ed HAL_Linux: clear more UART flags
this fixes a major timing issue caused by bad UART flags (I suspect
the echo flags) and the GPS auto detection code
2014-08-19 10:08:17 +10:00
Andrew Tridgell c87b0adc29 HAL_Linux: the MS5611 seems to be a bit happier at higher speed
still getting some bogus data, but less
2014-08-19 10:08:17 +10:00
Andrew Tridgell 6cc304e486 HAL_Linux: RCOutput should default to 50Hz on all boards 2014-08-19 10:08:16 +10:00
Andrew Tridgell 9d948d5a26 HAL_Linux: fixed name space collision in RCOutput 2014-08-19 10:08:16 +10:00
Andrew Tridgell 721d349922 HAL_Linux: fixed build of BusTest 2014-08-19 10:08:16 +10:00
Andrew Tridgell a4ef512f10 SPIDriver: fixed handling of 0 based SPI bus numbers 2014-08-19 10:08:16 +10:00
Andrew Tridgell 5fb2ad0068 HAL_Linux: fixed safety of RCInput code
don't loop forever waiting for pulses
2014-08-19 10:08:16 +10:00
bugobliterator ac11d282b5 HAL_Linux: Add support for PPM input to HAL_Linux
rcin thread continuously scans for values inside ring buffer maintained by pru with rcinpru0 firmware.
2014-08-19 10:08:16 +10:00
bugobliterator 4b2f7cd163 HAL_Linux: Add FRAM HAL driver support for non-volatile storage
Support for File System starage mode is retained, appropriate Storage
mode can be set by defining USE_FS_STORAGE for File System storage
aand US_FRAM_STORAGE for FRAM storage.  Note: FS storage and FRAM
storage are never synced as of now.
2014-08-19 10:08:16 +10:00
Victor Mayoral Vilches 8a71fdf092 HAL_Linux: minor syntax fix in UARTDriver
Typo noticed by @hcervino.
2014-08-19 10:08:16 +10:00
Silvia b6baf78e73 HAL_Linux:duplicate `#include <sys/types<`deleted 2014-08-19 10:08:16 +10:00
Silvia 7fd0e8345d HAL_Linux: Duplicate `#include <unistd.h>`deleted 2014-08-19 10:08:16 +10:00
Andrew Tridgell d40d0f6aec AP_HAL: removed old storage type read/write functions
not needed any more
2014-08-13 18:46:44 +10:00
Mikhail Avkhimenia a09fbb4171 HAL_Linux: Add SPI configuration for Navio
This changes the SPI bus number to be zero based on Linux
2014-08-12 22:13:00 +10:00
Andrew Tridgell 03e8e5f2b9 HAL_Linux: setup for all 6 SPI devices for PXF cape 2014-07-19 13:23:37 +10:00
Andrew Tridgell 05f5d91709 HAL_Linux: fixed BusTest build 2014-07-19 12:22:06 +10:00
Andrew Tridgell 9e921719ca HAL_Linux: added bus scanning test 2014-07-15 19:06:11 +10:00
Andrew Tridgell bcc8768358 HAL_Linux: fixed a build warning 2014-07-15 13:56:50 +10:00
Andrew Tridgell 1b85b12738 HAL_Linux: made I2C driver more portable
this uses a typeof() to cope with different kernel data types for I2C
messages
2014-07-15 13:56:50 +10:00
Andrew Tridgell 224515f3eb HAL_Linux: fixed indexing of device array for SPI 2014-07-14 11:31:55 +10:00
Andrew Tridgell 3292055af2 HAL_Linux: fixed dataflash SPI 2014-07-14 11:07:41 +10:00
Andrew Tridgell 6312b9f8c0 HAL_Linux: allow different SPI and GPIO devices on different boards
this fixes the Replay utility, which uses subtype NONE, and will make
it easier to port to new boards
2014-07-14 09:44:37 +10:00
bugobliterator 003806fcc1 HAL_Linux: pwmpru,HAL_Linux_RCOut code doesn't wait for magic flag to send data
change pwmpru code to remove frequent wrong PWM outputs
Replace pru firmware with new modified pru firmware
2014-07-14 09:44:37 +10:00
bugobliterator 8cf628e780 HAL_Linux_RCoutput:Add handler to catch SIGBUS error 2014-07-14 09:44:37 +10:00
bugobliterator 25e670d0cc HAL_LINUX_RCOutput: Change to reading hilo_read instead of periodhi
use uint instead of int
2014-07-14 09:44:36 +10:00
Andrew Tridgell a46d8dbd51 HAL_Linux: make the spi driver fd part of the manager, not device
it should be one connection to the kernel per bus, not one per device
2014-07-14 09:44:36 +10:00
Andrew Tridgell 9f8f27090a HAL_Linux: MPU9250 is restricted to 1MHz for setup
(see datasheet)
2014-07-14 09:44:36 +10:00
Andrew Tridgell 549e08446a HAL_Linux: use BBB pin names in SPIDriver
easier to find the pins on the board
2014-07-14 09:44:36 +10:00
Andrew Tridgell 8e5915ef7d HAL_Linux: fixed some valgrind errors 2014-07-14 09:44:35 +10:00
Andrew Tridgell 130f831c1c HAL_Linux: use MODE_3 for MPU9250
this fixes the MS5611 (probably due to idle state?)
2014-07-14 09:44:35 +10:00
Andrew Tridgell fc8068adfe HAL_Linux: use board subtypes 2014-07-14 09:44:35 +10:00
Andrew Tridgell 1bf0c4c67d HAL_Linux: cope with different I2C headers for data 2014-07-14 09:44:34 +10:00
Andrew Tridgell fa2a1c495e HAL_Linux: fixed I2C driver build errors 2014-07-14 09:44:34 +10:00
Andrew Tridgell 8c4565c741 HAL_Linux: fixed a build warning 2014-07-14 09:44:34 +10:00
Andrew Tridgell 5b438471a7 HAL_Linux: added set_bus_speed() support to SPI driver
used by MPU6000 driver for setup registers
2014-07-14 09:44:33 +10:00
Andrew Tridgell 0b64d834c3 HAL_Linux: MS5611 and MPU6000 should be MODE3
this doesn't solve the MPU6000 problem, but is correct
2014-07-14 09:44:33 +10:00
Andrew Tridgell 1c89f54934 HAL_Linux: fixed SPI mode handling per-device
the mode must be set per-device, not per bus.
2014-07-14 09:44:33 +10:00
Víctor Mayoral Vilches 145c71c4af HAL_Linux: Storage: Change storage folder in Linux to `/var/APM` 2014-07-14 09:44:33 +10:00
bugobliterator ca163c292c HAL_Linux: PRU: remove obsolete libraries/AP_HAL_Linux/PRU 2014-07-14 09:32:29 +10:00
Andrew Tridgell 72f94444c4 HAL_Linux: added basic support for RC overrides
this allows for easier testing of RC output by allowing
mavproxy to setup fake inputs

Pair-Programmed-With: Sid, Anuj, Victor and Philip
2014-07-14 09:32:29 +10:00
Andrew Tridgell d0b007248f HAL_Linux: fixed SPI semaphore, and panic on CS error
This adds a check for trying to assert two CS pins on the same bus
at the same time. The change involves moving the _device handles into the
DeviceManager class, and accessing via static methods.

This also moves the semaphore to be per-bus rather than per-device,
which fixes the problem with bad MS5611 transfers.

Pair-Programmed-With: Victor, Sid, Anuj and Philip
2014-07-14 09:32:29 +10:00
bugobliterator 5bcdb039e2 HAL_Linux: Make asynchronous PRU write and reduce the size of data exchange
Change to sending Total Period and hi Period, rather than Hi and Lo Period
Change PRU firmware accordingly
2014-07-14 09:32:29 +10:00
Víctor Mayoral Vilches fa6c5ba80e HAL_Linux: Remove the additional portNumber offset
The socket is being launched in (_base_port + portNumber) port
following SITL impl. In order to avoid confusions portNumber has
been set to 0.
2014-07-14 09:32:21 +10:00
Víctor Mayoral Vilches 02c171b19f HAL_Linux: UART-like TCP sockets, check for ":wait" 2014-07-14 09:32:13 +10:00
Víctor Mayoral Vilches ca80c0b8e2 HAL_Linux: config UART file descriptor as non-blocking 2014-07-14 09:31:59 +10:00
Siddharth Bharat Purohit 65fef59dfa HAL_Linux: change initial PWM values to 490Hz, 1000us 2014-07-14 09:31:49 +10:00
Víctor Mayoral Vilches f11f0d9f2a HAL_Linux: Fix FRAM code 2014-07-14 09:31:41 +10:00
Víctor Mayoral Vilches be68de20f1 HAL_Linux: UART-like TCP sockets impl. on AP_HAL_Linux 2014-07-14 09:31:30 +10:00
Víctor Mayoral Vilches b0742fbb5b HAL_Linux: Add FRAM SPI support. 2014-07-14 09:31:18 +10:00
Siddharth Bharat Purohit 0422695e5e HAL_Linux: Correct error inside read method in RCOutput 2014-07-14 09:31:05 +10:00
bugobliterator 092bda9c37 HAL_Linux: Replace PRU1 firmware with a new one to support new way of controllong PRU PWM 2014-07-14 09:31:05 +10:00
bugobliterator 63560e8122 HAL_Linux: change to directly accessing shared_mem of pru in RCOutput 2014-07-14 09:30:54 +10:00
Siddharth Bharat Purohit 9999e77a74 HAL_Linux: add close(_fd) to some functions in RCOutput 2014-07-14 09:30:42 +10:00
Víctor Mayoral Vilches 95e0803880 HAL_Linux: Remove panic when invalid pin in GPIO
When a invalid pin is passed as a parameter
the methods return without performing anything
insted of raising a panic.
2014-07-14 09:30:25 +10:00
Víctor Mayoral Vilches 245618e298 HAL_Linux: Improve error handling SPIDriver 2014-07-14 09:30:16 +10:00
Víctor Mayoral Vilches d330cbecb3 HAL_Linux: Make the CS variables more readable in SPIDriver 2014-07-14 09:30:06 +10:00
Víctor Mayoral Vilches 665bf4a247 HAL_Linux: BUS_SPEED selected individually in SPIDriver 2014-07-14 09:29:53 +10:00
Siddharth Bharat Purohit d2b5a1cfac HAL_Linux: add HAL_ prefix to GPIO_INPUT 2014-07-14 09:29:45 +10:00
bugobliterator 1f1af0b0ea HAL_Linux: make GPIO code compact and readable
add hal instance to generate scheduler
change gpio/export write method
add gpio struct to LinuxDigitalSource class
change individual gpio banks to one gpio_bank array
2014-07-14 09:29:45 +10:00
Víctor Mayoral Vilches 651cb58ebc HAL_Linux: Add CS capabilities to the SPI driver. 2014-07-14 09:29:45 +10:00
Víctor Mayoral Vilches 763c075497 HAL_Linux: spidev1.0 to SPI0 and spidev2.0 to SPI1 2014-07-14 09:29:28 +10:00
bugobliterator fd0685cc01 HAL_Linux: change to mem access method from sysfs access method
This step is taken to reduce the time for gpio access substantially
2014-07-14 09:29:18 +10:00
bugobliterator 96bbe17bd3 HAL_Linux: add support for LinuxDigitalSource in AP_HAL_Linux 2014-07-14 09:29:18 +10:00
Víctor Mayoral Vilches 7652d47e6e HAL_Linux: Add GPIO pinmux mappings
This will allow to request channels using the
name of the BBB headers (e.g. P8_12, P9_42).
2014-07-14 09:29:08 +10:00
bugobliterator 18d7438240 HAL_Linux: increase size of sysfs_path variables inside LinuxRCOutput's methods
to avoid stack smashing error
2014-07-14 09:29:08 +10:00
bugobliterator 85d10e2ce3 HAL_Linux: add export gpio during direction set if not exported during initialisation 2014-07-14 09:29:08 +10:00
bugobliterator a7ead42f52 HAL_Linux: added initial gpio library 2014-07-14 09:29:08 +10:00
Víctor Mayoral Vilches c4b6026d53 HAL_Linux: include readRegistersMultiple in I2CDriver
AP_HAL_Linux implemments this new method.
2014-07-14 09:28:42 +10:00
Víctor Mayoral Vilches ea7dcc188b AP_HAL_Linux: Correct SPIDriver devs 2014-07-14 09:10:23 +10:00
Víctor Mayoral Vilches 8af1b6faa7 AP_HAL_Linux: Add support for SPIDevice_LSM9DS0
The LSM9DS0 SPI device is connected to
SPI0, thereby SPIDriver class should return the
corresponding device.
2014-07-14 09:10:23 +10:00
bugobliterator 79fb10d9e8 HAL_Linux: correct AP_HAL_Linux::RCOutput::enable_ch method
change the mode of file open which was set as RDONLY mistakenly
2014-07-14 09:10:23 +10:00
bugobliterator eb35c94a43 HAL_Linux: add rcout->init method to HAL_Linux_Class::init 2014-07-14 09:10:23 +10:00
bugobliterator e9f5e0d6cc HAL_Linux: add rcout->init method to HAL_Linux_Class::init method 2014-07-14 09:10:23 +10:00
bugobliterator 34ba77e048 HAL_Linux: Correct faulty RCOutput driver
solve compiler not looking ahead of RCOutput class for read and write methods
2014-07-14 09:10:23 +10:00
bugobliterator 26cd4ad237 HAL_Linux: Correct indentation 2014-07-14 09:10:23 +10:00
Siddharth Bharat Purohit 69a4b7d632 HAL_Linux: Correct Indentation issue 2014-07-14 09:10:23 +10:00
Siddharth Bharat Purohit 731d80e6c5 HAL_Linux: Add Steps to Manually test pwm channels 2014-07-14 09:10:13 +10:00
Siddharth Bharat Purohit b53b3f415a HAL_Linux: Create Readme.md adding details on manually testing pru pwm 2014-07-14 09:10:03 +10:00
bugobliterator a7de5e3d0f HAL_Linux: Add initial RCOutput driver
The functions in RCOutput.cpp are defined to access PWM over PRU sysfs
device from userspace using open, read, write and close methods.
2014-07-14 09:09:53 +10:00
Víctor Mayoral Vilches 3354fa9fc8 AP_HAL_Linux: Add support for SPIDevice_MS5611 2014-07-14 09:02:47 +10:00
Víctor Mayoral Vilches 9f5b4ffca4 AP_HAL_Linux_Class: Correct deadlock, and infinite loop in setup()
(credit to Mitch Miers <mmiers@mmiers.com>):

setup() is attempting to initialize the hardware, and while doing so
is attempting to output some text via the console (and maybe mavlink
data).  The problem is, the output isn't going to complete once a
write buffer is full, because LinuxUARTDriver::_timer_tick() doesn't
perform work until _initialized is true.  So, what happens is,
setup() (and subroutines) call LinuxUARTDriver::_write(uint8_t c),
which loops waiting for buffer space to become available (once the
write buffer is full).  The buffer never gets space, because the
UART thread is waiting for initialization to complete before it
will write out data and drain the buffer, but that doesn't happen
until setup() returns (see AP_HAL_Linux_main.h).

Refer to https://groups.google.com/forum/#!topic/beaglepilot/dQlxse11JNI
2014-07-14 09:02:47 +10:00
Víctor Mayoral Vilches 27ebf790e2 AP_HAL_Linux: Add support for SPIDevice_MPU9250
The Invensense MPU9250 SPI device is connected to
SPI1, thereby SPIDriver class should return the
corresponding device.
2014-07-14 09:02:46 +10:00
Víctor Mayoral Vilches 815c2df2d0 AP_HAL_Linux: SPIDriver, add MPU6000 support 2014-07-14 08:52:51 +10:00
Andrew Tridgell 74ee70d463 HAL_Linux: updates for ERLE board type 2014-07-14 08:52:27 +10:00
Andrew Tridgell b99ae63cbb HAL_Linux: more generic fix for scheduler issues in example sketches
this ensures drivers can run
2014-05-16 22:40:38 +10:00
Andrew Tridgell 6eee2421cc AP_HAL: removed RCInput valid_channels() and added new_input() and num_channels()
the valid_channels() method was inconsistently implemented between
boards, and served two quite different purposes. It is clearer as two
functions
2014-03-25 14:39:41 +11:00
Andrew Tridgell 3fa2207a2d AP_HAL: allow for microsecond resolution in scheduler->stop_clock()
this makes 400Hz in the replay code possible
2014-02-26 19:33:39 +11:00
Andrew Tridgell bf2dd141e9 HAL_PX4: support uartE for 2nd GPS 2014-02-26 08:18:11 +11:00
Andrew Tridgell a273951f70 HAL_Linux: added missing Util.cpp 2014-02-24 11:59:24 +11:00
Andrew Tridgell 735c6449a1 AP_HAL: added support for commandline arguments
useful for log replay, specifying log file
2014-02-23 08:15:39 +11:00
Andrew Tridgell 78ff078988 HAL_Linux: fixed stopped clock delay 2014-02-15 05:48:18 +11:00
Andrew Tridgell 117b77460e HAL_Linux: added stop_clock hack! 2014-02-15 05:28:08 +11:00
Andrew Tridgell 1849db7074 AP_HAL: added board_voltage AnalogIn method
this makes it easier to get the board voltage from any library,
without having to allocate another analog channel object
2014-02-14 21:25:38 +11:00
Andrew Tridgell 87cc95dd7f AP_HAL: removed unused enable_mask and disable_mask functions 2014-01-16 17:16:17 +11:00
Andrew Tridgell a8946a5f31 HAL_Linux: fixed build 2013-12-31 10:28:38 +11:00
Andrew Tridgell ea649e036b AP_HAL: added HAL_CPU_CLASS define for selecting algorithms
this will make it easier to select the appropiate level of algorithm
for a CPU
2013-12-31 10:28:37 +11:00
Andrew Tridgell ecbfdfba6c HAL_Linux: implement time_shift() API 2013-12-30 14:35:12 +11:00
Andrew Tridgell c000a08d6f HAL_LINUX: added uartD 2013-11-23 19:29:22 +11:00
Andrew Tridgell 5af51140a9 HAL_Linux: fixed scheduler initialisation bug in Linux HAL as well 2013-10-26 18:25:27 +11:00
Andrew Tridgell 0d682e74c1 HAL_Linux: run threads a bit more slowly
this was just wasting cycles
2013-10-10 07:21:38 +11:00
Andrew Tridgell 8f79a03c25 HAL_Linux: use larger UART buffers
might as well use the memory
2013-10-10 07:21:38 +11:00
Andrew Tridgell 28b4ae1c3a HAL_Linux: improved latency of timed semaphores 2013-10-08 11:50:54 +11:00
Andrew Tridgell a216e1d239 HAL_Linux: don't prevent write while timer is busy
the timer can block on I2C writes, which causes the main loop to run
2013-10-08 11:50:53 +11:00
Andrew Tridgell 91511e6503 HAL_Linux: better realtime setup
lock all memory and pre-fault the stack in all threads
2013-10-08 11:50:53 +11:00
Andrew Tridgell 07b8f45770 HAL_Linux: use CLOCK_MONOTONIC_RAW to ensure clock never goes backwards
this avoids ntp mucking with APM timing
2013-10-07 08:41:52 +11:00
Andrew Tridgell b30f652cec HAL_Linux: removed Console driver 2013-10-05 18:32:57 +10:00
Andrew Tridgell 1440c8cebd HAL_Linux: implement a dummy console buffered write() 2013-10-03 12:21:08 +10:00
Andrew Tridgell c9fea2c706 HAL_Linux: fixed scheduling priorities
need to be between 1 and 99
2013-10-01 13:05:04 +10:00
Andrew Tridgell bbac3265b2 HAL_Linux: default to hal.console on stdout 2013-10-01 12:49:58 +10:00
Andrew Tridgell bcc9cdbf43 HAL_Linux: make I2CDriver more portable
this allows it to build on the Beaglebone
2013-10-01 12:37:13 +10:00
Andrew Tridgell 51c19331a6 HAL_Linux: fixed build 2013-10-01 12:11:48 +10:00
Andrew Tridgell f2ebb2ca87 HAL_Linux: updates for AP_HAL::MemberProc 2013-09-30 20:56:15 +10:00
Andrew Tridgell 53f66b23f4 AP_HAL_Linux: fixed APM2 build 2013-09-29 14:24:55 +10:00
Andrew Tridgell 1698e1800c HAL_Linux: timer calls may block on HAL_Linux
timer calls can do SPI transfers, which can block
2013-09-29 10:48:22 +10:00
Andrew Tridgell 5102f1511b HAL_Linux: fixed callbacks from delay() 2013-09-29 10:32:51 +10:00
Andrew Tridgell a1ef1a9318 HAL_Linux: tweak the scheduling priorities 2013-09-29 12:04:37 +10:00
Andrew Tridgell d3fe625742 HAL_Linux: make the SPI driver much more efficient
use a single transaction for multiple bytes. This makes the APM1
Oilpan driver generate only 2 interrupts per sensor read
2013-09-29 12:04:36 +10:00
Andrew Tridgell 1e786b3e20 HAL_Linux: added buffering on the UARTs 2013-09-29 12:04:36 +10:00
Andrew Tridgell 605e6c3cf7 HAL_Linux: use pthread mutexes for semaphores 2013-09-29 07:49:30 +10:00
Andrew Tridgell 884af71ef6 HAL_Linux: added SPI support 2013-09-29 00:57:13 +10:00
Andrew Tridgell f03315237a HAL_Linux: fixed timer scheduler 2013-09-28 21:24:03 +10:00
Andrew Tridgell cca59ce3c9 HAL_Linux: update for new scheduler API 2013-09-28 21:24:02 +10:00
Andrew Tridgell bcf4f48e65 HAL_Linux: switched to pthread based scheduling 2013-09-28 21:24:02 +10:00
Andrew Tridgell 58a31318ee AP_HAL_Linux: initial I2C driver implementation
this works sufficiently for the HMC5883
2013-09-28 21:24:02 +10:00
Andrew Tridgell 4ba044c441 AP_HAL_Linux: initial Linux AP_HAL 2013-09-28 21:24:01 +10:00